Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(360)

Unified Diff: third_party/polymer/v0_8/components/paper-slider/paper-slider.html

Issue 1162563004: Upgrade to 1.0 and switch clients to dom-repeat where needed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix a layout import and remove the gzipped webanimation in reproduce.sh Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/polymer/v0_8/components/paper-slider/paper-slider.html
diff --git a/third_party/polymer/v0_8/components/paper-slider/paper-slider.html b/third_party/polymer/v0_8/components/paper-slider/paper-slider.html
new file mode 100644
index 0000000000000000000000000000000000000000..135dba8bf87e7b0e3feebfaa730a1cf03520ab8b
--- /dev/null
+++ b/third_party/polymer/v0_8/components/paper-slider/paper-slider.html
@@ -0,0 +1,449 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
+The complete set of authors may be found at http://polymer.github.io/AUTHORS
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
+-->
+
+<link rel="import" href="../paper-styles/paper-styles.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../iron-behaviors/iron-control-state.html">
+<link rel="import" href="../paper-progress/paper-progress.html">
+<link rel="import" href="../paper-input/paper-input.html">
+
+<!--
+`paper-slider` allows user to select a value from a range of values by
+moving the slider thumb. The interactive nature of the slider makes it a
+great choice for settings that reflect intensity levels, such as volume,
+brightness, or color saturation.
+
+Example:
+
+ <paper-slider></paper-slider>
+
+Use `min` and `max` to specify the slider range. Default is 0 to 100.
+
+Example:
+
+ <paper-slider min="10" max="200" value="110"></paper-slider>
+
+Styling slider:
+
+To change the slider progress bar color:
+
+ paper-slider {
+ --paper-slider-active-color: #0f9d58;
+ }
+
+To change the slider knob color:
+
+ paper-slider {
+ --paper-slider-knob-color: #0f9d58;
+ }
+
+To change the slider pin color:
+
+ paper-slider {
+ --paper-slider-pin-color: #0f9d58;
+ }
+
+To change the slider pin's font color:
+
+ paper-slider {
+ --paper-slider-pin-font-color: #0f9d58;
+ }
+
+To change the slider secondary progress bar color:
+
+ paper-slider {
+ --paper-slider-secondary-color: #0f9d58;
+ }
+
+To change the slider disabled active color:
+
+ paper-slider {
+ --paper-slider-disabled-active-color: #ccc;
+ }
+
+To change the slider disabled secondary progress bar color:
+
+ paper-slider {
+ --paper-slider-disabled-secondary-color: #ccc;
+ }
+
+@group Paper Elements
+@element paper-slider
+@demo demo/index.html
+@hero hero.svg
+-->
+
+<dom-module id="paper-slider">
+ <link rel="import" type="css" href="paper-slider.css">
+ <template>
+ <template is="dom-if" if="{{!disabled}}">
+ </template>
+
+ <div id="sliderContainer" class$="[[_getClassNames(disabled, pin, snaps, immediateValue, min, expand, dragging, transiting, editable)]]">
+ <div class="bar-container">
+ <paper-progress id="sliderBar" aria-hidden="true" min="[[min]]" max="[[max]]" value="[[immediateValue]]" secondary-progress="[[secondaryProgress]]"
+ on-down="_bardown" on-up="_resetKnob" on-track="_onTrack"></paper-progress>
+ </div>
+
+ <template is="dom-if" if="[[snaps]]">
+ <div class="slider-markers horizontal layout">
+ <template is="dom-repeat" items="[[markers]]">
+ <div class="slider-marker flex"></div>
+ </template>
+ </div>
+ </template>
+
+ <div id="sliderKnob" on-down="_knobdown" on-up="_resetKnob"
+ on-track="_onTrack"
+ on-transitionend="_knobTransitionEnd"
+ center-justified center horizontal layout>
+
+ <div id="sliderKnobInner" value$="[[immediateValue]]"></div>
+ </div>
+ </div>
+
+ <template is="dom-if" if="[[editable]]">
+ <paper-input id="input" class="slider-input" disabled$="[[disabled]]" on-change="_inputChange"></paper-input>
+ </template>
+
+ </template>
+</dom-module>
+
+<script>
+ /**
+ * Fired when the slider's value changes.
+ *
+ * @event value-change
+ */
+
+ /**
+ * Fired when the slider's immediateValue changes.
+ *
+ * @event immediate-value-change
+ */
+
+ /**
+ * Fired when the slider's value changes due to user interaction.
+ *
+ * Changes to the slider's value due to changes in an underlying
+ * bound variable will not trigger this event.
+ *
+ * @event change
+ */
+
+ Polymer({
+ is: 'paper-slider',
+
+ behaviors: [
+ Polymer.IronRangeBehavior,
+ Polymer.IronControlState
+ ],
+
+ properties: {
+
+ /**
+ * If true, the slider thumb snaps to tick marks evenly spaced based
+ * on the `step` property value.
+ */
+ snaps: {
+ type: Boolean,
+ value: false,
+ notify: true
+ },
+
+ /**
+ * If true, a pin with numeric value label is shown when the slider thumb
+ * is pressed. Use for settings for which users need to know the exact
+ * value of the setting.
+ */
+ pin: {
+ type: Boolean,
+ value: false,
+ notify: true
+ },
+
+ /**
+ * The number that represents the current secondary progress.
+ */
+ secondaryProgress: {
+ type: Number,
+ value: 0,
+ notify: true,
+ observer: '_secondaryProgressChanged'
+ },
+
+ /**
+ * If true, an input is shown and user can use it to set the slider value.
+ */
+ editable: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * The immediate value of the slider. This value is updated while the user
+ * is dragging the slider.
+ */
+ immediateValue: {
+ type: Number,
+ value: 0,
+ readOnly: true
+ },
+
+ /**
+ * The maximum number of markers
+ */
+ maxMarkers: {
+ type: Number,
+ value: 0,
+ notify: true,
+ observer: '_maxMarkersChanged'
+ },
+
+ /**
+ * If true, the knob is expanded
+ */
+ expand: {
+ type: Boolean,
+ value: false,
+ readOnly: true
+ },
+
+ /**
+ * True when the user is dragging the slider.
+ */
+ dragging: {
+ type: Boolean,
+ value: false,
+ readOnly: true
+ },
+
+ transiting: {
+ type: Boolean,
+ value: false,
+ readOnly: true
+ },
+
+ markers: {
+ readOnly: true,
+ value: []
+ },
+ },
+
+ observers: [
+ '_updateKnob(value, min, max, snaps, step)',
+ '_minChanged(min)',
+ '_maxChanged(max)',
+ '_valueChanged(value)',
+ '_immediateValueChanged(immediateValue)'
+ ],
+
+ ready: function() {
+ // issue polymer/polymer#1305
+ this.async(function() {
+ this._updateKnob(this.value);
+ this._updateInputValue();
+ }, 1);
+ },
+
+ /**
+ * Increases value by `step` but not above `max`.
+ * @method increment
+ */
+ increment: function() {
+ this.value = this._clampValue(this.value + this.step);
+ },
+
+ /**
+ * Decreases value by `step` but not below `min`.
+ * @method decrement
+ */
+ decrement: function() {
+ this.value = this._clampValue(this.value - this.step);
+ },
+
+ _updateKnob: function(value) {
+ this._positionKnob(this._calcRatio(value));
+ },
+
+ _minChanged: function() {
+ this.setAttribute('aria-valuemin', this.min);
+ },
+
+ _maxChanged: function() {
+ this.setAttribute('aria-valuemax', this.max);
+ },
+
+ _valueChanged: function() {
+ this.setAttribute('aria-valuenow', this.value);
+ this.fire('value-change');
+ },
+
+ _immediateValueChanged: function() {
+ if (!this.dragging) {
+ this.value = this.immediateValue;
+ }
+ this._updateInputValue();
+ this.fire('immediate-value-change');
+ },
+
+ _secondaryProgressChanged: function() {
+ this.secondaryProgress = this._clampValue(this.secondaryProgress);
+ },
+
+ _updateInputValue: function() {
+ if (this.editable) {
+ this.$$('#input').value = this.immediateValue;
+ }
+ },
+
+ _expandKnob: function() {
+ this._setExpand(true);
+ },
+
+ _resetKnob: function() {
+ this._expandJob && this._expandJob.stop();
+ this._setExpand(false);
+ },
+
+ _positionKnob: function(ratio) {
+ this._setImmediateValue(this._calcStep(this._calcKnobPosition(ratio)) || 0);
+ this._setRatio(this.snaps ? this._calcRatio(this.immediateValue) : ratio);
+ this.$.sliderKnob.style.left = this.ratio * 100 + '%';
+ },
+
+ _inputChange: function() {
+ this.value = this.$$('#input').value;
+ this.fire('change');
+ },
+
+ _calcKnobPosition: function(ratio) {
+ return (this.max - this.min) * ratio + this.min;
+ },
+
+ _onTrack: function(e) {
+ switch (event.detail.state) {
+ case 'end':
+ this._trackEnd(event);
+ break;
+ case 'track':
+ this._trackX(event);
+ break;
+ case 'start':
+ this._trackStart(event);
+ break;
+ }
+ },
+
+ _trackStart: function(e) {
+ this._w = this.$.sliderBar.offsetWidth;
+ this._x = this.ratio * this._w;
+ this._startx = this._x || 0;
+ this._minx = - this._startx;
+ this._maxx = this._w - this._startx;
+ this.$.sliderKnob.classList.add('dragging');
+ this._setDragging(true);
+ e.preventDefault();
+ },
+
+ _trackX: function(e) {
+ if (!this.dragging) {
+ this._trackStart(e);
+ }
+ var x = Math.min(this._maxx, Math.max(this._minx, e.detail.dx));
+ this._x = this._startx + x;
+ this._setImmediateValue(this._calcStep(
+ this._calcKnobPosition(this._x / this._w)) || 0);
+ var s = this.$.sliderKnob.style;
+ s.transform = s.webkitTransform = 'translate3d(' + (this.snaps ?
+ (this._calcRatio(this.immediateValue) * this._w) - this._startx : x) + 'px, 0, 0)';
+ },
+
+ _trackEnd: function() {
+ var s = this.$.sliderKnob.style;
+ s.transform = s.webkitTransform = '';
+ this.$.sliderKnob.classList.remove('dragging');
+ this._setDragging(false);
+ this._resetKnob();
+ this.value = this.immediateValue;
+ this.fire('change');
+ },
+
+ _knobdown: function(e) {
+ e.preventDefault();
+ this._expandKnob();
+ },
+
+ _bardown: function(e) {
+ e.preventDefault();
+ this._setTransiting(true);
+ this._w = this.$.sliderBar.offsetWidth;
+ var rect = this.$.sliderBar.getBoundingClientRect();
+ var ratio = (e.detail.x - rect.left) / this._w;
+ this._positionKnob(ratio);
+ this._expandJob = this.debounce(this._expandJob, this._expandKnob, 60);
+
+ this.async(function() {
+ this.fire('change');
+ });
+ },
+
+ _knobTransitionEnd: function(e) {
+ if (e.target === this.$.sliderKnob) {
+ this._setTransiting(false);
+ }
+ },
+
+ _maxMarkersChanged: function(maxMarkers) {
+ var l = (this.max - this.min) / this.step;
+ if (!this.snaps && l > maxMarkers) {
+ this._setMarkers([]);
+ } else {
+ this._setMarkers(new Array(l));
+ }
+ },
+
+ _getClassNames: function() {
+ var classes = {};
+
+ classes['disabled'] = this.disabled;
+ classes['pin'] = this.pin;
+ classes['snaps'] = this.snaps;
+ classes['ring'] = this.immediateValue <= this.min;
+ classes['expand'] = this.expand;
+ classes['dragging'] = this.dragging;
+ classes['transiting'] = this.transiting;
+ classes['editable'] = this.editable;
+
+ return Object.keys(classes).filter(
+ function(className) {
+ return classes[className];
+ }).join(' ');
+ },
+
+ _incrementKey: function(ev, keys) {
+ if (keys.key === 'end') {
+ this.value = this.max;
+ } else {
+ this.increment();
+ }
+ this.fire('change');
+ },
+
+ _decrementKey: function(ev, keys) {
+ if (keys.key === 'home') {
+ this.value = this.min;
+ } else {
+ this.decrement();
+ }
+ this.fire('change');
+ }
+ })
+</script>

Powered by Google App Engine
This is Rietveld 408576698