Вход Регистрация
Файл: ui/development-bundle/ui/jquery.ui.slider.js
Строк: 712
<?php
/*!
 * jQuery UI Slider 1.10.0
 * http://jqueryui.com
 *
 * Copyright 2013 jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 *
 * http://api.jqueryui.com/slider/
 *
 * Depends:
 *    jquery.ui.core.js
 *    jquery.ui.mouse.js
 *    jquery.ui.widget.js
 */
(function( $, undefined ) {

// number of pages in a slider
// (how many times can you page up/down to go through the whole range)
var numPages 5;

$.
widget"ui.slider", $.ui.mouse, {
    
version"1.10.0",
    
widgetEventPrefix"slide",

    
options: {
        
animatefalse,
        
distance0,
        
max100,
        
min0,
        
orientation"horizontal",
        
rangefalse,
        
step1,
        
value0,
        
valuesnull,

        
// callbacks
        
changenull,
        
slidenull,
        
startnull,
        
stopnull
    
},

    
_create: function() {
        var 
ihandleCount,
            
this.options,
            
existingHandles this.element.find".ui-slider-handle" ).addClass"ui-state-default ui-corner-all" ),
            
handle "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
            
handles = [];

        
this._keySliding false;
        
this._mouseSliding false;
        
this._animateOff true;
        
this._handleIndex null;
        
this._detectOrientation();
        
this._mouseInit();

        
this.element
            
.addClass"ui-slider" +
                
" ui-slider-" this.orientation +
                
" ui-widget" +
                
" ui-widget-content" +
                
" ui-corner-all");

        
this.range = $([]);

        if ( 
o.range ) {
            if ( 
o.range === true ) {
                if ( !
o.values ) {
                    
o.values = [ this._valueMin(), this._valueMin() ];
                } else if ( 
o.values.length && o.values.length !== ) {
                    
o.values = [ o.values[0], o.values[0] ];
                } else if ( $.
isArrayo.values ) ) {
                    
o.values o.values.slice(0);
                }
            }

            
this.range = $( "<div></div>" )
                .
appendTothis.element )
                .
addClass"ui-slider-range" +
                
// note: this isn't the most fittingly semantic framework class for this element,
                // but worked best visually with a variety of themes
                
" ui-widget-header" +
                ( ( 
o.range === "min" || o.range === "max" ) ? " ui-slider-range-" o.range "" ) );
        }

        
handleCount = ( o.values && o.values.length ) || 1;

        for ( 
existingHandles.lengthhandleCounti++ ) {
            
handles.pushhandle );
        }

        
this.handles existingHandles.add( $( handles.join"" ) ).appendTothis.element ) );

        
this.handle this.handles.eq);

        
this.handles.addthis.range ).filter"a" )
            .
click(function( event ) {
                
event.preventDefault();
            })
            .
mouseenter(function() {
                if ( !
o.disabled ) {
                    $( 
this ).addClass"ui-state-hover" );
                }
            })
            .
mouseleave(function() {
                $( 
this ).removeClass"ui-state-hover" );
            })
            .
focus(function() {
                if ( !
o.disabled ) {
                    $( 
".ui-slider .ui-state-focus" ).removeClass"ui-state-focus" );
                    $( 
this ).addClass"ui-state-focus" );
                } else {
                    $( 
this ).blur();
                }
            })
            .
blur(function() {
                $( 
this ).removeClass"ui-state-focus" );
            });

        
this.handles.each(function( ) {
            $( 
this ).data"ui-slider-handle-index");
        });

        
this._setOption"disabled"o.disabled );

        
this._onthis.handlesthis._handleEvents );

        
this._refreshValue();

        
this._animateOff false;
    },

    
_destroy: function() {
        
this.handles.remove();
        
this.range.remove();

        
this.element
            
.removeClass"ui-slider" +
                
" ui-slider-horizontal" +
                
" ui-slider-vertical" +
                
" ui-widget" +
                
" ui-widget-content" +
                
" ui-corner-all" );

        
this._mouseDestroy();
    },

    
_mouseCapture: function( event ) {
        var 
positionnormValuedistanceclosestHandleindexallowedoffsetmouseOverHandle,
            
that this,
            
this.options;

        if ( 
o.disabled ) {
            return 
false;
        }

        
this.elementSize = {
            
widththis.element.outerWidth(),
            
heightthis.element.outerHeight()
        };
        
this.elementOffset this.element.offset();

        
position = { xevent.pageXyevent.pageY };
        
normValue this._normValueFromMouseposition );
        
distance this._valueMax() - this._valueMin() + 1;
        
this.handles.each(function( ) {
            var 
thisDistance Math.absnormValue that.values(i) );
            if (( 
distance thisDistance ) ||
                ( 
distance === thisDistance &&
                    (
=== that._lastChangedValue || that.values(i) === o.min ))) {
                
distance thisDistance;
                
closestHandle = $( this );
                
index i;
            }
        });

        
allowed this._starteventindex );
        if ( 
allowed === false ) {
            return 
false;
        }
        
this._mouseSliding true;

        
this._handleIndex index;

        
closestHandle
            
.addClass"ui-state-active" )
            .
focus();

        
offset closestHandle.offset();
        
mouseOverHandle = !$( event.target ).parents().addBack().is".ui-slider-handle" );
        
this._clickOffset mouseOverHandle ? { left0top} : {
            
leftevent.pageX offset.left - ( closestHandle.width() / ),
            
topevent.pageY offset.top -
                ( 
closestHandle.height() / ) -
                ( 
parseIntclosestHandle.css("borderTopWidth"), 10 ) || ) -
                ( 
parseIntclosestHandle.css("borderBottomWidth"), 10 ) || 0) +
                ( 
parseIntclosestHandle.css("marginTop"), 10 ) || 0)
        };

        if ( !
this.handles.hasClass"ui-state-hover" ) ) {
            
this._slideeventindexnormValue );
        }
        
this._animateOff true;
        return 
true;
    },

    
_mouseStart: function() {
        return 
true;
    },

    
_mouseDrag: function( event ) {
        var 
position = { xevent.pageXyevent.pageY },
            
normValue this._normValueFromMouseposition );

        
this._slideeventthis._handleIndexnormValue );

        return 
false;
    },

    
_mouseStop: function( event ) {
        
this.handles.removeClass"ui-state-active" );
        
this._mouseSliding false;

        
this._stopeventthis._handleIndex );
        
this._changeeventthis._handleIndex );

        
this._handleIndex null;
        
this._clickOffset null;
        
this._animateOff false;

        return 
false;
    },

    
_detectOrientation: function() {
        
this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" "horizontal";
    },

    
_normValueFromMouse: function( position ) {
        var 
pixelTotal,
            
pixelMouse,
            
percentMouse,
            
valueTotal,
            
valueMouse;

        if ( 
this.orientation === "horizontal" ) {
            
pixelTotal this.elementSize.width;
            
pixelMouse position.this.elementOffset.left - ( this._clickOffset this._clickOffset.left );
        } else {
            
pixelTotal this.elementSize.height;
            
pixelMouse position.this.elementOffset.top - ( this._clickOffset this._clickOffset.top );
        }

        
percentMouse = ( pixelMouse pixelTotal );
        if ( 
percentMouse ) {
            
percentMouse 1;
        }
        if ( 
percentMouse ) {
            
percentMouse 0;
        }
        if ( 
this.orientation === "vertical" ) {
            
percentMouse percentMouse;
        }

        
valueTotal this._valueMax() - this._valueMin();
        
valueMouse this._valueMin() + percentMouse valueTotal;

        return 
this._trimAlignValuevalueMouse );
    },

    
_start: function( eventindex ) {
        var 
uiHash = {
            
handlethis.handlesindex ],
            
valuethis.value()
        };
        if ( 
this.options.values && this.options.values.length ) {
            
uiHash.value this.valuesindex );
            
uiHash.values this.values();
        }
        return 
this._trigger"start"eventuiHash );
    },

    
_slide: function( eventindexnewVal ) {
        var 
otherVal,
            
newValues,
            
allowed;

        if ( 
this.options.values && this.options.values.length ) {
            
otherVal this.valuesindex );

            if ( ( 
this.options.values.length === && this.options.range === true ) &&
                    ( ( 
index === && newVal otherVal) || ( index === && newVal otherVal ) )
                ) {
                
newVal otherVal;
            }

            if ( 
newVal !== this.valuesindex ) ) {
                
newValues this.values();
                
newValuesindex ] = newVal;
                
// A slide can be canceled by returning false from the slide callback
                
allowed this._trigger"slide"event, {
                    
handlethis.handlesindex ],
                    
valuenewVal,
                    
valuesnewValues
                
} );
                
otherVal this.valuesindex );
                if ( 
allowed !== false ) {
                    
this.valuesindexnewValtrue );
                }
            }
        } else {
            if ( 
newVal !== this.value() ) {
                
// A slide can be canceled by returning false from the slide callback
                
allowed this._trigger"slide"event, {
                    
handlethis.handlesindex ],
                    
valuenewVal
                
} );
                if ( 
allowed !== false ) {
                    
this.valuenewVal );
                }
            }
        }
    },

    
_stop: function( eventindex ) {
        var 
uiHash = {
            
handlethis.handlesindex ],
            
valuethis.value()
        };
        if ( 
this.options.values && this.options.values.length ) {
            
uiHash.value this.valuesindex );
            
uiHash.values this.values();
        }

        
this._trigger"stop"eventuiHash );
    },

    
_change: function( eventindex ) {
        if ( !
this._keySliding && !this._mouseSliding ) {
            var 
uiHash = {
                
handlethis.handlesindex ],
                
valuethis.value()
            };
            if ( 
this.options.values && this.options.values.length ) {
                
uiHash.value this.valuesindex );
                
uiHash.values this.values();
            }

            
//store the last changed value index for reference when handles overlap
            
this._lastChangedValue index;

            
this._trigger"change"eventuiHash );
        }
    },

    
value: function( newValue ) {
        if ( 
arguments.length ) {
            
this.options.value this._trimAlignValuenewValue );
            
this._refreshValue();
            
this._changenull);
            return;
        }

        return 
this._value();
    },

    
values: function( indexnewValue ) {
        var 
vals,
            
newValues,
            
i;

        if ( 
arguments.length ) {
            
this.options.valuesindex ] = this._trimAlignValuenewValue );
            
this._refreshValue();
            
this._changenullindex );
            return;
        }

        if ( 
arguments.length ) {
            if ( $.
isArrayarguments] ) ) {
                
vals this.options.values;
                
newValues arguments];
                for ( 
0vals.length+= ) {
                    
vals] = this._trimAlignValuenewValues] );
                    
this._changenull);
                }
                
this._refreshValue();
            } else {
                if ( 
this.options.values && this.options.values.length ) {
                    return 
this._valuesindex );
                } else {
                    return 
this.value();
                }
            }
        } else {
            return 
this._values();
        }
    },

    
_setOption: function( keyvalue ) {
        var 
i,
            
valsLength 0;

        if ( $.
isArraythis.options.values ) ) {
            
valsLength this.options.values.length;
        }

        $.
Widget.prototype._setOption.applythisarguments );

        switch ( 
key ) {
            case 
"disabled":
                if ( 
value ) {
                    
this.handles.filter".ui-state-focus" ).blur();
                    
this.handles.removeClass"ui-state-hover" );
                    
this.handles.prop"disabled"true );
                } else {
                    
this.handles.prop"disabled"false );
                }
                break;
            case 
"orientation":
                
this._detectOrientation();
                
this.element
                    
.removeClass"ui-slider-horizontal ui-slider-vertical" )
                    .
addClass"ui-slider-" this.orientation );
                
this._refreshValue();
                break;
            case 
"value":
                
this._animateOff true;
                
this._refreshValue();
                
this._changenull);
                
this._animateOff false;
                break;
            case 
"values":
                
this._animateOff true;
                
this._refreshValue();
                for ( 
0valsLength+= ) {
                    
this._changenull);
                }
                
this._animateOff false;
                break;
            case 
"min":
            case 
"max":
                
this._animateOff true;
                
this._refreshValue();
                
this._animateOff false;
                break;
        }
    },

    
//internal value getter
    // _value() returns value trimmed by min and max, aligned by step
    
_value: function() {
        var 
val this.options.value;
        
val this._trimAlignValueval );

        return 
val;
    },

    
//internal values getter
    // _values() returns array of values trimmed by min and max, aligned by step
    // _values( index ) returns single value trimmed by min and max, aligned by step
    
_values: function( index ) {
        var 
val,
            
vals,
            
i;

        if ( 
arguments.length ) {
            
val this.options.valuesindex ];
            
val this._trimAlignValueval );

            return 
val;
        } else {
            
// .slice() creates a copy of the array
            // this copy gets trimmed by min and max and then returned
            
vals this.options.values.slice();
            for ( 
0vals.lengthi+= 1) {
                
vals] = this._trimAlignValuevals] );
            }

            return 
vals;
        }
    },

    
// returns the step-aligned value that val is closest to, between (inclusive) min and max
    
_trimAlignValue: function( val ) {
        if ( 
val <= this._valueMin() ) {
            return 
this._valueMin();
        }
        if ( 
val >= this._valueMax() ) {
            return 
this._valueMax();
        }
        var 
step = ( this.options.step ) ? this.options.step 1,
            
valModStep = (val this._valueMin()) % step,
            
alignValue val valModStep;

        if ( 
Math.abs(valModStep) * >= step ) {
            
alignValue += ( valModStep ) ? step : ( -step );
        }

        
// Since JavaScript has problems with large floats, round
        // the final value to 5 digits after the decimal point (see #4124)
        
return parseFloatalignValue.toFixed(5) );
    },

    
_valueMin: function() {
        return 
this.options.min;
    },

    
_valueMax: function() {
        return 
this.options.max;
    },

    
_refreshValue: function() {
        var 
lastValPercentvalPercentvaluevalueMinvalueMax,
            
oRange this.options.range,
            
this.options,
            
that this,
            
animate = ( !this._animateOff ) ? o.animate false,
            
_set = {};

        if ( 
this.options.values && this.options.values.length ) {
            
this.handles.each(function( ) {
                
valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
                
_setthat.orientation === "horizontal" "left" "bottom" ] = valPercent "%";
                $( 
this ).stop1)[ animate "animate" "css" ]( _seto.animate );
                if ( 
that.options.range === true ) {
                    if ( 
that.orientation === "horizontal" ) {
                        if ( 
=== ) {
                            
that.range.stop1)[ animate "animate" "css" ]( { leftvalPercent "%" }, o.animate );
                        }
                        if ( 
=== ) {
                            
that.rangeanimate "animate" "css" ]( { width: ( valPercent lastValPercent ) + "%" }, { queuefalsedurationo.animate } );
                        }
                    } else {
                        if ( 
=== ) {
                            
that.range.stop1)[ animate "animate" "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
                        }
                        if ( 
=== ) {
                            
that.rangeanimate "animate" "css" ]( { height: ( valPercent lastValPercent ) + "%" }, { queuefalsedurationo.animate } );
                        }
                    }
                }
                
lastValPercent valPercent;
            });
        } else {
            
value this.value();
            
valueMin this._valueMin();
            
valueMax this._valueMax();
            
valPercent = ( valueMax !== valueMin ) ?
                    ( 
value valueMin ) / ( valueMax valueMin ) * 100 :
                    
0;
            
_setthis.orientation === "horizontal" "left" "bottom" ] = valPercent "%";
            
this.handle.stop1)[ animate "animate" "css" ]( _seto.animate );

            if ( 
oRange === "min" && this.orientation === "horizontal" ) {
                
this.range.stop1)[ animate "animate" "css" ]( { widthvalPercent "%" }, o.animate );
            }
            if ( 
oRange === "max" && this.orientation === "horizontal" ) {
                
this.rangeanimate "animate" "css" ]( { width: ( 100 valPercent ) + "%" }, { queuefalsedurationo.animate } );
            }
            if ( 
oRange === "min" && this.orientation === "vertical" ) {
                
this.range.stop1)[ animate "animate" "css" ]( { heightvalPercent "%" }, o.animate );
            }
            if ( 
oRange === "max" && this.orientation === "vertical" ) {
                
this.rangeanimate "animate" "css" ]( { height: ( 100 valPercent ) + "%" }, { queuefalsedurationo.animate } );
            }
        }
    },

    
_handleEvents: {
        
keydown: function( event ) {
            
/*jshint maxcomplexity:25*/
            
var allowedcurValnewValstep,
                
index = $( event.target ).data"ui-slider-handle-index" );

            switch ( 
event.keyCode ) {
                case $.
ui.keyCode.HOME:
                case $.
ui.keyCode.END:
                case $.
ui.keyCode.PAGE_UP:
                case $.
ui.keyCode.PAGE_DOWN:
                case $.
ui.keyCode.UP:
                case $.
ui.keyCode.RIGHT:
                case $.
ui.keyCode.DOWN:
                case $.
ui.keyCode.LEFT:
                    
event.preventDefault();
                    if ( !
this._keySliding ) {
                        
this._keySliding true;
                        $( 
event.target ).addClass"ui-state-active" );
                        
allowed this._starteventindex );
                        if ( 
allowed === false ) {
                            return;
                        }
                    }
                    break;
            }

            
step this.options.step;
            if ( 
this.options.values && this.options.values.length ) {
                
curVal newVal this.valuesindex );
            } else {
                
curVal newVal this.value();
            }

            switch ( 
event.keyCode ) {
                case $.
ui.keyCode.HOME:
                    
newVal this._valueMin();
                    break;
                case $.
ui.keyCode.END:
                    
newVal this._valueMax();
                    break;
                case $.
ui.keyCode.PAGE_UP:
                    
newVal this._trimAlignValuecurVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
                    break;
                case $.
ui.keyCode.PAGE_DOWN:
                    
newVal this._trimAlignValuecurVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
                    break;
                case $.
ui.keyCode.UP:
                case $.
ui.keyCode.RIGHT:
                    if ( 
curVal === this._valueMax() ) {
                        return;
                    }
                    
newVal this._trimAlignValuecurVal step );
                    break;
                case $.
ui.keyCode.DOWN:
                case $.
ui.keyCode.LEFT:
                    if ( 
curVal === this._valueMin() ) {
                        return;
                    }
                    
newVal this._trimAlignValuecurVal step );
                    break;
            }

            
this._slideeventindexnewVal );
        },
        
keyup: function( event ) {
            var 
index = $( event.target ).data"ui-slider-handle-index" );

            if ( 
this._keySliding ) {
                
this._keySliding false;
                
this._stopeventindex );
                
this._changeeventindex );
                $( 
event.target ).removeClass"ui-state-active" );
            }
        }
    }

});

}(
jQuery));
?>
Онлайн: 1
Реклама