/* * Origian code from http://typetester.maratz.com/ * Modified by Liferay */ function ColorPicker (src, func) {var cp = document.createElement("div");var image = document.createElement("img");var body = document.getElementsByTagName("body")[0];var textInput = null;var originalValue = "";var self = this;cp.id = "color-picker-div";cp.style.height = "192px";cp.style.width = "100px";cp.style.position = "absolute";cp.style.display = "none";cp.style.cursor= "crosshair";cp.style.zIndex = 1;image.style.height = "192px";image.style.width = "100px";image.src = src;cp.appendChild(image);body.insertBefore(cp, body.childNodes[0]);/* * Public methods */ this.hide = function () {cp.style.display = "none";if (func != null) {func();}}this.toggle = function (obj) {if (cp.style.display == "none") {var nwOffset = Coordinates.northwestOffset(obj, true);cp.style.left = nwOffset.x + 25 + "px";cp.style.top = nwOffset.y + "px";cp.style.display = "block";// Grab the first input field in the parent nodetextInput = obj.parentNode.getElementsByTagName("INPUT")[0];originalValue = textInput.value;}else {self.hide();}};/* * Private methods */ var getColor = function (event, obj) {var nwOffset = Coordinates.northwestOffset(obj, true);mousePos.update(event);var x = mousePos.x - nwOffset.x;var y = mousePos.y - nwOffset.y;var rmax = 0;var gmax = 0;var bmax = 0;if (y <= 32) {rmax = 255;gmax = (y / 32.0) * 255;bmax = 0;} else if (y <= 64) {y = y - 32;rmax = 255 - (y / 32.0) * 255;gmax = 255;bmax = 0;} else if (y <= 96) {y = y - 64;rmax = 0;gmax = 255;bmax = (y / 32.0) * 255;} else if (y <= 128) {y = y - 96;rmax = 0;gmax = 255 - (y / 32.0) * 255;bmax = 255;} else if (y <= 160) {y = y - 128;rmax = (y / 32.0) * 255;gmax = 0;bmax = 255;} else {y = y - 160;rmax = 255;gmax = 0;bmax = 255 - (y / 32.0) * 255;}if (x <= 50) {var r = Math.abs(Math.floor(rmax * x / 50.0));var g = Math.abs(Math.floor(gmax * x / 50.0));var b = Math.abs(Math.floor(bmax * x / 50.0));} else {x -= 50;var r = Math.abs(Math.floor(rmax + (x / 50.0) * (255 - rmax)));var g = Math.abs(Math.floor(gmax + (x / 50.0) * (255 - gmax)));var b = Math.abs(Math.floor(bmax + (x / 50.0) * (255 - bmax)));}return rgb2hex(r, g, b);};var rgb2hex = function (r, g, b) {color = '#';color += hex(Math.floor(r / 16));color += hex(r % 16);color += hex(Math.floor(g / 16));color += hex(g % 16);color += hex(Math.floor(b / 16));color += hex(b % 16);return color;};var hex = function (dec){return (dec).toString(16);};var onEnd = function (event) {var color = getColor(event, image);originalValue = color;textInput.value = color;self.hide();};var onMove = function (event) {var color = getColor(event, image);textInput.value = color;textInput.onchange();};var reset = function () {textInput.value = originalValue;textInput.onchange();};/* * Events */ image.onmousemove = onMove;image.onclick = onEnd;image.onmouseout = reset;}
