From 612f59aa10eef2bf6559deddfb54b84a0a30c6bc Mon Sep 17 00:00:00 2001
From: notmasteryet <async.processingjs@yahoo.com>
Date: Sat, 1 Oct 2011 15:52:27 -0500
Subject: [PATCH] Limiting scale 25..400 (ref #582); disable scale keyboard
 when toolbar is active (ref #579); set page number field as 'number'

---
 web/viewer.html |  2 +-
 web/viewer.js   | 16 ++++++++++++++--
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/web/viewer.html b/web/viewer.html
index e22cacbf6..d964bbee6 100644
--- a/web/viewer.html
+++ b/web/viewer.html
@@ -28,7 +28,7 @@
 
       <div class="separator"></div>
 
-      <input type="text" id="pageNumber" onchange="PDFView.page = this.value;" value="1" size="4"/>
+      <input type="number" id="pageNumber" onchange="PDFView.page = this.value;" value="1" size="4" min="1" />
 
       <span>/</span>
       <span id="numPages">--</span>
diff --git a/web/viewer.js b/web/viewer.js
index da41c1d0b..02f803174 100644
--- a/web/viewer.js
+++ b/web/viewer.js
@@ -9,6 +9,8 @@ var kDefaultScaleDelta = 1.1;
 var kCacheSize = 20;
 var kCssUnits = 96.0 / 72.0;
 var kScrollbarPadding = 40;
+var kMinScale = 0.25;
+var kMaxScale = 4.0;
 
 
 var Cache = function(size) {
@@ -72,11 +74,13 @@ var PDFView = {
   },
 
   zoomIn: function() {
-    this.setScale(this.currentScale * kDefaultScaleDelta, true);
+    var newScale = Math.min(kMaxScale, this.currentScale * kDefaultScaleDelta);
+    this.setScale(newScale, true);
   },
 
   zoomOut: function() {
-    this.setScale(this.currentScale / kDefaultScaleDelta, true);
+    var newScale = Math.max(kMinScale, this.currentScale / kDefaultScaleDelta);
+    this.setScale(newScale, true);
   },
 
   set page(val) {
@@ -166,6 +170,7 @@ var PDFView = {
     var pdf = new PDFDoc(data);
     var pagesCount = pdf.numPages;
     document.getElementById('numPages').innerHTML = pagesCount;
+    document.getElementById('pageNumber').max = pagesCount;
 
     var pages = this.pages = [];
     var pagesRefMap = {};
@@ -628,6 +633,13 @@ window.addEventListener('pagechange', function pagechange(evt) {
 }, true);
 
 window.addEventListener('keydown', function keydown(evt) {
+  var curElement = document.activeElement;
+  var controlsElement = document.getElementById('controls');
+  while (curElement) {
+    if (curElement === controlsElement)
+      return; // ignoring if the 'controls' element is focused
+    curElement = curElement.parentNode;
+  }
   switch (evt.keyCode) {
     case 61: // FF/Mac '='
     case 107: // FF '+' and '='