[ 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: pips.js
function getGroup ( mode, values, stepped ) { // Use the range. if ( mode === 'range' || mode === 'steps' ) { return scope_Spectrum.xVal; } if ( mode === 'count' ) { // Divide 0 - 100 in 'count' parts. var spread = ( 100 / (values-1) ), v, i = 0; values = []; // List these parts and have them handled as 'positions'. while ((v=i++*spread) <= 100 ) { values.push(v); } mode = 'positions'; } if ( mode === 'positions' ) { // Map all percentages to on-range values. return values.map(function( value ){ return scope_Spectrum.fromStepping( stepped ? scope_Spectrum.getStep( value ) : value ); }); } if ( mode === 'values' ) { // If the value must be stepped, it needs to be converted to a percentage first. if ( stepped ) { return values.map(function( value ){ // Convert to percentage, apply step, return to value. return scope_Spectrum.fromStepping( scope_Spectrum.getStep( scope_Spectrum.toStepping( value ) ) ); }); } // Otherwise, we can simply use the values. return values; } } function generateSpread ( density, mode, group ) { function safeIncrement(value, increment) { // Avoid floating point variance by dropping the smallest decimal places. return (value + increment).toFixed(7) / 1; } var originalSpectrumDirection = scope_Spectrum.direction, indexes = {}, firstInRange = scope_Spectrum.xVal[0], lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length-1], ignoreFirst = false, ignoreLast = false, prevPct = 0; // This function loops the spectrum in an ltr linear fashion, // while the toStepping method is direction aware. Trick it into // believing it is ltr. scope_Spectrum.direction = 0; // Create a copy of the group, sort it and filter away all duplicates. group = unique(group.slice().sort(function(a, b){ return a - b; })); // Make sure the range starts with the first element. if ( group[0] !== firstInRange ) { group.unshift(firstInRange); ignoreFirst = true; } // Likewise for the last one. if ( group[group.length - 1] !== lastInRange ) { group.push(lastInRange); ignoreLast = true; } group.forEach(function ( current, index ) { // Get the current step and the lower + upper positions. var step, i, q, low = current, high = group[index+1], newPct, pctDifference, pctPos, type, steps, realSteps, stepsize; // When using 'steps' mode, use the provided steps. // Otherwise, we'll step on to the next subrange. if ( mode === 'steps' ) { step = scope_Spectrum.xNumSteps[ index ]; } // Default to a 'full' step. if ( !step ) { step = high-low; } // Low can be 0, so test for false. If high is undefined, // we are at the last subrange. Index 0 is already handled. if ( low === false || high === undefined ) { return; } // Find all steps in the subrange. for ( i = low; i <= high; i = safeIncrement(i, step) ) { // Get the percentage value for the current step, // calculate the size for the subrange. newPct = scope_Spectrum.toStepping( i ); pctDifference = newPct - prevPct; steps = pctDifference / density; realSteps = Math.round(steps); // This ratio represents the ammount of percentage-space a point indicates. // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-devided. // Round the percentage offset to an even number, then divide by two // to spread the offset on both sides of the range. stepsize = pctDifference/realSteps; // Divide all points evenly, adding the correct number to this subrange. // Run up to <= so that 100% gets a point, event if ignoreLast is set. for ( q = 1; q <= realSteps; q += 1 ) { // The ratio between the rounded value and the actual size might be ~1% off. // Correct the percentage offset by the number of points // per subrange. density = 1 will result in 100 points on the // full range, 2 for 50, 4 for 25, etc. pctPos = prevPct + ( q * stepsize ); indexes[pctPos.toFixed(5)] = ['x', 0]; } // Determine the point type. type = (group.indexOf(i) > -1) ? 1 : ( mode === 'steps' ? 2 : 0 ); // Enforce the 'ignoreFirst' option by overwriting the type for 0. if ( !index && ignoreFirst ) { type = 0; } if ( !(i === high && ignoreLast)) { // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value. indexes[newPct.toFixed(5)] = [i, type]; } // Update the percentage count. prevPct = newPct; } }); // Reset the spectrum. scope_Spectrum.direction = originalSpectrumDirection; return indexes; } function addMarking ( spread, filterFunc, formatter ) { var style = ['horizontal', 'vertical'][options.ort], element = document.createElement('div'), out = ''; addClass(element, cssClasses[20]); addClass(element, cssClasses[20] + '-' + style); function getSize( type ){ return [ '-normal', '-large', '-sub' ][type]; } function getTags( offset, source, values ) { return 'class="' + source + ' ' + source + '-' + style + ' ' + source + getSize(values[1]) + '" style="' + options.style + ': ' + offset + '%"'; } function addSpread ( offset, values ){ if ( scope_Spectrum.direction ) { offset = 100 - offset; } // Apply the filter function, if it is set. values[1] = (values[1] && filterFunc) ? filterFunc(values[0], values[1]) : values[1]; // Add a marker for every point out += '<div ' + getTags(offset, cssClasses[21], values) + '></div>'; // Values are only appended for points marked '1' or '2'. if ( values[1] ) { out += '<div '+getTags(offset, cssClasses[22], values)+'>' + formatter.to(values[0]) + '</div>'; } } // Append all points. Object.keys(spread).forEach(function(a){ addSpread(a, spread[a]); }); element.innerHTML = out; return element; } function pips ( grid ) { var mode = grid.mode, density = grid.density || 1, filter = grid.filter || false, values = grid.values || false, stepped = grid.stepped || false, group = getGroup( mode, values, stepped ), spread = generateSpread( density, mode, group ), format = grid.format || { to: Math.round }; return scope_Target.appendChild(addMarking( spread, filter, format )); }