diff -r 322d0feea350 -r 89ef5ed3c48b src/cm/media/js/lib/yui/yui_3.10.3/build/slider-value-range/slider-value-range-debug.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/media/js/lib/yui/yui_3.10.3/build/slider-value-range/slider-value-range-debug.js Tue Jul 16 14:29:46 2013 +0200 @@ -0,0 +1,426 @@ +/* +YUI 3.10.3 (build 2fb5187) +Copyright 2013 Yahoo! Inc. All rights reserved. +Licensed under the BSD License. +http://yuilibrary.com/license/ +*/ + +YUI.add('slider-value-range', function (Y, NAME) { + +/** + * Adds value support for Slider as a range of integers between a configured + * minimum and maximum value. For use with Y.Base.build(..) to + * add the plumbing to Y.SliderBase. + * + * @module slider + * @submodule slider-value-range + */ + +// Constants for compression or performance +var MIN = 'min', + MAX = 'max', + VALUE = 'value', +// MINORSTEP = 'minorStep', +// MAJORSTEP = 'majorStep', + + round = Math.round; + +/** + * One class of value algorithm that can be built onto SliderBase. By default, + * values range between 0 and 100, but you can configure these on the + * built Slider class by setting the min and max + * configurations. Set the initial value (will cause the thumb to move to the + * appropriate location on the rail) in configuration as well if appropriate. + * + * @class SliderValueRange + */ +function SliderValueRange() { + this._initSliderValueRange(); +} + +Y.SliderValueRange = Y.mix( SliderValueRange, { + + // Prototype properties and methods that will be added onto host class + prototype: { + + /** + * Factor used to translate value -> position -> value. + * + * @property _factor + * @type {Number} + * @protected + */ + _factor: 1, + + /** + * Stub for construction logic. Override if extending this class and + * you need to set something up during the initializer phase. + * + * @method _initSliderValueRange + * @protected + */ + _initSliderValueRange: function () {}, + + /** + * Override of stub method in SliderBase that is called at the end of + * its bindUI stage of render(). Subscribes to internal events to + * trigger UI and related state updates. + * + * @method _bindValueLogic + * @protected + */ + _bindValueLogic: function () { + this.after( { + minChange : this._afterMinChange, + maxChange : this._afterMaxChange, + valueChange: this._afterValueChange + } ); + }, + + /** + * Move the thumb to appropriate position if necessary. Also resets + * the cached offsets and recalculates the conversion factor to + * translate position to value. + * + * @method _syncThumbPosition + * @protected + */ + _syncThumbPosition: function () { + this._calculateFactor(); + + this._setPosition( this.get( VALUE ) ); + }, + + /** + * Calculates and caches + * (range between max and min) / (rail length) + * for fast runtime calculation of position -> value. + * + * @method _calculateFactor + * @protected + */ + _calculateFactor: function () { + var length = this.get( 'length' ), + thumbSize = this.thumb.getStyle( this._key.dim ), + min = this.get( MIN ), + max = this.get( MAX ); + + // The default thumb width is based on Sam skin's thumb dimension. + // This attempts to allow for rendering off-DOM, then attaching + // without the need to call syncUI(). It is still recommended + // to call syncUI() in these cases though, just to be sure. + length = parseFloat( length ) || 150; + thumbSize = parseFloat( thumbSize ) || 15; + + this._factor = ( max - min ) / ( length - thumbSize ); + + Y.log("Calculating factor(~" + this._factor.toFixed(3) + " = (max(" + max + ") - min(" + min + ")) / (length(" + length + ") - thumb size(" + thumbSize + "))","info","slider"); + }, + + /** + * Dispatch the new position of the thumb into the value setting + * operations. + * + * @method _defThumbMoveFn + * @param e { EventFacade } The host's thumbMove event + * @protected + */ + _defThumbMoveFn: function ( e ) { + // To prevent set('value', x) from looping back around + if (e.source !== 'set') { + this.set(VALUE, this._offsetToValue(e.offset)); + } + }, + + /** + *

Converts a pixel position into a value. Calculates current + * thumb offset from the leading edge of the rail multiplied by the + * ratio of (max - min) / (constraining dim).

+ * + *

Override this if you want to use a different value mapping + * algorithm.

+ * + * @method _offsetToValue + * @param offset { Number } X or Y pixel offset + * @return { mixed } Value corresponding to the provided pixel offset + * @protected + */ + _offsetToValue: function ( offset ) { + + var value = round( offset * this._factor ) + this.get( MIN ); + + Y.log("Offset: " + offset + " => Value: " + value, "info", "slider"); + return round( this._nearestValue( value ) ); + }, + + /** + * Converts a value into a pixel offset for use in positioning + * the thumb according to the reverse of the + * _offsetToValue( xy ) operation. + * + * @method _valueToOffset + * @param val { Number } The value to map to pixel X or Y position + * @return { Number } The pixel offset + * @protected + */ + _valueToOffset: function ( value ) { + var offset = round( ( value - this.get( MIN ) ) / this._factor ); + + Y.log("Value: " + value + " => Offset: " + offset, "info", "slider"); + return offset; + }, + + /** + * Returns the current value. Override this if you want to introduce + * output formatting. Otherwise equivalent to slider.get( "value" ); + * + * @method getValue + * @return {Number} + */ + getValue: function () { + return this.get( VALUE ); + }, + + /** + * Updates the current value. Override this if you want to introduce + * input value parsing or preprocessing. Otherwise equivalent to + * slider.set( "value", v ); + * + * @method setValue + * @param val {Number} The new value + * @return {Slider} + * @chainable + */ + setValue: function ( val ) { + return this.set( VALUE, val ); + }, + + /** + * Update position according to new min value. If the new min results + * in the current value being out of range, the value is set to the + * closer of min or max. + * + * @method _afterMinChange + * @param e { EventFacade } The min attribute change event. + * @protected + */ + _afterMinChange: function ( e ) { + this._verifyValue(); + + this._syncThumbPosition(); + }, + + /** + * Update position according to new max value. If the new max results + * in the current value being out of range, the value is set to the + * closer of min or max. + * + * @method _afterMaxChange + * @param e { EventFacade } The max attribute change event. + * @protected + */ + _afterMaxChange: function ( e ) { + this._verifyValue(); + + this._syncThumbPosition(); + }, + + /** + * Verifies that the current value is within the min - max range. If + * not, value is set to either min or max, depending on which is + * closer. + * + * @method _verifyValue + * @protected + */ + _verifyValue: function () { + var value = this.get( VALUE ), + nearest = this._nearestValue( value ); + + if ( value !== nearest ) { + // @TODO Can/should valueChange, minChange, etc be queued + // events? To make dd.set( 'min', n ); execute after minChange + // subscribers before on/after valueChange subscribers. + this.set( VALUE, nearest ); + } + }, + + /** + * Propagate change to the thumb position unless the change originated + * from the thumbMove event. + * + * @method _afterValueChange + * @param e { EventFacade } The valueChange event. + * @protected + */ + _afterValueChange: function ( e ) { + var val = e.newVal; + Y.log("Positioning thumb after set('value',x)","info","slider"); + this._setPosition( val, { source: 'set' } ); + }, + + /** + * Positions the thumb and its ARIA attributes in accordance with the + * translated value. + * + * @method _setPosition + * @param value {Number} Value to translate to a pixel position + * @param [options] {Object} Details object to pass to `_uiMoveThumb` + * @protected + */ + _setPosition: function ( value, options ) { + this._uiMoveThumb( this._valueToOffset( value ), options ); + this.thumb.set('aria-valuenow', value); + this.thumb.set('aria-valuetext', value); + }, + + /** + * Validates new values assigned to min attribute. Numbers + * are acceptable. Override this to enforce different rules. + * + * @method _validateNewMin + * @param value {Any} Value assigned to min attribute. + * @return {Boolean} True for numbers. False otherwise. + * @protected + */ + _validateNewMin: function ( value ) { + return Y.Lang.isNumber( value ); + }, + + /** + * Validates new values assigned to max attribute. Numbers + * are acceptable. Override this to enforce different rules. + * + * @method _validateNewMax + * @param value { mixed } Value assigned to max attribute. + * @return { Boolean } True for numbers. False otherwise. + * @protected + */ + _validateNewMax: function ( value ) { + return Y.Lang.isNumber( value ); + }, + + /** + * Restricts new values assigned to value attribute to be + * between the configured min and max. + * Rounds to nearest integer value. + * + * @method _setNewValue + * @param value { Number } Value assigned to value attribute + * @return { Number } Normalized and constrained value + * @protected + */ + _setNewValue: function ( value ) { + return round( this._nearestValue( value ) ); + }, + + /** + * Returns the nearest valid value to the value input. If the provided + * value is outside the min - max range, accounting for min > max + * scenarios, the nearest of either min or max is returned. Otherwise, + * the provided value is returned. + * + * @method _nearestValue + * @param value { mixed } Value to test against current min - max range + * @return { Number } Current min, max, or value if within range + * @protected + */ + _nearestValue: function ( value ) { + var min = this.get( MIN ), + max = this.get( MAX ), + tmp; + + // Account for reverse value range (min > max) + tmp = ( max > min ) ? max : min; + min = ( max > min ) ? min : max; + max = tmp; + + return ( value < min ) ? + min : + ( value > max ) ? + max : + value; + } + + }, + + /** + * Attributes that will be added onto host class. + * + * @property ATTRS + * @type {Object} + * @static + * @protected + */ + ATTRS: { + /** + * The value associated with the farthest top, left position of the + * rail. Can be greater than the configured max if you + * want values to increase from right-to-left or bottom-to-top. + * + * @attribute min + * @type { Number } + * @default 0 + */ + min: { + value : 0, + validator: '_validateNewMin' + }, + + /** + * The value associated with the farthest bottom, right position of + * the rail. Can be less than the configured min if + * you want values to increase from right-to-left or bottom-to-top. + * + * @attribute max + * @type { Number } + * @default 100 + */ + max: { + value : 100, + validator: '_validateNewMax' + }, + + /** + * amount to increment/decrement the Slider value + * when the arrow up/down/left/right keys are pressed + * + * @attribute minorStep + * @type {Number} + * @default 1 + */ + minorStep : { + value: 1 + }, + + /** + * amount to increment/decrement the Slider value + * when the page up/down keys are pressed + * + * @attribute majorStep + * @type {Number} + * @default 10 + */ + majorStep : { + value: 10 + }, + + /** + * The value associated with the thumb's current position on the + * rail. Defaults to the value inferred from the thumb's current + * position. Specifying value in the constructor will move the + * thumb to the position that corresponds to the supplied value. + * + * @attribute value + * @type { Number } + * @default (inferred from current thumb position) + */ + value: { + value : 0, + setter: '_setNewValue' + } + } +}, true ); + + +}, '3.10.3', {"requires": ["slider-base"]});