UNPKG

api-console-assets

Version:

This repo only exists to publish api console components to npm

122 lines (103 loc) 2.86 kB
<!-- @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"> <script> /** * `iron-range-behavior` provides the behavior for something with a minimum to maximum range. * * @demo demo/index.html * @polymerBehavior */ Polymer.IronRangeBehavior = { properties: { /** * The number that represents the current value. */ value: { type: Number, value: 0, notify: true, reflectToAttribute: true }, /** * The number that indicates the minimum value of the range. */ min: { type: Number, value: 0, notify: true }, /** * The number that indicates the maximum value of the range. */ max: { type: Number, value: 100, notify: true }, /** * Specifies the value granularity of the range's value. */ step: { type: Number, value: 1, notify: true }, /** * Returns the ratio of the value. */ ratio: { type: Number, value: 0, readOnly: true, notify: true }, }, observers: [ '_update(value, min, max, step)' ], _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) { // polymer/issues/2493 value = parseFloat(value); if (!this.step) { return value; } var numSteps = Math.round((value - this.min) / this.step); if (this.step < 1) { /** * For small values of this.step, if we calculate the step using * `Math.round(value / step) * step` we may hit a precision point issue * eg. 0.1 * 0.2 = 0.020000000000000004 * http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html * * as a work around we can divide by the reciprocal of `step` */ return numSteps / (1 / this.step) + this.min; } else { return numSteps * this.step + this.min; } }, _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._setRatio(this._calcRatio(this.value) * 100); } }; </script>