| Index: chrome/browser/resources/pdf/elements/viewer-toolbar-dropdown/viewer-toolbar-dropdown.js
|
| diff --git a/chrome/browser/resources/pdf/elements/viewer-toolbar-dropdown/viewer-toolbar-dropdown.js b/chrome/browser/resources/pdf/elements/viewer-toolbar-dropdown/viewer-toolbar-dropdown.js
|
| index 17a04c04d7b682b264c367de0e35cea3b8084643..53e9acc53189665bb0f13f99dcf92f9a3765c845 100644
|
| --- a/chrome/browser/resources/pdf/elements/viewer-toolbar-dropdown/viewer-toolbar-dropdown.js
|
| +++ b/chrome/browser/resources/pdf/elements/viewer-toolbar-dropdown/viewer-toolbar-dropdown.js
|
| @@ -3,136 +3,132 @@
|
| // found in the LICENSE file.
|
|
|
| (function() {
|
| - /**
|
| - * Size of additional padding in the inner scrollable section of the dropdown.
|
| - */
|
| - var DROPDOWN_INNER_PADDING = 12;
|
| -
|
| - /** Size of vertical padding on the outer #dropdown element. */
|
| - var DROPDOWN_OUTER_PADDING = 2;
|
| -
|
| - /** Minimum height of toolbar dropdowns (px). */
|
| - var MIN_DROPDOWN_HEIGHT = 200;
|
| -
|
| - Polymer({
|
| - is: 'viewer-toolbar-dropdown',
|
| -
|
| - properties: {
|
| - /** String to be displayed at the top of the dropdown. */
|
| - header: String,
|
| -
|
| - /** Icon to display when the dropdown is closed. */
|
| - closedIcon: String,
|
| -
|
| - /** Icon to display when the dropdown is open. */
|
| - openIcon: String,
|
| -
|
| - /** True if the dropdown is currently open. */
|
| - dropdownOpen: {
|
| - type: Boolean,
|
| - reflectToAttribute: true,
|
| - value: false
|
| - },
|
| -
|
| - /** Toolbar icon currently being displayed. */
|
| - dropdownIcon: {
|
| - type: String,
|
| - computed: 'computeIcon_(dropdownOpen, closedIcon, openIcon)'
|
| - },
|
| -
|
| - /** Lowest vertical point that the dropdown should occupy (px). */
|
| - lowerBound: {
|
| - type: Number,
|
| - observer: 'lowerBoundChanged_'
|
| - },
|
| -
|
| - /**
|
| - * True if the max-height CSS property for the dropdown scroll container
|
| - * is valid. If false, the height will be updated the next time the
|
| - * dropdown is visible.
|
| - */
|
| - maxHeightValid_: false,
|
| -
|
| - /** Current animation being played, or null if there is none. */
|
| - animation_: Object
|
| - },
|
| +/**
|
| + * Size of additional padding in the inner scrollable section of the dropdown.
|
| + */
|
| +var DROPDOWN_INNER_PADDING = 12;
|
|
|
| - computeIcon_: function(dropdownOpen, closedIcon, openIcon) {
|
| - return dropdownOpen ? openIcon : closedIcon;
|
| - },
|
| +/** Size of vertical padding on the outer #dropdown element. */
|
| +var DROPDOWN_OUTER_PADDING = 2;
|
|
|
| - lowerBoundChanged_: function() {
|
| - this.maxHeightValid_ = false;
|
| - if (this.dropdownOpen)
|
| - this.updateMaxHeight();
|
| - },
|
| +/** Minimum height of toolbar dropdowns (px). */
|
| +var MIN_DROPDOWN_HEIGHT = 200;
|
|
|
| - toggleDropdown: function() {
|
| - this.dropdownOpen = !this.dropdownOpen;
|
| - if (this.dropdownOpen) {
|
| - this.$.dropdown.style.display = 'block';
|
| - if (!this.maxHeightValid_)
|
| - this.updateMaxHeight();
|
| - }
|
| - this.cancelAnimation_();
|
| - this.playAnimation_(this.dropdownOpen);
|
| - },
|
| +Polymer({
|
| + is: 'viewer-toolbar-dropdown',
|
|
|
| - updateMaxHeight: function() {
|
| - var scrollContainer = this.$['scroll-container'];
|
| - var height = this.lowerBound -
|
| - scrollContainer.getBoundingClientRect().top -
|
| - DROPDOWN_INNER_PADDING;
|
| - height = Math.max(height, MIN_DROPDOWN_HEIGHT);
|
| - scrollContainer.style.maxHeight = height + 'px';
|
| - this.maxHeightValid_ = true;
|
| - },
|
| + properties: {
|
| + /** String to be displayed at the top of the dropdown. */
|
| + header: String,
|
|
|
| - cancelAnimation_: function() {
|
| - if (this._animation)
|
| - this._animation.cancel();
|
| - },
|
| + /** Icon to display when the dropdown is closed. */
|
| + closedIcon: String,
|
|
|
| - /**
|
| - * Start an animation on the dropdown.
|
| - * @param {boolean} isEntry True to play entry animation, false to play
|
| - * exit.
|
| - * @private
|
| - */
|
| - playAnimation_: function(isEntry) {
|
| - this.animation_ = isEntry ? this.animateEntry_() : this.animateExit_();
|
| - this.animation_.onfinish = function() {
|
| - this.animation_ = null;
|
| - if (!this.dropdownOpen)
|
| - this.$.dropdown.style.display = 'none';
|
| - }.bind(this);
|
| - },
|
| -
|
| - animateEntry_: function() {
|
| - var maxHeight = this.$.dropdown.getBoundingClientRect().height -
|
| - DROPDOWN_OUTER_PADDING;
|
| -
|
| - if (maxHeight < 0)
|
| - maxHeight = 0;
|
| + /** Icon to display when the dropdown is open. */
|
| + openIcon: String,
|
|
|
| - var fade = new KeyframeEffect(this.$.dropdown, [
|
| - {opacity: 0},
|
| - {opacity: 1}
|
| - ], {duration: 150, easing: 'cubic-bezier(0, 0, 0.2, 1)'});
|
| - var slide = new KeyframeEffect(this.$.dropdown, [
|
| - {height: '20px', transform: 'translateY(-10px)'},
|
| - {height: maxHeight + 'px', transform: 'translateY(0)'}
|
| - ], {duration: 250, easing: 'cubic-bezier(0, 0, 0.2, 1)'});
|
| + /** True if the dropdown is currently open. */
|
| + dropdownOpen: {type: Boolean, reflectToAttribute: true, value: false},
|
|
|
| - return document.timeline.play(new GroupEffect([fade, slide]));
|
| + /** Toolbar icon currently being displayed. */
|
| + dropdownIcon: {
|
| + type: String,
|
| + computed: 'computeIcon_(dropdownOpen, closedIcon, openIcon)'
|
| },
|
|
|
| - animateExit_: function() {
|
| - return this.$.dropdown.animate([
|
| - {transform: 'translateY(0)', opacity: 1},
|
| - {transform: 'translateY(-5px)', opacity: 0}
|
| - ], {duration: 100, easing: 'cubic-bezier(0.4, 0, 1, 1)'});
|
| + /** Lowest vertical point that the dropdown should occupy (px). */
|
| + lowerBound: {type: Number, observer: 'lowerBoundChanged_'},
|
| +
|
| + /**
|
| + * True if the max-height CSS property for the dropdown scroll container
|
| + * is valid. If false, the height will be updated the next time the
|
| + * dropdown is visible.
|
| + */
|
| + maxHeightValid_: false,
|
| +
|
| + /** Current animation being played, or null if there is none. */
|
| + animation_: Object
|
| + },
|
| +
|
| + computeIcon_: function(dropdownOpen, closedIcon, openIcon) {
|
| + return dropdownOpen ? openIcon : closedIcon;
|
| + },
|
| +
|
| + lowerBoundChanged_: function() {
|
| + this.maxHeightValid_ = false;
|
| + if (this.dropdownOpen)
|
| + this.updateMaxHeight();
|
| + },
|
| +
|
| + toggleDropdown: function() {
|
| + this.dropdownOpen = !this.dropdownOpen;
|
| + if (this.dropdownOpen) {
|
| + this.$.dropdown.style.display = 'block';
|
| + if (!this.maxHeightValid_)
|
| + this.updateMaxHeight();
|
| }
|
| - });
|
| + this.cancelAnimation_();
|
| + this.playAnimation_(this.dropdownOpen);
|
| + },
|
| +
|
| + updateMaxHeight: function() {
|
| + var scrollContainer = this.$['scroll-container'];
|
| + var height = this.lowerBound - scrollContainer.getBoundingClientRect().top -
|
| + DROPDOWN_INNER_PADDING;
|
| + height = Math.max(height, MIN_DROPDOWN_HEIGHT);
|
| + scrollContainer.style.maxHeight = height + 'px';
|
| + this.maxHeightValid_ = true;
|
| + },
|
| +
|
| + cancelAnimation_: function() {
|
| + if (this._animation)
|
| + this._animation.cancel();
|
| + },
|
| +
|
| + /**
|
| + * Start an animation on the dropdown.
|
| + * @param {boolean} isEntry True to play entry animation, false to play
|
| + * exit.
|
| + * @private
|
| + */
|
| + playAnimation_: function(isEntry) {
|
| + this.animation_ = isEntry ? this.animateEntry_() : this.animateExit_();
|
| + this.animation_.onfinish = function() {
|
| + this.animation_ = null;
|
| + if (!this.dropdownOpen)
|
| + this.$.dropdown.style.display = 'none';
|
| + }.bind(this);
|
| + },
|
| +
|
| + animateEntry_: function() {
|
| + var maxHeight =
|
| + this.$.dropdown.getBoundingClientRect().height - DROPDOWN_OUTER_PADDING;
|
| +
|
| + if (maxHeight < 0)
|
| + maxHeight = 0;
|
| +
|
| + var fade = new KeyframeEffect(
|
| + this.$.dropdown, [{opacity: 0}, {opacity: 1}],
|
| + {duration: 150, easing: 'cubic-bezier(0, 0, 0.2, 1)'});
|
| + var slide = new KeyframeEffect(
|
| + this.$.dropdown,
|
| + [
|
| + {height: '20px', transform: 'translateY(-10px)'},
|
| + {height: maxHeight + 'px', transform: 'translateY(0)'}
|
| + ],
|
| + {duration: 250, easing: 'cubic-bezier(0, 0, 0.2, 1)'});
|
| +
|
| + return document.timeline.play(new GroupEffect([fade, slide]));
|
| + },
|
| +
|
| + animateExit_: function() {
|
| + return this.$.dropdown.animate(
|
| + [
|
| + {transform: 'translateY(0)', opacity: 1},
|
| + {transform: 'translateY(-5px)', opacity: 0}
|
| + ],
|
| + {duration: 100, easing: 'cubic-bezier(0.4, 0, 1, 1)'});
|
| + }
|
| +});
|
|
|
| })();
|
|
|