Blame view

bower_components/paper-slider/paper-slider.html 21.5 KB
73bcce88   luigser   COMPONENTS
1
2
3
4
5
6
7
8
9
10
11
  <!--
  @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.txt
  The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
  The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
  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.txt
  -->
  
  <link rel="import" href="../polymer/polymer.html">
73bcce88   luigser   COMPONENTS
12
  <link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
a1a3bc73   Luigi Serra   graphs updates
13
  <link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
73bcce88   luigser   COMPONENTS
14
  <link rel="import" href="../iron-form-element-behavior/iron-form-element-behavior.html">
a1a3bc73   Luigi Serra   graphs updates
15
16
17
18
19
  <link rel="import" href="../iron-range-behavior/iron-range-behavior.html">
  <link rel="import" href="../paper-behaviors/paper-inky-focus-behavior.html">
  <link rel="import" href="../paper-input/paper-input.html">
  <link rel="import" href="../paper-progress/paper-progress.html">
  <link rel="import" href="../paper-styles/color.html">
73bcce88   luigser   COMPONENTS
20
21
  
  <!--
eb240478   Luigi Serra   public room cards...
22
23
  Material design: [Sliders](https://www.google.com/design/spec/components/sliders.html)
  
73bcce88   luigser   COMPONENTS
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  `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
  
  The following custom properties and mixins are available for styling:
  
  Custom property | Description | Default
  ----------------|-------------|----------
  `--paper-slider-bar-color` | The background color of the slider | `transparent`
  `--paper-slider-active-color` | The progress bar color | `--google-blue-700`
  `--paper-slider-secondary-color` | The secondary progress bar color | `--google-blue-300`
  `--paper-slider-knob-color` | The knob color | `--google-blue-700`
a1a3bc73   Luigi Serra   graphs updates
49
  `--paper-slider-disabled-knob-color` | The disabled knob color | `--paper-grey-400`
73bcce88   luigser   COMPONENTS
50
51
  `--paper-slider-pin-color` | The pin color | `--google-blue-700`
  `--paper-slider-font-color` | The pin's text color | `#fff`
a1a3bc73   Luigi Serra   graphs updates
52
53
  `--paper-slider-disabled-active-color` | The disabled progress bar color | `--paper-grey-400`
  `--paper-slider-disabled-secondary-color` | The disabled secondary progress bar color | `--paper-grey-400`
73bcce88   luigser   COMPONENTS
54
  `--paper-slider-knob-start-color` | The fill color of the knob at the far left | `transparent`
a1a3bc73   Luigi Serra   graphs updates
55
56
  `--paper-slider-knob-start-border-color` | The border color of the knob at the far left | `--paper-grey-400`
  `--paper-slider-pin-start-color` | The color of the pin at the far left | `--paper-grey-400`
73bcce88   luigser   COMPONENTS
57
  `--paper-slider-height` | Height of the progress bar | `2px`
a1a3bc73   Luigi Serra   graphs updates
58
  `--paper-slider-input` | Mixin applied to the input in editable mode | `{}`
73bcce88   luigser   COMPONENTS
59
60
61
62
63
64
65
66
  
  @group Paper Elements
  @element paper-slider
  @demo demo/index.html
  @hero hero.svg
  -->
  
  <dom-module id="paper-slider">
eb240478   Luigi Serra   public room cards...
67
68
69
    <template strip-whitespace>
      <style>
        :host {
a1a3bc73   Luigi Serra   graphs updates
70
71
72
          @apply(--layout);
          @apply(--layout-justified);
          @apply(--layout-center);
eb240478   Luigi Serra   public room cards...
73
74
75
76
77
78
79
80
81
          width: 200px;
          cursor: default;
          -webkit-user-select: none;
          -moz-user-select: none;
          -ms-user-select: none;
          user-select: none;
          -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
          --paper-progress-active-color: var(--paper-slider-active-color, --google-blue-700);
          --paper-progress-secondary-color: var(--paper-slider-secondary-color, --google-blue-300);
a1a3bc73   Luigi Serra   graphs updates
82
83
          --paper-progress-disabled-active-color: var(--paper-slider-disabled-active-color, --paper-grey-400);
          --paper-progress-disabled-secondary-color: var(--paper-slider-disabled-secondary-color, --paper-grey-400);
eb240478   Luigi Serra   public room cards...
84
85
86
87
88
89
90
91
92
        }
  
        /* focus shows the ripple */
        :host(:focus) {
          outline: none;
        }
  
        #sliderContainer {
          position: relative;
a1a3bc73   Luigi Serra   graphs updates
93
94
95
96
          width: 100%;
          height: calc(30px + var(--paper-slider-height, 2px));
          margin-left: calc(15px + var(--paper-slider-height, 2px)/2);
          margin-right: calc(15px + var(--paper-slider-height, 2px)/2);
eb240478   Luigi Serra   public room cards...
97
98
99
100
101
102
103
        }
  
        #sliderContainer:focus {
          outline: 0;
        }
  
        #sliderContainer.editable {
a1a3bc73   Luigi Serra   graphs updates
104
105
          margin-top: 12px;
          margin-bottom: 12px;
eb240478   Luigi Serra   public room cards...
106
107
108
109
110
        }
  
        .bar-container {
          position: absolute;
          top: 0;
a1a3bc73   Luigi Serra   graphs updates
111
112
113
          bottom: 0;
          left: 0;
          right: 0;
eb240478   Luigi Serra   public room cards...
114
115
116
117
          overflow: hidden;
        }
  
        .ring > .bar-container {
a1a3bc73   Luigi Serra   graphs updates
118
119
          left: calc(5px + var(--paper-slider-height, 2px)/2);
          transition: left 0.18s ease;
eb240478   Luigi Serra   public room cards...
120
121
122
123
124
125
        }
  
        .ring.expand.dragging > .bar-container {
          transition: none;
        }
  
a1a3bc73   Luigi Serra   graphs updates
126
127
128
129
        .ring.expand:not(.pin) > .bar-container {
          left: calc(8px + var(--paper-slider-height, 2px)/2);
        }
  
eb240478   Luigi Serra   public room cards...
130
        #sliderBar {
a1a3bc73   Luigi Serra   graphs updates
131
          padding: 15px 0;
eb240478   Luigi Serra   public room cards...
132
          width: 100%;
eb240478   Luigi Serra   public room cards...
133
          background-color: var(--paper-slider-bar-color, transparent);
a1a3bc73   Luigi Serra   graphs updates
134
          --paper-progress-container-color: var(--paper-grey-400);
eb240478   Luigi Serra   public room cards...
135
136
137
          --paper-progress-height: var(--paper-slider-height, 2px);
        }
  
eb240478   Luigi Serra   public room cards...
138
139
        .slider-markers {
          position: absolute;
a1a3bc73   Luigi Serra   graphs updates
140
141
142
143
          top: calc(14px + var(--paper-slider-height,2px)/2);
          height: var(--paper-slider-height, 2px);
          left: 0;
          right: -1px;
eb240478   Luigi Serra   public room cards...
144
145
          box-sizing: border-box;
          pointer-events: none;
a1a3bc73   Luigi Serra   graphs updates
146
          @apply(--layout-horizontal);
eb240478   Luigi Serra   public room cards...
147
148
        }
  
a1a3bc73   Luigi Serra   graphs updates
149
150
151
        .slider-marker {
          @apply(--layout-flex);
        }
eb240478   Luigi Serra   public room cards...
152
153
154
155
        .slider-markers::after,
        .slider-marker::after {
          content: "";
          display: block;
a1a3bc73   Luigi Serra   graphs updates
156
          margin-left: -1px;
eb240478   Luigi Serra   public room cards...
157
158
159
160
161
162
163
          width: 2px;
          height: 2px;
          border-radius: 50%;
          background-color: black;
        }
  
        #sliderKnob {
eb240478   Luigi Serra   public room cards...
164
165
166
          position: absolute;
          left: 0;
          top: 0;
a1a3bc73   Luigi Serra   graphs updates
167
168
169
          margin-left: calc(-15px - var(--paper-slider-height, 2px)/2);
          width: calc(30px + var(--paper-slider-height, 2px));
          height: calc(30px + var(--paper-slider-height, 2px));
eb240478   Luigi Serra   public room cards...
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
        }
  
        .transiting > #sliderKnob {
          transition: left 0.08s ease;
        }
  
        #sliderKnob:focus {
          outline: none;
        }
  
        #sliderKnob.dragging {
          transition: none;
        }
  
        .snaps > #sliderKnob.dragging {
          transition: -webkit-transform 0.08s ease;
          transition: transform 0.08s ease;
        }
  
        #sliderKnobInner {
a1a3bc73   Luigi Serra   graphs updates
190
191
192
          margin: 10px;
          width: calc(100% - 20px);
          height: calc(100% - 20px);
eb240478   Luigi Serra   public room cards...
193
          background-color: var(--paper-slider-knob-color, --google-blue-700);
a1a3bc73   Luigi Serra   graphs updates
194
195
          border: 2px solid var(--paper-slider-knob-color, --google-blue-700);
          border-radius: 50%;
eb240478   Luigi Serra   public room cards...
196
197
198
199
  
          -moz-box-sizing: border-box;
          box-sizing: border-box;
  
a1a3bc73   Luigi Serra   graphs updates
200
201
202
          transition-property: -webkit-transform, background-color, border;
          transition-property: transform, background-color, border;
          transition-duration: 0.18s;
eb240478   Luigi Serra   public room cards...
203
204
205
206
          transition-timing-function: ease;
        }
  
        .expand:not(.pin) > #sliderKnob > #sliderKnobInner {
a1a3bc73   Luigi Serra   graphs updates
207
208
          -webkit-transform: scale(1.5);
          transform: scale(1.5);
eb240478   Luigi Serra   public room cards...
209
210
211
212
        }
  
        .ring > #sliderKnob > #sliderKnobInner {
          background-color: var(--paper-slider-knob-start-color, transparent);
a1a3bc73   Luigi Serra   graphs updates
213
          border: 2px solid var(--paper-slider-knob-start-border-color, --paper-grey-400);
eb240478   Luigi Serra   public room cards...
214
215
216
217
218
219
220
221
222
223
        }
  
        #sliderKnobInner::before {
          background-color: var(--paper-slider-pin-color, --google-blue-700);
        }
  
        .pin > #sliderKnob > #sliderKnobInner::before {
          content: "";
          position: absolute;
          top: 0;
a1a3bc73   Luigi Serra   graphs updates
224
225
          left: 50%;
          margin-left: -13px;
eb240478   Luigi Serra   public room cards...
226
227
          width: 26px;
          height: 26px;
eb240478   Luigi Serra   public room cards...
228
229
230
231
232
233
234
235
          border-radius: 50% 50% 50% 0;
  
          -webkit-transform: rotate(-45deg) scale(0) translate(0);
          transform: rotate(-45deg) scale(0) translate(0);
        }
  
        #sliderKnobInner::before,
        #sliderKnobInner::after {
a1a3bc73   Luigi Serra   graphs updates
236
237
          transition: -webkit-transform .18s ease, background-color .18s ease;
          transition: transform .18s ease, background-color .18s ease;
eb240478   Luigi Serra   public room cards...
238
239
240
        }
  
        .pin.ring > #sliderKnob > #sliderKnobInner::before {
a1a3bc73   Luigi Serra   graphs updates
241
          background-color: var(--paper-slider-pin-start-color, --paper-grey-400);
eb240478   Luigi Serra   public room cards...
242
243
244
245
246
247
248
249
250
251
252
        }
  
        .pin.expand > #sliderKnob > #sliderKnobInner::before {
          -webkit-transform: rotate(-45deg) scale(1) translate(17px, -17px);
          transform: rotate(-45deg) scale(1) translate(17px, -17px);
        }
  
        .pin > #sliderKnob > #sliderKnobInner::after {
          content: attr(value);
          position: absolute;
          top: 0;
a1a3bc73   Luigi Serra   graphs updates
253
254
          left: 50%;
          margin-left: -16px;
eb240478   Luigi Serra   public room cards...
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
          width: 32px;
          height: 26px;
          text-align: center;
          color: var(--paper-slider-font-color, #fff);
          font-size: 10px;
  
          -webkit-transform: scale(0) translate(0);
          transform: scale(0) translate(0);
        }
  
        .pin.expand > #sliderKnob > #sliderKnobInner::after {
          -webkit-transform: scale(1) translate(0, -17px);
          transform: scale(1) translate(0, -17px);
        }
  
        /* paper-input */
        .slider-input {
          width: 50px;
eb240478   Luigi Serra   public room cards...
273
274
275
276
          overflow: hidden;
          --paper-input-container-input: {
            text-align: center;
          };
a1a3bc73   Luigi Serra   graphs updates
277
          @apply(--paper-slider-input);
eb240478   Luigi Serra   public room cards...
278
        }
73bcce88   luigser   COMPONENTS
279
  
eb240478   Luigi Serra   public room cards...
280
281
282
283
284
285
        /* disabled state */
        #sliderContainer.disabled {
          pointer-events: none;
        }
  
        .disabled > #sliderKnob > #sliderKnobInner {
a1a3bc73   Luigi Serra   graphs updates
286
287
288
289
          background-color: var(--paper-slider-disabled-knob-color, --paper-grey-400);
          border: 2px solid var(--paper-slider-disabled-knob-color, --paper-grey-400);
          -webkit-transform: scale3d(0.75, 0.75, 1);
          transform: scale3d(0.75, 0.75, 1);
eb240478   Luigi Serra   public room cards...
290
291
292
        }
  
        .disabled.ring > #sliderKnob > #sliderKnobInner {
a1a3bc73   Luigi Serra   graphs updates
293
294
          background-color: var(--paper-slider-knob-start-color, transparent);
          border: 2px solid var(--paper-slider-knob-start-border-color, --paper-grey-400);
eb240478   Luigi Serra   public room cards...
295
296
297
298
299
        }
  
        paper-ripple {
          color: var(--paper-slider-knob-color, --google-blue-700);
        }
eb240478   Luigi Serra   public room cards...
300
      </style>
a1a3bc73   Luigi Serra   graphs updates
301
  
73bcce88   luigser   COMPONENTS
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
      <div id="sliderContainer"
        class$="[[_getClassNames(disabled, pin, snaps, immediateValue, min, expand, dragging, transiting, editable)]]">
  
        <div class="bar-container">
          <paper-progress
            disabled$="[[disabled]]"
            id="sliderBar"
            aria-hidden="true"
            min="[[min]]"
            max="[[max]]"
            step="[[step]]"
            value="[[immediateValue]]"
            secondary-progress="[[secondaryProgress]]"
            on-down="_bardown"
            on-up="_resetKnob"
            on-track="_onTrack">
          </paper-progress>
        </div>
  
        <template is="dom-if" if="[[snaps]]">
a1a3bc73   Luigi Serra   graphs updates
322
          <div class="slider-markers">
73bcce88   luigser   COMPONENTS
323
            <template is="dom-repeat" items="[[markers]]">
a1a3bc73   Luigi Serra   graphs updates
324
              <div class="slider-marker"></div>
73bcce88   luigser   COMPONENTS
325
326
327
328
329
            </template>
          </div>
        </template>
  
        <div id="sliderKnob"
73bcce88   luigser   COMPONENTS
330
331
332
333
          on-down="_knobdown"
          on-up="_resetKnob"
          on-track="_onTrack"
          on-transitionend="_knobTransitionEnd">
73bcce88   luigser   COMPONENTS
334
335
336
            <div id="sliderKnobInner" value$="[[immediateValue]]"></div>
        </div>
      </div>
a1a3bc73   Luigi Serra   graphs updates
337
  
73bcce88   luigser   COMPONENTS
338
339
340
      <template is="dom-if" if="[[editable]]">
        <paper-input
          id="input"
eb240478   Luigi Serra   public room cards...
341
342
343
344
          type="number"
          step="[[step]]"
          min="[[min]]"
          max="[[max]]"
73bcce88   luigser   COMPONENTS
345
346
          class="slider-input"
          disabled$="[[disabled]]"
eb240478   Luigi Serra   public room cards...
347
348
349
350
          value="[[immediateValue]]"
          on-change="_changeValue"
          on-keydown="_inputKeyDown"
          no-label-float>
73bcce88   luigser   COMPONENTS
351
352
353
        </paper-input>
      </template>
    </template>
73bcce88   luigser   COMPONENTS
354
  
a1a3bc73   Luigi Serra   graphs updates
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
    <script>
      Polymer({
        is: 'paper-slider',
  
        behaviors: [
          Polymer.IronA11yKeysBehavior,
          Polymer.IronFormElementBehavior,
          Polymer.PaperInkyFocusBehavior,
          Polymer.IronRangeBehavior
        ],
  
        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,
            notify: 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: {
            type: Array,
            readOnly: true,
            value: []
          },
        },
73bcce88   luigser   COMPONENTS
457
  
a1a3bc73   Luigi Serra   graphs updates
458
459
460
461
462
        observers: [
          '_updateKnob(value, min, max, snaps, step)',
          '_valueChanged(value)',
          '_immediateValueChanged(immediateValue)'
        ],
73bcce88   luigser   COMPONENTS
463
  
a1a3bc73   Luigi Serra   graphs updates
464
465
466
467
        hostAttributes: {
          role: 'slider',
          tabindex: 0
        },
73bcce88   luigser   COMPONENTS
468
  
a1a3bc73   Luigi Serra   graphs updates
469
470
471
        keyBindings: {
          'left down pagedown home': '_decrementKey',
          'right up pageup end': '_incrementKey'
73bcce88   luigser   COMPONENTS
472
473
        },
  
a1a3bc73   Luigi Serra   graphs updates
474
475
476
477
478
        ready: function() {
          // issue polymer/polymer#1305
          this.async(function() {
            this._updateKnob(this.value);
          }, 1);
73bcce88   luigser   COMPONENTS
479
480
481
        },
  
        /**
a1a3bc73   Luigi Serra   graphs updates
482
483
         * Increases value by `step` but not above `max`.
         * @method increment
73bcce88   luigser   COMPONENTS
484
         */
a1a3bc73   Luigi Serra   graphs updates
485
486
        increment: function() {
          this.value = this._clampValue(this.value + this.step);
73bcce88   luigser   COMPONENTS
487
488
489
        },
  
        /**
a1a3bc73   Luigi Serra   graphs updates
490
491
         * Decreases value by `step` but not below `min`.
         * @method decrement
73bcce88   luigser   COMPONENTS
492
         */
a1a3bc73   Luigi Serra   graphs updates
493
494
        decrement: function() {
          this.value = this._clampValue(this.value - this.step);
73bcce88   luigser   COMPONENTS
495
496
        },
  
a1a3bc73   Luigi Serra   graphs updates
497
498
499
500
501
502
        _updateKnob: function(value, min, max, snaps, step) {
          this.setAttribute('aria-valuemin', min);
          this.setAttribute('aria-valuemax', max);
          this.setAttribute('aria-valuenow', value);
  
          this._positionKnob(this._calcRatio(value));
73bcce88   luigser   COMPONENTS
503
504
        },
  
a1a3bc73   Luigi Serra   graphs updates
505
506
        _valueChanged: function() {
          this.fire('value-change');
73bcce88   luigser   COMPONENTS
507
508
        },
  
a1a3bc73   Luigi Serra   graphs updates
509
510
511
512
513
514
        _immediateValueChanged: function() {
          if (this.dragging) {
            this.fire('immediate-value-change');
          } else {
            this.value = this.immediateValue;
          }
73bcce88   luigser   COMPONENTS
515
516
        },
  
a1a3bc73   Luigi Serra   graphs updates
517
518
        _secondaryProgressChanged: function() {
          this.secondaryProgress = this._clampValue(this.secondaryProgress);
73bcce88   luigser   COMPONENTS
519
520
        },
  
a1a3bc73   Luigi Serra   graphs updates
521
522
        _expandKnob: function() {
          this._setExpand(true);
73bcce88   luigser   COMPONENTS
523
524
        },
  
a1a3bc73   Luigi Serra   graphs updates
525
526
527
        _resetKnob: function() {
          this.cancelDebouncer('expandKnob');
          this._setExpand(false);
73bcce88   luigser   COMPONENTS
528
        },
73bcce88   luigser   COMPONENTS
529
  
a1a3bc73   Luigi Serra   graphs updates
530
531
532
        _positionKnob: function(ratio) {
          this._setImmediateValue(this._calcStep(this._calcKnobPosition(ratio)));
          this._setRatio(this._calcRatio(this.immediateValue));
73bcce88   luigser   COMPONENTS
533
  
a1a3bc73   Luigi Serra   graphs updates
534
535
536
537
538
539
          this.$.sliderKnob.style.left = (this.ratio * 100) + '%';
          if (this.dragging) {
            this._knobstartx = this.ratio * this._w;
            this.translate3d(0, 0, 0, this.$.sliderKnob);
          }
        },
73bcce88   luigser   COMPONENTS
540
  
a1a3bc73   Luigi Serra   graphs updates
541
542
543
        _calcKnobPosition: function(ratio) {
          return (this.max - this.min) * ratio + this.min;
        },
73bcce88   luigser   COMPONENTS
544
  
a1a3bc73   Luigi Serra   graphs updates
545
546
547
548
549
550
551
552
553
554
555
556
557
558
        _onTrack: function(event) {
          event.stopPropagation();
          switch (event.detail.state) {
            case 'start':
              this._trackStart(event);
              break;
            case 'track':
              this._trackX(event);
              break;
            case 'end':
              this._trackEnd();
              break;
          }
        },
73bcce88   luigser   COMPONENTS
559
  
a1a3bc73   Luigi Serra   graphs updates
560
561
562
563
564
565
566
567
568
569
        _trackStart: function(event) {
          this._w = this.$.sliderBar.offsetWidth;
          this._x = this.ratio * this._w;
          this._startx = this._x;
          this._knobstartx = this._startx;
          this._minx = - this._startx;
          this._maxx = this._w - this._startx;
          this.$.sliderKnob.classList.add('dragging');
          this._setDragging(true);
        },
73bcce88   luigser   COMPONENTS
570
  
a1a3bc73   Luigi Serra   graphs updates
571
572
573
574
        _trackX: function(e) {
          if (!this.dragging) {
            this._trackStart(e);
          }
73bcce88   luigser   COMPONENTS
575
  
a1a3bc73   Luigi Serra   graphs updates
576
577
          var dx = Math.min(this._maxx, Math.max(this._minx, e.detail.dx));
          this._x = this._startx + dx;
73bcce88   luigser   COMPONENTS
578
  
a1a3bc73   Luigi Serra   graphs updates
579
580
          var immediateValue = this._calcStep(this._calcKnobPosition(this._x / this._w));
          this._setImmediateValue(immediateValue);
73bcce88   luigser   COMPONENTS
581
  
a1a3bc73   Luigi Serra   graphs updates
582
583
584
585
          // update knob's position
          var translateX = ((this._calcRatio(this.immediateValue) * this._w) - this._knobstartx);
          this.translate3d(translateX + 'px', 0, 0, this.$.sliderKnob);
        },
73bcce88   luigser   COMPONENTS
586
  
a1a3bc73   Luigi Serra   graphs updates
587
588
        _trackEnd: function() {
          var s = this.$.sliderKnob.style;
73bcce88   luigser   COMPONENTS
589
  
a1a3bc73   Luigi Serra   graphs updates
590
591
592
593
          this.$.sliderKnob.classList.remove('dragging');
          this._setDragging(false);
          this._resetKnob();
          this.value = this.immediateValue;
73bcce88   luigser   COMPONENTS
594
  
a1a3bc73   Luigi Serra   graphs updates
595
          s.transform = s.webkitTransform = '';
73bcce88   luigser   COMPONENTS
596
  
a1a3bc73   Luigi Serra   graphs updates
597
598
          this.fire('change');
        },
73bcce88   luigser   COMPONENTS
599
  
a1a3bc73   Luigi Serra   graphs updates
600
601
        _knobdown: function(event) {
          this._expandKnob();
73bcce88   luigser   COMPONENTS
602
  
a1a3bc73   Luigi Serra   graphs updates
603
604
          // cancel selection
          event.preventDefault();
73bcce88   luigser   COMPONENTS
605
  
a1a3bc73   Luigi Serra   graphs updates
606
607
608
          // set the focus manually because we will called prevent default
          this.focus();
        },
73bcce88   luigser   COMPONENTS
609
  
a1a3bc73   Luigi Serra   graphs updates
610
611
612
613
614
        _bardown: function(event) {
          this._w = this.$.sliderBar.offsetWidth;
          var rect = this.$.sliderBar.getBoundingClientRect();
          var ratio = (event.detail.x - rect.left) / this._w;
          var prevRatio = this.ratio;
73bcce88   luigser   COMPONENTS
615
  
a1a3bc73   Luigi Serra   graphs updates
616
          this._setTransiting(true);
73bcce88   luigser   COMPONENTS
617
  
a1a3bc73   Luigi Serra   graphs updates
618
          this._positionKnob(ratio);
73bcce88   luigser   COMPONENTS
619
  
a1a3bc73   Luigi Serra   graphs updates
620
          this.debounce('expandKnob', this._expandKnob, 60);
73bcce88   luigser   COMPONENTS
621
  
a1a3bc73   Luigi Serra   graphs updates
622
623
624
          // if the ratio doesn't change, sliderKnob's animation won't start
          // and `_knobTransitionEnd` won't be called
          // Therefore, we need to manually update the `transiting` state
73bcce88   luigser   COMPONENTS
625
  
a1a3bc73   Luigi Serra   graphs updates
626
627
628
          if (prevRatio === this.ratio) {
            this._setTransiting(false);
          }
73bcce88   luigser   COMPONENTS
629
  
a1a3bc73   Luigi Serra   graphs updates
630
631
632
          this.async(function() {
            this.fire('change');
          });
73bcce88   luigser   COMPONENTS
633
  
a1a3bc73   Luigi Serra   graphs updates
634
635
636
          // cancel selection
          event.preventDefault();
        },
73bcce88   luigser   COMPONENTS
637
  
a1a3bc73   Luigi Serra   graphs updates
638
639
640
641
642
        _knobTransitionEnd: function(event) {
          if (event.target === this.$.sliderKnob) {
            this._setTransiting(false);
          }
        },
73bcce88   luigser   COMPONENTS
643
  
a1a3bc73   Luigi Serra   graphs updates
644
645
646
647
648
649
650
651
652
653
        _maxMarkersChanged: function(maxMarkers) {
          if (!this.snaps) {
            this._setMarkers([]);
          }
          var steps = Math.floor((this.max - this.min) / this.step);
          if (steps > maxMarkers) {
            steps = maxMarkers;
          }
          this._setMarkers(new Array(steps));
        },
73bcce88   luigser   COMPONENTS
654
  
a1a3bc73   Luigi Serra   graphs updates
655
656
657
658
659
660
        _mergeClasses: function(classes) {
          return Object.keys(classes).filter(
            function(className) {
              return classes[className];
            }).join(' ');
        },
73bcce88   luigser   COMPONENTS
661
  
a1a3bc73   Luigi Serra   graphs updates
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
        _getClassNames: function() {
          return this._mergeClasses({
            disabled: this.disabled,
            pin: this.pin,
            snaps: this.snaps,
            ring: this.immediateValue <= this.min,
            expand: this.expand,
            dragging: this.dragging,
            transiting: this.transiting,
            editable: this.editable
          });
        },
  
        _incrementKey: function(event) {
          if (!this.disabled) {
            if (event.detail.key === 'end') {
              this.value = this.max;
            } else {
              this.increment();
            }
            this.fire('change');
eb240478   Luigi Serra   public room cards...
683
          }
a1a3bc73   Luigi Serra   graphs updates
684
        },
73bcce88   luigser   COMPONENTS
685
  
a1a3bc73   Luigi Serra   graphs updates
686
687
688
689
690
691
692
693
        _decrementKey: function(event) {
          if (!this.disabled) {
            if (event.detail.key === 'home') {
              this.value = this.min;
            } else {
              this.decrement();
            }
            this.fire('change');
eb240478   Luigi Serra   public room cards...
694
          }
a1a3bc73   Luigi Serra   graphs updates
695
        },
eb240478   Luigi Serra   public room cards...
696
  
a1a3bc73   Luigi Serra   graphs updates
697
698
699
700
        _changeValue: function(event) {
          this.value = event.target.value;
          this.fire('change');
        },
eb240478   Luigi Serra   public room cards...
701
  
a1a3bc73   Luigi Serra   graphs updates
702
703
704
        _inputKeyDown: function(event) {
          event.stopPropagation();
        },
eb240478   Luigi Serra   public room cards...
705
  
a1a3bc73   Luigi Serra   graphs updates
706
707
708
709
710
        // create the element ripple inside the `sliderKnob`
        _createRipple: function() {
          this._rippleContainer = this.$.sliderKnob;
          return Polymer.PaperInkyFocusBehaviorImpl._createRipple.call(this);
        },
eb240478   Luigi Serra   public room cards...
711
  
a1a3bc73   Luigi Serra   graphs updates
712
713
714
715
        // Hide the ripple when user is not interacting with keyboard.
        // This behavior is different from other ripple-y controls, but is
        // according to spec: https://www.google.com/design/spec/components/sliders.html
        _focusedChanged: function(receivedFocusFromKeyboard) {
eb240478   Luigi Serra   public room cards...
716
          if (receivedFocusFromKeyboard) {
a1a3bc73   Luigi Serra   graphs updates
717
718
719
720
721
722
723
724
725
726
            this.ensureRipple();
          }
          if (this.hasRipple()) {
            // note, ripple must be un-hidden prior to setting `holdDown`
            if (receivedFocusFromKeyboard) {
              this._ripple.removeAttribute('hidden');
            } else {
              this._ripple.setAttribute('hidden', '');
            }
            this._ripple.holdDown = receivedFocusFromKeyboard;
eb240478   Luigi Serra   public room cards...
727
          }
a1a3bc73   Luigi Serra   graphs updates
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
        }
      });
  
      /**
       * 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
       */
    </script>
  </dom-module>