From 5880bbee8f11b4a999cf9f11e9fca3c5739057ec Mon Sep 17 00:00:00 2001 From: Georg Ehrke <dev@georgswebsite.de> Date: Wed, 4 Jul 2012 17:37:47 +0200 Subject: [PATCH] add miniColors --- 3rdparty/miniColors/GPL-LICENSE.txt | 278 +++++++++ 3rdparty/miniColors/MIT-LICENSE.txt | 20 + 3rdparty/miniColors/css/images/colors.png | Bin 0 -> 12485 bytes 3rdparty/miniColors/css/images/trigger.png | Bin 0 -> 1406 bytes 3rdparty/miniColors/css/jquery.miniColors.css | 81 +++ 3rdparty/miniColors/js/jquery.miniColors.js | 580 ++++++++++++++++++ .../miniColors/js/jquery.miniColors.min.js | 9 + 7 files changed, 968 insertions(+) create mode 100644 3rdparty/miniColors/GPL-LICENSE.txt create mode 100644 3rdparty/miniColors/MIT-LICENSE.txt create mode 100755 3rdparty/miniColors/css/images/colors.png create mode 100755 3rdparty/miniColors/css/images/trigger.png create mode 100755 3rdparty/miniColors/css/jquery.miniColors.css create mode 100755 3rdparty/miniColors/js/jquery.miniColors.js create mode 100755 3rdparty/miniColors/js/jquery.miniColors.min.js diff --git a/3rdparty/miniColors/GPL-LICENSE.txt b/3rdparty/miniColors/GPL-LICENSE.txt new file mode 100644 index 0000000000..11dddd00ef --- /dev/null +++ b/3rdparty/miniColors/GPL-LICENSE.txt @@ -0,0 +1,278 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. diff --git a/3rdparty/miniColors/MIT-LICENSE.txt b/3rdparty/miniColors/MIT-LICENSE.txt new file mode 100644 index 0000000000..ec6f758157 --- /dev/null +++ b/3rdparty/miniColors/MIT-LICENSE.txt @@ -0,0 +1,20 @@ +Copyright (c) Cory LaViska + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/3rdparty/miniColors/css/images/colors.png b/3rdparty/miniColors/css/images/colors.png new file mode 100755 index 0000000000000000000000000000000000000000..1b4f819d8d9367147e8b1d2145e5fa1c5d6a48d3 GIT binary patch literal 12485 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 YQ!P_6w({jLFfcH9y85}Sb4q9e0DFC7R{#J2 literal 0 HcmV?d00001 diff --git a/3rdparty/miniColors/css/images/trigger.png b/3rdparty/miniColors/css/images/trigger.png new file mode 100755 index 0000000000000000000000000000000000000000..8c169fd6053009030232ef865a61876992b68589 GIT binary patch literal 1406 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rag4mJh`h9g^YtQi;>BuiW)N`mv#O3D+9QW+dm z@{>{(JaZG%Q-e|yQz{EjrrIztFe_z-M3hAM`dB6B=jtVb)aX^@7BGN-jeSKyVsdtB zi9%9pdS;%j()-=}l@u~lY?Z=IeGPmIoKrJ0J*tXQgRA^PlB=?lEmM^2?G$V(tSWK~ za#KqZ6)JLb@`|l0Y?Z*~TICg6frRyy6u?SKvTc<hj*9RNP;kyKN>wn`Gtf;oFf&jv zGt@IQHZeCh*HJJsFf`CNFw!?P(ls=<GB&a@Fi?O3B|8P1qLehNAQv~NT}3Hrwn`Z# zB?VUc`sL;2dgaD?`9<mahL)C=ATx}Nbc<5bbc-wVN)jt{^NN*WCb*;)Cl_TFlw{`T zDS%8&Ov*1Uu~kxn8e5TD05>+T7#d8;`MLTPi3R$GdIlgbLHwFq;OmQDX>KlDb#X~h zD#E>34K5C;EJ)Q4N-fSWElN%eN=;J+xv9X)xhOTUB)=#mKR*W+iUAq<CHch}`2`Bj z!KMnniOHFHAU;^VudkJ7UU5lcUUI6Zi>*>cZh>BAW{Q=Ysky7Esj-o<iHobDp{s#~ zsfn{2h-qMHWMXOT0@Le~pIn-onpXnTn}X15j8iWtDS(2*$|bcZvn(~mttdZN0qkX~ zOe}7(uy8Rnb22i-X&zK>3Kq9O_2Tx2zMX=NJ}6?5A{r(X<l+Wmg3}}@ecCA?5`Jo4 zimg%+C|RHS@|S^u@sp>EV@SoVHB%k44mpUlsh^Ax-?mG8*9qB}SJzS(J`mldQN{gL zsL8tjfo{xhagmrUA|W{!wi(VW`Ii_s<4A|**#n<d4_Dv+^V8UG&BKBpXC$&WBpsI) zcQSEXd~u1#s|14=j5!b0x)wPtn3ig2P$|*I)s<m3d+&b-@$RE6G6sy>o^Wx+tPHtP zWA}fO>GB@CM)u2+g0Eyw?8x4JThBrwK}{rlb?CB%x3vv~GoG>Ed_8IIk_g9*QES7J zcNy$q6mpY2<d)AQ!_w&bAZTSvW&E-8yaB)Bz6weBER_ggc`oz$zLgJ$So3%HTHnuE z$|rWXuYXt=w2@8TROJeHP1gORQ_nKYw5t;C`ZzhL=2C%w`o!eroWX{Tm%|u-EZiP= zZz5ZI)W)-nPj4}8QrflQQH|a4F4^OWmJ7~R*wjVoP5*ji$s5(932GwQ1&4wwf2}l# zzm~Oi)#>K6rtSHB5e&z+PFMHIa0{zrdi1;QnW9LvV^{9&zJr=m4JE#=SUm4$&M~vu zyv4E8OLxbbuFtv@w&r^FMAoH^^%AdExX<gz*?xPaPy5WEH<j~z+XbfhEWdm`y1H9L zdBK*eSu1^t6F&W|%b$GwZ=L=3=`8;)>Afhi`e<r2<4=KwMa7n)oqv|E=cxLkw`&Ib p<w*y`e`fT%)_q>`>U%sR8^a@$^WxWA${Il>qNl5$%Q~loCIDpR2Soq? literal 0 HcmV?d00001 diff --git a/3rdparty/miniColors/css/jquery.miniColors.css b/3rdparty/miniColors/css/jquery.miniColors.css new file mode 100755 index 0000000000..381bc1dc06 --- /dev/null +++ b/3rdparty/miniColors/css/jquery.miniColors.css @@ -0,0 +1,81 @@ +.miniColors-trigger { + height: 22px; + width: 22px; + background: url(images/trigger.png) center no-repeat; + vertical-align: middle; + margin: 0 .25em; + display: inline-block; + outline: none; +} + +.miniColors-selector { + position: absolute; + width: 175px; + height: 150px; + background: #FFF; + border: solid 1px #BBB; + -moz-box-shadow: 0 0 6px rgba(0, 0, 0, .25); + -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, .25); + box-shadow: 0 0 6px rgba(0, 0, 0, .25); + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + padding: 5px; + z-index: 999999; +} + +.miniColors-selector.black { + background: #000; + border-color: #000; +} + +.miniColors-colors { + position: absolute; + top: 5px; + left: 5px; + width: 150px; + height: 150px; + background: url(images/colors.png) right no-repeat; + cursor: crosshair; +} + +.miniColors-hues { + position: absolute; + top: 5px; + left: 160px; + width: 20px; + height: 150px; + background: url(images/colors.png) left no-repeat; + cursor: crosshair; +} + +.miniColors-colorPicker { + position: absolute; + width: 9px; + height: 9px; + border: 1px solid #fff; + -moz-border-radius: 11px; + -webkit-border-radius: 11px; + border-radius: 11px; +} +.miniColors-colorPicker-inner { + position: absolute; + top: 0; + left: 0; + width: 7px; + height: 7px; + border: 1px solid #000; + -moz-border-radius: 9px; + -webkit-border-radius: 9px; + border-radius: 9px; +} + +.miniColors-huePicker { + position: absolute; + left: -3px; + width: 24px; + height: 1px; + border: 1px solid #fff; + border-radius: 2px; + background: #000; +} \ No newline at end of file diff --git a/3rdparty/miniColors/js/jquery.miniColors.js b/3rdparty/miniColors/js/jquery.miniColors.js new file mode 100755 index 0000000000..187db3fa84 --- /dev/null +++ b/3rdparty/miniColors/js/jquery.miniColors.js @@ -0,0 +1,580 @@ +/* + * jQuery miniColors: A small color selector + * + * Copyright 2011 Cory LaViska for A Beautiful Site, LLC. (http://abeautifulsite.net/) + * + * Dual licensed under the MIT or GPL Version 2 licenses + * +*/ +if(jQuery) (function($) { + + $.extend($.fn, { + + miniColors: function(o, data) { + + var create = function(input, o, data) { + // + // Creates a new instance of the miniColors selector + // + + // Determine initial color (defaults to white) + var color = expandHex(input.val()); + if( !color ) color = 'ffffff'; + var hsb = hex2hsb(color); + + // Create trigger + var trigger = $('<a class="miniColors-trigger" style="background-color: #' + color + '" href="#"></a>'); + trigger.insertAfter(input); + + // Set input data and update attributes + input + .addClass('miniColors') + .data('original-maxlength', input.attr('maxlength') || null) + .data('original-autocomplete', input.attr('autocomplete') || null) + .data('letterCase', 'uppercase') + .data('trigger', trigger) + .data('hsb', hsb) + .data('change', o.change ? o.change : null) + .data('close', o.close ? o.close : null) + .data('open', o.open ? o.open : null) + .attr('maxlength', 7) + .attr('autocomplete', 'off') + .val('#' + convertCase(color, o.letterCase)); + + // Handle options + if( o.readonly ) input.prop('readonly', true); + if( o.disabled ) disable(input); + + // Show selector when trigger is clicked + trigger.bind('click.miniColors', function(event) { + event.preventDefault(); + if( input.val() === '' ) input.val('#'); + show(input); + + }); + + // Show selector when input receives focus + input.bind('focus.miniColors', function(event) { + if( input.val() === '' ) input.val('#'); + show(input); + }); + + // Hide on blur + input.bind('blur.miniColors', function(event) { + var hex = expandHex( hsb2hex(input.data('hsb')) ); + input.val( hex ? '#' + convertCase(hex, input.data('letterCase')) : '' ); + }); + + // Hide when tabbing out of the input + input.bind('keydown.miniColors', function(event) { + if( event.keyCode === 9 ) hide(input); + }); + + // Update when color is typed in + input.bind('keyup.miniColors', function(event) { + setColorFromInput(input); + }); + + // Handle pasting + input.bind('paste.miniColors', function(event) { + // Short pause to wait for paste to complete + setTimeout( function() { + setColorFromInput(input); + }, 5); + }); + + }; + + var destroy = function(input) { + // + // Destroys an active instance of the miniColors selector + // + + hide(); + input = $(input); + + // Restore to original state + input.data('trigger').remove(); + input + .attr('autocomplete', input.data('original-autocomplete')) + .attr('maxlength', input.data('original-maxlength')) + .removeData() + .removeClass('miniColors') + .unbind('.miniColors'); + $(document).unbind('.miniColors'); + }; + + var enable = function(input) { + // + // Enables the input control and the selector + // + input + .prop('disabled', false) + .data('trigger') + .css('opacity', 1); + }; + + var disable = function(input) { + // + // Disables the input control and the selector + // + hide(input); + input + .prop('disabled', true) + .data('trigger') + .css('opacity', 0.5); + }; + + var show = function(input) { + // + // Shows the miniColors selector + // + if( input.prop('disabled') ) return false; + + // Hide all other instances + hide(); + + // Generate the selector + var selector = $('<div class="miniColors-selector"></div>'); + selector + .append('<div class="miniColors-colors" style="background-color: #FFF;"><div class="miniColors-colorPicker"><div class="miniColors-colorPicker-inner"></div></div>') + .append('<div class="miniColors-hues"><div class="miniColors-huePicker"></div></div>') + .css({ + top: input.is(':visible') ? input.offset().top + input.outerHeight() : input.data('trigger').offset().top + input.data('trigger').outerHeight(), + left: input.is(':visible') ? input.offset().left : input.data('trigger').offset().left, + display: 'none' + }) + .addClass( input.attr('class') ); + + // Set background for colors + var hsb = input.data('hsb'); + selector + .find('.miniColors-colors') + .css('backgroundColor', '#' + hsb2hex({ h: hsb.h, s: 100, b: 100 })); + + // Set colorPicker position + var colorPosition = input.data('colorPosition'); + if( !colorPosition ) colorPosition = getColorPositionFromHSB(hsb); + selector.find('.miniColors-colorPicker') + .css('top', colorPosition.y + 'px') + .css('left', colorPosition.x + 'px'); + + // Set huePicker position + var huePosition = input.data('huePosition'); + if( !huePosition ) huePosition = getHuePositionFromHSB(hsb); + selector.find('.miniColors-huePicker').css('top', huePosition.y + 'px'); + + // Set input data + input + .data('selector', selector) + .data('huePicker', selector.find('.miniColors-huePicker')) + .data('colorPicker', selector.find('.miniColors-colorPicker')) + .data('mousebutton', 0); + + $('BODY').append(selector); + selector.fadeIn(100); + + // Prevent text selection in IE + selector.bind('selectstart', function() { return false; }); + + $(document).bind('mousedown.miniColors touchstart.miniColors', function(event) { + + input.data('mousebutton', 1); + var testSubject = $(event.target).parents().andSelf(); + + if( testSubject.hasClass('miniColors-colors') ) { + event.preventDefault(); + input.data('moving', 'colors'); + moveColor(input, event); + } + + if( testSubject.hasClass('miniColors-hues') ) { + event.preventDefault(); + input.data('moving', 'hues'); + moveHue(input, event); + } + + if( testSubject.hasClass('miniColors-selector') ) { + event.preventDefault(); + return; + } + + if( testSubject.hasClass('miniColors') ) return; + + hide(input); + }); + + $(document) + .bind('mouseup.miniColors touchend.miniColors', function(event) { + event.preventDefault(); + input.data('mousebutton', 0).removeData('moving'); + }) + .bind('mousemove.miniColors touchmove.miniColors', function(event) { + event.preventDefault(); + if( input.data('mousebutton') === 1 ) { + if( input.data('moving') === 'colors' ) moveColor(input, event); + if( input.data('moving') === 'hues' ) moveHue(input, event); + } + }); + + // Fire open callback + if( input.data('open') ) { + input.data('open').call(input.get(0), '#' + hsb2hex(hsb), hsb2rgb(hsb)); + } + + }; + + var hide = function(input) { + + // + // Hides one or more miniColors selectors + // + + // Hide all other instances if input isn't specified + if( !input ) input = '.miniColors'; + + $(input).each( function() { + var selector = $(this).data('selector'); + $(this).removeData('selector'); + $(selector).fadeOut(100, function() { + // Fire close callback + if( input.data('close') ) { + var hsb = input.data('hsb'), hex = hsb2hex(hsb); + input.data('close').call(input.get(0), '#' + hex, hsb2rgb(hsb)); + } + $(this).remove(); + }); + }); + + $(document).unbind('.miniColors'); + + }; + + var moveColor = function(input, event) { + + var colorPicker = input.data('colorPicker'); + + colorPicker.hide(); + + var position = { + x: event.pageX, + y: event.pageY + }; + + // Touch support + if( event.originalEvent.changedTouches ) { + position.x = event.originalEvent.changedTouches[0].pageX; + position.y = event.originalEvent.changedTouches[0].pageY; + } + position.x = position.x - input.data('selector').find('.miniColors-colors').offset().left - 5; + position.y = position.y - input.data('selector').find('.miniColors-colors').offset().top - 5; + if( position.x <= -5 ) position.x = -5; + if( position.x >= 144 ) position.x = 144; + if( position.y <= -5 ) position.y = -5; + if( position.y >= 144 ) position.y = 144; + + input.data('colorPosition', position); + colorPicker.css('left', position.x).css('top', position.y).show(); + + // Calculate saturation + var s = Math.round((position.x + 5) * 0.67); + if( s < 0 ) s = 0; + if( s > 100 ) s = 100; + + // Calculate brightness + var b = 100 - Math.round((position.y + 5) * 0.67); + if( b < 0 ) b = 0; + if( b > 100 ) b = 100; + + // Update HSB values + var hsb = input.data('hsb'); + hsb.s = s; + hsb.b = b; + + // Set color + setColor(input, hsb, true); + }; + + var moveHue = function(input, event) { + + var huePicker = input.data('huePicker'); + + huePicker.hide(); + + var position = { + y: event.pageY + }; + + // Touch support + if( event.originalEvent.changedTouches ) { + position.y = event.originalEvent.changedTouches[0].pageY; + } + + position.y = position.y - input.data('selector').find('.miniColors-colors').offset().top - 1; + if( position.y <= -1 ) position.y = -1; + if( position.y >= 149 ) position.y = 149; + input.data('huePosition', position); + huePicker.css('top', position.y).show(); + + // Calculate hue + var h = Math.round((150 - position.y - 1) * 2.4); + if( h < 0 ) h = 0; + if( h > 360 ) h = 360; + + // Update HSB values + var hsb = input.data('hsb'); + hsb.h = h; + + // Set color + setColor(input, hsb, true); + + }; + + var setColor = function(input, hsb, updateInput) { + input.data('hsb', hsb); + var hex = hsb2hex(hsb); + if( updateInput ) input.val( '#' + convertCase(hex, input.data('letterCase')) ); + input.data('trigger').css('backgroundColor', '#' + hex); + if( input.data('selector') ) input.data('selector').find('.miniColors-colors').css('backgroundColor', '#' + hsb2hex({ h: hsb.h, s: 100, b: 100 })); + + // Fire change callback + if( input.data('change') ) { + if( hex === input.data('lastChange') ) return; + input.data('change').call(input.get(0), '#' + hex, hsb2rgb(hsb)); + input.data('lastChange', hex); + } + + }; + + var setColorFromInput = function(input) { + + input.val('#' + cleanHex(input.val())); + var hex = expandHex(input.val()); + if( !hex ) return false; + + // Get HSB equivalent + var hsb = hex2hsb(hex); + + // If color is the same, no change required + var currentHSB = input.data('hsb'); + if( hsb.h === currentHSB.h && hsb.s === currentHSB.s && hsb.b === currentHSB.b ) return true; + + // Set colorPicker position + var colorPosition = getColorPositionFromHSB(hsb); + var colorPicker = $(input.data('colorPicker')); + colorPicker.css('top', colorPosition.y + 'px').css('left', colorPosition.x + 'px'); + input.data('colorPosition', colorPosition); + + // Set huePosition position + var huePosition = getHuePositionFromHSB(hsb); + var huePicker = $(input.data('huePicker')); + huePicker.css('top', huePosition.y + 'px'); + input.data('huePosition', huePosition); + + setColor(input, hsb); + + return true; + + }; + + var convertCase = function(string, letterCase) { + if( letterCase === 'lowercase' ) return string.toLowerCase(); + if( letterCase === 'uppercase' ) return string.toUpperCase(); + return string; + }; + + var getColorPositionFromHSB = function(hsb) { + var x = Math.ceil(hsb.s / 0.67); + if( x < 0 ) x = 0; + if( x > 150 ) x = 150; + var y = 150 - Math.ceil(hsb.b / 0.67); + if( y < 0 ) y = 0; + if( y > 150 ) y = 150; + return { x: x - 5, y: y - 5 }; + }; + + var getHuePositionFromHSB = function(hsb) { + var y = 150 - (hsb.h / 2.4); + if( y < 0 ) h = 0; + if( y > 150 ) h = 150; + return { y: y - 1 }; + }; + + var cleanHex = function(hex) { + return hex.replace(/[^A-F0-9]/ig, ''); + }; + + var expandHex = function(hex) { + hex = cleanHex(hex); + if( !hex ) return null; + if( hex.length === 3 ) hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; + return hex.length === 6 ? hex : null; + }; + + var hsb2rgb = function(hsb) { + var rgb = {}; + var h = Math.round(hsb.h); + var s = Math.round(hsb.s*255/100); + var v = Math.round(hsb.b*255/100); + if(s === 0) { + rgb.r = rgb.g = rgb.b = v; + } else { + var t1 = v; + var t2 = (255 - s) * v / 255; + var t3 = (t1 - t2) * (h % 60) / 60; + if( h === 360 ) h = 0; + if( h < 60 ) { rgb.r = t1; rgb.b = t2; rgb.g = t2 + t3; } + else if( h < 120 ) {rgb.g = t1; rgb.b = t2; rgb.r = t1 - t3; } + else if( h < 180 ) {rgb.g = t1; rgb.r = t2; rgb.b = t2 + t3; } + else if( h < 240 ) {rgb.b = t1; rgb.r = t2; rgb.g = t1 - t3; } + else if( h < 300 ) {rgb.b = t1; rgb.g = t2; rgb.r = t2 + t3; } + else if( h < 360 ) {rgb.r = t1; rgb.g = t2; rgb.b = t1 - t3; } + else { rgb.r = 0; rgb.g = 0; rgb.b = 0; } + } + return { + r: Math.round(rgb.r), + g: Math.round(rgb.g), + b: Math.round(rgb.b) + }; + }; + + var rgb2hex = function(rgb) { + var hex = [ + rgb.r.toString(16), + rgb.g.toString(16), + rgb.b.toString(16) + ]; + $.each(hex, function(nr, val) { + if (val.length === 1) hex[nr] = '0' + val; + }); + return hex.join(''); + }; + + var hex2rgb = function(hex) { + hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); + + return { + r: hex >> 16, + g: (hex & 0x00FF00) >> 8, + b: (hex & 0x0000FF) + }; + }; + + var rgb2hsb = function(rgb) { + var hsb = { h: 0, s: 0, b: 0 }; + var min = Math.min(rgb.r, rgb.g, rgb.b); + var max = Math.max(rgb.r, rgb.g, rgb.b); + var delta = max - min; + hsb.b = max; + hsb.s = max !== 0 ? 255 * delta / max : 0; + if( hsb.s !== 0 ) { + if( rgb.r === max ) { + hsb.h = (rgb.g - rgb.b) / delta; + } else if( rgb.g === max ) { + hsb.h = 2 + (rgb.b - rgb.r) / delta; + } else { + hsb.h = 4 + (rgb.r - rgb.g) / delta; + } + } else { + hsb.h = -1; + } + hsb.h *= 60; + if( hsb.h < 0 ) { + hsb.h += 360; + } + hsb.s *= 100/255; + hsb.b *= 100/255; + return hsb; + }; + + var hex2hsb = function(hex) { + var hsb = rgb2hsb(hex2rgb(hex)); + // Zero out hue marker for black, white, and grays (saturation === 0) + if( hsb.s === 0 ) hsb.h = 360; + return hsb; + }; + + var hsb2hex = function(hsb) { + return rgb2hex(hsb2rgb(hsb)); + }; + + + // Handle calls to $([selector]).miniColors() + switch(o) { + + case 'readonly': + + $(this).each( function() { + if( !$(this).hasClass('miniColors') ) return; + $(this).prop('readonly', data); + }); + + return $(this); + + case 'disabled': + + $(this).each( function() { + if( !$(this).hasClass('miniColors') ) return; + if( data ) { + disable($(this)); + } else { + enable($(this)); + } + }); + + return $(this); + + case 'value': + + // Getter + if( data === undefined ) { + if( !$(this).hasClass('miniColors') ) return; + var input = $(this), + hex = expandHex(input.val()); + return hex ? '#' + convertCase(hex, input.data('letterCase')) : null; + } + + // Setter + $(this).each( function() { + if( !$(this).hasClass('miniColors') ) return; + $(this).val(data); + setColorFromInput($(this)); + }); + + return $(this); + + case 'destroy': + + $(this).each( function() { + if( !$(this).hasClass('miniColors') ) return; + destroy($(this)); + }); + + return $(this); + + default: + + if( !o ) o = {}; + + $(this).each( function() { + + // Must be called on an input element + if( $(this)[0].tagName.toLowerCase() !== 'input' ) return; + + // If a trigger is present, the control was already created + if( $(this).data('trigger') ) return; + + // Create the control + create($(this), o, data); + + }); + + return $(this); + + } + + } + + }); + +})(jQuery); \ No newline at end of file diff --git a/3rdparty/miniColors/js/jquery.miniColors.min.js b/3rdparty/miniColors/js/jquery.miniColors.min.js new file mode 100755 index 0000000000..c00e0ace6b --- /dev/null +++ b/3rdparty/miniColors/js/jquery.miniColors.min.js @@ -0,0 +1,9 @@ +/* + * jQuery miniColors: A small color selector + * + * Copyright 2011 Cory LaViska for A Beautiful Site, LLC. (http://abeautifulsite.net/) + * + * Dual licensed under the MIT or GPL Version 2 licenses + * +*/ +if(jQuery)(function($){$.extend($.fn,{miniColors:function(o,data){var create=function(input,o,data){var color=expandHex(input.val());if(!color)color='ffffff';var hsb=hex2hsb(color);var trigger=$('<a class="miniColors-trigger" style="background-color: #'+color+'" href="#"></a>');trigger.insertAfter(input);input.addClass('miniColors').data('original-maxlength',input.attr('maxlength')||null).data('original-autocomplete',input.attr('autocomplete')||null).data('letterCase','uppercase').data('trigger',trigger).data('hsb',hsb).data('change',o.change?o.change:null).data('close',o.close?o.close:null).data('open',o.open?o.open:null).attr('maxlength',7).attr('autocomplete','off').val('#'+convertCase(color,o.letterCase));if(o.readonly)input.prop('readonly',true);if(o.disabled)disable(input);trigger.bind('click.miniColors',function(event){event.preventDefault();if(input.val()==='')input.val('#');show(input)});input.bind('focus.miniColors',function(event){if(input.val()==='')input.val('#');show(input)});input.bind('blur.miniColors',function(event){var hex=expandHex(hsb2hex(input.data('hsb')));input.val(hex?'#'+convertCase(hex,input.data('letterCase')):'')});input.bind('keydown.miniColors',function(event){if(event.keyCode===9)hide(input)});input.bind('keyup.miniColors',function(event){setColorFromInput(input)});input.bind('paste.miniColors',function(event){setTimeout(function(){setColorFromInput(input)},5)})};var destroy=function(input){hide();input=$(input);input.data('trigger').remove();input.attr('autocomplete',input.data('original-autocomplete')).attr('maxlength',input.data('original-maxlength')).removeData().removeClass('miniColors').unbind('.miniColors');$(document).unbind('.miniColors')};var enable=function(input){input.prop('disabled',false).data('trigger').css('opacity',1)};var disable=function(input){hide(input);input.prop('disabled',true).data('trigger').css('opacity',0.5)};var show=function(input){if(input.prop('disabled'))return false;hide();var selector=$('<div class="miniColors-selector"></div>');selector.append('<div class="miniColors-colors" style="background-color: #FFF;"><div class="miniColors-colorPicker"><div class="miniColors-colorPicker-inner"></div></div>').append('<div class="miniColors-hues"><div class="miniColors-huePicker"></div></div>').css({top:input.is(':visible')?input.offset().top+input.outerHeight():input.data('trigger').offset().top+input.data('trigger').outerHeight(),left:input.is(':visible')?input.offset().left:input.data('trigger').offset().left,display:'none'}).addClass(input.attr('class'));var hsb=input.data('hsb');selector.find('.miniColors-colors').css('backgroundColor','#'+hsb2hex({h:hsb.h,s:100,b:100}));var colorPosition=input.data('colorPosition');if(!colorPosition)colorPosition=getColorPositionFromHSB(hsb);selector.find('.miniColors-colorPicker').css('top',colorPosition.y+'px').css('left',colorPosition.x+'px');var huePosition=input.data('huePosition');if(!huePosition)huePosition=getHuePositionFromHSB(hsb);selector.find('.miniColors-huePicker').css('top',huePosition.y+'px');input.data('selector',selector).data('huePicker',selector.find('.miniColors-huePicker')).data('colorPicker',selector.find('.miniColors-colorPicker')).data('mousebutton',0);$('BODY').append(selector);selector.fadeIn(100);selector.bind('selectstart',function(){return false});$(document).bind('mousedown.miniColors touchstart.miniColors',function(event){input.data('mousebutton',1);var testSubject=$(event.target).parents().andSelf();if(testSubject.hasClass('miniColors-colors')){event.preventDefault();input.data('moving','colors');moveColor(input,event)}if(testSubject.hasClass('miniColors-hues')){event.preventDefault();input.data('moving','hues');moveHue(input,event)}if(testSubject.hasClass('miniColors-selector')){event.preventDefault();return}if(testSubject.hasClass('miniColors'))return;hide(input)});$(document).bind('mouseup.miniColors touchend.miniColors',function(event){event.preventDefault();input.data('mousebutton',0).removeData('moving')}).bind('mousemove.miniColors touchmove.miniColors',function(event){event.preventDefault();if(input.data('mousebutton')===1){if(input.data('moving')==='colors')moveColor(input,event);if(input.data('moving')==='hues')moveHue(input,event)}});if(input.data('open')){input.data('open').call(input.get(0),'#'+hsb2hex(hsb),hsb2rgb(hsb))}};var hide=function(input){if(!input)input='.miniColors';$(input).each(function(){var selector=$(this).data('selector');$(this).removeData('selector');$(selector).fadeOut(100,function(){if(input.data('close')){var hsb=input.data('hsb'),hex=hsb2hex(hsb);input.data('close').call(input.get(0),'#'+hex,hsb2rgb(hsb))}$(this).remove()})});$(document).unbind('.miniColors')};var moveColor=function(input,event){var colorPicker=input.data('colorPicker');colorPicker.hide();var position={x:event.pageX,y:event.pageY};if(event.originalEvent.changedTouches){position.x=event.originalEvent.changedTouches[0].pageX;position.y=event.originalEvent.changedTouches[0].pageY}position.x=position.x-input.data('selector').find('.miniColors-colors').offset().left-5;position.y=position.y-input.data('selector').find('.miniColors-colors').offset().top-5;if(position.x<=-5)position.x=-5;if(position.x>=144)position.x=144;if(position.y<=-5)position.y=-5;if(position.y>=144)position.y=144;input.data('colorPosition',position);colorPicker.css('left',position.x).css('top',position.y).show();var s=Math.round((position.x+5)*0.67);if(s<0)s=0;if(s>100)s=100;var b=100-Math.round((position.y+5)*0.67);if(b<0)b=0;if(b>100)b=100;var hsb=input.data('hsb');hsb.s=s;hsb.b=b;setColor(input,hsb,true)};var moveHue=function(input,event){var huePicker=input.data('huePicker');huePicker.hide();var position={y:event.pageY};if(event.originalEvent.changedTouches){position.y=event.originalEvent.changedTouches[0].pageY}position.y=position.y-input.data('selector').find('.miniColors-colors').offset().top-1;if(position.y<=-1)position.y=-1;if(position.y>=149)position.y=149;input.data('huePosition',position);huePicker.css('top',position.y).show();var h=Math.round((150-position.y-1)*2.4);if(h<0)h=0;if(h>360)h=360;var hsb=input.data('hsb');hsb.h=h;setColor(input,hsb,true)};var setColor=function(input,hsb,updateInput){input.data('hsb',hsb);var hex=hsb2hex(hsb);if(updateInput)input.val('#'+convertCase(hex,input.data('letterCase')));input.data('trigger').css('backgroundColor','#'+hex);if(input.data('selector'))input.data('selector').find('.miniColors-colors').css('backgroundColor','#'+hsb2hex({h:hsb.h,s:100,b:100}));if(input.data('change')){if(hex===input.data('lastChange'))return;input.data('change').call(input.get(0),'#'+hex,hsb2rgb(hsb));input.data('lastChange',hex)}};var setColorFromInput=function(input){input.val('#'+cleanHex(input.val()));var hex=expandHex(input.val());if(!hex)return false;var hsb=hex2hsb(hex);var currentHSB=input.data('hsb');if(hsb.h===currentHSB.h&&hsb.s===currentHSB.s&&hsb.b===currentHSB.b)return true;var colorPosition=getColorPositionFromHSB(hsb);var colorPicker=$(input.data('colorPicker'));colorPicker.css('top',colorPosition.y+'px').css('left',colorPosition.x+'px');input.data('colorPosition',colorPosition);var huePosition=getHuePositionFromHSB(hsb);var huePicker=$(input.data('huePicker'));huePicker.css('top',huePosition.y+'px');input.data('huePosition',huePosition);setColor(input,hsb);return true};var convertCase=function(string,letterCase){if(letterCase==='lowercase')return string.toLowerCase();if(letterCase==='uppercase')return string.toUpperCase();return string};var getColorPositionFromHSB=function(hsb){var x=Math.ceil(hsb.s/0.67);if(x<0)x=0;if(x>150)x=150;var y=150-Math.ceil(hsb.b/0.67);if(y<0)y=0;if(y>150)y=150;return{x:x-5,y:y-5}};var getHuePositionFromHSB=function(hsb){var y=150-(hsb.h/2.4);if(y<0)h=0;if(y>150)h=150;return{y:y-1}};var cleanHex=function(hex){return hex.replace(/[^A-F0-9]/ig,'')};var expandHex=function(hex){hex=cleanHex(hex);if(!hex)return null;if(hex.length===3)hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];return hex.length===6?hex:null};var hsb2rgb=function(hsb){var rgb={};var h=Math.round(hsb.h);var s=Math.round(hsb.s*255/100);var v=Math.round(hsb.b*255/100);if(s===0){rgb.r=rgb.g=rgb.b=v}else{var t1=v;var t2=(255-s)*v/255;var t3=(t1-t2)*(h%60)/60;if(h===360)h=0;if(h<60){rgb.r=t1;rgb.b=t2;rgb.g=t2+t3}else if(h<120){rgb.g=t1;rgb.b=t2;rgb.r=t1-t3}else if(h<180){rgb.g=t1;rgb.r=t2;rgb.b=t2+t3}else if(h<240){rgb.b=t1;rgb.r=t2;rgb.g=t1-t3}else if(h<300){rgb.b=t1;rgb.g=t2;rgb.r=t2+t3}else if(h<360){rgb.r=t1;rgb.g=t2;rgb.b=t1-t3}else{rgb.r=0;rgb.g=0;rgb.b=0}}return{r:Math.round(rgb.r),g:Math.round(rgb.g),b:Math.round(rgb.b)}};var rgb2hex=function(rgb){var hex=[rgb.r.toString(16),rgb.g.toString(16),rgb.b.toString(16)];$.each(hex,function(nr,val){if(val.length===1)hex[nr]='0'+val});return hex.join('')};var hex2rgb=function(hex){hex=parseInt(((hex.indexOf('#')>-1)?hex.substring(1):hex),16);return{r:hex>>16,g:(hex&0x00FF00)>>8,b:(hex&0x0000FF)}};var rgb2hsb=function(rgb){var hsb={h:0,s:0,b:0};var min=Math.min(rgb.r,rgb.g,rgb.b);var max=Math.max(rgb.r,rgb.g,rgb.b);var delta=max-min;hsb.b=max;hsb.s=max!==0?255*delta/max:0;if(hsb.s!==0){if(rgb.r===max){hsb.h=(rgb.g-rgb.b)/delta}else if(rgb.g===max){hsb.h=2+(rgb.b-rgb.r)/delta}else{hsb.h=4+(rgb.r-rgb.g)/delta}}else{hsb.h=-1}hsb.h*=60;if(hsb.h<0){hsb.h+=360}hsb.s*=100/255;hsb.b*=100/255;return hsb};var hex2hsb=function(hex){var hsb=rgb2hsb(hex2rgb(hex));if(hsb.s===0)hsb.h=360;return hsb};var hsb2hex=function(hsb){return rgb2hex(hsb2rgb(hsb))};switch(o){case'readonly':$(this).each(function(){if(!$(this).hasClass('miniColors'))return;$(this).prop('readonly',data)});return $(this);case'disabled':$(this).each(function(){if(!$(this).hasClass('miniColors'))return;if(data){disable($(this))}else{enable($(this))}});return $(this);case'value':if(data===undefined){if(!$(this).hasClass('miniColors'))return;var input=$(this),hex=expandHex(input.val());return hex?'#'+convertCase(hex,input.data('letterCase')):null}$(this).each(function(){if(!$(this).hasClass('miniColors'))return;$(this).val(data);setColorFromInput($(this))});return $(this);case'destroy':$(this).each(function(){if(!$(this).hasClass('miniColors'))return;destroy($(this))});return $(this);default:if(!o)o={};$(this).each(function(){if($(this)[0].tagName.toLowerCase()!=='input')return;if($(this).data('trigger'))return;create($(this),o,data)});return $(this)}}})})(jQuery); \ No newline at end of file -- GitLab