[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
xampp182
/
htdocs
/
simkeu
/
keuangan
/
vendors
/
bower_components
/
nouislider
/
src
/
js
/
[
Home
]
File: scope.js
// Test suggested values and apply margin, step. function setHandle ( handle, to, noLimitOption ) { var trigger = handle !== scope_Handles[0] ? 1 : 0, lowerMargin = scope_Locations[0] + options.margin, upperMargin = scope_Locations[1] - options.margin, lowerLimit = scope_Locations[0] + options.limit, upperLimit = scope_Locations[1] - options.limit; // For sliders with multiple handles, // limit movement to the other handle. // Apply the margin option by adding it to the handle positions. if ( scope_Handles.length > 1 ) { to = trigger ? Math.max( to, lowerMargin ) : Math.min( to, upperMargin ); } // The limit option has the opposite effect, limiting handles to a // maximum distance from another. Limit must be > 0, as otherwise // handles would be unmoveable. 'noLimitOption' is set to 'false' // for the .val() method, except for pass 4/4. if ( noLimitOption !== false && options.limit && scope_Handles.length > 1 ) { to = trigger ? Math.min ( to, lowerLimit ) : Math.max( to, upperLimit ); } // Handle the step option. to = scope_Spectrum.getStep( to ); // Limit to 0/100 for .val input, trim anything beyond 7 digits, as // JavaScript has some issues in its floating point implementation. to = limit(parseFloat(to.toFixed(7))); // Return false if handle can't move if ( to === scope_Locations[trigger] ) { return false; } // Set the handle to the new position. // Use requestAnimationFrame for efficient painting. // No significant effect in Chrome, Edge sees dramatic // performace improvements. if ( window.requestAnimationFrame ) { window.requestAnimationFrame(function(){ handle.style[options.style] = to + '%'; }); } else { handle.style[options.style] = to + '%'; } // Force proper handle stacking if ( !handle.previousSibling ) { removeClass(handle, cssClasses[17]); if ( to > 50 ) { addClass(handle, cssClasses[17]); } } // Update locations. scope_Locations[trigger] = to; // Convert the value to the slider stepping/range. scope_Values[trigger] = scope_Spectrum.fromStepping( to ); fireEvent('update', trigger); return true; } // Loop values from value method and apply them. function setValues ( count, values ) { var i, trigger, to; // With the limit option, we'll need another limiting pass. if ( options.limit ) { count += 1; } // If there are multiple handles to be set run the setting // mechanism twice for the first handle, to make sure it // can be bounced of the second one properly. for ( i = 0; i < count; i += 1 ) { trigger = i%2; // Get the current argument from the array. to = values[trigger]; // Setting with null indicates an 'ignore'. // Inputting 'false' is invalid. if ( to !== null && to !== false ) { // If a formatted number was passed, attemt to decode it. if ( typeof to === 'number' ) { to = String(to); } to = options.format.from( to ); // Request an update for all links if the value was invalid. // Do so too if setting the handle fails. if ( to === false || isNaN(to) || setHandle( scope_Handles[trigger], scope_Spectrum.toStepping( to ), i === (3 - options.dir) ) === false ) { fireEvent('update', trigger); } } } } // Set the slider value. function valueSet ( input ) { var count, values = asArray( input ), i; // The RTL settings is implemented by reversing the front-end, // internal mechanisms are the same. if ( options.dir && options.handles > 1 ) { values.reverse(); } // Animation is optional. // Make sure the initial values where set before using animated placement. if ( options.animate && scope_Locations[0] !== -1 ) { addClassFor( scope_Target, cssClasses[14], 300 ); } // Determine how often to set the handles. count = scope_Handles.length > 1 ? 3 : 1; if ( values.length === 1 ) { count = 1; } setValues ( count, values ); // Fire the 'set' event for both handles. for ( i = 0; i < scope_Handles.length; i++ ) { // Fire the event only for handles that received a new value, as per #579 if ( values[i] !== null ) { fireEvent('set', i); } } } // Get the slider value. function valueGet ( ) { var i, retour = []; // Get the value from all handles. for ( i = 0; i < options.handles; i += 1 ){ retour[i] = options.format.to( scope_Values[i] ); } return inSliderOrder( retour ); } // Removes classes from the root and empties it. function destroy ( ) { cssClasses.forEach(function(cls){ if ( !cls ) { return; } // Ignore empty classes removeClass(scope_Target, cls); }); while (scope_Target.firstChild) { scope_Target.removeChild(scope_Target.firstChild); } delete scope_Target.noUiSlider; } // Get the current step size for the slider. function getCurrentStep ( ) { // Check all locations, map them to their stepping point. // Get the step point, then find it in the input list. var retour = scope_Locations.map(function( location, index ){ var step = scope_Spectrum.getApplicableStep( location ), // As per #391, the comparison for the decrement step can have some rounding issues. // Round the value to the precision used in the step. stepDecimals = countDecimals(String(step[2])), // Get the current numeric value value = scope_Values[index], // To move the slider 'one step up', the current step value needs to be added. // Use null if we are at the maximum slider value. increment = location === 100 ? null : step[2], // Going 'one step down' might put the slider in a different sub-range, so we // need to switch between the current or the previous step. prev = Number((value - step[2]).toFixed(stepDecimals)), // If the value fits the step, return the current step value. Otherwise, use the // previous step. Return null if the slider is at its minimum value. decrement = location === 0 ? null : (prev >= step[1]) ? step[2] : (step[0] || false); return [decrement, increment]; }); // Return values in the proper order. return inSliderOrder( retour ); } // Attach an event to this slider, possibly including a namespace function bindEvent ( namespacedEvent, callback ) { scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || []; scope_Events[namespacedEvent].push(callback); // If the event bound is 'update,' fire it immediately for all handles. if ( namespacedEvent.split('.')[0] === 'update' ) { scope_Handles.forEach(function(a, index){ fireEvent('update', index); }); } } // Undo attachment of event function removeEvent ( namespacedEvent ) { var event = namespacedEvent.split('.')[0], namespace = namespacedEvent.substring(event.length); Object.keys(scope_Events).forEach(function( bind ){ var tEvent = bind.split('.')[0], tNamespace = bind.substring(tEvent.length); if ( (!event || event === tEvent) && (!namespace || namespace === tNamespace) ) { delete scope_Events[bind]; } }); } // Updateable: margin, limit, step, range, animate, snap function updateOptions ( optionsToUpdate ) { var v = valueGet(), i, newOptions = testOptions({ start: [0, 0], margin: optionsToUpdate.margin, limit: optionsToUpdate.limit, step: optionsToUpdate.step, range: optionsToUpdate.range, animate: optionsToUpdate.animate, snap: optionsToUpdate.snap === undefined ? options.snap : optionsToUpdate.snap }); ['margin', 'limit', 'step', 'range', 'animate'].forEach(function(name){ if ( optionsToUpdate[name] !== undefined ) { options[name] = optionsToUpdate[name]; } }); // Save current spectrum direction as testOptions in testRange call // doesn't rely on current direction newOptions.spectrum.direction = scope_Spectrum.direction; scope_Spectrum = newOptions.spectrum; // Invalidate the current positioning so valueSet forces an update. scope_Locations = [-1, -1]; valueSet(v); for ( i = 0; i < scope_Handles.length; i++ ) { fireEvent('update', i); } } // Throw an error if the slider was already initialized. if ( scope_Target.noUiSlider ) { throw new Error('Slider was already initialized.'); } // Create the base element, initialise HTML and set classes. // Add handles and links. scope_Base = addSlider( options.dir, options.ort, scope_Target ); scope_Handles = addHandles( options.handles, options.dir, scope_Base ); // Set the connect classes. addConnection ( options.connect, scope_Target, scope_Handles ); if ( options.pips ) { pips(options.pips); } if ( options.tooltips ) { tooltips(); } scope_Self = { destroy: destroy, steps: getCurrentStep, on: bindEvent, off: removeEvent, get: valueGet, set: valueSet, updateOptions: updateOptions, options: options, // Issue #600 target: scope_Target, // Issue #597 pips: pips // Issue #594 }; // Attach user events. events( options.events ); return scope_Self;