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

Side by Side Diff: lib/src/paper-slider/paper-slider.html

Issue 1418513006: update elements and fix some bugs (Closed) Base URL: git@github.com:dart-lang/polymer_elements.git@master
Patch Set: code review updates Created 5 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « lib/src/paper-slider/paper-slider.css ('k') | lib/src/paper-slider/test/a11y.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <!-- 1 <!--
2 @license 2 @license
3 Copyright (c) 2015 The Polymer Project Authors. All rights reserved. 3 Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
4 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt 4 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt
5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
6 The complete set of contributors may be found at http://polymer.github.io/CONTRI BUTORS.txt 6 The complete set of contributors may be found at http://polymer.github.io/CONTRI BUTORS.txt
7 Code distributed by Google as part of the polymer project is also 7 Code distributed by Google as part of the polymer project is also
8 subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt 8 subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt
9 --> 9 -->
10 10
11 <link rel="import" href="../polymer/polymer.html"> 11 <link rel="import" href="../polymer/polymer.html">
12 <link rel="import" href="../paper-styles/paper-styles.html"> 12 <link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
13 <link rel="import" href="../paper-styles/color.html">
13 <link rel="import" href="../paper-progress/paper-progress.html"> 14 <link rel="import" href="../paper-progress/paper-progress.html">
14 <link rel="import" href="../paper-input/paper-input.html"> 15 <link rel="import" href="../paper-input/paper-input.html">
15 <link rel="import" href="../paper-behaviors/paper-inky-focus-behavior.html"> 16 <link rel="import" href="../paper-behaviors/paper-inky-focus-behavior.html">
16 <link rel="import" href="../paper-ripple/paper-ripple.html"> 17 <link rel="import" href="../paper-ripple/paper-ripple.html">
17 <link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html "> 18 <link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html ">
18 <link rel="import" href="../iron-range-behavior/iron-range-behavior.html"> 19 <link rel="import" href="../iron-range-behavior/iron-range-behavior.html">
19 <link rel="import" href="../iron-form-element-behavior/iron-form-element-behavio r.html"> 20 <link rel="import" href="../iron-form-element-behavior/iron-form-element-behavio r.html">
20 21
21 <!-- 22 <!--
23 Material design: [Sliders](https://www.google.com/design/spec/components/sliders .html)
24
22 `paper-slider` allows user to select a value from a range of values by 25 `paper-slider` allows user to select a value from a range of values by
23 moving the slider thumb. The interactive nature of the slider makes it a 26 moving the slider thumb. The interactive nature of the slider makes it a
24 great choice for settings that reflect intensity levels, such as volume, 27 great choice for settings that reflect intensity levels, such as volume,
25 brightness, or color saturation. 28 brightness, or color saturation.
26 29
27 Example: 30 Example:
28 31
29 <paper-slider></paper-slider> 32 <paper-slider></paper-slider>
30 33
31 Use `min` and `max` to specify the slider range. Default is 0 to 100. 34 Use `min` and `max` to specify the slider range. Default is 0 to 100.
(...skipping 22 matching lines...) Expand all
54 `--paper-slider-pin-start-color` | The color of the pin at the far left | `#c8c8 c8` 57 `--paper-slider-pin-start-color` | The color of the pin at the far left | `#c8c8 c8`
55 `--paper-slider-height` | Height of the progress bar | `2px` 58 `--paper-slider-height` | Height of the progress bar | `2px`
56 59
57 @group Paper Elements 60 @group Paper Elements
58 @element paper-slider 61 @element paper-slider
59 @demo demo/index.html 62 @demo demo/index.html
60 @hero hero.svg 63 @hero hero.svg
61 --> 64 -->
62 65
63 <dom-module id="paper-slider"> 66 <dom-module id="paper-slider">
64 67 <template strip-whitespace>
65 <link rel="import" type="css" href="paper-slider.css"> 68 <style>
66 69 :host {
67 <template> 70 display: inline-block;
71 width: 200px;
72 cursor: default;
73 -webkit-user-select: none;
74 -moz-user-select: none;
75 -ms-user-select: none;
76 user-select: none;
77 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
78 --paper-progress-active-color: var(--paper-slider-active-color, --google -blue-700);
79 --paper-progress-secondary-color: var(--paper-slider-secondary-color, -- google-blue-300);
80 --paper-progress-disabled-active-color: var(--paper-slider-disabled-acti ve-color, --google-grey-500);
81 --paper-progress-disabled-secondary-color: var(--paper-slider-disabled-s econdary-color, --google-grey-300);
82 }
83
84 /* focus shows the ripple */
85 :host(:focus) {
86 outline: none;
87 }
88
89 #sliderContainer {
90 position: relative;
91 width: calc(100% - 32px);
92 height: 32px;
93 }
94
95 #sliderContainer:focus {
96 outline: 0;
97 }
98
99 #sliderContainer.editable {
100 float: left;
101 width: calc(100% - 72px);
102 margin: 12px 0;
103 }
104
105 .bar-container {
106 position: absolute;
107 top: 0;
108 left: 16px;
109 height: 100%;
110 width: 100%;
111 overflow: hidden;
112 }
113
114 .ring > .bar-container {
115 left: 20px;
116 width: calc(100% - 4px);
117 transition: left 0.18s ease, width 0.18s ease;
118 }
119
120 .ring.expand:not(.pin) > .bar-container {
121 left: 30px;
122 width: calc(100% - 14px);
123 }
124
125 .ring.expand.dragging > .bar-container {
126 transition: none;
127 }
128
129 #sliderBar {
130 position: absolute;
131 top: 15px;
132 left: 0;
133 width: 100%;
134 padding: 8px 0;
135 margin: -8px 0;
136 background-color: var(--paper-slider-bar-color, transparent);
137 --paper-progress-height: var(--paper-slider-height, 2px);
138 }
139
140 .ring #sliderBar {
141 left: -4px;
142 width: calc(100% + 4px);
143 }
144
145 .ring.expand:not(.pin) #sliderBar {
146 left: -14px;
147 width: calc(100% + 14px);
148 }
149
150 .slider-markers {
151 position: absolute;
152 top: 15px;
153 left: 15px;
154 height: 2px;
155 width: calc(100% + 2px);
156 box-sizing: border-box;
157 pointer-events: none;
158 }
159
160 .slider-markers::after,
161 .slider-marker::after {
162 content: "";
163 display: block;
164 width: 2px;
165 height: 2px;
166 border-radius: 50%;
167 background-color: black;
168 }
169
170 #sliderKnob {
171 @apply(--layout-center-justified);
172 @apply(--layout-center);
173 @apply(--layout-horizontal);
174
175 position: absolute;
176 left: 0;
177 top: 0;
178 width: 32px;
179 height: 32px;
180 }
181
182 .transiting > #sliderKnob {
183 transition: left 0.08s ease;
184 }
185
186 #sliderKnob:focus {
187 outline: none;
188 }
189
190 #sliderKnob.dragging {
191 transition: none;
192 }
193
194 .snaps > #sliderKnob.dragging {
195 transition: -webkit-transform 0.08s ease;
196 transition: transform 0.08s ease;
197 }
198
199 #sliderKnobInner {
200 width: 12px;
201 height: 12px;
202 border-radius: 50%;
203 background-color: var(--paper-slider-knob-color, --google-blue-700);
204
205 -moz-box-sizing: border-box;
206 box-sizing: border-box;
207
208 transition-property: height, width, background-color, border;
209 transition-duration: 0.1s;
210 transition-timing-function: ease;
211 }
212
213 .expand:not(.pin) > #sliderKnob > #sliderKnobInner {
214 width: 100%;
215 height: 100%;
216
217 -webkit-transform: translateZ(0);
218 transform: translateZ(0);
219 }
220
221 .ring > #sliderKnob > #sliderKnobInner {
222 background-color: var(--paper-slider-knob-start-color, transparent);
223 border: 2px solid var(--paper-slider-knob-start-border-color, #c8c8c8);
224 }
225
226 #sliderKnobInner::before {
227 background-color: var(--paper-slider-pin-color, --google-blue-700);
228 }
229
230 .pin > #sliderKnob > #sliderKnobInner::before {
231 content: "";
232 position: absolute;
233 top: 0;
234 left: 0;
235 width: 26px;
236 height: 26px;
237 margin-left: 3px;
238 border-radius: 50% 50% 50% 0;
239
240 -webkit-transform: rotate(-45deg) scale(0) translate(0);
241 transform: rotate(-45deg) scale(0) translate(0);
242 }
243
244 #sliderKnobInner::before,
245 #sliderKnobInner::after {
246 transition: -webkit-transform .2s ease, background-color .18s ease;
247 transition: transform .2s ease, background-color .18s ease;
248 }
249
250 .pin.ring > #sliderKnob > #sliderKnobInner::before {
251 background-color: var(--paper-slider-pin-start-color, #c8c8c8);
252 }
253
254 .pin.expand > #sliderKnob > #sliderKnobInner::before {
255 -webkit-transform: rotate(-45deg) scale(1) translate(17px, -17px);
256 transform: rotate(-45deg) scale(1) translate(17px, -17px);
257 }
258
259 .pin > #sliderKnob > #sliderKnobInner::after {
260 content: attr(value);
261 position: absolute;
262 top: 0;
263 left: 0;
264 width: 32px;
265 height: 26px;
266 text-align: center;
267 color: var(--paper-slider-font-color, #fff);
268 font-size: 10px;
269
270 -webkit-transform: scale(0) translate(0);
271 transform: scale(0) translate(0);
272 }
273
274 .pin.expand > #sliderKnob > #sliderKnobInner::after {
275 -webkit-transform: scale(1) translate(0, -17px);
276 transform: scale(1) translate(0, -17px);
277 }
278
279 /* paper-input */
280 .slider-input {
281 width: 50px;
282 float: right;
283 overflow: hidden;
284 --paper-input-container-input: {
285 text-align: center;
286 };
287 }
288
289 /* disabled state */
290 #sliderContainer.disabled {
291 pointer-events: none;
292 }
293
294 .disabled > #sliderKnob > #sliderKnobInner {
295 width: 8px;
296 height: 8px;
297 background-color: var(--paper-slider-disabled-knob-color, --google-grey- 500);
298 }
299
300 .disabled.ring > #sliderKnob > #sliderKnobInner {
301 background-color: transparent;
302 }
303
304 paper-ripple {
305 color: var(--paper-slider-knob-color, --google-blue-700);
306 }
307
308 </style>
68 <div id="sliderContainer" 309 <div id="sliderContainer"
69 class$="[[_getClassNames(disabled, pin, snaps, immediateValue, min, expand , dragging, transiting, editable)]]"> 310 class$="[[_getClassNames(disabled, pin, snaps, immediateValue, min, expand , dragging, transiting, editable)]]">
70 311
71 <div class="bar-container"> 312 <div class="bar-container">
72 <paper-progress 313 <paper-progress
73 disabled$="[[disabled]]" 314 disabled$="[[disabled]]"
74 id="sliderBar" 315 id="sliderBar"
75 aria-hidden="true" 316 aria-hidden="true"
76 min="[[min]]" 317 min="[[min]]"
77 max="[[max]]" 318 max="[[max]]"
(...skipping 13 matching lines...) Expand all
91 </template> 332 </template>
92 </div> 333 </div>
93 </template> 334 </template>
94 335
95 <div id="sliderKnob" 336 <div id="sliderKnob"
96 class="center-justified center horizontal layout" 337 class="center-justified center horizontal layout"
97 on-down="_knobdown" 338 on-down="_knobdown"
98 on-up="_resetKnob" 339 on-up="_resetKnob"
99 on-track="_onTrack" 340 on-track="_onTrack"
100 on-transitionend="_knobTransitionEnd"> 341 on-transitionend="_knobTransitionEnd">
101 <paper-ripple
102 center
103 id="ink"
104 class="circle"
105 hidden$="[[!receivedFocusFromKeyboard]]">
106 </paper-ripple>
107 <div id="sliderKnobInner" value$="[[immediateValue]]"></div> 342 <div id="sliderKnobInner" value$="[[immediateValue]]"></div>
108 </div> 343 </div>
109 </div> 344 </div>
110
111 <template is="dom-if" if="[[editable]]"> 345 <template is="dom-if" if="[[editable]]">
112 <paper-input 346 <paper-input
113 id="input" 347 id="input"
348 type="number"
349 step="[[step]]"
350 min="[[min]]"
351 max="[[max]]"
114 class="slider-input" 352 class="slider-input"
115 disabled$="[[disabled]]" 353 disabled$="[[disabled]]"
116 on-change="_inputChange" 354 value="[[immediateValue]]"
117 value="[[_fixForInput(immediateValue)]]" 355 on-change="_changeValue"
118 > 356 on-keydown="_inputKeyDown"
357 no-label-float>
119 </paper-input> 358 </paper-input>
120 </template> 359 </template>
121 </template> 360 </template>
122
123 </dom-module> 361 </dom-module>
124 362
125 <script> 363 <script>
126 364
127 Polymer({ 365 Polymer({
128 is: 'paper-slider', 366 is: 'paper-slider',
129 367
130 behaviors: [ 368 behaviors: [
131 Polymer.IronFormElementBehavior, 369 Polymer.IronFormElementBehavior,
132 Polymer.PaperInkyFocusBehavior, 370 Polymer.PaperInkyFocusBehavior,
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 459
222 markers: { 460 markers: {
223 type: Array, 461 type: Array,
224 readOnly: true, 462 readOnly: true,
225 value: [] 463 value: []
226 }, 464 },
227 }, 465 },
228 466
229 observers: [ 467 observers: [
230 '_updateKnob(value, min, max, snaps, step)', 468 '_updateKnob(value, min, max, snaps, step)',
231 '_minChanged(min)',
232 '_maxChanged(max)',
233 '_valueChanged(value)', 469 '_valueChanged(value)',
234 '_immediateValueChanged(immediateValue)' 470 '_immediateValueChanged(immediateValue)'
235 ], 471 ],
236 472
237 hostAttributes: { 473 hostAttributes: {
238 role: 'slider', 474 role: 'slider',
239 tabindex: 0 475 tabindex: 0
240 }, 476 },
241 477
242 keyBindings: { 478 keyBindings: {
243 'left down pagedown home': '_decrementKey', 479 'left down pagedown home': '_decrementKey',
244 'right up pageup end': '_incrementKey' 480 'right up pageup end': '_incrementKey'
245 }, 481 },
246 482
247 ready: function() { 483 ready: function() {
248 // issue polymer/polymer#1305 484 // issue polymer/polymer#1305
249
250 this.async(function() { 485 this.async(function() {
251 this._updateKnob(this.value); 486 this._updateKnob(this.value);
252 }, 1); 487 }, 1);
253 }, 488 },
254 489
255 /** 490 /**
256 * Increases value by `step` but not above `max`. 491 * Increases value by `step` but not above `max`.
257 * @method increment 492 * @method increment
258 */ 493 */
259 increment: function() { 494 increment: function() {
260 this.value = this._clampValue(this.value + this.step); 495 this.value = this._clampValue(this.value + this.step);
261 }, 496 },
262 497
263 /** 498 /**
264 * Decreases value by `step` but not below `min`. 499 * Decreases value by `step` but not below `min`.
265 * @method decrement 500 * @method decrement
266 */ 501 */
267 decrement: function() { 502 decrement: function() {
268 this.value = this._clampValue(this.value - this.step); 503 this.value = this._clampValue(this.value - this.step);
269 }, 504 },
270 505
271 _updateKnob: function(value) { 506 _updateKnob: function(value, min, max, snaps, step) {
507 this.setAttribute('aria-valuemin', min);
508 this.setAttribute('aria-valuemax', max);
509 this.setAttribute('aria-valuenow', value);
510
272 this._positionKnob(this._calcRatio(value)); 511 this._positionKnob(this._calcRatio(value));
273 }, 512 },
274 513
275 _minChanged: function() {
276 this.setAttribute('aria-valuemin', this.min);
277 },
278
279 _maxChanged: function() {
280 this.setAttribute('aria-valuemax', this.max);
281 },
282
283 _valueChanged: function() { 514 _valueChanged: function() {
284 this.setAttribute('aria-valuenow', this.value);
285 this.fire('value-change'); 515 this.fire('value-change');
286 }, 516 },
287 517
288 _immediateValueChanged: function() { 518 _immediateValueChanged: function() {
289 if (this.dragging) { 519 if (this.dragging) {
290 this.fire('immediate-value-change'); 520 this.fire('immediate-value-change');
291 } else { 521 } else {
292 this.value = this.immediateValue; 522 this.value = this.immediateValue;
293 } 523 }
294 }, 524 },
295 525
296 _secondaryProgressChanged: function() { 526 _secondaryProgressChanged: function() {
297 this.secondaryProgress = this._clampValue(this.secondaryProgress); 527 this.secondaryProgress = this._clampValue(this.secondaryProgress);
298 }, 528 },
299 529
300 _fixForInput: function(immediateValue) {
301 // paper-input/issues/114
302 return this.immediateValue.toString();
303 },
304
305 _expandKnob: function() { 530 _expandKnob: function() {
306 this._setExpand(true); 531 this._setExpand(true);
307 }, 532 },
308 533
309 _resetKnob: function() { 534 _resetKnob: function() {
310 this.cancelDebouncer('expandKnob'); 535 this.cancelDebouncer('expandKnob');
311 this._setExpand(false); 536 this._setExpand(false);
312 }, 537 },
313 538
314 _positionKnob: function(ratio) { 539 _positionKnob: function(ratio) {
315 this._setImmediateValue(this._calcStep(this._calcKnobPosition(ratio))); 540 this._setImmediateValue(this._calcStep(this._calcKnobPosition(ratio)));
316 this._setRatio(this._calcRatio(this.immediateValue)); 541 this._setRatio(this._calcRatio(this.immediateValue));
317 542
318 this.$.sliderKnob.style.left = (this.ratio * 100) + '%'; 543 this.$.sliderKnob.style.left = (this.ratio * 100) + '%';
319 }, 544 },
320 545
321 _inputChange: function() {
322 this.value = this.$$('#input').value;
323 this.fire('change');
324 },
325
326 _calcKnobPosition: function(ratio) { 546 _calcKnobPosition: function(ratio) {
327 return (this.max - this.min) * ratio + this.min; 547 return (this.max - this.min) * ratio + this.min;
328 }, 548 },
329 549
330 _onTrack: function(event) { 550 _onTrack: function(event) {
331 event.stopPropagation(); 551 event.stopPropagation();
332 switch (event.detail.state) { 552 switch (event.detail.state) {
333 case 'start': 553 case 'start':
334 this._trackStart(event); 554 this._trackStart(event);
335 break; 555 break;
336 case 'track': 556 case 'track':
337 this._trackX(event); 557 this._trackX(event);
338 break; 558 break;
339 case 'end': 559 case 'end':
340 this._trackEnd(); 560 this._trackEnd();
341 break; 561 break;
342 } 562 }
343 }, 563 },
344 564
345 _trackStart: function(event) { 565 _trackStart: function(event) {
346 this._w = this.$.sliderBar.offsetWidth; 566 this._w = this.$.sliderBar.offsetWidth;
347 this._x = this.ratio * this._w; 567 this._x = this.ratio * this._w;
348 this._startx = this._x || 0; 568 this._startx = this._x || 0;
349 this._minx = - this._startx; 569 this._minx = - this._startx;
350 this._maxx = this._w - this._startx; 570 this._maxx = this._w - this._startx;
351 this.$.sliderKnob.classList.add('dragging'); 571 this.$.sliderKnob.classList.add('dragging');
352
353 this._setDragging(true); 572 this._setDragging(true);
354 }, 573 },
355 574
356 _trackX: function(e) { 575 _trackX: function(e) {
357 if (!this.dragging) { 576 if (!this.dragging) {
358 this._trackStart(e); 577 this._trackStart(e);
359 } 578 }
360 579
361 var dx = Math.min(this._maxx, Math.max(this._minx, e.detail.dx)); 580 var dx = Math.min(this._maxx, Math.max(this._minx, e.detail.dx));
362 this._x = this._startx + dx; 581 this._x = this._startx + dx;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 snaps: this.snaps, 668 snaps: this.snaps,
450 ring: this.immediateValue <= this.min, 669 ring: this.immediateValue <= this.min,
451 expand: this.expand, 670 expand: this.expand,
452 dragging: this.dragging, 671 dragging: this.dragging,
453 transiting: this.transiting, 672 transiting: this.transiting,
454 editable: this.editable 673 editable: this.editable
455 }); 674 });
456 }, 675 },
457 676
458 _incrementKey: function(event) { 677 _incrementKey: function(event) {
459 if (event.detail.key === 'end') { 678 if (!this.disabled) {
460 this.value = this.max; 679 if (event.detail.key === 'end') {
461 } else { 680 this.value = this.max;
462 this.increment(); 681 } else {
682 this.increment();
683 }
684 this.fire('change');
463 } 685 }
686 },
687
688 _decrementKey: function(event) {
689 if (!this.disabled) {
690 if (event.detail.key === 'home') {
691 this.value = this.min;
692 } else {
693 this.decrement();
694 }
695 this.fire('change');
696 }
697 },
698
699 _changeValue: function(event) {
700 this.value = event.target.value;
464 this.fire('change'); 701 this.fire('change');
465 }, 702 },
466 703
467 _decrementKey: function(event) { 704 _inputKeyDown: function(event) {
468 if (event.detail.key === 'home') { 705 event.stopPropagation();
469 this.value = this.min; 706 },
470 } else { 707
471 this.decrement(); 708 // create the element ripple inside the `sliderKnob`
709 _createRipple: function() {
710 this._rippleContainer = this.$.sliderKnob;
711 return Polymer.PaperInkyFocusBehaviorImpl._createRipple.call(this);
712 },
713
714 // Hide the ripple when user is not interacting with keyboard.
715 // This behavior is different from other ripple-y controls, but is
716 // according to spec: https://www.google.com/design/spec/components/sliders. html
717 _focusedChanged: function(receivedFocusFromKeyboard) {
718 if (receivedFocusFromKeyboard) {
719 this.ensureRipple();
472 } 720 }
473 this.fire('change'); 721 if (this.hasRipple()) {
722 // note, ripple must be un-hidden prior to setting `holdDown`
723 if (receivedFocusFromKeyboard) {
724 this._ripple.removeAttribute('hidden');
725 } else {
726 this._ripple.setAttribute('hidden', '');
727 }
728 this._ripple.holdDown = receivedFocusFromKeyboard;
729 }
474 } 730 }
731
475 }); 732 });
476 733
477 /** 734 /**
478 * Fired when the slider's value changes. 735 * Fired when the slider's value changes.
479 * 736 *
480 * @event value-change 737 * @event value-change
481 */ 738 */
482 739
483 /** 740 /**
484 * Fired when the slider's immediateValue changes. 741 * Fired when the slider's immediateValue changes.
485 * 742 *
486 * @event immediate-value-change 743 * @event immediate-value-change
487 */ 744 */
488 745
489 /** 746 /**
490 * Fired when the slider's value changes due to user interaction. 747 * Fired when the slider's value changes due to user interaction.
491 * 748 *
492 * Changes to the slider's value due to changes in an underlying 749 * Changes to the slider's value due to changes in an underlying
493 * bound variable will not trigger this event. 750 * bound variable will not trigger this event.
494 * 751 *
495 * @event change 752 * @event change
496 */ 753 */
497 754
498 </script> 755 </script>
OLDNEW
« no previous file with comments | « lib/src/paper-slider/paper-slider.css ('k') | lib/src/paper-slider/test/a11y.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698