yjs/bower_components/core-range/core-range.html
2015-01-03 03:45:15 +00:00

109 lines
2.6 KiB
HTML

<!--
Copyright (c) 2014 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
-->
<!--
The `core-range` element is used for managing a numeric value within a given
range. It has no visual appearance and is typically used in conjunction with
another element.
One can build a progress bar using `core-range` like this:
<core-range min="0" max="200" value="100" ratio="{{ratio}}"></core-range>
<div class="progress-bar" style="width: {{ratio}}%;"></div>
@group Polymer Core Elements
@element core-range
@homepage github.io
-->
<link rel="import" href="../polymer/polymer.html">
<polymer-element name="core-range" attributes="value min max step ratio">
<script>
Polymer('core-range', {
/**
* The number that represents the current value.
*
* @attribute value
* @type number
* @default 0
*/
value: 0,
/**
* The number that indicates the minimum value of the range.
*
* @attribute min
* @type number
* @default 0
*/
min: 0,
/**
* The number that indicates the maximum value of the range.
*
* @attribute max
* @type number
* @default 100
*/
max: 100,
/**
* Specifies the value granularity of the range's value.
*
* @attribute step
* @type number
* @default 1
*/
step: 1,
/**
* Returns the ratio of the value.
*
* @attribute ratio
* @type number
* @default 0
*/
ratio: 0,
observe: {
'value min max step': 'update'
},
calcRatio: function(value) {
return (this.clampValue(value) - this.min) / (this.max - this.min);
},
clampValue: function(value) {
return Math.min(this.max, Math.max(this.min, this.calcStep(value)));
},
calcStep: function(value) {
return this.step ? (Math.round(value / this.step) / (1 / this.step)) : value;
},
validateValue: function() {
var v = this.clampValue(this.value);
this.value = this.oldValue = isNaN(v) ? this.oldValue : v;
return this.value !== v;
},
update: function() {
this.validateValue();
this.ratio = this.calcRatio(this.value) * 100;
}
});
</script>
</polymer-element>