/**
* Very simple jQuery Color Picker.
*
* Copyright (C) 2008-2011 Andreas Lagerkvist
* Copyright (C) 2012 Tanguy Krotoff
*
* Original source code and demo: http://andreaslagerkvist.com/jquery/colour-picker/
*
* License: http://creativecommons.org/licenses/by/3.0/
*/
(function($) {
/**
* Main color picker function.
*/
$.fn.colorpicker = function(options) {
options = $.extend({}, $.fn.colorpicker.defaults, options);
// Inverts a hex-color
var colorInvert = function(colorHex) {
var r = colorHex.substr(0, 2);
var g = colorHex.substr(2, 2);
var b = colorHex.substr(4, 2);
return 0.212671 * r + 0.715160 * g + 0.072169 * b < 0.5 ? 'ffffff' : '000000'
};
var dialog = $('#colorpicker');
if (!dialog.length) {
dialog = $('<div id="colorpicker"></div>').appendTo(document.body).hide();
}
// Remove the color-picker if you click outside it
$(document).click(function(event) {
if (!($(event.target).is('#colorpicker') || $(event.target).parents('#colorpicker').length)) {
dialog.hide(options.delay);
}
});
// For HTML element passed to the plugin
return this.each(function() {
var element = $(this);
// Build the list of colors
// <li><a href="#" style="background-color: #111fff;">111fff</a></li>
var colorList = '';
$.each(options.colors, function(index, color) {
colorList += '<li><a href="#" style="background-color: #' + color + ';">' + color + '</a></li>';
});
// When you click on the HTML element
element.click(function() {
// Show the dialog next to the HTML element
var elementPos = element.offset();
dialog.html('<ul>' + colorList + '</ul>').css({
position: 'absolute',
left: elementPos.left,
top: elementPos.top + element.outerHeight()
}).show(options.delay);
// When you click on a color inside the dialog
$('a', dialog).click(function() {
// The color is stored in the link's value
var color = $(this).text();
// Change the input's background color to reflect the newly selected color
element.css({
'background-color': '#' + color,
color: '#' + colorInvert(color)
});
element.trigger({
type: 'changeColor',
color: '#' + color
});
// Hide the color-picker and return false
dialog.hide(options.delay);
return false;
});
return false;
});
});
};
/**
* Default color picker options.
*/
$.fn.colorpicker.defaults = {
// Default colors for the picker
colors: [
// Colors from Google Calendar
'000000', // Black
'7BD148', // Green
'5484ED', // Bold blue
'A4BDFC', // Blue
'46D6DB', // Turquoise
'7AE7BF', // Green
'51B749', // Bold green
'FBD75B', // Yellow
'FFB878', // Orange
'FF887C', // Red
'DC2127', // Bold red
'DBADFF', // Purple
'E1E1E1', // Gray
// More colors from Google Calendar
'AC725E',
'D06B64',
'F83A22',
'FA573C',
'FF7537',
'FFAD46',
'42D692',
'16A765',
'7BD148',
'B3DC6C',
'FBE983',
'FAD165',
'92E1C0',
'9FE1E7',
'9FC6E7',
'4986E7',
'9A9CFF',
'B99AFF',
'C2C2C2',
'CABDBF',
'CCA6AC',
'F691B2',
'CD74E6',
'A47AE2'
],
// Animation delay for the dialog
delay: 0
};
})(jQuery);
$(document).ready(function () {
$('#colorpicker1').colorpicker({
colors: ["FFFFFF", "000000", "111FFF", "C0C0C0", "FFF000"]
});
$('#colorpicker2').colorpicker();
$('#colorpicker3').colorpicker({
delay: 500
}).on('changeColor', function (event) {
$(document.body).css('background-color', event.color);
});
});
/**
* CSS inspired by Bootstrap Twitter.
* See https://github.com/twitter/bootstrap/blob/master/less/dropdowns.less
* See http://twitter.github.com/bootstrap/assets/css/bootstrap.css
*/
#colorpicker:before {
position: absolute;
top: -7px;
left: 9px;
display: inline-block;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-left: 7px solid transparent;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
#colorpicker:after {
position: absolute;
top: -6px;
left: 10px;
display: inline-block;
border-right: 6px solid transparent;
border-bottom: 6px solid #ffffff;
border-left: 6px solid transparent;
content: '';
}
#colorpicker {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
display: none;
float: left;
min-width: 160px;
max-width: 209px;
padding: 4px 0px 0px 4px;
margin: 1px 0 0;
list-style: none;
background-color: #ffffff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.2);
*border-right-width: 2px;
*border-bottom-width: 2px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box;
}
#colorpicker ul {
margin: 0;
padding: 0;
list-style-type: none;
}
#colorpicker ul li {
float: left;
margin: 0 4px 4px 0;
}
#colorpicker ul li a {
display: block;
width: 15px;
height: 15px;
text-indent: -100000px;
}
#colorpicker ul li a:hover {
width: 13px;
height: 13px;
border: 1px solid black;
}
#foo,
#colorpicker2,p{margin:25px;}
<div id="foo">
<div id="colorpicker2">Click me!</div>
<input id="colorpicker3" type="text">
<p>
CC.BY <a href="http://andreaslagerkvist.com/jquery/colour-picker/">Tanguy Krotoff</a></p>
</div>