diff --git a/web/app.js b/web/app.js index 0bcd5a279..87982cfbb 100644 --- a/web/app.js +++ b/web/app.js @@ -225,11 +225,10 @@ var PDFViewerApplication = { this.overlayManager = OverlayManager; - HandTool.initialize({ + this.handTool = new HandTool({ container: container, toggleHandTool: document.getElementById('toggleHandTool') }); - this.handTool = HandTool; this.pdfDocumentProperties = new PDFDocumentProperties({ overlayName: 'documentPropertiesOverlay', @@ -2148,7 +2147,7 @@ window.addEventListener('keydown', function keydown(evt) { case 72: // 'h' if (!isViewerInPresentationMode) { - HandTool.toggle(); + PDFViewerApplication.handTool.toggle(); } break; case 82: // 'r' diff --git a/web/hand_tool.js b/web/hand_tool.js index 85addc5ea..8d5f1842a 100644 --- a/web/hand_tool.js +++ b/web/hand_tool.js @@ -35,30 +35,49 @@ var GrabToPan = grabToPan.GrabToPan; var Preferences = preferences.Preferences; var SecondaryToolbar = secondaryToolbar.SecondaryToolbar; -var HandTool = { - initialize: function handToolInitialize(options) { - var toggleHandTool = options.toggleHandTool; +/** + * @typedef {Object} HandToolOptions + * @property {HTMLDivElement} container - The document container. + * @property {HTMLButtonElement} toggleHandTool - The button element for + * toggling the hand tool. + */ + +/** + * @class + */ +var HandTool = (function HandToolClosure() { + /** + * @constructs HandTool + * @param {HandToolOptions} options + */ + function HandTool(options) { + this.container = options.container; + this.toggleHandTool = options.toggleHandTool; + + this.wasActive = false; + this.handTool = new GrabToPan({ - element: options.container, + element: this.container, onActiveChanged: function(isActive) { - if (!toggleHandTool) { + if (!this.toggleHandTool) { return; } if (isActive) { - toggleHandTool.title = + this.toggleHandTool.title = mozL10n.get('hand_tool_disable.title', null, 'Disable hand tool'); - toggleHandTool.firstElementChild.textContent = + this.toggleHandTool.firstElementChild.textContent = mozL10n.get('hand_tool_disable_label', null, 'Disable hand tool'); } else { - toggleHandTool.title = + this.toggleHandTool.title = mozL10n.get('hand_tool_enable.title', null, 'Enable hand tool'); - toggleHandTool.firstElementChild.textContent = + this.toggleHandTool.firstElementChild.textContent = mozL10n.get('hand_tool_enable_label', null, 'Enable hand tool'); } - } + }.bind(this) }); - if (toggleHandTool) { - toggleHandTool.addEventListener('click', this.toggle.bind(this), false); + + if (this.toggleHandTool) { + this.toggleHandTool.addEventListener('click', this.toggle.bind(this)); window.addEventListener('localized', function (evt) { Preferences.get('enableHandToolOnLoad').then(function resolved(value) { @@ -79,27 +98,38 @@ var HandTool = { } }.bind(this)); } - }, - - toggle: function handToolToggle() { - this.handTool.toggle(); - SecondaryToolbar.close(); - }, - - enterPresentationMode: function handToolEnterPresentationMode() { - if (this.handTool.active) { - this.wasActive = true; - this.handTool.deactivate(); - } - }, - - exitPresentationMode: function handToolExitPresentationMode() { - if (this.wasActive) { - this.wasActive = null; - this.handTool.activate(); - } } -}; + + HandTool.prototype = { + /** + * @return {boolean} + */ + get isActive() { + return !!this.handTool.active; + }, + + toggle: function HandTool_toggle() { + this.handTool.toggle(); + SecondaryToolbar.close(); + }, + + enterPresentationMode: function HandTool_enterPresentationMode() { + if (this.isActive) { + this.wasActive = true; + this.handTool.deactivate(); + } + }, + + exitPresentationMode: function HandTool_exitPresentationMode() { + if (this.wasActive) { + this.wasActive = false; + this.handTool.activate(); + } + } + }; + + return HandTool; +})(); exports.HandTool = HandTool; }));