mirror of
https://github.com/noerw/gpx-visualize
synced 2025-03-13 22:00:27 +01:00
1 line
No EOL
3.1 KiB
JavaScript
1 line
No EOL
3.1 KiB
JavaScript
!function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i}({1:[function(require,module,exports){window.rainbowDash=require("./rainbow-dash")},{"./rainbow-dash":2}],2:[function(require,module,exports){function interpolate(m,b,x){return Math.floor(m*x+b)}function calculateM(x1,x2,y1,y2){return(y2-y1)/(x2-x1)}function calculateB(x1,x2,y1,y2){return(x2*y1-x1*y2)/(x2-x1)}function rgbStringToTriple(rgbString){return rgbString.match(/[0-9]+/g).map(Number)}function tripleToRgbString(r,g,b){return"rgb("+r+","+g+","+b+")"}function hexStringToTriple(hexString){var color=parseInt(hexString.substring(1),16);var red=Math.floor(color/(256*256));var green=Math.floor(color/256)%256;var blue=color%256;return[red,green,blue]}function tripleToHashString(r,g,b){return"#"+(1*256*256*256+r*256*256+g*256+b).toString(16).substring(1)}function stringToTriple(string){if(string[0]==="r")return rgbStringToTriple(string);if(string[0]==="#")return hexStringToTriple(string);throw new Error("Unknown CSS color string")}module.exports=function rainbowDash(options,stops){if(!stops){stops=options;options={}}switch(options.outputFormat){case"rgb":case"hex":break;default:options.outputFormat="rgb";break}var tripleToString=options.outputFormat==="rgb"?tripleToRgbString:tripleToHashString;if(options.inputRange){if(!(typeof options.inputRange==="object"&&options.inputRange instanceof Array)){delete options.inputRange}else if(options.inputRange.length!==2||typeof options.inputRange[0]!=="number"||typeof options.inputRange[1]!=="number"){delete options.inputRange}}if(options.uniformStops&&typeof stops==="object"&&stops instanceof Array&&options.inputRange){var newStops={};var numStops=stops.length;var stopDelta=(options.inputRange[1]-options.inputRange[0])/(numStops-1);for(var k=0;k<numStops;k++){newStops[stopDelta*k+options.inputRange[0]]=stops[k]}stops=newStops}var sortedStops=Object.keys(stops).map(Number).sort(function(a,b){return a-b});var minX=options.inputRange?options.inputRange[0]:sortedStops[0];var maxX=options.inputRange?options.inputRange[1]:sortedStops[sortedStops.length-1];var minY=tripleToString.apply(this,stringToTriple(stops[minX]));var maxY=tripleToString.apply(this,stringToTriple(stops[maxX]));var constants=[];for(var i=0;i<sortedStops.length-1;i++){var startX=sortedStops[i];var endX=sortedStops[i+1];var startYs=stringToTriple(stops[startX]);var endYs=stringToTriple(stops[endX]);constants[i]=[];for(var j=0;j<startYs.length;j++){constants[i][j]=[calculateM(startX,endX,startYs[j],endYs[j]),calculateB(startX,endX,startYs[j],endYs[j])]}}return function calculateRGB(x){if(x<=minX)return minY;if(x>=maxX)return maxY;var i=0;while(sortedStops[i+1]<x){i++}return tripleToString(interpolate(constants[i][0][0],constants[i][0][1],x),interpolate(constants[i][1][0],constants[i][1][1],x),interpolate(constants[i][2][0],constants[i][2][1],x))}}},{}]},{},[1]); |