diff --git a/web/viewer.js b/web/viewer.js index e43a4621d..340cf2005 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1514,8 +1514,41 @@ window.addEventListener('pagechange', function pagechange(evt) { }, true); window.addEventListener('keydown', function keydown(evt) { - if (evt.ctrlKey || evt.altKey || evt.shiftKey || evt.metaKey) + var handled = false; + var cmd = (evt.ctrlKey ? 1 : 0) | + (evt.altKey ? 2 : 0) | + (evt.shiftKey ? 4 : 0) | + (evt.metaKey ? 8 : 0); + + // First, handle the key bindings that are independent whether an input + // control is selected or not. + if (cmd == 1 || cmd == 8) { // either CTRL or META key. + switch (evt.keyCode) { + case 61: // FF/Mac '=' + case 107: // FF '+' and '=' + case 187: // Chrome '+' + PDFView.zoomIn(); + handled = true; + break; + case 109: // FF '-' + case 189: // Chrome '-' + PDFView.zoomOut(); + handled = true; + break; + case 48: // '0' + PDFView.parseScale(kDefaultScale, true); + handled = true; + break; + } + } + + if (handled) { + evt.preventDefault(); return; + } + + // Some shortcuts should not get handled if a control/input element + // is selected. var curElement = document.activeElement; if (curElement && curElement.tagName == 'INPUT') return; @@ -1525,35 +1558,22 @@ window.addEventListener('keydown', function keydown(evt) { return; // ignoring if the 'controls' element is focused curElement = curElement.parentNode; } - var handled = false; - switch (evt.keyCode) { - case 61: // FF/Mac '=' - case 107: // FF '+' and '=' - case 187: // Chrome '+' - PDFView.zoomIn(); - handled = true; - break; - case 109: // FF '-' - case 189: // Chrome '-' - PDFView.zoomOut(); - handled = true; - break; - case 48: // '0' - PDFView.parseScale(kDefaultScale, true); - handled = true; - break; - case 37: // left arrow - case 75: // 'k' - case 80: // 'p' - PDFView.page--; - handled = true; - break; - case 39: // right arrow - case 74: // 'j' - case 78: // 'n' - PDFView.page++; - handled = true; - break; + + if (cmd == 0) { // no control key pressed at all. + switch (evt.keyCode) { + case 37: // left arrow + case 75: // 'k' + case 80: // 'p' + PDFView.page--; + handled = true; + break; + case 39: // right arrow + case 74: // 'j' + case 78: // 'n' + PDFView.page++; + handled = true; + break; + } } if (handled) {