/* html-palette v1.1.1 - built on 2015-12-16 */
"use strict";!function(a,b){function c(a,b,c){if(0===b)return{r:c,g:c,b:c};var d=Math.floor(6*a),e=6*a-d,f=c*(1-b),g=c*(1-b*e),h=c*(1-b*(1-e));switch(d%6){case 0:return{r:c,g:h,b:f};case 1:return{r:g,g:c,b:f};case 2:return{r:f,g:c,b:h};case 3:return{r:f,g:g,b:c};case 4:return{r:h,g:f,b:c};default:return{r:c,g:f,b:g}}}function d(a,b,c){var d,e,f=Math.max(a,b,c),g=Math.min(a,b,c),h=f,i=f-g;if(e=0===f?0:i/f,f==g)d=0;else{switch(f){case a:d=(b-c)/i+(c>b?6:0);break;case b:d=(c-a)/i+2;break;case c:d=(a-b)/i+4}d/=6}return{h:d,s:e,v:h}}function e(a,b){if(a||(a={}),void 0===a.a&&(a.a=1),b&&void 0!==b.a&&(a.a=b.a),!b||void 0===b.h&&void 0===b.s&&void 0===b.v)if(!b||void 0===b.r&&void 0===b.g&&void 0===b.b){if(/^[0-9A-Fa-f]{6}$/.test(b)){a.hex=b,b=parseInt(b,16),a.r=((16711680&b)>>16)/255,a.g=((65280&b)>>8)/255,a.b=(255&b)/255;var e=d(a.r,a.g,a.b);a.h=e.h,a.s=e.s,a.v=e.v}}else{void 0!==b.r&&(a.r=b.r),void 0!==b.g&&(a.g=b.g),void 0!==b.b&&(a.b=b.b);var e=d(a.r,a.g,a.b);a.h=e.h,a.s=e.s,a.v=e.v,a.hex=("00"+Math.round(255*a.r).toString(16)).slice(-2)+("00"+Math.round(255*a.g).toString(16)).slice(-2)+("00"+Math.round(255*a.b).toString(16)).slice(-2)}else{void 0!==b.h&&(a.h=b.h),void 0!==b.s&&(a.s=b.s),void 0!==b.v&&(a.v=b.v);var f=c(a.h,a.s,a.v);a.r=Math.max(f.r,0),a.g=Math.max(f.g,0),a.b=Math.max(f.b,0),a.hex=("00"+Math.round(255*a.r).toString(16)).slice(-2)+("00"+Math.round(255*a.g).toString(16)).slice(-2)+("00"+Math.round(255*a.b).toString(16)).slice(-2)}var g=[Math.round(255*a.r),Math.round(255*a.g),Math.round(255*a.b),a.a];return a.css="rgba("+g.join(",")+")",a.background="linear-gradient("+a.css+","+a.css+"), url("+j+")",a}function f(a,b){this.triggerElem=a,this.colorCallback=b.colorCallback||null,this.colorSelectCallback=b.colorSelectCallback||null,this.popupEdge=b.popupEdge||"se",this.css=b.css||"",this.radial=b.radial||!1,this.useAlpha=b.useAlpha||!1,this.updateTriggerBg=void 0!==b.updateTriggerBg?b.updateTriggerBg:!0,this.disabled=b.disabled||!1,this.selection={},this.color(b.initialColor||"aaaaaa"),k.initialize();var c=this;a.addEventListener("click",this._clickHandler=function(a){k.triggerElem===c.triggerElem||c.disabled||(k.triggerElem=c.triggerElem,k.colorCallback=c.color.bind(c),k.colorSelectCallback=function(a){c.colorSelectCallback&&c.colorSelectCallback(JSON.parse(JSON.stringify(a)))},k.show({radial:c.radial,useAlpha:c.useAlpha,popupEdge:c.popupEdge,css:c.css,color:c.selection},a))})}var g='
\n\n
\n #\n \n \n \n \n
\n
\n
\n',h="precision lowp float;\nattribute vec3 vertPosition;\nvarying vec2 windowPosition;\nuniform vec2 windowDimensions;\n\nvoid main(void)\n{\n mat3 xform = mat3(0.5*windowDimensions.x, 0.0, 0.0, 0.0, 0.5*windowDimensions.y, 0.0, windowDimensions.x/2.0, windowDimensions.y/2.0, 1.0);\n windowPosition = (xform * vec3(vertPosition.xy, 1.0)).xy;\n gl_Position = vec4(vertPosition,1);\n}\n\n",i="precision lowp float;\n#define M_PI 3.141592653589\n\nvarying vec2 windowPosition;\nuniform vec4 selectedColor;\nuniform float swatchWidth;\nuniform float marginWidth;\nuniform vec2 windowDimensions;\nuniform bool radial;\nuniform bool useAlpha;\nuniform sampler2D tex;\n\nvec3 hsv2rgb(vec3 c){\n vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\n vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\n return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n}\n\nvec4 getSelectionColor(vec4 baseColor){\n return vec4( vec3(1.0)-baseColor.rgb, baseColor.a );\n}\n\nvoid main(void){\n\n float taLeft = useAlpha ? swatchWidth + marginWidth : 0.0;\n float taWidth = windowDimensions.x - swatchWidth - marginWidth - taLeft;\n vec2 center = vec2(taWidth/2.0+taLeft, windowDimensions.y/2.0);\n float aspect = taWidth / windowDimensions.y;\n vec4 color;\n vec2 selectionPosition;\n\n if( windowPosition.x >= taLeft && windowPosition.x <= taLeft+taWidth )\n {\n if(radial)\n {\n vec2 radialVec = (windowPosition - center)*vec2(2.0/taWidth, 2.0/windowDimensions.y);\n radialVec = mat2(max(1.0,aspect), 0.0, 0.0, max(1.0,1.0/aspect)) * radialVec;\n if(length(radialVec) > 1.0) discard;\n float hue = atan(radialVec.y,radialVec.x)/(2.0*M_PI) + 0.5;\n color = vec4(hue, length(radialVec), selectedColor.z, 1.0);\n\n float angle = (selectedColor.x-0.5)*2.0*M_PI;\n selectionPosition = min(center.x-taLeft, center.y) * selectedColor.y * vec2(cos(angle), sin(angle)) + center;\n }\n else {\n color = vec4((windowPosition.x-taLeft)/taWidth, windowPosition.y/windowDimensions.y, selectedColor.z, 1.0);\n selectionPosition = vec2(selectedColor.x*taWidth+taLeft, selectedColor.y*windowDimensions.y);\n }\n\n vec2 difference = selectionPosition - windowPosition;\n float radius = length(difference);\n\n if( radius > 4.5 && radius < 6.0 )\n gl_FragColor = getSelectionColor(vec4(hsv2rgb(color.xyz), 1.0 ));\n else\n gl_FragColor = vec4( hsv2rgb(color.xyz), 1.0);\n }\n\n else if(useAlpha && windowPosition.x < swatchWidth)\n {\n vec4 color = vec4(mix( texture2D(tex, windowPosition/16.0).xyz, hsv2rgb(selectedColor.xyz), windowPosition.y/windowDimensions.y), 1.0);\n\n if( windowDimensions.y * abs(windowPosition.y/windowDimensions.y-selectedColor.w) < 1.0 )\n gl_FragColor = getSelectionColor(color);\n else\n gl_FragColor = color;\n }\n\n else if(windowPosition.x > windowDimensions.x-swatchWidth)\n {\n vec4 color = vec4( selectedColor.x, selectedColor.y, windowPosition.y/windowDimensions.y, 1.0);\n\n if( windowDimensions.y * abs(windowPosition.y/windowDimensions.y-selectedColor.z) < 1.0 )\n gl_FragColor = getSelectionColor(vec4(hsv2rgb(color.xyz), 1.0 ));\n else\n gl_FragColor = vec4( hsv2rgb(color.xyz), 1.0);\n }\n else\n discard;\n}\n\n",j="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAK0lEQVQoz2Pcu3cvAzbg5OSEVZyJgUQwqoEYwPj//3+sEvv27RsNJfppAAD+GAhT8tRPqwAAAABJRU5ErkJggg==",k={colorCallback:null,colorSelectCallback:null,elem:document.createElement("div"),initialize:function(){function a(a,c){a.ondragstart=function(a){r=Math.round(255*b.selection[c]),s=a.offsetY,a.dataTransfer.effectAllowed="none",a.dataTransfer.setDragImage(document.createElement("div"),0,0)},a.ondrag=function(a){var d=r+s-a.offsetY;if(0!==a.screenX||0!==a.screenY){var e={};e[c]=Math.max(0,Math.min(1,d/255)),b.color(e)}},a.ondragend=function(a){b.colorSelectCallback&&b.colorSelectCallback(b.selection)}}var b=this;if(!document.getElementById("htmlPalettePopup")){this.elem=document.createElement("div"),this.elem.id="htmlPalettePopup",this.elem.innerHTML=g,this.elem.onclick=function(a){a.stopPropagation()},this.elem.style.display="none",document.body.appendChild(this.elem),document.addEventListener("click",function(a){b.hide()}),this.canvas=this.elem.children[0].children[0],this.gl=this.canvas.getContext("webgl"),this.gl||(this.gl=this.canvas.getContext("experimental-webgl"));var c=this.gl;if(!c)return void console.error("Your web browser does not support WebGL, so cannot make use of the HtmlPalette color picker. Sorry :(");var d=c.createShader(c.VERTEX_SHADER);if(c.shaderSource(d,h),c.compileShader(d),!c.getShaderParameter(d,c.COMPILE_STATUS))return void console.error("Vert shader error:",c.getShaderInfoLog(d));var e=c.createShader(c.FRAGMENT_SHADER);if(c.shaderSource(e,i),c.compileShader(e),!c.getShaderParameter(e,c.COMPILE_STATUS))return void console.error("Frag shader error:",c.getShaderInfoLog(e));var f=this._program=c.createProgram();if(c.attachShader(f,d),c.attachShader(f,e),c.linkProgram(f),!c.getProgramParameter(f,c.LINK_STATUS))return void console.error("Unable to link program");c.useProgram(f),this._program=f;var k=c.getAttribLocation(f,"vertPosition");c.enableVertexAttribArray(k);var l=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,l),c.bufferData(c.ARRAY_BUFFER,new Float32Array([-1,-1,0,-1,1,0,1,-1,0,1,1,0]),c.STATIC_DRAW),c.vertexAttribPointer(k,3,c.FLOAT,!1,0,0),c.uniform1f(c.getUniformLocation(f,"swatchWidth"),20),c.uniform1f(c.getUniformLocation(f,"marginWidth"),10);var m=c.createTexture(),n=new Image;n.onload=function(){c.bindTexture(c.TEXTURE_2D,m),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,n),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.NEAREST)},n.src=j,c.clearColor(0,0,0,0);var o=this.elem.querySelector(".twoaxis"),p=this.elem.querySelector(".oneaxis"),q=this.elem.querySelector(".alpha");o.ondragstart=function(a){a.dataTransfer.setDragImage&&a.dataTransfer.setDragImage(document.createElement("div"),0,0),a.dataTransfer.dropEffect&&(a.dataTransfer.dropEffect="move")},o.ondrag=o.onmousedown=function(a){var c=b.canvas.width-(b.lastOpts&&b.lastOpts.useAlpha?60:30),d=b.canvas.height;if(b.lastOpts.radial){var e=[c/2,d/2],f=[a.offsetX-1-e[0],-(a.offsetY-1)+e[1]],g=Math.atan2(f[1],f[0])/(2*Math.PI)+.5,h=Math.sqrt(f[0]*f[0]+f[1]*f[1])/Math.min(e[0],e[1]);(0!==a.screenX||0!==a.screenY)&&b.color({h:g,s:Math.min(h,1)})}else(0!==a.screenX||0!==a.screenY)&&b.color({h:Math.min(1,Math.max(0,(a.offsetX-1)/c)),s:Math.min(1,Math.max(0,(d-a.offsetY+1)/(d-1)))})},p.ondragstart=function(a){a.dataTransfer.setDragImage(document.createElement("div"),0,0)},p.ondrag=p.onmousedown=function(a){var c=b.canvas.height;(0!==a.screenX||0!==a.screenY)&&b.color({v:Math.max(0,Math.min(1,(c-a.offsetY-1)/(c-1)))})},q.ondragstart=function(a){a.dataTransfer.setDragImage(document.createElement("div"),0,0)},q.ondrag=q.onmousedown=function(a){var c=b.canvas.height;(0!==a.screenX||0!==a.screenY)&&b.color({a:Math.max(0,Math.min(1,(c-a.offsetY-1)/(c-1)))})},o.ondragend=o.onmouseup=p.ondragend=p.onmouseup=q.ondragend=q.onmouseup=function(a){b.colorSelectCallback&&b.colorSelectCallback(b.selection)};var r,s;a(this.elem.querySelector(".r"),"r"),a(this.elem.querySelector(".g"),"g"),a(this.elem.querySelector(".b"),"b"),a(this.elem.querySelector(".a"),"a")}},rebind:function(a,b){var c=window.getComputedStyle(this.elem.querySelector(".palette")),d=parseInt(c.width),e=parseInt(c.height)-4;this.gl.uniform2f(this.gl.getUniformLocation(this._program,"windowDimensions"),d,e),this.gl.uniform1i(this.gl.getUniformLocation(this._program,"useAlpha"),!!a),this.gl.uniform1i(this.gl.getUniformLocation(this._program,"radial"),!!b)},placePopup:function(a,b){a.stopPropagation();var c=window.getComputedStyle(this.elem),d=parseInt(c.width)||0,e=parseInt(c.height)||0,f=a.target.getBoundingClientRect(),g={x:(f.left+f.right)/2,y:(f.top+f.bottom)/2},h=20;/^[ns]?[we]?$/.test(b)&&b||(b="se"),/^n/.test(b)?this.elem.style.top=g.y-e-h+"px":/^s/.test(b)?this.elem.style.top=g.y+h+"px":this.elem.style.top=g.y-e/2+"px",/e$/.test(b)?this.elem.style.left=g.x+h+"px":/w$/.test(b)?this.elem.style.left=g.x-d-h+"px":this.elem.style.left=g.x-d/2+"px",this.elem.style.display=""},sizePopup:function(a,b){this.elem.setAttribute("class",b||"");var c=window.getComputedStyle(this.elem);this._popupWidth=parseInt(c.width)||0,this._popupHeight=parseInt(c.height)||0;var d=window.getComputedStyle(this.elem.querySelector(".palette")),e=parseInt(d.width),f=parseInt(d.height)-4;this.canvas.width=e,this.canvas.height=f,this.gl.viewport(0,0,e,f);var g=a?e-60:e-30,h=this.elem.querySelector(".twoaxis"),i=this.elem.querySelector(".oneaxis"),j=this.elem.querySelector(".alpha");h.style.width=g+"px",h.style.height=f+"px",i.style.height=f+"px",j.style.height=f+"px",a?(j.style.display="",this.elem.querySelector(".rgbInput .a").style.display="",h.style.left=""):(j.style.display="none",this.elem.querySelector(".rgbInput .a").style.display="none",h.style.left="0px")},color:function(a){this.selection=e(this.selection,a),a&&(this.redraw(),this.colorCallback&&this.colorCallback(this.selection))},redraw:function(){var a=this.gl.getUniformLocation(this._program,"selectedColor");this.gl.uniform4f(a,this.selection.h,this.selection.s,this.selection.v,this.selection.a),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4),this.elem.querySelector(".rgbInput .r").innerHTML=this.selection.hex.slice(0,2),this.elem.querySelector(".rgbInput .g").innerHTML=this.selection.hex.slice(2,4),this.elem.querySelector(".rgbInput .b").innerHTML=this.selection.hex.slice(4,6),this.elem.querySelector(".rgbInput .a").innerHTML=("00"+Math.round(255*this.selection.a).toString(16)).slice(-2),this.elem.querySelector(".colorswatch").style.background=this.selection.background},show:function(a,b){this.gl&&(this.lastOpts=a,a=a||{},this.placePopup(b,a.popupEdge),this.sizePopup(a.useAlpha,a.css),this.rebind(a.useAlpha,a.radial),this.selection=a.color,this.redraw())},hide:function(){this.elem.style.display="none",this.colorCallback=null,this.colorSelectCallback=null,this.triggerElem=null}};if(f.prototype.color=function(a,b){return void 0===a?this.selection:(this.selection!==a&&(this.selection=e(this.selection,a)),this.updateTriggerBg&&(this.triggerElem.style.background=this.selection.background),this.colorCallback&&this.colorCallback(JSON.parse(JSON.stringify(this.selection)),b),void 0)},f.prototype.destroy=function(){this.triggerElem.removeEventListener("click",this._clickHandler),k.triggerElem===this.triggerElem&&k.hide()},window.HtmlPalette=f,window.HtmlPalette.PalettePopup=k,a&&a.fn.extend({HtmlPalette:function(a){var b=Array.prototype.slice.call(arguments,1),c=this.data("HtmlPalette");if(!a)return c;if(a instanceof Object)c&&c.destroy(),c=this.data("HtmlPalette",new HtmlPalette(this[0],a)),c.colorCallback&&(c.colorCallback=c.colorCallback.bind(this));else{if(!c)throw new Error("HtmlPalette is uninitialized on this element");switch(a){case"color":if(!b.length)return c.color();c.color(b[0]);break;case"colorCallback":if(!b.length)return c.colorCallback;c.colorCallback=b[0].bind(this);break;case"colorSelectCallback":if(!b.length)return c.colorSelectCallback;c.colorSelectCallback=b[0].bind(this);break;case"popupEdge":if(!b.length)return c.popupEdge;c.popupEdge=b[0];break;case"radial":if(!b.length)return c.radial;c.radial=b[0];break;case"updateTriggerBg":if(!b.length)return c.updateTriggerBg;c.updateTriggerBg=b[0];break;case"disabled":if(!b.length)return c.disabled;c.disabled=b[0];break;case"destroy":c.destroy(),this.data("htmlPalette",null)}}}}),b){var l=b.module("html-palette",[]);l.directive("htmlPalette",["$timeout",function(a){return{restrict:"AE",scope:{color:"=",radial:"=?",alpha:"=?",disabled:"=?",onColorSelect:"&?"},link:function(b,c,d){var e=null;d.initialColor=b.color;var g=new f(c[0],d);b.$watch("radial",function(a){g.radial=!!a}),b.$watch("alpha",function(a){g.alpha=!!a}),b.$watch("disabled",function(a){g.disabled=!!a}),c.bind("$destroy",function(){g.destroy()}),g.colorSelectCallback=function(a){b.onColorSelect&&b.onColorSelect({color:a})},g.colorCallback=function(c,f){if(b.color){if("hex"===d.colorProfile)b.color.hex=c.hex;else if(/^[rgbhsva]+$/.test(d.colorProfile))for(var g=0;g