From eaf14e5d47a0ef7fcf5186d5babf1c73b48ec662 Mon Sep 17 00:00:00 2001 From: Ryan Hendrickson Date: Mon, 14 May 2018 23:10:32 -0400 Subject: [PATCH] Modify key events for horizontal scrolling Specifically, when there is no vertical scrollbar, let up, down, page up, and page down all trigger moving to the next or previous page. --- web/app.js | 64 ++++++++++++++++++++++++++++++---------------- web/base_viewer.js | 5 ++++ 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/web/app.js b/web/app.js index 5891d1de7..95860bd8b 100644 --- a/web/app.js +++ b/web/app.js @@ -2229,28 +2229,31 @@ function webViewerKeyDown(evt) { } if (cmd === 0) { // no control key pressed at all. + let turnPage = 0, turnOnlyIfPageFit = false; switch (evt.keyCode) { case 38: // up arrow case 33: // pg up - case 8: // backspace - if (!isViewerInPresentationMode && - pdfViewer.currentScaleValue !== 'page-fit') { - break; + // vertical scrolling using arrow/pg keys + if (pdfViewer.isVerticalScrollbarEnabled) { + turnOnlyIfPageFit = true; } - /* in presentation mode */ - /* falls through */ + turnPage = -1; + break; + case 8: // backspace + if (!isViewerInPresentationMode) { + turnOnlyIfPageFit = true; + } + turnPage = -1; + break; case 37: // left arrow // horizontal scrolling using arrow keys if (pdfViewer.isHorizontalScrollbarEnabled) { - break; + turnOnlyIfPageFit = true; } /* falls through */ case 75: // 'k' case 80: // 'p' - if (PDFViewerApplication.page > 1) { - PDFViewerApplication.page--; - } - handled = true; + turnPage = -1; break; case 27: // esc key if (PDFViewerApplication.secondaryToolbar.isOpen) { @@ -2263,27 +2266,30 @@ function webViewerKeyDown(evt) { handled = true; } break; - case 13: // enter key case 40: // down arrow case 34: // pg down - case 32: // spacebar - if (!isViewerInPresentationMode && - pdfViewer.currentScaleValue !== 'page-fit') { - break; + // vertical scrolling using arrow/pg keys + if (pdfViewer.isVerticalScrollbarEnabled) { + turnOnlyIfPageFit = true; } - /* falls through */ + turnPage = 1; + break; + case 13: // enter key + case 32: // spacebar + if (!isViewerInPresentationMode) { + turnOnlyIfPageFit = true; + } + turnPage = 1; + break; case 39: // right arrow // horizontal scrolling using arrow keys if (pdfViewer.isHorizontalScrollbarEnabled) { - break; + turnOnlyIfPageFit = true; } /* falls through */ case 74: // 'j' case 78: // 'n' - if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) { - PDFViewerApplication.page++; - } - handled = true; + turnPage = 1; break; case 36: // home @@ -2313,6 +2319,20 @@ function webViewerKeyDown(evt) { PDFViewerApplication.rotatePages(90); break; } + + if (turnPage !== 0 && + (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === 'page-fit')) { + if (turnPage > 0) { + if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) { + PDFViewerApplication.page++; + } + } else { + if (PDFViewerApplication.page > 1) { + PDFViewerApplication.page--; + } + } + handled = true; + } } if (cmd === 4) { // shift-key diff --git a/web/base_viewer.js b/web/base_viewer.js index 1c8d5bce4..e084512b0 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -845,6 +845,11 @@ class BaseViewer { false : (this.container.scrollWidth > this.container.clientWidth)); } + get isVerticalScrollbarEnabled() { + return (this.isInPresentationMode ? + false : (this.container.scrollHeight > this.container.clientHeight)); + } + _getVisiblePages() { throw new Error('Not implemented: _getVisiblePages'); }