OLD | NEW |
---|---|
1 Polymer({ | 1 Polymer({ |
2 is: 'paper-slider', | 2 is: 'paper-slider', |
3 | 3 |
4 behaviors: [ | 4 behaviors: [ |
5 Polymer.IronA11yKeysBehavior, | 5 Polymer.IronA11yKeysBehavior, |
6 Polymer.IronFormElementBehavior, | 6 Polymer.IronFormElementBehavior, |
7 Polymer.PaperInkyFocusBehavior, | 7 Polymer.PaperInkyFocusBehavior, |
8 Polymer.IronRangeBehavior | 8 Polymer.IronRangeBehavior |
9 ], | 9 ], |
10 | 10 |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
107 '_immediateValueChanged(immediateValue)', | 107 '_immediateValueChanged(immediateValue)', |
108 '_updateMarkers(maxMarkers, min, max, snaps)' | 108 '_updateMarkers(maxMarkers, min, max, snaps)' |
109 ], | 109 ], |
110 | 110 |
111 hostAttributes: { | 111 hostAttributes: { |
112 role: 'slider', | 112 role: 'slider', |
113 tabindex: 0 | 113 tabindex: 0 |
114 }, | 114 }, |
115 | 115 |
116 keyBindings: { | 116 keyBindings: { |
117 'left down pagedown home': '_decrementKey', | 117 'left': '_leftKey', |
118 'right up pageup end': '_incrementKey' | 118 'right': '_rightKey', |
119 'down pagedown home': '_decrementKey', | |
120 'up pageup end': '_incrementKey' | |
119 }, | 121 }, |
120 | 122 |
121 /** | 123 /** |
122 * Increases value by `step` but not above `max`. | 124 * Increases value by `step` but not above `max`. |
123 * @method increment | 125 * @method increment |
124 */ | 126 */ |
125 increment: function() { | 127 increment: function() { |
126 this.value = this._clampValue(this.value + this.step); | 128 this.value = this._clampValue(this.value + this.step); |
127 }, | 129 }, |
128 | 130 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
206 this._maxx = this._w - this._startx; | 208 this._maxx = this._w - this._startx; |
207 this.$.sliderKnob.classList.add('dragging'); | 209 this.$.sliderKnob.classList.add('dragging'); |
208 this._setDragging(true); | 210 this._setDragging(true); |
209 }, | 211 }, |
210 | 212 |
211 _trackX: function(event) { | 213 _trackX: function(event) { |
212 if (!this.dragging) { | 214 if (!this.dragging) { |
213 this._trackStart(event); | 215 this._trackStart(event); |
214 } | 216 } |
215 | 217 |
216 var dx = Math.min(this._maxx, Math.max(this._minx, event.detail.dx)); | 218 var direction = this._isRTL ? -1 : 1; |
219 var dx = Math.min( | |
220 this._maxx, Math.max(this._minx, event.detail.dx * direction)); | |
217 this._x = this._startx + dx; | 221 this._x = this._startx + dx; |
218 | 222 |
219 var immediateValue = this._calcStep(this._calcKnobPosition(this._x / thi s._w)); | 223 var immediateValue = this._calcStep(this._calcKnobPosition(this._x / thi s._w)); |
220 this._setImmediateValue(immediateValue); | 224 this._setImmediateValue(immediateValue); |
221 | 225 |
222 // update knob's position | 226 // update knob's position |
223 var translateX = ((this._calcRatio(this.immediateValue) * this._w) - thi s._knobstartx); | 227 var translateX = ((this._calcRatio(this.immediateValue) * this._w) - thi s._knobstartx); |
224 this.translate3d(translateX + 'px', 0, 0, this.$.sliderKnob); | 228 this.translate3d(translateX + 'px', 0, 0, this.$.sliderKnob); |
225 }, | 229 }, |
226 | 230 |
(...skipping 17 matching lines...) Expand all Loading... | |
244 event.preventDefault(); | 248 event.preventDefault(); |
245 | 249 |
246 // set the focus manually because we will called prevent default | 250 // set the focus manually because we will called prevent default |
247 this.focus(); | 251 this.focus(); |
248 }, | 252 }, |
249 | 253 |
250 _bardown: function(event) { | 254 _bardown: function(event) { |
251 this._w = this.$.sliderBar.offsetWidth; | 255 this._w = this.$.sliderBar.offsetWidth; |
252 var rect = this.$.sliderBar.getBoundingClientRect(); | 256 var rect = this.$.sliderBar.getBoundingClientRect(); |
253 var ratio = (event.detail.x - rect.left) / this._w; | 257 var ratio = (event.detail.x - rect.left) / this._w; |
258 if (this._isRTL) { | |
259 ratio = 1 - ratio; | |
260 } | |
254 var prevRatio = this.ratio; | 261 var prevRatio = this.ratio; |
255 | 262 |
256 this._setTransiting(true); | 263 this._setTransiting(true); |
257 | 264 |
258 this._positionKnob(ratio); | 265 this._positionKnob(ratio); |
259 | 266 |
260 this.debounce('expandKnob', this._expandKnob, 60); | 267 this.debounce('expandKnob', this._expandKnob, 60); |
261 | 268 |
262 // if the ratio doesn't change, sliderKnob's animation won't start | 269 // if the ratio doesn't change, sliderKnob's animation won't start |
263 // and `_knobTransitionEnd` won't be called | 270 // and `_knobTransitionEnd` won't be called |
(...skipping 21 matching lines...) Expand all Loading... | |
285 }, | 292 }, |
286 | 293 |
287 _updateMarkers: function(maxMarkers, min, max, snaps) { | 294 _updateMarkers: function(maxMarkers, min, max, snaps) { |
288 if (!snaps) { | 295 if (!snaps) { |
289 this._setMarkers([]); | 296 this._setMarkers([]); |
290 } | 297 } |
291 var steps = Math.round((max - min) / this.step); | 298 var steps = Math.round((max - min) / this.step); |
292 if (steps > maxMarkers) { | 299 if (steps > maxMarkers) { |
293 steps = maxMarkers; | 300 steps = maxMarkers; |
294 } | 301 } |
302 if (steps < 0 || !isFinite(steps)) { | |
303 steps = 0; | |
304 } | |
dschuyler
2017/04/07 02:59:59
This is a change that wasn't in my PR, but it look
| |
295 this._setMarkers(new Array(steps)); | 305 this._setMarkers(new Array(steps)); |
296 }, | 306 }, |
297 | 307 |
298 _mergeClasses: function(classes) { | 308 _mergeClasses: function(classes) { |
299 return Object.keys(classes).filter( | 309 return Object.keys(classes).filter( |
300 function(className) { | 310 function(className) { |
301 return classes[className]; | 311 return classes[className]; |
302 }).join(' '); | 312 }).join(' '); |
303 }, | 313 }, |
304 | 314 |
305 _getClassNames: function() { | 315 _getClassNames: function() { |
306 return this._mergeClasses({ | 316 return this._mergeClasses({ |
307 disabled: this.disabled, | 317 disabled: this.disabled, |
308 pin: this.pin, | 318 pin: this.pin, |
309 snaps: this.snaps, | 319 snaps: this.snaps, |
310 ring: this.immediateValue <= this.min, | 320 ring: this.immediateValue <= this.min, |
311 expand: this.expand, | 321 expand: this.expand, |
312 dragging: this.dragging, | 322 dragging: this.dragging, |
313 transiting: this.transiting, | 323 transiting: this.transiting, |
314 editable: this.editable | 324 editable: this.editable |
315 }); | 325 }); |
316 }, | 326 }, |
317 | 327 |
328 get _isRTL() { | |
329 if (this.__isRTL === undefined) { | |
330 this.__isRTL = window.getComputedStyle(this)['direction'] === 'rtl'; | |
331 } | |
332 return this.__isRTL; | |
333 }, | |
334 | |
335 _leftKey: function(event) { | |
336 if (this._isRTL) | |
337 this._incrementKey(event); | |
338 else | |
339 this._decrementKey(event); | |
340 }, | |
341 | |
342 _rightKey: function(event) { | |
343 if (this._isRTL) | |
344 this._decrementKey(event); | |
345 else | |
346 this._incrementKey(event); | |
347 }, | |
348 | |
318 _incrementKey: function(event) { | 349 _incrementKey: function(event) { |
319 if (!this.disabled) { | 350 if (!this.disabled) { |
320 if (event.detail.key === 'end') { | 351 if (event.detail.key === 'end') { |
321 this.value = this.max; | 352 this.value = this.max; |
322 } else { | 353 } else { |
323 this.increment(); | 354 this.increment(); |
324 } | 355 } |
325 this.fire('change'); | 356 this.fire('change'); |
326 event.preventDefault(); | 357 event.preventDefault(); |
327 } | 358 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
391 */ | 422 */ |
392 | 423 |
393 /** | 424 /** |
394 * Fired when the slider's value changes due to user interaction. | 425 * Fired when the slider's value changes due to user interaction. |
395 * | 426 * |
396 * Changes to the slider's value due to changes in an underlying | 427 * Changes to the slider's value due to changes in an underlying |
397 * bound variable will not trigger this event. | 428 * bound variable will not trigger this event. |
398 * | 429 * |
399 * @event change | 430 * @event change |
400 */ | 431 */ |
OLD | NEW |