summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/resources/pdf/elements/viewer-zoom-toolbar.js
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/resources/pdf/elements/viewer-zoom-toolbar.js')
-rw-r--r--chromium/chrome/browser/resources/pdf/elements/viewer-zoom-toolbar.js198
1 files changed, 198 insertions, 0 deletions
diff --git a/chromium/chrome/browser/resources/pdf/elements/viewer-zoom-toolbar.js b/chromium/chrome/browser/resources/pdf/elements/viewer-zoom-toolbar.js
new file mode 100644
index 00000000000..fe28ef8c96a
--- /dev/null
+++ b/chromium/chrome/browser/resources/pdf/elements/viewer-zoom-toolbar.js
@@ -0,0 +1,198 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @typedef {{
+ * fittingType: !FittingType,
+ * userInitiated: boolean,
+ * }}
+ */
+let FitToChangedEvent;
+
+(function() {
+
+const FIT_TO_PAGE_BUTTON_STATE = 0;
+const FIT_TO_WIDTH_BUTTON_STATE = 1;
+
+Polymer({
+ is: 'viewer-zoom-toolbar',
+
+ properties: {
+ newPrintPreview: {
+ type: Boolean,
+ reflectToAttribute: true,
+ },
+
+ /** @private */
+ keyboardNavigationActive_: {
+ type: Boolean,
+ value: false,
+ },
+
+ /** @private */
+ showOnLeft_: {
+ type: Boolean,
+ computed: 'computeShowOnLeft_(newPrintPreview)',
+ reflectToAttribute: true,
+ },
+ },
+
+ listeners: {
+ 'focus': 'onFocus_',
+ 'keyup': 'onKeyUp_',
+ 'pointerdown': 'onPointerDown_',
+ },
+
+ /** @private {boolean} */
+ isPrintPreview_: false,
+
+ /** @private {boolean} */
+ visible_: true,
+
+ /** @param {boolean} isPrintPreview */
+ setIsPrintPreview: function(isPrintPreview) {
+ this.isPrintPreview_ = isPrintPreview;
+ },
+
+ /** @return {boolean} */
+ isPrintPreview: function() {
+ return this.isPrintPreview_;
+ },
+
+ /** @return {boolean} */
+ isVisible: function() {
+ return this.visible_;
+ },
+
+ /** @private */
+ onFocus_: function() {
+ // This can only happen when the plugin is shown within Print Preview using
+ // keyboard navigation.
+ if (!this.visible_) {
+ assert(this.isPrintPreview_);
+ this.fire('keyboard-navigation-active', true);
+ this.show();
+ }
+ },
+
+ /** @private */
+ onKeyUp_: function() {
+ if (this.isPrintPreview_) {
+ this.fire('keyboard-navigation-active', true);
+ }
+ this.keyboardNavigationActive_ = true;
+ },
+
+ /** @private */
+ onPointerDown_: function() {
+ if (this.isPrintPreview_) {
+ this.fire('keyboard-navigation-active', false);
+ }
+ this.keyboardNavigationActive_ = false;
+ },
+
+ /**
+ * @return {boolean} Whether to show the zoom toolbar on the left side of the
+ * viewport.
+ * @private
+ */
+ computeShowOnLeft_: function() {
+ return isRTL() !== this.newPrintPreview;
+ },
+
+ /**
+ * Change button tooltips to match any changes to localized strings.
+ * @param {!{tooltipFitToPage: string,
+ * tooltipFitToWidth: string,
+ * tooltipZoomIn: string,
+ * tooltipZoomOut: string}} strings
+ */
+ setStrings: function(strings) {
+ this.$['fit-button'].tooltips =
+ [strings.tooltipFitToPage, strings.tooltipFitToWidth];
+ this.$['zoom-in-button'].tooltips = [strings.tooltipZoomIn];
+ this.$['zoom-out-button'].tooltips = [strings.tooltipZoomOut];
+ },
+
+ /** Handle clicks of the fit-button. */
+ fitToggle: function() {
+ this.fireFitToChangedEvent_(
+ this.$['fit-button'].activeIndex == FIT_TO_WIDTH_BUTTON_STATE ?
+ FittingType.FIT_TO_WIDTH :
+ FittingType.FIT_TO_PAGE,
+ true);
+ },
+
+ /** Handle the keyboard shortcut equivalent of fit-button clicks. */
+ fitToggleFromHotKey: function() {
+ this.fitToggle();
+
+ // Toggle the button state since there was no mouse click.
+ const button = this.$['fit-button'];
+ button.activeIndex =
+ (button.activeIndex == FIT_TO_WIDTH_BUTTON_STATE ?
+ FIT_TO_PAGE_BUTTON_STATE :
+ FIT_TO_WIDTH_BUTTON_STATE);
+ },
+
+ /**
+ * Handle forcing zoom via scripting to a fitting type.
+ * @param {!FittingType} fittingType Page fitting type to force.
+ */
+ forceFit: function(fittingType) {
+ this.fireFitToChangedEvent_(fittingType, false);
+
+ // Set the button state since there was no mouse click.
+ const nextButtonState =
+ (fittingType == FittingType.FIT_TO_WIDTH ? FIT_TO_PAGE_BUTTON_STATE :
+ FIT_TO_WIDTH_BUTTON_STATE);
+ this.$['fit-button'].activeIndex = nextButtonState;
+ },
+
+ /**
+ * Fire a 'fit-to-changed' {CustomEvent} with the given FittingType as detail.
+ * @param {!FittingType} fittingType to include as payload.
+ * @param {boolean} userInitiated whether the event was initiated by a user
+ * action.
+ * @private
+ */
+ fireFitToChangedEvent_: function(fittingType, userInitiated) {
+ this.fire(
+ 'fit-to-changed',
+ {fittingType: fittingType, userInitiated: userInitiated});
+ },
+
+ /**
+ * Handle clicks of the zoom-in-button.
+ */
+ zoomIn: function() {
+ this.fire('zoom-in');
+ },
+
+ /**
+ * Handle clicks of the zoom-out-button.
+ */
+ zoomOut: function() {
+ this.fire('zoom-out');
+ },
+
+ show: function() {
+ if (!this.visible_) {
+ this.visible_ = true;
+ this.$['fit-button'].show();
+ this.$['zoom-in-button'].show();
+ this.$['zoom-out-button'].show();
+ }
+ },
+
+ hide: function() {
+ if (this.visible_) {
+ this.visible_ = false;
+ this.$['fit-button'].hide();
+ this.$['zoom-in-button'].hide();
+ this.$['zoom-out-button'].hide();
+ }
+ },
+});
+})();