Liferay.ColorPicker = new Class({ /* context (Object): A DOM object which specifies the context in which to search for the item hasImage: (Boolean) If set to true, it uses the "item" param or whatever image has the .use-color-picker class as the image item: (Object|String): A DOM object or a jQuery Selector string that specifies which field to insert the selected value into onChange (Function): A function that will get called whenever the color changes onClose (Function): A function that will get called when the color picker is closed */ initialize: function(params) { var instance = this; params = params || {}; instance._onClose = params.onClose || null; instance._onChange = params.onChange || null; instance._context = params.context || document.body; instance._hasImage = params.hasImage || false; instance._item = jQuery(params.item || '.use-color-picker', instance._context); instance._baseColor = {r:255, g:0, b:0}; instance._currentColor = {r:255, g:255, b:255}; instance._lastValues = [0,0]; instance._insertImages(); instance._buildHTML(); instance._activatePicker(); }, _activatePicker: function() { var instance = this; var currentColor = instance._currentColor; var onChange = function() { var r = instance._currentColor.r; var g = instance._currentColor.g; var b = instance._currentColor.b; var backgroundColor = 'rgb(' + r + ', ' + g + ', ' + b + ')'; instance._baseDiv.find('.lfr-old-color').css('background-color', backgroundColor); if (instance._onChange) { instance._onChange(instance._currentColor); } }; instance._baseDiv.find('.lfr-color').Slider( { accept : '.lfr-color-indic', onSlide : function(cordx, cordy, x, y) { instance._lastValues = [parseInt(cordx * 255 / 100), parseInt(cordy * 255 / 100)]; instance._setGradientColor(); }, onChange : onChange } ); instance._baseDiv.find('.lfr-hue').Slider( { accept : '.lfr-hue-indic', onSlide : function( cordx, cordy,x, y) { instance._setVertColor(parseInt(cordy * 255 / 100)); instance._setGradientColor(); }, onChange : onChange } ); }, _buildHTML: function() { var instance = this; var baseDiv = jQuery('
'); var color = jQuery('
';
if (items.length == 1) {
var colorPickerImg;
if (instance._hasImage) {
colorPickerImg = items;
}
else {
colorPickerImg = jQuery(colorPickerImgHTML);
items.after(colorPickerImg);
}
colorPickerImg.click(
function(event) {
instance._toggle(event, this);
}
);
}
else {
items.each(
function() {
var item = jQuery(this);
var colorPickerImg;
if (!instance._hasImage) {
colorPickerImg = jQuery(colorPickerImgHTML);
}
else {
colorPickerImg = item;
}
colorPickerImg.click(
function(event) {
instance._toggle(event, this);
}
);
item.after(colorPickerImg);
}
);
}
},
_setVertColor: function(indic) {
var instance = this;
var num = 256 / 6;
var num2 = 256 / num;
var color = indic;
var color2 = color % num;
var red = 255;
var green = 255 - color2 * num2;
var blue = 0;
if (color < (num * 5)) {
red = color2 * num2;
green = 255;
if (color < (num * 4)) {
red = 0;
blue = 255 - color2 * num2;
if (color < (num * 3)) {
green = color2 * num2;
blue = 255;
if (color < (num * 2)) {
red = 255 - color2 * num2;
green = 0;
if (color < num) {
red = 255;
blue = color2 * num2;
}
}
}
}
}
instance._baseColor = {
r: parseInt(red),
g: parseInt(green),
b: parseInt(blue)
};
instance._baseDiv.find('.lfr-color').css('background-color', 'rgb(' + instance._baseColor.r + ', ' + instance._baseColor.g + ', ' + instance._baseColor.b + ')');
},
_setGradientColor: function() {
var instance = this;
var baseColor = instance._baseColor;
var lastValues = instance._lastValues;
var r = instance._toBase(baseColor.r);
var g = instance._toBase(baseColor.g);
var b = instance._toBase(baseColor.b);
var rX = instance._toHex(r);
var gX = instance._toHex(g);
var bX = instance._toHex(b);
instance._baseDiv.find('.lfr-current-color').css('background-color', 'rgb(' + r + ', ' + g + ', ' + b + ')');
instance._hexColor = '#' + (rX + gX + bX).toUpperCase();
instance._currentInput.val(instance._hexColor);
instance._currentColor = {r: r, g: g, b: b};
},
_toggle: function(event, obj) {
var instance = this;
var item = jQuery(obj);
var dimensions = item.offset();
instance._currentInput = item.prev();
var baseDiv = instance._baseDiv;
if (baseDiv.is(':visible')) {
baseDiv.hide();
if (instance._item.is('input')) {
instance._item.trigger('blur');
}
if (instance._onClose) {
instance._onClose();
}
}
else {
baseDiv.show();
if (instance._item.is('input')) {
instance._item.trigger('focus');
}
baseDiv.css(
{
top: dimensions.top + 'px',
left: dimensions.left + 25 + 'px'
}
);
}
},
_toBase: function(colorVal) {
var instance = this;
var lastValues = instance._lastValues;
return Math.round((1 - (1 - (colorVal / 255)) * (lastValues[0] / 255)) * (255 - lastValues[1]));
},
_toHex: function(color) {
var instance = this;
color = parseInt(color).toString(16);
if (color.length < 2) {
return "0" + color;
}
else {
return color;
}
},
_toRGB: function(color) {
var instance = this;
color = color.replace('#', '');
if (color.length == 6 || color.length == 3) {
var r, g, b;
if (color.length == 6) {
r = color.substring(0, 2);
g = color.substring(2, 4);
b = color.substring(4, 6);
}
else if (color.length == 3) {
r = color.substring(0, 1);
g = color.substring(1, 2);
b = color.substring(2, 3);
r = r + r;
g = g + g;
b = b + b;
}
r = parseInt(r, 16);
g = parseInt(g, 16);
b = parseInt(b, 16);
return {r: r, g: g, b: b};
}
return null;
}
});