From d45e608c333a9c182e8215a9eb16a1c4bbd5dce2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 11 Jun 2011 00:25:53 +0000 Subject: [PATCH] New: Add a color picker when list of colors is fixed --- .../colorpicker/jquery.colorpicker.css | 58 ++++++++ .../plugins/colorpicker/jquery.colorpicker.js | 137 ++++++++++++++++++ 2 files changed, 195 insertions(+) create mode 100755 htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.css create mode 100755 htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.js diff --git a/htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.css b/htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.css new file mode 100755 index 00000000000..ae4e0155c25 --- /dev/null +++ b/htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.css @@ -0,0 +1,58 @@ +.colorpicker-picker-span{ + display: block; + width: 20px; + height: 20px; + float: left; + border: 1px solid #000; + margin-right: 2px; + margin-bottom: 4px; + cursor: pointer; +} + +.colorpicker-picker-info{ + padding: 0 0 2px; + color: #000; + text-align: center; + text-transform: uppercase; +} + +.colorpicker-picker-span:hover { + border: 1px solid #000; +} + +.colorpicker-picker-span.active { + border: 1px solid #000; +} + +.colorpicker-picker { + background-color: #EEEEEE; + padding: 5px; + display: none; + position: absolute; + top: 0; + -moz-border-radius: 5px; + border-radius: 5px; + border: 1px solid #CCCCCC; + box-shadow: 2px 2px 5px #111; + -moz-box-shadow: 2px 2px 5px #111; + -webkit-box-shadow: 2px 2px 5px #111; +} + +.colorpicker-trigger { + display: block; + width: 15px; + height: 15px; + border: 1px solid #000; + cursor: pointer; + background-color: #ffffff; +} + + +.colorpicker-wrap { + font-family: 'Trebuchet MS', Verdana, Arial, Geneva, sans-serif +} + +.colorpicker-label { + float: left; + margin-right: 2px; +} \ No newline at end of file diff --git a/htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.js b/htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.js new file mode 100755 index 00000000000..71c9489b841 --- /dev/null +++ b/htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.js @@ -0,0 +1,137 @@ +/* + * INFORMATION + * --------------------------- + * Owner: jquery.webspirited.com + * Developer: Matthew Hailwood + * --------------------------- + * + * CHANGELOG: + * --------------------------- + * 1.1 + * Fixed bug 01 + * Fixed bug 02 + * + * --------------------------- + * Bug Fix Credits: + * -- + * FIXED BY LDR + * -- + * * Number: 01 + * * Bug: Initial color should be option "selected" from select + * * Name: Nico + * -- + * * Number: 02 + * * Bug: Selects Change event should be called on color pick + * * Name: Bob Farrell + */ +(function($) { + $.fn.extend({ + colorpicker: function(options) { + + //Settings list and the default values + var defaults = { + label: '', + size: 20, + count: 6, + hide: true + }; + + var options = $.extend(defaults, options); + var obj; + var colors = {}; + + var wrap = $('
'); + var label = $('
'); + var trigger = $('
'); + var picker = $('
'); + var info = $('
'); + var clear = $('
'); + + var clickcount=0; + + return this.each(function() { + obj = this; + + //build an array of colors + $(obj).children('option').each(function(i, elm) { + colors[i] = {}; + colors[i].color = $(elm).text(); + colors[i].value = $(elm).val(); + }); + create_wrap(); + if (options.label != '') + create_label(); + create_trigger(); + create_picker(); + wrap.append(label); + wrap.append(trigger); + wrap.append(picker); + wrap.append(clear); + $(obj).after(wrap); + if (options.hide) + $(obj).css({ + position: 'absolute', + left: -10000 + }); + }); + + + function create_wrap() { + wrap.click(function() { + clickcount++; + if (clickcount % 2 == 0) { picker.fadeOut('fast'); } + }); + wrap.mouseleave(function() { + /* picker.fadeOut('fast'); */ + }); + } + + function create_label() { + label.text(options.label); + label.click(function() { + trigger.click() + }); + } + + function create_trigger() { + trigger.click(function() { + var offset = $(this).position(); + var top = offset.top; + var left = offset.left + $(this).width() + 5; + if ((left + (options.size + 4) * options.count) > $(window).width()) + { + left = offset.left - (options.size + 4) * options.count - 15; + } + $(picker).css({ + 'top': top, + 'left': left + }).fadeIn('fast'); + }); + } + + function create_picker() { + picker.append(info); + for (var i in colors) { + picker.append(''); + } + trigger.css('background-color', '#'+$(obj).children(":selected").text()); + info.text($(obj).children(":selected").text()); + picker.children(".colorpicker-picker-span").hover(function() { + info.text($(this).attr('rel')!=''?$(this).attr('rel'):'-'); + }, function() { + info.text(picker.children('.colorpicker-picker-span.active').attr('rel')); + }); + picker.delegate(".colorpicker-picker-span", "click", function() { + info.text($(this).attr('rel')!=''?$(this).attr('rel'):'-'); + $(obj).val($(this).attr('rel')); + $(obj).change(); + picker.children('.colorpicker-picker-span.active').removeClass('active'); + $(this).addClass('active'); + trigger.css('background-color', $(this).css('background-color')); + picker.fadeOut('fast'); + }); + $(obj).after(picker); + } + } + }); +})(jQuery); \ No newline at end of file