[ 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_events.js
// Handler for attaching events trough a proxy. function attach ( events, element, callback, data ) { // This function can be used to 'filter' events to the slider. // element is a node, not a nodeList var method = function ( e ){ if ( scope_Target.hasAttribute('disabled') ) { return false; } // Stop if an active 'tap' transition is taking place. if ( hasClass(scope_Target, cssClasses[14]) ) { return false; } e = fixEvent(e, data.pageOffset); // Ignore right or middle clicks on start #454 if ( events === actions.start && e.buttons !== undefined && e.buttons > 1 ) { return false; } // Ignore right or middle clicks on start #454 if ( data.hover && e.buttons ) { return false; } e.calcPoint = e.points[ options.ort ]; // Call the event handler with the event [ and additional data ]. callback ( e, data ); }, methods = []; // Bind a closure on the target for every event type. events.split(' ').forEach(function( eventName ){ element.addEventListener(eventName, method, false); methods.push([eventName, method]); }); return methods; } // Handle movement on document for handle and range drag. function move ( event, data ) { // Fix #498 // Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty). // https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero // IE9 has .buttons and .which zero on mousemove. // Firefox breaks the spec MDN defines. if ( navigator.appVersion.indexOf("MSIE 9") === -1 && event.buttons === 0 && data.buttonsProperty !== 0 ) { return end(event, data); } var handles = data.handles || scope_Handles, positions, state = false, proposal = ((event.calcPoint - data.start) * 100) / data.baseSize, handleNumber = handles[0] === scope_Handles[0] ? 0 : 1, i; // Calculate relative positions for the handles. positions = getPositions( proposal, data.positions, handles.length > 1); state = setHandle ( handles[0], positions[handleNumber], handles.length === 1 ); if ( handles.length > 1 ) { state = setHandle ( handles[1], positions[handleNumber?0:1], false ) || state; if ( state ) { // fire for both handles for ( i = 0; i < data.handles.length; i++ ) { fireEvent('slide', i); } } } else if ( state ) { // Fire for a single handle fireEvent('slide', handleNumber); } } // Unbind move events on document, call callbacks. function end ( event, data ) { // The handle is no longer active, so remove the class. var active = scope_Base.querySelector( '.' + cssClasses[15] ), handleNumber = data.handles[0] === scope_Handles[0] ? 0 : 1; if ( active !== null ) { removeClass(active, cssClasses[15]); } // Remove cursor styles and text-selection events bound to the body. if ( event.cursor ) { document.body.style.cursor = ''; document.body.removeEventListener('selectstart', document.body.noUiListener); } var d = document.documentElement; // Unbind the move and end events, which are added on 'start'. d.noUiListeners.forEach(function( c ) { d.removeEventListener(c[0], c[1]); }); // Remove dragging class. removeClass(scope_Target, cssClasses[12]); // Fire the change and set events. fireEvent('set', handleNumber); fireEvent('change', handleNumber); // If this is a standard handle movement, fire the end event. if ( data.handleNumber !== undefined ) { fireEvent('end', data.handleNumber); } } // Fire 'end' when a mouse or pen leaves the document. function documentLeave ( event, data ) { if ( event.type === "mouseout" && event.target.nodeName === "HTML" && event.relatedTarget === null ){ end ( event, data ); } } // Bind move events on document. function start ( event, data ) { var d = document.documentElement; // Mark the handle as 'active' so it can be styled. if ( data.handles.length === 1 ) { addClass(data.handles[0].children[0], cssClasses[15]); // Support 'disabled' handles if ( data.handles[0].hasAttribute('disabled') ) { return false; } } // Fix #551, where a handle gets selected instead of dragged. event.preventDefault(); // A drag should never propagate up to the 'tap' event. event.stopPropagation(); // Attach the move and end events. var moveEvent = attach(actions.move, d, move, { start: event.calcPoint, baseSize: baseSize(), pageOffset: event.pageOffset, handles: data.handles, handleNumber: data.handleNumber, buttonsProperty: event.buttons, positions: [ scope_Locations[0], scope_Locations[scope_Handles.length - 1] ] }), endEvent = attach(actions.end, d, end, { handles: data.handles, handleNumber: data.handleNumber }); var outEvent = attach("mouseout", d, documentLeave, { handles: data.handles, handleNumber: data.handleNumber }); d.noUiListeners = moveEvent.concat(endEvent, outEvent); // Text selection isn't an issue on touch devices, // so adding cursor styles can be skipped. if ( event.cursor ) { // Prevent the 'I' cursor and extend the range-drag cursor. document.body.style.cursor = getComputedStyle(event.target).cursor; // Mark the target with a dragging state. if ( scope_Handles.length > 1 ) { addClass(scope_Target, cssClasses[12]); } var f = function(){ return false; }; document.body.noUiListener = f; // Prevent text selection when dragging the handles. document.body.addEventListener('selectstart', f, false); } if ( data.handleNumber !== undefined ) { fireEvent('start', data.handleNumber); } } // Move closest handle to tapped location. function tap ( event ) { var location = event.calcPoint, total = 0, handleNumber, to; // The tap event shouldn't propagate up and cause 'edge' to run. event.stopPropagation(); // Add up the handle offsets. scope_Handles.forEach(function(a){ total += offset(a)[ options.style ]; }); // Find the handle closest to the tapped position. handleNumber = ( location < total/2 || scope_Handles.length === 1 ) ? 0 : 1; // Check if handler is not disablet if yes set number to the next handler if (scope_Handles[handleNumber].hasAttribute('disabled')) { handleNumber = handleNumber ? 0 : 1; } location -= offset(scope_Base)[ options.style ]; // Calculate the new position. to = ( location * 100 ) / baseSize(); if ( !options.events.snap ) { // Flag the slider as it is now in a transitional state. // Transition takes 300 ms, so re-enable the slider afterwards. addClassFor( scope_Target, cssClasses[14], 300 ); } // Support 'disabled' handles if ( scope_Handles[handleNumber].hasAttribute('disabled') ) { return false; } // Find the closest handle and calculate the tapped point. // The set handle to the new position. setHandle( scope_Handles[handleNumber], to ); fireEvent('slide', handleNumber, true); fireEvent('set', handleNumber, true); fireEvent('change', handleNumber, true); if ( options.events.snap ) { start(event, { handles: [scope_Handles[handleNumber]] }); } } // Fires a 'hover' event for a hovered mouse/pen position. function hover ( event ) { var location = event.calcPoint - offset(scope_Base)[ options.style ], to = scope_Spectrum.getStep(( location * 100 ) / baseSize()), value = scope_Spectrum.fromStepping( to ); Object.keys(scope_Events).forEach(function( targetEvent ) { if ( 'hover' === targetEvent.split('.')[0] ) { scope_Events[targetEvent].forEach(function( callback ) { callback.call( scope_Self, value ); }); } }); } // Attach events to several slider parts. function events ( behaviour ) { var i, drag; // Attach the standard drag event to the handles. if ( !behaviour.fixed ) { for ( i = 0; i < scope_Handles.length; i += 1 ) { // These events are only bound to the visual handle // element, not the 'real' origin element. attach ( actions.start, scope_Handles[i].children[0], start, { handles: [ scope_Handles[i] ], handleNumber: i }); } } // Attach the tap event to the slider base. if ( behaviour.tap ) { attach ( actions.start, scope_Base, tap, { handles: scope_Handles }); } // Fire hover events if ( behaviour.hover ) { attach ( actions.move, scope_Base, hover, { hover: true } ); for ( i = 0; i < scope_Handles.length; i += 1 ) { ['mousemove MSPointerMove pointermove'].forEach(function( eventName ){ scope_Handles[i].children[0].addEventListener(eventName, stopPropagation, false); }); } } // Make the range draggable. if ( behaviour.drag ){ drag = [scope_Base.querySelector( '.' + cssClasses[7] )]; addClass(drag[0], cssClasses[10]); // When the range is fixed, the entire range can // be dragged by the handles. The handle in the first // origin will propagate the start event upward, // but it needs to be bound manually on the other. if ( behaviour.fixed ) { drag.push(scope_Handles[(drag[0] === scope_Handles[0] ? 1 : 0)].children[0]); } drag.forEach(function( element ) { attach ( actions.start, element, start, { handles: scope_Handles }); }); } }