summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/resources/pdf/elements/viewer-pen-options.js
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/resources/pdf/elements/viewer-pen-options.js')
-rw-r--r--chromium/chrome/browser/resources/pdf/elements/viewer-pen-options.js196
1 files changed, 196 insertions, 0 deletions
diff --git a/chromium/chrome/browser/resources/pdf/elements/viewer-pen-options.js b/chromium/chrome/browser/resources/pdf/elements/viewer-pen-options.js
new file mode 100644
index 00000000000..d63343404fb
--- /dev/null
+++ b/chromium/chrome/browser/resources/pdf/elements/viewer-pen-options.js
@@ -0,0 +1,196 @@
+// Copyright 2019 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.
+
+const colors = [
+ // row 1
+ {name: 'annotationColorBlack', color: '#000000'},
+ {name: 'annotationColorRed', color: '#ff5252'},
+ {name: 'annotationColorYellow', color: '#ffbc00'},
+ {name: 'annotationColorGreen', color: '#00c853'},
+ {name: 'annotationColorCyan', color: '#00b0ff'},
+ {name: 'annotationColorPurple', color: '#d500f9'},
+ {name: 'annotationColorBrown', color: '#8d6e63'},
+ // row 2
+ {name: 'annotationColorWhite', color: '#fafafa', outline: true},
+ {name: 'annotationColorCrimson', color: '#a52714'},
+ {name: 'annotationColorAmber', color: '#ee8100'},
+ {name: 'annotationColorAvocadoGreen', color: '#558b2f'},
+ {name: 'annotationColorCobaltBlue', color: '#01579b'},
+ {name: 'annotationColorDeepPurple', color: '#8e24aa'},
+ {name: 'annotationColorDarkBrown', color: '#4e342e'},
+ // row 3
+ {name: 'annotationColorDarkGrey', color: '#90a4ae'},
+ {name: 'annotationColorHotPink', color: '#ff4081'},
+ {name: 'annotationColorOrange', color: '#ff6e40'},
+ {name: 'annotationColorLime', color: '#aeea00'},
+ {name: 'annotationColorBlue', color: '#304ffe'},
+ {name: 'annotationColorViolet', color: '#7c4dff'},
+ {name: 'annotationColorTeal', color: '#1de9b6'},
+ // row 4
+ {name: 'annotationColorLightGrey', color: '#cfd8dc'},
+ {name: 'annotationColorLightPink', color: '#f8bbd0'},
+ {name: 'annotationColorLightOrange', color: '#ffccbc'},
+ {name: 'annotationColorLightGreen', color: '#f0f4c3'},
+ {name: 'annotationColorLightBlue', color: '#9fa8da'},
+ {name: 'annotationColorLavender', color: '#d1c4e9'},
+ {name: 'annotationColorLightTeal', color: '#b2dfdb'},
+];
+
+const sizes = [
+ {name: 'annotationSize1', size: 0},
+ {name: 'annotationSize2', size: 0.1429},
+ {name: 'annotationSize3', size: 0.2857},
+ {name: 'annotationSize4', size: 0.4286},
+ {name: 'annotationSize8', size: 0.5714},
+ {name: 'annotationSize12', size: 0.7143},
+ {name: 'annotationSize16', size: 0.8571},
+ {name: 'annotationSize20', size: 1},
+];
+
+/**
+ * Displays a set of radio buttons to select from
+ * a predefined list of colors and sizes.
+ */
+Polymer({
+ is: 'viewer-pen-options',
+
+ properties: {
+ expanded_: {
+ type: Boolean,
+ value: false,
+ },
+ selectedSize: {
+ type: Number,
+ value: 0.250,
+ notify: true,
+ },
+ selectedColor: {
+ type: String,
+ value: '#000000',
+ notify: true,
+ },
+ sizes_: {
+ type: Array,
+ value: sizes,
+ },
+ colors_: {
+ type: Array,
+ value: colors,
+ },
+ strings: Object,
+ },
+
+ /** @type {Array<!Animation>} */
+ expandAnimations_: null,
+
+ /** @param {Event} e */
+ sizeChanged_: function(e) {
+ this.selectedSize = Number(e.target.value);
+ },
+
+ /** @param {Event} e */
+ colorChanged_: function(e) {
+ this.selectedColor = e.target.value;
+ },
+
+ /** @private */
+ toggleExpanded_: function() {
+ this.expanded_ = !this.expanded_;
+ this.updateExpandedState_();
+ },
+
+ /** @private */
+ updateExpandedStateAndFinishAnimations_: function() {
+ this.updateExpandedState_();
+ for (const animation of /** @type {!Array<!Animation>} */ (
+ this.expandAnimations_)) {
+ animation.finish();
+ }
+ },
+
+ /** @override */
+ attached: function() {
+ Polymer.RenderStatus.beforeNextRender(this, () => {
+ this.updateExpandedStateAndFinishAnimations_();
+ });
+ },
+
+ /**
+ * Updates the state of the UI to reflect the current value of `expanded`.
+ * Starts or reverses animations and enables/disable controls.
+ */
+ updateExpandedState_: function() {
+ const colors = this.$.colors;
+ if (!this.expandAnimations_) {
+ const separator = this.$.separator;
+ const expand = this.$.expand;
+ this.expandAnimations_ = [
+ colors.animate({height: ['32px', '188px']}, {
+ easing: 'ease-in-out',
+ duration: 250,
+ fill: 'both',
+ }),
+ separator.animate({opacity: [0, 1]}, {
+ easing: 'ease-in-out',
+ duration: 250,
+ fill: 'both',
+ }),
+ expand.animate({transform: ['rotate(0deg)', 'rotate(180deg)']}, {
+ easing: 'ease-in-out',
+ duration: 250,
+ fill: 'forwards',
+ }),
+ ];
+ }
+ for (const animation of this.expandAnimations_) {
+ // TODO(dstockwell): Ideally we would just set playbackRate,
+ // but there appears to be a web-animations bug that
+ // results in the animation getting stuck in the 'pending'
+ // state sometimes. See crbug.com/938857
+ const currentTime = animation.currentTime;
+ animation.cancel();
+ animation.playbackRate = this.expanded_ ? 1 : -1;
+ animation.currentTime = currentTime;
+ animation.play();
+ }
+ for (const input of colors.querySelectorAll('input:nth-child(n+8)')) {
+ if (this.expanded_) {
+ input.removeAttribute('disabled');
+ } else {
+ input.setAttribute('disabled', '');
+ }
+ }
+ },
+
+ /**
+ * Used to determine equality in computed bindings.
+ *
+ * @param {*} a
+ * @param {*} b
+ */
+ equal_: function(a, b) {
+ return a == b;
+ },
+
+ /**
+ * Used to lookup a string in a computed binding.
+ *
+ * @param {Object} strings
+ * @param {string} name
+ * @return {string}
+ */
+ lookup_: function(strings, name) {
+ return strings ? strings[name] : '';
+ },
+
+ /**
+ * Used to remove focus when clicking or tapping on a styled input
+ * element. This is a workaround until we can use the :focus-visible
+ * pseudo selector.
+ */
+ blurOnPointerDown(e) {
+ const target = e.target;
+ setTimeout(() => target.blur(), 0);
+ },
+});