(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.plotty = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i0;function N(r,e){var n={};L&&(n.filename=t.filename);var a=K(r);n.start={offset:r,line:a.line,column:a.column};var c=K(e);return n.end={offset:e,line:c.line,column:c.column},n}function O(r){var t=B[B.length-1];It.pos&&(t.pos=I,t.variants=[]),t.variants.push(r))}function P(r,t,e){return new peg$SyntaxError(peg$SyntaxError.buildMessage(r,t),r,t,e)}function Q(){var t,e,a,c,i,s,f,h,l=function(r){0===D&&O(r)};if(t=I,(e=V())!==n){for(a=[],c=I,i=rr(),l(v),43===r.charCodeAt(I)?(s=o,I++):s=n,s===n&&(l(y),45===r.charCodeAt(I)?(s=u,I++):s=n),s!==n?(f=rr(),(h=V())!==n?c=i=[i,s,f,h]:(I=c,c=n)):(I=c,c=n);c!==n;)a.push(c),c=I,i=rr(),l(v),43===r.charCodeAt(I)?(s=o,I++):s=n,s===n&&(l(y),45===r.charCodeAt(I)?(s=u,I++):s=n),s!==n?(f=rr(),(h=V())!==n?c=i=[i,s,f,h]:(I=c,c=n)):(I=c,c=n);U=t,t=M(e,a)}else I=t,t=n;return t}function V(){var t,e,a,c,o,u,f,h,l=function(r){0===D&&O(r)};if(t=I,(e=W())!==n){for(a=[],c=I,o=rr(),l(m),42===r.charCodeAt(I)?(u=i,I++):u=n,u===n&&(l(C),47===r.charCodeAt(I)?(u=s,I++):u=n),u!==n?(f=rr(),(h=W())!==n?c=o=[o,u,f,h]:(I=c,c=n)):(I=c,c=n);c!==n;)a.push(c),c=I,o=rr(),l(m),42===r.charCodeAt(I)?(u=i,I++):u=n,u===n&&(l(C),47===r.charCodeAt(I)?(u=s,I++):u=n),u!==n?(f=rr(),(h=W())!==n?c=o=[o,u,f,h]:(I=c,c=n)):(I=c,c=n);U=t,t=k(e,a)}else I=t,t=n;return t}function W(){var t,e,a,c,o,u,i,s,h=function(r){0===D&&O(r)};if(t=I,(e=X())!==n){for(a=[],c=I,o=rr(),h(E),r.substr(I,2)===f?(u=f,I+=2):u=n,u!==n?(i=rr(),(s=X())!==n?c=o=[o,u,i,s]:(I=c,c=n)):(I=c,c=n);c!==n;)a.push(c),c=I,o=rr(),h(E),r.substr(I,2)===f?(u=f,I+=2):u=n,u!==n?(i=rr(),(s=X())!==n?c=o=[o,u,i,s]:(I=c,c=n)):(I=c,c=n);U=t,t=k(e,a)}else I=t,t=n;return t}function X(){var t,e,a,c,o,u,i=function(r){0===D&&O(r)};return t=I,i($),40===r.charCodeAt(I)?(e=h,I++):e=n,e!==n?(a=rr(),(c=Q())!==n?(o=rr(),i(S),41===r.charCodeAt(I)?(u=l,I++):u=n,u!==n?(U=t,t=z(c)):(I=t,t=n)):(I=t,t=n)):(I=t,t=n),t===n&&(t=function(){var t,e,a,c,o,u;i=b,0===D&&O(i),D++,t=I,e=[],p.test(r.charAt(I))?(a=r.charAt(I),I++):a=n;var i;for(;a!==n;)e.push(a),p.test(r.charAt(I))?(a=r.charAt(I),I++):a=n;a=[],A.test(r.charAt(I))?(c=r.charAt(I),I++):c=n;if(c!==n)for(;c!==n;)a.push(c),A.test(r.charAt(I))?(c=r.charAt(I),I++):c=n;else a=n;if(a!==n)if(r.length>I?(c=r.charAt(I),I++):c=n,c!==n){if(o=[],A.test(r.charAt(I))?(u=r.charAt(I),I++):u=n,u!==n)for(;u!==n;)o.push(u),A.test(r.charAt(I))?(u=r.charAt(I),I++):u=n;else o=n;o!==n?(U=t,t=Z()):(I=t,t=n)}else I=t,t=n;else I=t,t=n;return D--,t}())===n&&(t=function(){var t,e,a,c;o=w,0===D&&O(o),D++,t=I,e=[],p.test(r.charAt(I))?(a=r.charAt(I),I++):a=n;var o;for(;a!==n;)e.push(a),p.test(r.charAt(I))?(a=r.charAt(I),I++):a=n;a=[],A.test(r.charAt(I))?(c=r.charAt(I),I++):c=n;if(c!==n)for(;c!==n;)a.push(c),A.test(r.charAt(I))?(c=r.charAt(I),I++):c=n;else a=n;a!==n?(U=t,t=_()):(I=t,t=n);return D--,t}())===n&&(t=I,(e=Y())!==n?(i($),40===r.charCodeAt(I)?(a=h,I++):a=n,a!==n&&(c=Q())!==n?(i(S),41===r.charCodeAt(I)?(o=l,I++):o=n,o!==n?(U=t,t=T(e,c)):(I=t,t=n)):(I=t,t=n)):(I=t,t=n),t===n&&(t=Y())),t}function Y(){var t,e,a,c,o,u;for(u=F,0===D&&O(u),D++,t=I,e=[],p.test(r.charAt(I))?(a=r.charAt(I),I++):a=n;a!==n;)e.push(a),p.test(r.charAt(I))?(a=r.charAt(I),I++):a=n;if(g.test(r.charAt(I))?(a=r.charAt(I),I++):a=n,a!==n){for(c=[],d.test(r.charAt(I))?(o=r.charAt(I),I++):o=n;o!==n;)c.push(o),d.test(r.charAt(I))?(o=r.charAt(I),I++):o=n;U=t,t=j()}else I=t,t=n;return D--,t}function rr(){var t,e,a;for(a=R,0===D&&O(a),D++,t=[],x.test(r.charAt(I))?(e=r.charAt(I),I++):e=n;e!==n;)t.push(e),x.test(r.charAt(I))?(e=r.charAt(I),I++):e=n;return D--,t}function tr(r,t,e){if("number"==typeof r&&"number"==typeof t)switch(e){case"+":return r+t;case"-":return r-t;case"*":return r*t;case"/":return r/t;case"**":return Math.pow(r,t)}return{lhs:r,rhs:t,op:e}}if(B.push({pos:I,variants:[]}),(e=c())!==n&&I===r.length)return e;throw e!==n&&I0){for(t=1,e=1;t=a.width||t>=a.height)throw new Error("Coordinates are outside of image bounds.");return a.data[t*a.width+e]}},{key:"setData",value:function(e,t,a){this.currentDataset&&null===this.currentDataset.id&&destroyDataset(this.gl,this.currentDataset),this.currentDataset=createDataset(this.gl,null,e,t,a)}},{key:"addDataset",value:function(e,t,a,r){if(this.datasetAvailable(e))throw new Error("There is already a dataset registered with id '".concat(e,"'"));this.datasetCollection[e]=createDataset(this.gl,e,t,a,r),this.currentDataset||(this.currentDataset=this.datasetCollection[e])}},{key:"setCurrentDataset",value:function(e){if(!this.datasetAvailable(e))throw new Error("No such dataset registered: '".concat(e,"'"));this.currentDataset&&null===this.currentDataset.id&&destroyDataset(this.gl,this.currentDataset),this.currentDataset=this.datasetCollection[e]}},{key:"removeDataset",value:function(e){var t=this.datasetCollection[e];if(!t)throw new Error("No such dataset registered: '".concat(e,"'"));destroyDataset(this.gl,t),this.currentDataset===t&&(this.currentDataset=null),delete this.datasetCollection[e]}},{key:"datasetAvailable",value:function(e){return hasOwnProperty(this.datasetCollection,e)}},{key:"getColorScaleImage",value:function(){return this.colorScaleImage}},{key:"setCanvas",value:function(e){this.canvas=e||document.createElement("canvas")}},{key:"setDomain",value:function(e){if(!e||2!==e.length)throw new Error("Invalid domain specified.");this.domain=e}},{key:"setDisplayRange",value:function(e){if(!e||2!==e.length)throw new Error("Invalid view range specified.");this.displayRange=e,this.applyDisplayRange=!0}},{key:"getCanvas",value:function(){return this.canvas}},{key:"setColorScale",value:function(e){if(!hasOwnProperty(_colorscales.colorscales,e))throw new Error("No such color scale '".concat(e,"'"));this.colorScaleCanvas||(this.colorScaleCanvas=document.createElement("canvas"),this.colorScaleCanvas.width=256,this.colorScaleCanvas.height=1),renderColorScaleToCanvas(e,this.colorScaleCanvas),this.name=e,this.setColorScaleImage(this.colorScaleCanvas)}},{key:"setClamp",value:function(e,t){this.clampLow=e,this.clampHigh=void 0!==t?t:e}},{key:"setColorScaleImage",value:function(e){this.colorScaleImage=e;var t=this.gl;t&&(this.textureScale&&t.deleteTexture(this.textureScale),this.textureScale=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this.textureScale),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,e))}},{key:"setNoDataValue",value:function(e){this.noDataValue=e}},{key:"render",value:function(){var e=this.canvas,t=this.currentDataset;e.width=t.width,e.height=t.height;var a=null;if(this.expressionAst){var r=new Set([]);!function e(t){"string"==typeof t&&r.add(t.replace(new RegExp(/[+-]/,"g"),"")),"string"==typeof t.lhs?r.add(t.lhs.replace(new RegExp(/[+-]/,"g"),"")):"object"===_typeof(t.lhs)&&e(t.lhs),"string"==typeof t.rhs?r.add(t.rhs.replace(new RegExp(/[+-]/,"g"),"")):"object"===_typeof(t.rhs)&&e(t.rhs)}(this.expressionAst),a=Array.from(r)}var o=null;if(this.gl){var n=this.gl;if(n.viewport(0,0,t.width,t.height),this.expressionAst){var i=function e(t){return"object"===_typeof(t)?"**"===t.op?"pow(".concat(e(t.lhs),", ").concat(e(t.rhs),")"):t.fn?"(".concat(t.fn,"(").concat(e(t.lhs),"))"):"(".concat(e(t.lhs)," ").concat(t.op," ").concat(e(t.rhs),")"):"string"==typeof t?"".concat(t,"_value"):"float(".concat(t,")")}(this.expressionAst),l="\n precision mediump float;\n // our texture\n uniform sampler2D u_textureScale;\n\n // add all required textures\n".concat(a.map(function(e){return" uniform sampler2D u_texture_".concat(e,";")}).join("\n"),"\n\n uniform vec2 u_textureSize;\n uniform vec2 u_domain;\n uniform float u_noDataValue;\n uniform bool u_clampLow;\n uniform bool u_clampHigh;\n // the texCoords passed in from the vertex shader.\n varying vec2 v_texCoord;\n void main() {\n").concat(a.map(function(e){return" float ".concat(e,"_value = texture2D(u_texture_").concat(e,", v_texCoord)[0];")}).join("\n"),"\n float value = ").concat(i,";\n\n if (value == u_noDataValue)\n gl_FragColor = vec4(0.0, 0, 0, 0.0);\n else if ((!u_clampLow && value < u_domain[0]) || (!u_clampHigh && value > u_domain[1]))\n gl_FragColor = vec4(0, 0, 0, 0);\n else {\n float normalisedValue = (value - u_domain[0]) / (u_domain[1] - u_domain[0]);\n gl_FragColor = texture2D(u_textureScale, vec2(normalisedValue, 0));\n }\n }");o=createProgram(n,vertexShaderSource,l),n.useProgram(o),n.uniform1i(n.getUniformLocation(o,"u_textureScale"),0),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,this.textureScale);for(var s=0;s255&&(I=255,this.clampHigh||(D=0)),U[F]===this.noDataValue||U[F]!=U[F]?D=0:this.applyDisplayRange&&(U[F]=this.displayRange[1])&&(D=0);var X=4*(P*C+L);w.data[X+0]=b[4*I],w.data[X+1]=b[4*I+1],w.data[X+2]=b[4*I+2],w.data[X+3]=Math.min(D,b[4*I+3])}y.putImageData(w,0,0)}}},{key:"renderDataset",value:function(e){return this.setCurrentDataset(e),this.render()}},{key:"getColor",value:function(e){var t=this.colorScaleCanvas.width,a=this.colorScaleCanvas.getContext("2d").getImageData(0,0,t,1).data,r=this.domain[1]-this.domain[0],o=Math.round((e-this.domain[0])/r*t),n=255;return o<0&&(o=0,this.clampLow||(n=0)),o>255&&(o=255,this.clampHigh||(n=0)),[a[4*o],a[4*o+1],a[4*o+2],n]}},{key:"setExpression",value:function(e){e&&e.length?this.expressionAst=(0,_arithmeticsParser.parse)(e):this.expressionAst=null}}]),e}();exports.plot=plot; },{"./arithmetics-parser":1,"./colorscales":2}]},{},[3])(3) });