{"id":234,"date":"2017-02-20T14:16:00","date_gmt":"2017-02-20T14:16:00","guid":{"rendered":""},"modified":"2020-01-17T07:35:39","modified_gmt":"2020-01-17T07:35:39","slug":"creating-a-custom-experience-manager-slingresourcetype-for-touch-ui","status":"publish","type":"post","link":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/","title":{"rendered":"Creating a custom Experience Manager sling:resourceType for Touch UI"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left;\">In this blog I am going to discuss how to create a custom sling resource type for the AEM Touch UI using a jQurey plugin.<\/p>\n<p>You can create a custom sling resource type &nbsp;that can be used in an AEM Touch UI component by using a JQuery plug-in. As, if you want to define a field in a Touch UI component dialog that is not available with the available Granite API, you can define your own custom type.<\/p>\n<p>So, <b>I want to develop a full color spectrum field for a touch UI component dialog.<\/b><br \/>\n<b><br \/>\n<\/b>For this, Firstly I created a folder under <b>\/apps<\/b> folder named as <b>\/custom-components\/custom-color-picker<\/b>. Under this folder, I created a client lib folder named as colorpicker-clientlib and a jsp named as render.jsp under client lib folder I created two files js.txt and css.txt and created a script.js and style.css. The folder structure &nbsp;is like this:<\/p>\n<div style=\"clear: both; text-align: center;\"><a href=\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img decoding=\"async\" border=\"0\" src=\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png\"><\/a><\/div>\n<p>The main application logic is in<b> \/apps\/custom-components\/custom-colorpicker\/colorpicker-clientlib\/script.js<\/b><br \/>\n<b><br \/>\n<\/b>The code for this js file:<br \/>\n<span style=\"color: purple;\"><br \/>\n<\/span><span style=\"color: purple;\">(function (factory) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &#8220;use strict&#8221;;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; if (typeof define === &#8216;function&#8217; &amp;&amp; define.amd) { \/\/ AMD<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; define([&#8216;jquery&#8217;], factory);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; else if (typeof exports == &#8220;object&#8221; &amp;&amp; typeof module == &#8220;object&#8221;) { \/\/ CommonJS<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; module.exports = factory(require(&#8216;jquery&#8217;));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; else { \/\/ Browser<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; factory(jQuery);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">})(function($, undefined) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &#8220;use strict&#8221;;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; var defaultOpts = {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Callbacks<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; beforeShow: noop,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; move: noop,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; change: noop,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; show: noop,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hide: noop,<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Options<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; color: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; flat: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; showInput: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; allowEmpty: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; showButtons: true,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; clickoutFiresChange: true,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; showInitial: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; showPalette: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; showPaletteOnly: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hideAfterPaletteSelect: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; togglePaletteOnly: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; showSelectionPalette: true,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; localStorageKey: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; appendTo: &#8220;body&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; maxSelectionSize: 7,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; cancelText: &#8220;cancel&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; chooseText: &#8220;choose&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; togglePaletteMoreText: &#8220;more&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; togglePaletteLessText: &#8220;less&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; clearText: &#8220;Clear Color Selection&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; noColorSelectedText: &#8220;No Color Selected&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; preferredFormat: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; className: &#8220;&#8221;, \/\/ Deprecated &#8211; use containerClassName and replacerClassName instead.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; containerClassName: &#8220;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; replacerClassName: &#8220;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; showAlpha: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; theme: &#8220;sp-light&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; palette: [[&#8220;#ffffff&#8221;, &#8220;#000000&#8221;, &#8220;#ff0000&#8221;, &#8220;#ff8000&#8221;, &#8220;#ffff00&#8221;, &#8220;#008000&#8221;, &#8220;#0000ff&#8221;, &#8220;#4b0082&#8221;, &#8220;#9400d3&#8221;]],<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; selectionPalette: [],<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; disabled: false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; offset: null<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; spectrums = [],<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; IE = !!\/msie\/i.exec( window.navigator.userAgent ),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; rgbaSupport = (function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function contains( str, substr ) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return !!~(&#8221; + str).indexOf(substr);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var elem = document.createElement(&#8216;div&#8217;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var style = elem.style;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; style.cssText = &#8216;background-color:rgba(0,0,0,.5)&#8217;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return contains(style.backgroundColor, &#8216;rgba&#8217;) || contains(style.backgroundColor, &#8216;hsla&#8217;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; })(),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; replaceInput = [<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-replacer&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-preview&#8217;&gt;&lt;div class=&#8217;sp-preview-inner&#8217;&gt;&lt;\/div&gt;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-dd&#8217;&gt;&amp;#9660;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; ].join(&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; markup = (function () {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ IE does not support gradients with multiple stops, so we need to simulate<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ &nbsp;that for the rainbow slider with 8 divs that each have a single gradient<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var gradientFix = &#8220;&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (IE) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (var i = 1; i &lt;= 6; i++) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gradientFix += &#8220;&lt;div class=&#8217;sp-&#8221; + i + &#8220;&#8216;&gt;&lt;\/div&gt;&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return [<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-container sp-hidden&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-palette-container&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-palette sp-thumb sp-cf&#8217;&gt;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-palette-button-container sp-cf&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;button type=&#8217;button&#8217; class=&#8217;sp-palette-toggle&#8217;&gt;&lt;\/button&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-picker-container&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-top sp-cf&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-fill&#8217;&gt;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-top-inner&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-color&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-sat&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-val&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-dragger&#8217;&gt;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-clear sp-clear-display&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-hue&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-slider&#8217;&gt;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gradientFix,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-alpha&#8217;&gt;&lt;div class=&#8217;sp-alpha-inner&#8217;&gt;&lt;div class=&#8217;sp-alpha-handle&#8217;&gt;&lt;\/div&gt;&lt;\/div&gt;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-input-container sp-cf&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;input class=&#8217;sp-input&#8217; type=&#8217;text&#8217; spellcheck=&#8217;false&#8217; &nbsp;\/&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-initial sp-thumb sp-cf&#8217;&gt;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;div class=&#8217;sp-button-container sp-cf&#8217;&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;a class=&#8217;sp-cancel&#8217; href=&#8217;#&#8217;&gt;&lt;\/a&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;button type=&#8217;button&#8217; class=&#8217;sp-choose&#8217;&gt;&lt;\/button&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;&lt;\/div&gt;&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; ].join(&#8220;&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; })();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function paletteTemplate (p, color, className, opts) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var html = [];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; for (var i = 0; i &lt; p.length; i++) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var current = p[i];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(current) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var tiny = tinycolor(current);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var c = tiny.toHsl().l &lt; 0.5 ? &#8220;sp-thumb-el sp-thumb-dark&#8221; : &#8220;sp-thumb-el sp-thumb-light&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c += (tinycolor.equals(color, current)) ? &#8221; sp-thumb-active&#8221; : &#8220;&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var formattedString = tiny.toString(opts.preferredFormat || &#8220;rgb&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var swatchStyle = rgbaSupport ? (&#8220;background-color:&#8221; + tiny.toRgbString()) : &#8220;filter:&#8221; + tiny.toFilter();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html.push(&#8216;&lt;span title=&#8221;&#8216; + formattedString + &#8216;&#8221; data-color=&#8221;&#8216; + tiny.toRgbString() + &#8216;&#8221; class=&#8221;&#8216; + c + &#8216;&#8221;&gt;&lt;span class=&#8221;sp-thumb-inner&#8221; style=&#8221;&#8216; + swatchStyle + &#8216;;&#8221; \/&gt;&lt;\/span&gt;&#8217;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var cls = &#8216;sp-clear-display&#8217;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html.push($(&#8216;&lt;div \/&gt;&#8217;)<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .append($(&#8216;&lt;span data-color=&#8221;&#8221; style=&#8221;background-color:transparent;&#8221; class=&#8221;&#8216; + cls + &#8216;&#8221;&gt;&lt;\/span&gt;&#8217;)<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .attr(&#8216;title&#8217;, opts.noColorSelectedText)<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .html()<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return &#8220;&lt;div class=&#8217;sp-cf &#8221; + className + &#8220;&#8216;&gt;&#8221; + html.join(&#8221;) + &#8220;&lt;\/div&gt;&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function hideAll() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; for (var i = 0; i &lt; spectrums.length; i++) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (spectrums[i]) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spectrums[i].hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function instanceOptions(o, callbackContext) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var opts = $.extend({}, defaultOpts, o);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; opts.callbacks = {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;move&#8217;: bind(opts.move, callbackContext),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;change&#8217;: bind(opts.change, callbackContext),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;show&#8217;: bind(opts.show, callbackContext),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;hide&#8217;: bind(opts.hide, callbackContext),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8216;beforeShow&#8217;: bind(opts.beforeShow, callbackContext)<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return opts;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function spectrum(element, o) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var opts = instanceOptions(o, element),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flat = opts.flat,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; showSelectionPalette = opts.showSelectionPalette,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; localStorageKey = opts.localStorageKey,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; theme = opts.theme,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callbacks = opts.callbacks,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resize = throttle(reflow, 10),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; visible = false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isDragging = false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragWidth = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragHeight = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragHelperHeight = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slideHeight = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slideWidth = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaWidth = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSlideHelperWidth = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slideHelperHeight = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentHue = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentSaturation = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentValue = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentAlpha = 1,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; palette = [],<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paletteArray = [],<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paletteLookup = {},<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selectionPalette = opts.selectionPalette.slice(0),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maxSelectionSize = opts.maxSelectionSize,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; draggingClass = &#8220;sp-dragging&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shiftMovementDirection = null;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var doc = element.ownerDocument,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; body = doc.body,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement = $(element),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; disabled = false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container = $(markup, doc).addClass(theme),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pickerContainer = container.find(&#8220;.sp-picker-container&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragger = container.find(&#8220;.sp-color&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragHelper = container.find(&#8220;.sp-dragger&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slider = container.find(&#8220;.sp-hue&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slideHelper = container.find(&#8220;.sp-slider&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSliderInner = container.find(&#8220;.sp-alpha-inner&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSlider = container.find(&#8220;.sp-alpha&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSlideHelper = container.find(&#8220;.sp-alpha-handle&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textInput = container.find(&#8220;.sp-input&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paletteContainer = container.find(&#8220;.sp-palette&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initialColorContainer = container.find(&#8220;.sp-initial&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cancelButton = container.find(&#8220;.sp-cancel&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clearButton = container.find(&#8220;.sp-clear&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chooseButton = container.find(&#8220;.sp-choose&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toggleButton = container.find(&#8220;.sp-palette-toggle&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isInput = boundElement.is(&#8220;input&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isInputTypeColor = isInput &amp;&amp; boundElement.attr(&#8220;type&#8221;) === &#8220;color&#8221; &amp;&amp; inputTypeColorSupport(),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shouldReplace = isInput &amp;&amp; !flat,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; replacer = (shouldReplace) ? $(replaceInput).addClass(theme).addClass(opts.className).addClass(opts.replacerClassName) : $([]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offsetElement = (shouldReplace) ? replacer : boundElement,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; previewElement = replacer.find(&#8220;.sp-preview-inner&#8221;),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initialColor = opts.color || (isInput &amp;&amp; boundElement.val()),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; colorOnShow = false,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentPreferredFormat = opts.preferredFormat,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clickoutFiresChange = !opts.showButtons || opts.clickoutFiresChange,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isEmpty = !initialColor,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; allowEmpty = opts.allowEmpty &amp;&amp; !isInputTypeColor;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function applyOptions() {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts.showPaletteOnly) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.showPalette = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts.palette) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; palette = opts.palette.slice(0);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paletteArray = $.isArray(palette[0]) ? palette : [palette];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paletteLookup = {};<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (var i = 0; i &lt; paletteArray.length; i++) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (var j = 0; j &lt; paletteArray[i].length; j++) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var rgb = tinycolor(paletteArray[i][j]).toRgbString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paletteLookup[rgb] = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.toggleClass(&#8220;sp-flat&#8221;, flat);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.toggleClass(&#8220;sp-input-disabled&#8221;, !opts.showInput);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.toggleClass(&#8220;sp-alpha-enabled&#8221;, opts.showAlpha);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.toggleClass(&#8220;sp-clear-enabled&#8221;, allowEmpty);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.toggleClass(&#8220;sp-buttons-disabled&#8221;, !opts.showButtons);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.toggleClass(&#8220;sp-palette-buttons-disabled&#8221;, !opts.togglePaletteOnly);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.toggleClass(&#8220;sp-palette-disabled&#8221;, !opts.showPalette);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.toggleClass(&#8220;sp-palette-only&#8221;, opts.showPaletteOnly);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.toggleClass(&#8220;sp-initial-disabled&#8221;, !opts.showInitial);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.addClass(opts.className).addClass(opts.containerClassName);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reflow();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function initialize() {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (IE) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.find(&#8220;*:not(input)&#8221;).attr(&#8220;unselectable&#8221;, &#8220;on&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; applyOptions();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (shouldReplace) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.after(replacer).hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!allowEmpty) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clearButton.hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (flat) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.after(container).hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var appendTo = opts.appendTo === &#8220;parent&#8221; ? boundElement.parent() : $(opts.appendTo);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (appendTo.length !== 1) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; appendTo = $(&#8220;body&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; appendTo.append(container);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateSelectionPaletteFromStorage();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offsetElement.bind(&#8220;click.spectrum touchstart.spectrum&#8221;, function (e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!disabled) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toggle();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.stopPropagation();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!$(e.target).is(&#8220;input&#8221;)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.preventDefault();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(boundElement.is(&#8220;:disabled&#8221;) || (opts.disabled === true)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; disable();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Prevent clicks from bubbling up to document. &nbsp;This would cause it to be hidden.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.click(stopPropagation);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Handle user typed input<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textInput.change(setFromTextInput);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textInput.bind(&#8220;paste&#8221;, function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setTimeout(setFromTextInput, 1);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textInput.keydown(function (e) { if (e.keyCode == 13) { setFromTextInput(); } });<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cancelButton.text(opts.cancelText);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cancelButton.bind(&#8220;click.spectrum&#8221;, function (e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.stopPropagation();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.preventDefault();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; revert();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clearButton.attr(&#8220;title&#8221;, opts.clearText);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clearButton.bind(&#8220;click.spectrum&#8221;, function (e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.stopPropagation();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.preventDefault();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isEmpty = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; move();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(flat) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/for the flat style, this is a change event<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateOriginalInput(true);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chooseButton.text(opts.chooseText);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chooseButton.bind(&#8220;click.spectrum&#8221;, function (e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.stopPropagation();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.preventDefault();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (IE &amp;&amp; textInput.is(&#8220;:focus&#8221;)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textInput.trigger(&#8216;change&#8217;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (isValid()) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateOriginalInput(true);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toggleButton.bind(&#8220;click.spectrum&#8221;, function (e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.stopPropagation();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.preventDefault();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.showPaletteOnly = !opts.showPaletteOnly;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ To make sure the Picker area is drawn on the right, next to the<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Palette area (and not below the palette), first move the Palette<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ to the left to make space for the picker, plus 5px extra.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ The &#8216;applyOptions&#8217; function puts the whole container back into place<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ and takes care of the button-text and the sp-palette-only CSS class.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!opts.showPaletteOnly &amp;&amp; !flat) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.css(&#8216;left&#8217;, &#8216;-=&#8217; + (pickerContainer.outerWidth(true) + 5));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; applyOptions();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; draggable(alphaSlider, function (dragX, dragY, e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentAlpha = (dragX \/ alphaWidth);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isEmpty = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (e.shiftKey) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentAlpha = Math.round(currentAlpha * 10) \/ 10;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; move();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }, dragStart, dragStop);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; draggable(slider, function (dragX, dragY) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentHue = parseFloat(dragY \/ slideHeight);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isEmpty = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!opts.showAlpha) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentAlpha = 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; move();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }, dragStart, dragStop);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; draggable(dragger, function (dragX, dragY, e) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ shift+drag should snap the movement to either the x or y axis.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!e.shiftKey) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shiftMovementDirection = null;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (!shiftMovementDirection) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var oldDragX = currentSaturation * dragWidth;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var oldDragY = dragHeight &#8211; (currentValue * dragHeight);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var furtherFromX = Math.abs(dragX &#8211; oldDragX) &gt; Math.abs(dragY &#8211; oldDragY);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shiftMovementDirection = furtherFromX ? &#8220;x&#8221; : &#8220;y&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var setSaturation = !shiftMovementDirection || shiftMovementDirection === &#8220;x&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var setValue = !shiftMovementDirection || shiftMovementDirection === &#8220;y&#8221;;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (setSaturation) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentSaturation = parseFloat(dragX \/ dragWidth);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (setValue) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentValue = parseFloat((dragHeight &#8211; dragY) \/ dragHeight);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isEmpty = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!opts.showAlpha) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentAlpha = 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; move();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }, dragStart, dragStop);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!!initialColor) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set(initialColor);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ In case color was black &#8211; update the preview UI and set the format<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ since the set function will not run (default color is black).<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateUI();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentPreferredFormat = opts.preferredFormat || tinycolor(initialColor).format;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addColorToSelectionPalette(initialColor);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateUI();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (flat) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; show();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function paletteElementClick(e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (e.data &amp;&amp; e.data.ignore) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set($(e.target).closest(&#8220;.sp-thumb-el&#8221;).data(&#8220;color&#8221;));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; move();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set($(e.target).closest(&#8220;.sp-thumb-el&#8221;).data(&#8220;color&#8221;));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; move();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateOriginalInput(true);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts.hideAfterPaletteSelect) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var paletteEvent = IE ? &#8220;mousedown.spectrum&#8221; : &#8220;click.spectrum touchstart.spectrum&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paletteContainer.delegate(&#8220;.sp-thumb-el&#8221;, paletteEvent, paletteElementClick);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initialColorContainer.delegate(&#8220;.sp-thumb-el:nth-child(1)&#8221;, paletteEvent, { ignore: true }, paletteElementClick);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function updateSelectionPaletteFromStorage() {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (localStorageKey &amp;&amp; window.localStorage) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Migrate old palettes over to new format. &nbsp;May want to remove this eventually.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var oldPalette = window.localStorage[localStorageKey].split(&#8220;,#&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (oldPalette.length &gt; 1) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; delete window.localStorage[localStorageKey];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.each(oldPalette, function(i, c) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addColorToSelectionPalette(c);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch(e) { }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selectionPalette = window.localStorage[localStorageKey].split(&#8220;;&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (e) { }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function addColorToSelectionPalette(color) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (showSelectionPalette) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var rgb = tinycolor(color).toRgbString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!paletteLookup[rgb] &amp;&amp; $.inArray(rgb, selectionPalette) === -1) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selectionPalette.push(rgb);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while(selectionPalette.length &gt; maxSelectionSize) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selectionPalette.shift();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (localStorageKey &amp;&amp; window.localStorage) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; window.localStorage[localStorageKey] = selectionPalette.join(&#8220;;&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch(e) { }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function getUniqueSelectionPalette() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var unique = [];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts.showPalette) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (var i = 0; i &lt; selectionPalette.length; i++) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var rgb = tinycolor(selectionPalette[i]).toRgbString();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!paletteLookup[rgb]) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unique.push(selectionPalette[i]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return unique.reverse().slice(0, opts.maxSelectionSize);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function drawPalette() {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var currentColor = get();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var html = $.map(paletteArray, function (palette, i) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return paletteTemplate(palette, currentColor, &#8220;sp-palette-row sp-palette-row-&#8221; + i, opts);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateSelectionPaletteFromStorage();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (selectionPalette) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, &#8220;sp-palette-row sp-palette-row-selection&#8221;, opts));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paletteContainer.html(html.join(&#8220;&#8221;));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function drawInitial() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts.showInitial) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var initial = colorOnShow;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var current = get();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; initialColorContainer.html(paletteTemplate([initial, current], current, &#8220;sp-palette-row-initial&#8221;, opts));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function dragStart() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (dragHeight &lt;= 0 || dragWidth &lt;= 0 || slideHeight &lt;= 0) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reflow();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isDragging = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.addClass(draggingClass);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shiftMovementDirection = null;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.trigger(&#8216;dragstart.spectrum&#8217;, [ get() ]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function dragStop() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isDragging = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.removeClass(draggingClass);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.trigger(&#8216;dragstop.spectrum&#8217;, [ get() ]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function setFromTextInput() {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var value = textInput.val();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((value === null || value === &#8220;&#8221;) &amp;&amp; allowEmpty) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set(null);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateOriginalInput(true);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var tiny = tinycolor(value);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (tiny.isValid()) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set(tiny);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateOriginalInput(true);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textInput.addClass(&#8220;sp-validation-error&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function toggle() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (visible) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; show();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function show() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var event = $.Event(&#8216;beforeShow.spectrum&#8217;);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (visible) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reflow();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.trigger(event, [ get() ]);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (callbacks.beforeShow(get()) === false || event.isDefaultPrevented()) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hideAll();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; visible = true;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(doc).bind(&#8220;keydown.spectrum&#8221;, onkeydown);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(doc).bind(&#8220;click.spectrum&#8221;, clickout);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(window).bind(&#8220;resize.spectrum&#8221;, resize);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; replacer.addClass(&#8220;sp-active&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.removeClass(&#8220;sp-hidden&#8221;);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reflow();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateUI();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; colorOnShow = get();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; drawInitial();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callbacks.show(colorOnShow);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.trigger(&#8216;show.spectrum&#8217;, [ colorOnShow ]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function onkeydown(e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Close on ESC<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (e.keyCode === 27) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function clickout(e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Return on right click.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (e.button == 2) { return; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ If a drag event was happening during the mouseup, don&#8217;t hide<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ on click.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (isDragging) { return; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (clickoutFiresChange) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateOriginalInput(true);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; revert();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function hide() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Return if hiding is unnecessary<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!visible || flat) { return; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; visible = false;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(doc).unbind(&#8220;keydown.spectrum&#8221;, onkeydown);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(doc).unbind(&#8220;click.spectrum&#8221;, clickout);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(window).unbind(&#8220;resize.spectrum&#8221;, resize);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; replacer.removeClass(&#8220;sp-active&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.addClass(&#8220;sp-hidden&#8221;);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callbacks.hide(get());<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.trigger(&#8216;hide.spectrum&#8217;, [ get() ]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function revert() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set(colorOnShow, true);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function set(color, ignoreFormatChange) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (tinycolor.equals(color, get())) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Update UI just in case a validation error needs<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ to be cleared.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateUI();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var newColor, newHsv;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!color &amp;&amp; allowEmpty) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isEmpty = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isEmpty = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newColor = tinycolor(color);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newHsv = newColor.toHsv();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentHue = (newHsv.h % 360) \/ 360;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentSaturation = newHsv.s;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentValue = newHsv.v;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentAlpha = newHsv.a;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateUI();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (newColor &amp;&amp; newColor.isValid() &amp;&amp; !ignoreFormatChange) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentPreferredFormat = opts.preferredFormat || newColor.getFormat();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function get(opts) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts = opts || { };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (allowEmpty &amp;&amp; isEmpty) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return null;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return tinycolor.fromRatio({<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; h: currentHue,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s: currentSaturation,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v: currentValue,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a: Math.round(currentAlpha * 100) \/ 100<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }, { format: opts.format || currentPreferredFormat });<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function isValid() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return !textInput.hasClass(&#8220;sp-validation-error&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function move() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateUI();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callbacks.move(get());<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.trigger(&#8216;move.spectrum&#8217;, [ get() ]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function updateUI() {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textInput.removeClass(&#8220;sp-validation-error&#8221;);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateHelperLocations();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Update dragger background color (gradients take care of saturation and value).<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var flatColor = tinycolor.fromRatio({ h: currentHue, s: 1, v: 1 });<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragger.css(&#8220;background-color&#8221;, flatColor.toHexString());<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Get a format that alpha will be included in (hex and names ignore alpha)<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var format = currentPreferredFormat;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (currentAlpha &lt; 1 &amp;&amp; !(currentAlpha === 0 &amp;&amp; format === &#8220;name&#8221;)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (format === &#8220;hex&#8221; || format === &#8220;hex3&#8221; || format === &#8220;hex6&#8221; || format === &#8220;name&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format = &#8220;rgb&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var realColor = get({ format: format }),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; displayColor = &#8221;;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/\/reset background info for preview element<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; previewElement.removeClass(&#8220;sp-clear-display&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; previewElement.css(&#8216;background-color&#8217;, &#8216;transparent&#8217;);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!realColor &amp;&amp; allowEmpty) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Update the replaced elements background with icon indicating no color selection<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; previewElement.addClass(&#8220;sp-clear-display&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var realHex = realColor.toHexString(),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; realRgb = realColor.toRgbString();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Update the replaced elements background color (with actual selected color)<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (rgbaSupport || realColor.alpha === 1) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; previewElement.css(&#8220;background-color&#8221;, realRgb);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; previewElement.css(&#8220;background-color&#8221;, &#8220;transparent&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; previewElement.css(&#8220;filter&#8221;, realColor.toFilter());<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts.showAlpha) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var rgb = realColor.toRgb();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rgb.a = 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var realAlpha = tinycolor(rgb).toRgbString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var gradient = &#8220;linear-gradient(left, &#8221; + realAlpha + &#8220;, &#8221; + realHex + &#8220;)&#8221;;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (IE) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSliderInner.css(&#8220;filter&#8221;, tinycolor(realAlpha).toFilter({ gradientType: 1 }, realHex));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSliderInner.css(&#8220;background&#8221;, &#8220;-webkit-&#8221; + gradient);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSliderInner.css(&#8220;background&#8221;, &#8220;-moz-&#8221; + gradient);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSliderInner.css(&#8220;background&#8221;, &#8220;-ms-&#8221; + gradient);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Use current syntax gradient on unprefixed property.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSliderInner.css(&#8220;background&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;linear-gradient(to right, &#8221; + realAlpha + &#8220;, &#8221; + realHex + &#8220;)&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; displayColor = realColor.toString(format);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Update the text entry input as it changes happen<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts.showInput) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textInput.val(displayColor);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts.showPalette) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; drawPalette();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; drawInitial();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function updateHelperLocations() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var s = currentSaturation;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var v = currentValue;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(allowEmpty &amp;&amp; isEmpty) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/if selected color is empty, hide the helpers<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSlideHelper.hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slideHelper.hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragHelper.hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/make sure helpers are visible<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSlideHelper.show();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slideHelper.show();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragHelper.show();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Where to show the little circle in that displays your current selected color<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var dragX = s * dragWidth;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var dragY = dragHeight &#8211; (v * dragHeight);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragX = Math.max(<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -dragHelperHeight,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.min(dragWidth &#8211; dragHelperHeight, dragX &#8211; dragHelperHeight)<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragY = Math.max(<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -dragHelperHeight,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.min(dragHeight &#8211; dragHelperHeight, dragY &#8211; dragHelperHeight)<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragHelper.css({<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;top&#8221;: dragY + &#8220;px&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;left&#8221;: dragX + &#8220;px&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var alphaX = currentAlpha * alphaWidth;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSlideHelper.css({<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;left&#8221;: (alphaX &#8211; (alphaSlideHelperWidth \/ 2)) + &#8220;px&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Where to show the bar that displays your current selected hue<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var slideY = (currentHue) * slideHeight;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slideHelper.css({<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;top&#8221;: (slideY &#8211; slideHelperHeight) + &#8220;px&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function updateOriginalInput(fireCallback) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var color = get(),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; displayColor = &#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hasChanged = !tinycolor.equals(color, colorOnShow);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (color) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; displayColor = color.toString(currentPreferredFormat);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Update the selection palette with the current color<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addColorToSelectionPalette(color);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (isInput) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.val(displayColor);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (fireCallback &amp;&amp; hasChanged) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; callbacks.change(color);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.trigger(&#8216;change&#8217;, [ color ]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function reflow() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!visible) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return; \/\/ Calculations would be useless and wouldn&#8217;t be reliable anyways<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragWidth = dragger.width();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragHeight = dragger.height();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragHelperHeight = dragHelper.height();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slideWidth = slider.width();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slideHeight = slider.height();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slideHelperHeight = slideHelper.height();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaWidth = alphaSlider.width();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alphaSlideHelperWidth = alphaSlideHelper.width();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!flat) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.css(&#8220;position&#8221;, &#8220;absolute&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts.offset) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.offset(opts.offset);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.offset(getOffset(container, offsetElement));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateHelperLocations();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts.showPalette) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; drawPalette();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.trigger(&#8216;reflow.spectrum&#8217;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function destroy() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.show();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offsetElement.unbind(&#8220;click.spectrum touchstart.spectrum&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.remove();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; replacer.remove();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spectrums[spect.id] = null;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function option(optionName, optionValue) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (optionName === undefined) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return $.extend({}, opts);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (optionValue === undefined) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return opts[optionName];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts[optionName] = optionValue;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (optionName === &#8220;preferredFormat&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentPreferredFormat = opts.preferredFormat;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; applyOptions();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function enable() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; disabled = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.attr(&#8220;disabled&#8221;, false);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offsetElement.removeClass(&#8220;sp-disabled&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function disable() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hide();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; disabled = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; boundElement.attr(&#8220;disabled&#8221;, true);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offsetElement.addClass(&#8220;sp-disabled&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function setOffset(coord) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; opts.offset = coord;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reflow();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; initialize();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var spect = {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; show: show,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hide: hide,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toggle: toggle,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reflow: reflow,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; option: option,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; enable: enable,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; disable: disable,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset: setOffset,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set: function (c) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set(c);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; updateOriginalInput();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get: get,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; destroy: destroy,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container: container<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; spect.id = spectrums.push(spect) &#8211; 1;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return spect;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/**<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; * checkOffset &#8211; get the offset below\/above and left\/right element depending on screen position<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; * Thanks https:\/\/github.com\/jquery\/jquery-ui\/blob\/master\/ui\/jquery.ui.datepicker.js<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *\/<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function getOffset(picker, input) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var extraY = 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var dpWidth = picker.outerWidth();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var dpHeight = picker.outerHeight();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var inputHeight = input.outerHeight();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var doc = picker[0].ownerDocument;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var docElem = doc.documentElement;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var viewWidth = docElem.clientWidth + $(doc).scrollLeft();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var viewHeight = docElem.clientHeight + $(doc).scrollTop();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var offset = input.offset();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; offset.top += inputHeight;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; offset.left -=<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.min(offset.left, (offset.left + dpWidth &gt; viewWidth &amp;&amp; viewWidth &gt; dpWidth) ?<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.abs(offset.left + dpWidth &#8211; viewWidth) : 0);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; offset.top -=<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.min(offset.top, ((offset.top + dpHeight &gt; viewHeight &amp;&amp; viewHeight &gt; dpHeight) ?<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.abs(dpHeight + inputHeight &#8211; extraY) : extraY));<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return offset;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/**<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; * noop &#8211; do nothing<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *\/<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function noop() {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/**<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; * stopPropagation &#8211; makes the code only doing this a little easier to read in line<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *\/<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function stopPropagation(e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; e.stopPropagation();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/**<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; * Create a function bound to a given object<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; * Thanks to underscore.js<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *\/<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function bind(func, obj) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var slice = Array.prototype.slice;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var args = slice.call(arguments, 2);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return func.apply(obj, args.concat(slice.call(arguments)));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/**<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; * Lightweight drag helper. &nbsp;Handles containment within the element, so that<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; * when dragging, the x is within [0,element.width] and y is within [0,element.height]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *\/<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function draggable(element, onmove, onstart, onstop) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; onmove = onmove || function () { };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; onstart = onstart || function () { };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; onstop = onstop || function () { };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var doc = document;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var dragging = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var offset = {};<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var maxHeight = 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var maxWidth = 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hasTouch = (&#8216;ontouchstart&#8217; in window);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var duringDragEvents = {};<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; duringDragEvents[&#8220;selectstart&#8221;] = prevent;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; duringDragEvents[&#8220;dragstart&#8221;] = prevent;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; duringDragEvents[&#8220;touchmove mousemove&#8221;] = move;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; duringDragEvents[&#8220;touchend mouseup&#8221;] = stop;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function prevent(e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (e.stopPropagation) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.stopPropagation();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (e.preventDefault) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.preventDefault();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.returnValue = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function move(e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (dragging) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Mouseup happened outside of window<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (IE &amp;&amp; doc.documentMode &lt; 9 &amp;&amp; !e.button) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return stop();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var t0 = e.originalEvent &amp;&amp; e.originalEvent.touches &amp;&amp; e.originalEvent.touches[0];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var pageX = t0 &amp;&amp; t0.pageX || e.pageX;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var pageY = t0 &amp;&amp; t0.pageY || e.pageY;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var dragX = Math.max(0, Math.min(pageX &#8211; offset.left, maxWidth));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var dragY = Math.max(0, Math.min(pageY &#8211; offset.top, maxHeight));<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (hasTouch) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Stop scrolling in iOS<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prevent(e);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onmove.apply(element, [dragX, dragY, e]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function start(e) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var rightclick = (e.which) ? (e.which == 3) : (e.button == 2);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!rightclick &amp;&amp; !dragging) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (onstart.apply(element, arguments) !== false) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragging = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maxHeight = $(element).height();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maxWidth = $(element).width();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset = $(element).offset();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(doc).bind(duringDragEvents);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(doc.body).addClass(&#8220;sp-dragging&#8221;);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; move(e);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prevent(e);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function stop() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (dragging) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(doc).unbind(duringDragEvents);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(doc.body).removeClass(&#8220;sp-dragging&#8221;);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Wait a tick before notifying observers to allow the click event<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ to fire in Chrome.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setTimeout(function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onstop.apply(element, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }, 0);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dragging = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; $(element).bind(&#8220;touchstart mousedown&#8221;, start);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function throttle(func, wait, debounce) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var timeout;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var context = this, args = arguments;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var throttler = function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; timeout = null;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; func.apply(context, args);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (debounce) clearTimeout(timeout);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (debounce || !timeout) timeout = setTimeout(throttler, wait);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function inputTypeColorSupport() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return $.fn.spectrum.inputTypeColorSupport();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/**<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; * Define a jQuery plugin<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *\/<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; var dataID = &#8220;spectrum.id&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; $.fn.spectrum = function (opts, extra) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (typeof opts == &#8220;string&#8221;) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var returnValue = this;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var args = Array.prototype.slice.call( arguments, 1 );<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.each(function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var spect = spectrums[$(this).data(dataID)];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (spect) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var method = spect[opts];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!method) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new Error( &#8220;Spectrum: no such method: &#8216;&#8221; + opts + &#8220;&#8216;&#8221; );<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (opts == &#8220;get&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; returnValue = spect.get();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (opts == &#8220;container&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; returnValue = spect.container;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (opts == &#8220;option&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; returnValue = spect.option.apply(spect, args);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (opts == &#8220;destroy&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spect.destroy();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(this).removeData(dataID);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; method.apply(spect, args);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return returnValue;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Initializing a new instance of spectrum<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return this.spectrum(&#8220;destroy&#8221;).each(function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var options = $.extend({}, opts, $(this).data());<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var spect = spectrum(this, options);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(this).data(dataID, spect.id);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; });<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; $.fn.spectrum.load = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; $.fn.spectrum.loadOpts = {};<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; $.fn.spectrum.draggable = draggable;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; $.fn.spectrum.defaults = defaultOpts;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; $.fn.spectrum.inputTypeColorSupport = function inputTypeColorSupport() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (typeof inputTypeColorSupport._cachedResult === &#8220;undefined&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var colorInput = $(&#8220;&lt;input type=&#8217;color&#8217;\/&gt;&#8221;)[0]; \/\/ if color element is supported, value will default to not null<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputTypeColorSupport._cachedResult = colorInput.type === &#8220;color&#8221; &amp;&amp; colorInput.value !== &#8220;&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return inputTypeColorSupport._cachedResult;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; $.spectrum = { };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; $.spectrum.localization = { };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; $.spectrum.palettes = { };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; $.fn.spectrum.processNativeColorInputs = function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var colorInputs = $(&#8220;input[type=color]&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (colorInputs.length &amp;&amp; !inputTypeColorSupport()) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; colorInputs.spectrum({<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; preferredFormat: &#8220;hex6&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ TinyColor v1.1.2<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ https:\/\/github.com\/bgrins\/TinyColor<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Brian Grinstead, MIT License<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; (function() {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; var trimLeft = \/^[s,#]+\/,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; trimRight = \/s+$\/,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; tinyCounter = 0,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; math = Math,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mathRound = math.round,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mathMin = math.min,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mathMax = math.max,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mathRandom = math.random;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; var tinycolor = function(color, opts) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; color = (color) ? color : &#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; opts = opts || { };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ If input is already a tinycolor, return itself<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (color instanceof tinycolor) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return color;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ If we are called as a function, call using new instead<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (!(this instanceof tinycolor)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return new tinycolor(color, opts);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var rgb = inputToRGB(color);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; this._originalInput = color,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; this._r = rgb.r,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; this._g = rgb.g,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; this._b = rgb.b,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; this._a = rgb.a,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; this._roundA = mathRound(100*this._a) \/ 100,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; this._format = opts.format || rgb.format;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; this._gradientType = opts.gradientType;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Don&#8217;t let the range of [0,255] come back in [0,1].<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Potentially lose a little bit of precision here, but will fix issues where<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ .5 gets interpreted as half of the total, instead of half of 1<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ If it was supposed to be 128, this was already taken care of by `inputToRgb`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (this._r &lt; 1) { this._r = mathRound(this._r); }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (this._g &lt; 1) { this._g = mathRound(this._g); }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (this._b &lt; 1) { this._b = mathRound(this._b); }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; this._ok = rgb.ok;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; this._tc_id = tinyCounter++;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; tinycolor.prototype = {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; isDark: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this.getBrightness() &lt; 128;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; isLight: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return !this.isDark();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; isValid: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._ok;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; getOriginalInput: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._originalInput;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; getFormat: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._format;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; getAlpha: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._a;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; getBrightness: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var rgb = this.toRgb();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) \/ 1000;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; setAlpha: function(value) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this._a = boundAlpha(value);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this._roundA = mathRound(100*this._a) \/ 100;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toHsv: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var hsv = rgbToHsv(this._r, this._g, this._b);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toHsvString: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var hsv = rgbToHsv(this._r, this._g, this._b);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (this._a == 1) ?<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;hsv(&#8221; &nbsp;+ h + &#8220;, &#8221; + s + &#8220;%, &#8221; + v + &#8220;%)&#8221; :<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;hsva(&#8221; + h + &#8220;, &#8221; + s + &#8220;%, &#8221; + v + &#8220;%, &#8220;+ this._roundA + &#8220;)&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toHsl: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var hsl = rgbToHsl(this._r, this._g, this._b);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toHslString: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var hsl = rgbToHsl(this._r, this._g, this._b);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (this._a == 1) ?<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;hsl(&#8221; &nbsp;+ h + &#8220;, &#8221; + s + &#8220;%, &#8221; + l + &#8220;%)&#8221; :<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;hsla(&#8221; + h + &#8220;, &#8221; + s + &#8220;%, &#8221; + l + &#8220;%, &#8220;+ this._roundA + &#8220;)&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toHex: function(allow3Char) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return rgbToHex(this._r, this._g, this._b, allow3Char);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toHexString: function(allow3Char) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &#8216;#&#8217; + this.toHex(allow3Char);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toHex8: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return rgbaToHex(this._r, this._g, this._b, this._a);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toHex8String: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &#8216;#&#8217; + this.toHex8();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toRgb: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toRgbString: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (this._a == 1) ?<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(&#8221; &nbsp;+ mathRound(this._r) + &#8220;, &#8221; + mathRound(this._g) + &#8220;, &#8221; + mathRound(this._b) + &#8220;)&#8221; :<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgba(&#8221; + mathRound(this._r) + &#8220;, &#8221; + mathRound(this._g) + &#8220;, &#8221; + mathRound(this._b) + &#8220;, &#8221; + this._roundA + &#8220;)&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toPercentageRgb: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { r: mathRound(bound01(this._r, 255) * 100) + &#8220;%&#8221;, g: mathRound(bound01(this._g, 255) * 100) + &#8220;%&#8221;, b: mathRound(bound01(this._b, 255) * 100) + &#8220;%&#8221;, a: this._a };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toPercentageRgbString: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (this._a == 1) ?<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(&#8221; &nbsp;+ mathRound(bound01(this._r, 255) * 100) + &#8220;%, &#8221; + mathRound(bound01(this._g, 255) * 100) + &#8220;%, &#8221; + mathRound(bound01(this._b, 255) * 100) + &#8220;%)&#8221; :<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgba(&#8221; + mathRound(bound01(this._r, 255) * 100) + &#8220;%, &#8221; + mathRound(bound01(this._g, 255) * 100) + &#8220;%, &#8221; + mathRound(bound01(this._b, 255) * 100) + &#8220;%, &#8221; + this._roundA + &#8220;)&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toName: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (this._a === 0) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &#8220;transparent&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (this._a &lt; 1) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toFilter: function(secondColor) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var hex8String = &#8216;#&#8217; + rgbaToHex(this._r, this._g, this._b, this._a);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var secondHex8String = hex8String;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var gradientType = this._gradientType ? &#8220;GradientType = 1, &#8221; : &#8220;&#8221;;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (secondColor) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var s = tinycolor(secondColor);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; secondHex8String = s.toHex8String();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &#8220;progid:DXImageTransform.Microsoft.gradient(&#8220;+gradientType+&#8221;startColorstr=&#8221;+hex8String+&#8221;,endColorstr=&#8221;+secondHex8String+&#8221;)&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; toString: function(format) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var formatSet = !!format;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format = format || this._format;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var formattedString = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var hasAlpha = this._a &lt; 1 &amp;&amp; this._a &gt;= 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var needsAlphaFormat = !formatSet &amp;&amp; hasAlpha &amp;&amp; (format === &#8220;hex&#8221; || format === &#8220;hex6&#8221; || format === &#8220;hex3&#8221; || format === &#8220;name&#8221;);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (needsAlphaFormat) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ Special case for &#8220;transparent&#8221;, all other non-alpha formats<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ will return rgba when there is transparency.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (format === &#8220;name&#8221; &amp;&amp; this._a === 0) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this.toName();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this.toRgbString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (format === &#8220;rgb&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formattedString = this.toRgbString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (format === &#8220;prgb&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formattedString = this.toPercentageRgbString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (format === &#8220;hex&#8221; || format === &#8220;hex6&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formattedString = this.toHexString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (format === &#8220;hex3&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formattedString = this.toHexString(true);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (format === &#8220;hex8&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formattedString = this.toHex8String();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (format === &#8220;name&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formattedString = this.toName();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (format === &#8220;hsl&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formattedString = this.toHslString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (format === &#8220;hsv&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; formattedString = this.toHsvString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return formattedString || this.toHexString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; _applyModification: function(fn, args) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var color = fn.apply(null, [this].concat([].slice.call(args)));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this._r = color._r;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this._g = color._g;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this._b = color._b;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.setAlpha(color._a);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lighten: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyModification(lighten, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; brighten: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyModification(brighten, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darken: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyModification(darken, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; desaturate: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyModification(desaturate, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; saturate: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyModification(saturate, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; greyscale: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyModification(greyscale, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; spin: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyModification(spin, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; _applyCombination: function(fn, args) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return fn.apply(null, [this].concat([].slice.call(args)));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; analogous: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyCombination(analogous, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; complement: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyCombination(complement, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; monochromatic: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyCombination(monochromatic, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; splitcomplement: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyCombination(splitcomplement, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; triad: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyCombination(triad, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; tetrad: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._applyCombination(tetrad, arguments);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ If input is an object, force 1 into &#8220;1.0&#8221; to handle ratios properly<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ String input requires &#8220;1.0&#8221; as input, so 1 will be treated as 1<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; tinycolor.fromRatio = function(color, opts) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (typeof color == &#8220;object&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var newColor = {};<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (var i in color) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (color.hasOwnProperty(i)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (i === &#8220;a&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newColor[i] = color[i];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newColor[i] = convertToPercentage(color[i]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color = newColor;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(color, opts);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Given a string or object, convert that input to RGB<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Possible string inputs:<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;red&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;#f00&#8221; or &#8220;f00&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;#ff0000&#8221; or &#8220;ff0000&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;#ff000000&#8221; or &#8220;ff000000&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;rgb 255 0 0&#8221; or &#8220;rgb (255, 0, 0)&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;rgb 1.0 0 0&#8221; or &#8220;rgb (1, 0, 0)&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;rgba (255, 0, 0, 1)&#8221; or &#8220;rgba 255, 0, 0, 1&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;rgba (1.0, 0, 0, 1)&#8221; or &#8220;rgba 1.0, 0, 0, 1&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;hsl(0, 100%, 50%)&#8221; or &#8220;hsl 0 100% 50%&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;hsla(0, 100%, 50%, 1)&#8221; or &#8220;hsla 0 100% 50%, 1&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp; &#8220;hsv(0, 100%, 100%)&#8221; or &#8220;hsv 0 100% 100%&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function inputToRGB(color) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var rgb = { r: 0, g: 0, b: 0 };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var a = 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var ok = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var format = false;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (typeof color == &#8220;string&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color = stringInputToObject(color);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (typeof color == &#8220;object&#8221;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (color.hasOwnProperty(&#8220;r&#8221;) &amp;&amp; color.hasOwnProperty(&#8220;g&#8221;) &amp;&amp; color.hasOwnProperty(&#8220;b&#8221;)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rgb = rgbToRgb(color.r, color.g, color.b);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ok = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format = String(color.r).substr(-1) === &#8220;%&#8221; ? &#8220;prgb&#8221; : &#8220;rgb&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (color.hasOwnProperty(&#8220;h&#8221;) &amp;&amp; color.hasOwnProperty(&#8220;s&#8221;) &amp;&amp; color.hasOwnProperty(&#8220;v&#8221;)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color.s = convertToPercentage(color.s);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color.v = convertToPercentage(color.v);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rgb = hsvToRgb(color.h, color.s, color.v);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ok = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format = &#8220;hsv&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (color.hasOwnProperty(&#8220;h&#8221;) &amp;&amp; color.hasOwnProperty(&#8220;s&#8221;) &amp;&amp; color.hasOwnProperty(&#8220;l&#8221;)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color.s = convertToPercentage(color.s);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color.l = convertToPercentage(color.l);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rgb = hslToRgb(color.h, color.s, color.l);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ok = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format = &#8220;hsl&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (color.hasOwnProperty(&#8220;a&#8221;)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a = color.a;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; a = boundAlpha(a);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ok: ok,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format: color.format || format,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r: mathMin(255, mathMax(rgb.r, 0)),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g: mathMin(255, mathMax(rgb.g, 0)),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b: mathMin(255, mathMax(rgb.b, 0)),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a: a<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Conversion Functions<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &lt;http:\/\/mjijackson.com\/2008\/02\/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript&gt;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `rgbToRgb`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Handle bounds \/ percentage checking to conform to CSS color spec<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &lt;http:\/\/www.w3.org\/TR\/css3-color\/&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Assumes:* r, g, b in [0, 255] or [0, 1]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Returns:* { r, g, b } in [0, 255]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function rgbToRgb(r, g, b){<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r: bound01(r, 255) * 255,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g: bound01(g, 255) * 255,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b: bound01(b, 255) * 255<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `rgbToHsl`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Converts an RGB color value to HSL.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Returns:* { h, s, l } in [0,1]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function rgbToHsl(r, g, b) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; r = bound01(r, 255);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; g = bound01(g, 255);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; b = bound01(b, 255);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var max = mathMax(r, g, b), min = mathMin(r, g, b);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var h, s, l = (max + min) \/ 2;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if(max == min) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; h = s = 0; \/\/ achromatic<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var d = max &#8211; min;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s = l &gt; 0.5 ? d \/ (2 &#8211; max &#8211; min) : d \/ (max + min);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch(max) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case r: h = (g &#8211; b) \/ d + (g &lt; b ? 6 : 0); break;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case g: h = (b &#8211; r) \/ d + 2; break;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case b: h = (r &#8211; g) \/ d + 4; break;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; h \/= 6;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return { h: h, s: s, l: l };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `hslToRgb`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Converts an HSL color value to RGB.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Returns:* { r, g, b } in the set [0, 255]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function hslToRgb(h, s, l) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var r, g, b;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; h = bound01(h, 360);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; s = bound01(s, 100);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; l = bound01(l, 100);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function hue2rgb(p, q, t) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(t &lt; 0) t += 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(t &gt; 1) t -= 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(t &lt; 1\/6) return p + (q &#8211; p) * 6 * t;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(t &lt; 1\/2) return q;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(t &lt; 2\/3) return p + (q &#8211; p) * (2\/3 &#8211; t) * 6;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return p;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if(s === 0) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r = g = b = l; \/\/ achromatic<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var q = l &lt; 0.5 ? l * (1 + s) : l + s &#8211; l * s;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var p = 2 * l &#8211; q;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r = hue2rgb(p, q, h + 1\/3);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g = hue2rgb(p, q, h);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b = hue2rgb(p, q, h &#8211; 1\/3);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return { r: r * 255, g: g * 255, b: b * 255 };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `rgbToHsv`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Converts an RGB color value to HSV<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Returns:* { h, s, v } in [0,1]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function rgbToHsv(r, g, b) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; r = bound01(r, 255);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; g = bound01(g, 255);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; b = bound01(b, 255);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var max = mathMax(r, g, b), min = mathMin(r, g, b);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var h, s, v = max;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var d = max &#8211; min;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; s = max === 0 ? 0 : d \/ max;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if(max == min) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; h = 0; \/\/ achromatic<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch(max) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case r: h = (g &#8211; b) \/ d + (g &lt; b ? 6 : 0); break;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case g: h = (b &#8211; r) \/ d + 2; break;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case b: h = (r &#8211; g) \/ d + 4; break;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; h \/= 6;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return { h: h, s: s, v: v };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `hsvToRgb`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Converts an HSV color value to RGB.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Returns:* { r, g, b } in the set [0, 255]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp;function hsvToRgb(h, s, v) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; h = bound01(h, 360) * 6;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; s = bound01(s, 100);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; v = bound01(v, 100);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var i = math.floor(h),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f = h &#8211; i,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; p = v * (1 &#8211; s),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; q = v * (1 &#8211; f * s),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t = v * (1 &#8211; (1 &#8211; f) * s),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mod = i % 6,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r = [v, q, p, p, t, v][mod],<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g = [t, v, v, q, p, p][mod],<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b = [p, p, t, v, v, q][mod];<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return { r: r * 255, g: g * 255, b: b * 255 };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `rgbToHex`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Converts an RGB color to hex<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Assumes r, g, and b are contained in the set [0, 255]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Returns a 3 or 6 character hex<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function rgbToHex(r, g, b, allow3Char) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hex = [<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pad2(mathRound(r).toString(16)),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pad2(mathRound(g).toString(16)),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pad2(mathRound(b).toString(16))<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; ];<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Return a 3 character hex if possible<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (allow3Char &amp;&amp; hex[0].charAt(0) == hex[0].charAt(1) &amp;&amp; hex[1].charAt(0) == hex[1].charAt(1) &amp;&amp; hex[2].charAt(0) == hex[2].charAt(1)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return hex.join(&#8220;&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ `rgbaToHex`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Converts an RGBA color plus alpha transparency to hex<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Assumes r, g, b and a are contained in the set [0, 255]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Returns an 8 character hex<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; function rgbaToHex(r, g, b, a) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var hex = [<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pad2(convertDecimalToHex(a)),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pad2(mathRound(r).toString(16)),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pad2(mathRound(g).toString(16)),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pad2(mathRound(b).toString(16))<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ];<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return hex.join(&#8220;&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `equals`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Can be called with any tinycolor input<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; tinycolor.equals = function (color1, color2) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (!color1 || !color2) { return false; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; tinycolor.random = function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor.fromRatio({<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r: mathRandom(),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g: mathRandom(),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b: mathRandom()<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; });<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Modification Functions<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Thanks to less.js for some of the basics here<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &lt;https:\/\/github.com\/cloudhead\/less.js\/blob\/master\/lib\/less\/functions.js&gt;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function desaturate(color, amount) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; amount = (amount === 0) ? 0 : (amount || 10);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsl = tinycolor(color).toHsl();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hsl.s -= amount \/ 100;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hsl.s = clamp01(hsl.s);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(hsl);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function saturate(color, amount) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; amount = (amount === 0) ? 0 : (amount || 10);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsl = tinycolor(color).toHsl();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hsl.s += amount \/ 100;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hsl.s = clamp01(hsl.s);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(hsl);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function greyscale(color) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(color).desaturate(100);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function lighten (color, amount) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; amount = (amount === 0) ? 0 : (amount || 10);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsl = tinycolor(color).toHsl();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hsl.l += amount \/ 100;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hsl.l = clamp01(hsl.l);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(hsl);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function brighten(color, amount) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; amount = (amount === 0) ? 0 : (amount || 10);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var rgb = tinycolor(color).toRgb();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; rgb.r = mathMax(0, mathMin(255, rgb.r &#8211; mathRound(255 * &#8211; (amount \/ 100))));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; rgb.g = mathMax(0, mathMin(255, rgb.g &#8211; mathRound(255 * &#8211; (amount \/ 100))));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; rgb.b = mathMax(0, mathMin(255, rgb.b &#8211; mathRound(255 * &#8211; (amount \/ 100))));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(rgb);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function darken (color, amount) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; amount = (amount === 0) ? 0 : (amount || 10);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsl = tinycolor(color).toHsl();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hsl.l -= amount \/ 100;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hsl.l = clamp01(hsl.l);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(hsl);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Values outside of this range will be wrapped into this range.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function spin(color, amount) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsl = tinycolor(color).toHsl();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hue = (mathRound(hsl.h) + amount) % 360;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hsl.h = hue &lt; 0 ? 360 + hue : hue;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(hsl);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Combination Functions<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Thanks to jQuery xColor for some of the ideas behind these<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &lt;https:\/\/github.com\/infusion\/jQuery-xcolor\/blob\/master\/jquery.xcolor.js&gt;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function complement(color) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsl = tinycolor(color).toHsl();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hsl.h = (hsl.h + 180) % 360;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(hsl);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function triad(color) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsl = tinycolor(color).toHsl();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var h = hsl.h;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return [<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tinycolor(color),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; ];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function tetrad(color) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsl = tinycolor(color).toHsl();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var h = hsl.h;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return [<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tinycolor(color),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; ];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function splitcomplement(color) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsl = tinycolor(color).toHsl();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var h = hsl.h;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return [<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tinycolor(color),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; ];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function analogous(color, results, slices) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; results = results || 6;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; slices = slices || 30;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsl = tinycolor(color).toHsl();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var part = 360 \/ slices;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var ret = [tinycolor(color)];<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; for (hsl.h = ((hsl.h &#8211; (part * results &gt;&gt; 1)) + 720) % 360; &#8211;results; ) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hsl.h = (hsl.h + part) % 360;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret.push(tinycolor(hsl));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return ret;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; function monochromatic(color, results) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; results = results || 6;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var hsv = tinycolor(color).toHsv();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var h = hsv.h, s = hsv.s, v = hsv.v;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var ret = [];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var modification = 1 \/ results;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; while (results&#8211;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret.push(tinycolor({ h: h, s: s, v: v}));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v = (v + modification) % 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return ret;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Utility Functions<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; tinycolor.mix = function(color1, color2, amount) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; amount = (amount === 0) ? 0 : (amount || 50);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var rgb1 = tinycolor(color1).toRgb();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var rgb2 = tinycolor(color2).toRgb();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var p = amount \/ 100;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var w = p * 2 &#8211; 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var a = rgb2.a &#8211; rgb1.a;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var w1;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (w * a == -1) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; w1 = w;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; } else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; w1 = (w + a) \/ (1 + w * a);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; w1 = (w1 + 1) \/ 2;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var w2 = 1 &#8211; w1;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var rgba = {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r: rgb2.r * w1 + rgb1.r * w2,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g: rgb2.g * w1 + rgb1.g * w2,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b: rgb2.b * w1 + rgb1.b * w2,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a: rgb2.a * p &nbsp;+ rgb1.a * (1 &#8211; p)<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return tinycolor(rgba);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Readability Functions<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &lt;http:\/\/www.w3.org\/TR\/AERT#color-contrast&gt;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `readability`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Analyze the 2 colors and returns an object with the following properties:<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp;`brightness`: difference in brightness between the two colors<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp;`color`: difference in color\/hue between the two colors<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; tinycolor.readability = function(color1, color2) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var c1 = tinycolor(color1);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var c2 = tinycolor(color2);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var rgb1 = c1.toRgb();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var rgb2 = c2.toRgb();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var brightnessA = c1.getBrightness();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var brightnessB = c2.getBrightness();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var colorDiff = (<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.max(rgb1.r, rgb2.r) &#8211; Math.min(rgb1.r, rgb2.r) +<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.max(rgb1.g, rgb2.g) &#8211; Math.min(rgb1.g, rgb2.g) +<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Math.max(rgb1.b, rgb2.b) &#8211; Math.min(rgb1.b, rgb2.b)<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; );<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; brightness: Math.abs(brightnessA &#8211; brightnessB),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color: colorDiff<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `readable`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ http:\/\/www.w3.org\/TR\/AERT#color-contrast<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Ensure that foreground and background color combinations provide sufficient contrast.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Example*<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp;tinycolor.isReadable(&#8220;#000&#8221;, &#8220;#111&#8221;) =&gt; false<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; tinycolor.isReadable = function(color1, color2) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var readability = tinycolor.readability(color1, color2);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return readability.brightness &gt; 125 &amp;&amp; readability.color &gt; 500;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `mostReadable`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Given a base color and a list of possible foreground or background<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ colors for that base, returns the most readable color.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ *Example*<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &nbsp; &nbsp;tinycolor.mostReadable(&#8220;#123&#8221;, [&#8220;#fff&#8221;, &#8220;#000&#8221;]) =&gt; &#8220;#000&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; tinycolor.mostReadable = function(baseColor, colorList) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var bestColor = null;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var bestScore = 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var bestIsReadable = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; for (var i=0; i &lt; colorList.length; i++) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ We normalize both around the &#8220;acceptable&#8221; breaking point,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \/\/ but rank brightness constrast higher than hue.<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var readability = tinycolor.readability(baseColor, colorList[i]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var readable = readability.brightness &gt; 125 &amp;&amp; readability.color &gt; 500;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var score = 3 * (readability.brightness \/ 125) + (readability.color \/ 500);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((readable &amp;&amp; ! bestIsReadable) ||<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (readable &amp;&amp; bestIsReadable &amp;&amp; score &gt; bestScore) ||<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ((! readable) &amp;&amp; (! bestIsReadable) &amp;&amp; score &gt; bestScore)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bestIsReadable = readable;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bestScore = score;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bestColor = tinycolor(colorList[i]);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return bestColor;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Big List of Colors<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &lt;http:\/\/www.w3.org\/TR\/css3-color\/#svg-color&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; var names = tinycolor.names = {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; aliceblue: &#8220;f0f8ff&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; antiquewhite: &#8220;faebd7&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; aqua: &#8220;0ff&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; aquamarine: &#8220;7fffd4&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; azure: &#8220;f0ffff&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; beige: &#8220;f5f5dc&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; bisque: &#8220;ffe4c4&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; black: &#8220;000&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; blanchedalmond: &#8220;ffebcd&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; blue: &#8220;00f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; blueviolet: &#8220;8a2be2&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; brown: &#8220;a52a2a&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; burlywood: &#8220;deb887&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; burntsienna: &#8220;ea7e5d&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; cadetblue: &#8220;5f9ea0&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; chartreuse: &#8220;7fff00&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; chocolate: &#8220;d2691e&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; coral: &#8220;ff7f50&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; cornflowerblue: &#8220;6495ed&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; cornsilk: &#8220;fff8dc&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; crimson: &#8220;dc143c&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; cyan: &#8220;0ff&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkblue: &#8220;00008b&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkcyan: &#8220;008b8b&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkgoldenrod: &#8220;b8860b&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkgray: &#8220;a9a9a9&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkgreen: &#8220;006400&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkgrey: &#8220;a9a9a9&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkkhaki: &#8220;bdb76b&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkmagenta: &#8220;8b008b&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkolivegreen: &#8220;556b2f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkorange: &#8220;ff8c00&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkorchid: &#8220;9932cc&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkred: &#8220;8b0000&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darksalmon: &#8220;e9967a&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkseagreen: &#8220;8fbc8f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkslateblue: &#8220;483d8b&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkslategray: &#8220;2f4f4f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkslategrey: &#8220;2f4f4f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkturquoise: &#8220;00ced1&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; darkviolet: &#8220;9400d3&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; deeppink: &#8220;ff1493&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; deepskyblue: &#8220;00bfff&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; dimgray: &#8220;696969&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; dimgrey: &#8220;696969&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; dodgerblue: &#8220;1e90ff&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; firebrick: &#8220;b22222&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; floralwhite: &#8220;fffaf0&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; forestgreen: &#8220;228b22&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; fuchsia: &#8220;f0f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; gainsboro: &#8220;dcdcdc&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; ghostwhite: &#8220;f8f8ff&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; gold: &#8220;ffd700&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; goldenrod: &#8220;daa520&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; gray: &#8220;808080&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; green: &#8220;008000&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; greenyellow: &#8220;adff2f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; grey: &#8220;808080&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; honeydew: &#8220;f0fff0&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; hotpink: &#8220;ff69b4&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; indianred: &#8220;cd5c5c&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; indigo: &#8220;4b0082&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; ivory: &#8220;fffff0&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; khaki: &#8220;f0e68c&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lavender: &#8220;e6e6fa&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lavenderblush: &#8220;fff0f5&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lawngreen: &#8220;7cfc00&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lemonchiffon: &#8220;fffacd&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightblue: &#8220;add8e6&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightcoral: &#8220;f08080&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightcyan: &#8220;e0ffff&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightgoldenrodyellow: &#8220;fafad2&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightgray: &#8220;d3d3d3&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightgreen: &#8220;90ee90&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightgrey: &#8220;d3d3d3&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightpink: &#8220;ffb6c1&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightsalmon: &#8220;ffa07a&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightseagreen: &#8220;20b2aa&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightskyblue: &#8220;87cefa&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightslategray: &#8220;789&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightslategrey: &#8220;789&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightsteelblue: &#8220;b0c4de&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lightyellow: &#8220;ffffe0&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; lime: &#8220;0f0&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; limegreen: &#8220;32cd32&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; linen: &#8220;faf0e6&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; magenta: &#8220;f0f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; maroon: &#8220;800000&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mediumaquamarine: &#8220;66cdaa&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mediumblue: &#8220;0000cd&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mediumorchid: &#8220;ba55d3&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mediumpurple: &#8220;9370db&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mediumseagreen: &#8220;3cb371&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mediumslateblue: &#8220;7b68ee&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mediumspringgreen: &#8220;00fa9a&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mediumturquoise: &#8220;48d1cc&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mediumvioletred: &#8220;c71585&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; midnightblue: &#8220;191970&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mintcream: &#8220;f5fffa&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; mistyrose: &#8220;ffe4e1&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; moccasin: &#8220;ffe4b5&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; navajowhite: &#8220;ffdead&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; navy: &#8220;000080&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; oldlace: &#8220;fdf5e6&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; olive: &#8220;808000&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; olivedrab: &#8220;6b8e23&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; orange: &#8220;ffa500&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; orangered: &#8220;ff4500&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; orchid: &#8220;da70d6&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; palegoldenrod: &#8220;eee8aa&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; palegreen: &#8220;98fb98&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; paleturquoise: &#8220;afeeee&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; palevioletred: &#8220;db7093&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; papayawhip: &#8220;ffefd5&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; peachpuff: &#8220;ffdab9&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; peru: &#8220;cd853f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; pink: &#8220;ffc0cb&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; plum: &#8220;dda0dd&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; powderblue: &#8220;b0e0e6&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; purple: &#8220;800080&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; rebeccapurple: &#8220;663399&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; red: &#8220;f00&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; rosybrown: &#8220;bc8f8f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; royalblue: &#8220;4169e1&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; saddlebrown: &#8220;8b4513&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; salmon: &#8220;fa8072&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; sandybrown: &#8220;f4a460&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; seagreen: &#8220;2e8b57&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; seashell: &#8220;fff5ee&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; sienna: &#8220;a0522d&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; silver: &#8220;c0c0c0&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; skyblue: &#8220;87ceeb&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; slateblue: &#8220;6a5acd&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; slategray: &#8220;708090&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; slategrey: &#8220;708090&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; snow: &#8220;fffafa&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; springgreen: &#8220;00ff7f&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; steelblue: &#8220;4682b4&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; tan: &#8220;d2b48c&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; teal: &#8220;008080&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; thistle: &#8220;d8bfd8&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; tomato: &#8220;ff6347&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; turquoise: &#8220;40e0d0&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; violet: &#8220;ee82ee&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; wheat: &#8220;f5deb3&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; white: &#8220;fff&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; whitesmoke: &#8220;f5f5f5&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; yellow: &#8220;ff0&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; yellowgreen: &#8220;9acd32&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; };<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Make it easy to access colors via `hexNames[hex]`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; var hexNames = tinycolor.hexNames = flip(names);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Utilities<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &#8212;&#8212;&#8212;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `{ &#8216;name1&#8217;: &#8216;val1&#8217; }` becomes `{ &#8216;val1&#8217;: &#8216;name1&#8217; }`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function flip(o) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var flipped = { };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; for (var i in o) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (o.hasOwnProperty(i)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flipped[o[i]] = i;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return flipped;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Return a valid alpha value [0,1] with all invalid values being set to 1<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function boundAlpha(a) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; a = parseFloat(a);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (isNaN(a) || a &lt; 0 || a &gt; 1) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a = 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return a;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Take input from [0, n] and return it as [0, 1]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function bound01(n, max) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (isOnePointZero(n)) { n = &#8220;100%&#8221;; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var processPercent = isPercentage(n);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; n = mathMin(max, mathMax(0, parseFloat(n)));<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Automatically convert percentage into number<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (processPercent) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n = parseInt(n * max, 10) \/ 100;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Handle floating point rounding errors<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ((math.abs(n &#8211; max) &lt; 0.000001)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Convert into [0, 1] range if it isn&#8217;t already<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return (n % max) \/ parseFloat(max);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Force a number between 0 and 1<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function clamp01(val) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return mathMin(1, mathMax(0, val));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Parse a base-16 hex value into a base-10 integer<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function parseIntFromHex(val) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return parseInt(val, 16);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ &lt;http:\/\/stackoverflow.com\/questions\/7422072\/javascript-how-to-detect-number-as-a-decimal-including-1-0&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function isOnePointZero(n) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return typeof n == &#8220;string&#8221; &amp;&amp; n.indexOf(&#8216;.&#8217;) != -1 &amp;&amp; parseFloat(n) === 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Check to see if string passed in is a percentage<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function isPercentage(n) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return typeof n === &#8220;string&#8221; &amp;&amp; n.indexOf(&#8216;%&#8217;) != -1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Force a hex value to have 2 characters<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function pad2(c) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return c.length == 1 ? &#8216;0&#8217; + c : &#8221; + c;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Replace a decimal with it&#8217;s percentage value<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function convertToPercentage(n) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (n &lt;= 1) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n = (n * 100) + &#8220;%&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return n;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Converts a decimal to a hex value<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function convertDecimalToHex(d) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return Math.round(parseFloat(d) * 255).toString(16);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Converts a hex value to a decimal<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function convertHexToDecimal(h) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return (parseIntFromHex(h) \/ 255);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; var matchers = (function() {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ &lt;http:\/\/www.w3.org\/TR\/css3-values\/#integers&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var CSS_INTEGER = &#8220;[-\\+]?\\d+%?&#8221;;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ &lt;http:\/\/www.w3.org\/TR\/css3-values\/#number-value&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var CSS_NUMBER = &#8220;[-\\+]?\\d*\\.\\d+%?&#8221;;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Allow positive\/negative integer\/number. &nbsp;Don&#8217;t capture the either\/or, just the entire outcome.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var CSS_UNIT = &#8220;(?:&#8221; + CSS_NUMBER + &#8220;)|(?:&#8221; + CSS_INTEGER + &#8220;)&#8221;;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Actual matching.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Parentheses and commas are optional, but not required.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Whitespace can take the place of commas or opening paren<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var PERMISSIVE_MATCH3 = &#8220;[\\s|\\(]+(&#8221; + CSS_UNIT + &#8220;)[,|\\s]+(&#8221; + CSS_UNIT + &#8220;)[,|\\s]+(&#8221; + CSS_UNIT + &#8220;)\\s*\\)?&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var PERMISSIVE_MATCH4 = &#8220;[\\s|\\(]+(&#8221; + CSS_UNIT + &#8220;)[,|\\s]+(&#8221; + CSS_UNIT + &#8220;)[,|\\s]+(&#8221; + CSS_UNIT + &#8220;)[,|\\s]+(&#8221; + CSS_UNIT + &#8220;)\\s*\\)?&#8221;;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rgb: new RegExp(&#8220;rgb&#8221; + PERMISSIVE_MATCH3),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rgba: new RegExp(&#8220;rgba&#8221; + PERMISSIVE_MATCH4),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hsl: new RegExp(&#8220;hsl&#8221; + PERMISSIVE_MATCH3),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hsla: new RegExp(&#8220;hsla&#8221; + PERMISSIVE_MATCH4),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hsv: new RegExp(&#8220;hsv&#8221; + PERMISSIVE_MATCH3),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hsva: new RegExp(&#8220;hsva&#8221; + PERMISSIVE_MATCH4),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hex3: \/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$\/,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hex6: \/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$\/,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hex8: \/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$\/<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; })();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ `stringInputToObject`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Permissive string parsing. &nbsp;Take in a number of formats, and output an object<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ based on detected format. &nbsp;Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; function stringInputToObject(color) {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; color = color.replace(trimLeft,&#8221;).replace(trimRight, &#8221;).toLowerCase();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var named = false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if (names[color]) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; color = names[color];<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; named = true;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; else if (color == &#8216;transparent&#8217;) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { r: 0, g: 0, b: 0, a: 0, format: &#8220;name&#8221; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Try to match string input using regular expressions.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Keep most of the number bounding out of this function &#8211; don&#8217;t worry about [0,1] or [0,100] or [0,360]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ Just return an object and let the conversion functions handle that.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; \/\/ This way the result will be the same whether the tinycolor is initialized with string or object.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; var match;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ((match = matchers.rgb.exec(color))) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { r: match[1], g: match[2], b: match[3] };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ((match = matchers.rgba.exec(color))) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { r: match[1], g: match[2], b: match[3], a: match[4] };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ((match = matchers.hsl.exec(color))) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { h: match[1], s: match[2], l: match[3] };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ((match = matchers.hsla.exec(color))) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { h: match[1], s: match[2], l: match[3], a: match[4] };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ((match = matchers.hsv.exec(color))) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { h: match[1], s: match[2], v: match[3] };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ((match = matchers.hsva.exec(color))) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return { h: match[1], s: match[2], v: match[3], a: match[4] };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ((match = matchers.hex8.exec(color))) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a: convertHexToDecimal(match[1]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r: parseIntFromHex(match[2]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g: parseIntFromHex(match[3]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b: parseIntFromHex(match[4]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format: named ? &#8220;name&#8221; : &#8220;hex8&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ((match = matchers.hex6.exec(color))) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r: parseIntFromHex(match[1]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g: parseIntFromHex(match[2]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b: parseIntFromHex(match[3]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format: named ? &#8220;name&#8221; : &#8220;hex&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ((match = matchers.hex3.exec(color))) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r: parseIntFromHex(match[1] + &#8221; + match[1]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g: parseIntFromHex(match[2] + &#8221; + match[2]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b: parseIntFromHex(match[3] + &#8221; + match[3]),<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; format: named ? &#8220;name&#8221; : &#8220;hex&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; return false;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; window.tinycolor = tinycolor;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; })();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; $(function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; if ($.fn.spectrum.load) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.fn.spectrum.processNativeColorInputs();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">});<\/span><br \/>\n<span style=\"color: purple;\"><br \/>\n<\/span><b>Copy above code in script.js file.<\/b><br \/>\n<b><br \/>\n<\/b><b><span style=\"color: purple;\">Style.css<\/span><\/b><br \/>\n<b><br \/>\n<\/b>The style.css defines the css for the color picker plugin.<br \/>\n<b><br \/>\n<\/b><b>The following code represents the style.css file.<\/b><br \/>\n<b><br \/>\n<\/b><span style=\"color: purple;\">.sp-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position:absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; top:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; left:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display:inline-block;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *display: inline;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *zoom: 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/* https:\/\/github.com\/bgrins\/spectrum\/issues\/40 *\/<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; z-index: 9999994;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; overflow: hidden;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-container.sp-flat {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position: relative;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Fix for * { box-sizing: border-box; } *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-container,<\/span><br \/>\n<span style=\"color: purple;\">.sp-container * {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -webkit-box-sizing: content-box;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp;-moz-box-sizing: content-box;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; box-sizing: content-box;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* http:\/\/ansciath.tumblr.com\/post\/7347495869\/css-aspect-ratio *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-top {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; position:relative;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; width: 100%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; display:inline-block;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-top-inner {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;position:absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;top:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;left:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;bottom:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;right:0;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-color {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position: absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; top:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; left:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; bottom:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; right:20%;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-hue {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position: absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; top:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; right:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; bottom:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; left:84%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height: 100%;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-clear-enabled .sp-hue {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; top:33px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height: 77.5%;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-fill {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; padding-top: 80%;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-sat, .sp-val {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position: absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; top:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; left:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; right:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; bottom:0;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-alpha-enabled .sp-top {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin-bottom: 18px;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-alpha-enabled .sp-alpha {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: block;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-alpha-handle {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position:absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; top:-4px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; bottom: -4px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; width: 6px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; left: 50%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; cursor: pointer;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: 1px solid black;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background: white;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; opacity: .8;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-alpha {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: none;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position: absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; bottom: -14px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; right: 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; left: 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height: 8px;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-alpha-inner {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: solid 1px #333;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-clear {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: none;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-clear.sp-clear-display {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-position: center;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-clear-enabled .sp-clear {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: block;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position:absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; top:0px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; right:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; bottom:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; left:84%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height: 28px;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Don&#8217;t allow text selection *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button &nbsp;{<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -webkit-user-select:none;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -moz-user-select: -moz-none;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -o-user-select:none;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; user-select: none;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-container.sp-input-disabled .sp-input-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: none;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-container.sp-buttons-disabled .sp-button-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: none;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-container.sp-palette-buttons-disabled .sp-palette-button-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: none;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-palette-only .sp-picker-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: none;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-palette-disabled .sp-palette-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: none;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-initial-disabled .sp-initial {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: none;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Gradients for hue, saturation and value instead of images. &nbsp;Not pretty&#8230; but it works *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-sat {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -webkit-gradient(linear, &nbsp;0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -ms-filter: &#8220;progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=&#8217;#FFFFFFFF&#8217;, endColorstr=&#8217;#00CC9A81&#8242;);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-val {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -ms-filter: &#8220;progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)&#8221;;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; filter : progid:DXImageTransform.Microsoft.gradient(startColorstr=&#8217;#00CC9A81&#8242;, endColorstr=&#8217;#FF000000&#8242;);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-hue {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* IE filters do not support multiple color stops.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;Generate 6 divs, line them up, and do two color gradients for each.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;Yes, really.<\/span><br \/>\n<span style=\"color: purple;\">&nbsp;*\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-1 {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height:17%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=&#8217;#ff0000&#8242;, endColorstr=&#8217;#ffff00&#8242;);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-2 {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height:16%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=&#8217;#ffff00&#8242;, endColorstr=&#8217;#00ff00&#8242;);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-3 {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height:17%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=&#8217;#00ff00&#8242;, endColorstr=&#8217;#00ffff&#8217;);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-4 {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height:17%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=&#8217;#00ffff&#8217;, endColorstr=&#8217;#0000ff&#8217;);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-5 {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height:16%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=&#8217;#0000ff&#8217;, endColorstr=&#8217;#ff00ff&#8217;);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-6 {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height:17%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=&#8217;#ff00ff&#8217;, endColorstr=&#8217;#ff0000&#8242;);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-hidden {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: none !important;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Clearfix hack *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-cf:before, .sp-cf:after { content: &#8220;&#8221;; display: table; }<\/span><br \/>\n<span style=\"color: purple;\">.sp-cf:after { clear: both; }<\/span><br \/>\n<span style=\"color: purple;\">.sp-cf { *zoom: 1; }<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Mobile devices, make hue slider bigger so it is easier to slide *\/<\/span><br \/>\n<span style=\"color: purple;\">@media (max-device-width: 480px) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; .sp-color { right: 40%; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; .sp-hue { left: 63%; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; .sp-fill { padding-top: 60%; }<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-dragger {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;border-radius: 5px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;height: 5px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;width: 5px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;border: 1px solid #fff;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;background: #000;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;cursor: pointer;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;position:absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;top:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;left: 0;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-slider {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position: absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; top:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; cursor:pointer;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height: 3px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; left: -1px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; right: -1px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: 1px solid #000;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background: white;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; opacity: .8;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/*<\/span><br \/>\n<span style=\"color: purple;\">Theme authors:<\/span><br \/>\n<span style=\"color: purple;\">Here are the basic themeable display options (colors, fonts, global widths).<\/span><br \/>\n<span style=\"color: purple;\">See http:\/\/bgrins.github.io\/spectrum\/themes\/ for instructions.<\/span><br \/>\n<span style=\"color: purple;\">*\/<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border-radius: 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-color: #ECECEC;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: solid 1px #f0c49B;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; padding: 0;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; font: normal 12px &#8220;Lucida Grande&#8221;, &#8220;Lucida Sans Unicode&#8221;, &#8220;Lucida Sans&#8221;, Geneva, Verdana, sans-serif;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -webkit-box-sizing: border-box;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -moz-box-sizing: border-box;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -ms-box-sizing: border-box;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; box-sizing: border-box;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-top {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin-bottom: 3px;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-color, .sp-hue, .sp-clear {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: solid 1px #666;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Input *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-input-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; float:right;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; width: 100px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin-bottom: 4px;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-initial-disabled &nbsp;.sp-input-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; width: 100%;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-input {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;font-size: 12px !important;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;border: 1px inset;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;padding: 4px 5px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;margin: 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;width: 100%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;background:transparent;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;border-radius: 3px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp;color: #222;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-input:focus &nbsp;{<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: 1px solid orange;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-input.sp-validation-error {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: 1px solid red;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background: #fdd;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-picker-container , .sp-palette-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; float:left;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position: relative;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; padding: 10px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; padding-bottom: 300px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin-bottom: -290px;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-picker-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; width: 172px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border-left: solid 1px #fff;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Palettes *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-palette-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border-right: solid 1px #ccc;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-palette-only .sp-palette-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: 0;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-palette .sp-thumb-el {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display: block;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position:relative;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; float:left;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; width: 24px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height: 15px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin: 3px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; cursor: pointer;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border:solid 2px transparent;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border-color: orange;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-thumb-el {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position:relative;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Initial *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-initial {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; float: left;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: solid 1px #333;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-initial span {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; width: 30px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height: 25px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border:none;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display:block;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; float:left;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin:0;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-initial .sp-clear-display {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-position: center;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Buttons *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-palette-button-container,<\/span><br \/>\n<span style=\"color: purple;\">.sp-button-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; float: right;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Replacer (the little preview div that shows up instead of the &lt;input&gt;) *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-replacer {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; overflow:hidden;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; cursor:pointer;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; padding: 4px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display:inline-block;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *zoom: 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *display: inline;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: solid 1px #91765d;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background: #eee;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; color: #333;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; vertical-align: middle;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-replacer:hover, .sp-replacer.sp-active {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border-color: #F0C49B;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; color: #111;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-replacer.sp-disabled {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; cursor:default;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border-color: silver;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; color: silver;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-dd {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; padding: 2px 0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height: 16px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; line-height: 16px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; float:left;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; font-size:10px;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-preview {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position:relative;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; width:25px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height: 20px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: solid 1px #222;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin-right: 5px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; float:left;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; z-index: 0;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-palette {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; *width: 220px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; max-width: 220px;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-palette .sp-thumb-el {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; width:16px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; height: 16px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin:2px 1px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: solid 1px #d0d0d0;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-container {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; padding-bottom:0;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">\/* Buttons: http:\/\/hellohappy.org\/css3-buttons\/ *\/<\/span><br \/>\n<span style=\"color: purple;\">.sp-container button {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; background-color: #eeeeee;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; background-image: -moz-linear-gradient(top, #eeeeee, #cccccc);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; background-image: -ms-linear-gradient(top, #eeeeee, #cccccc);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; background-image: -o-linear-gradient(top, #eeeeee, #cccccc);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; background-image: linear-gradient(to bottom, #eeeeee, #cccccc);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; border: 1px solid #ccc;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; border-bottom: 1px solid #bbb;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; border-radius: 3px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; color: #333;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; font-size: 14px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; line-height: 1;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; padding: 5px 4px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; text-align: center;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; text-shadow: 0 1px 0 #eee;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; vertical-align: middle;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-container button:hover {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-color: #dddddd;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: -o-linear-gradient(top, #dddddd, #bbbbbb);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: linear-gradient(to bottom, #dddddd, #bbbbbb);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: 1px solid #bbb;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border-bottom: 1px solid #999;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; cursor: pointer;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; text-shadow: 0 1px 0 #ddd;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-container button:active {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border: 1px solid #aaa;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border-bottom: 1px solid #888;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-cancel {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; font-size: 11px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; color: #d93f3f !important;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin:0;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; padding:2px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; margin-right: 5px;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; vertical-align: middle;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; text-decoration:none;<\/span><\/p>\n<p><span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-cancel:hover {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; color: #d93f3f !important;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; text-decoration: underline;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-palette span:hover, .sp-palette span.sp-thumb-active {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; border-color: #000;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-preview, .sp-alpha, .sp-thumb-el {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position:relative;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: url(data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\">.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; display:block;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; position:absolute;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; top:0;left:0;bottom:0;right:0;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-palette .sp-thumb-inner {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-position: 50% 50%;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-repeat: no-repeat;<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: url(data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi\/0DsT64h8UD8HmpIPCWG\/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: url(data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m\/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=);<\/span><br \/>\n<span style=\"color: purple;\">}<\/span><\/p>\n<p><span style=\"color: purple;\">.sp-clear-display {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-repeat:no-repeat;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-position: center;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; background-image: url(data:image\/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq\/Hx8fLy8vT09PX19ff39\/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M\/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==);<\/span><\/p>\n<p><span style=\"color: purple;\">}<\/span><br \/>\n<span style=\"color: purple;\"><br \/>\n<\/span><b>Copy above code in Style.css<\/b><br \/>\n<b><br \/>\n<\/b><b><span style=\"color: purple;\">Render.jsp<\/span><\/b><br \/>\n<b><br \/>\n<\/b><b>The following code represents the render.jsp<\/b><br \/>\n<b><br \/>\n<\/b><span style=\"color: purple;\">&lt;%@include file=&#8221;\/libs\/granite\/ui\/global.jsp&#8221; %&gt;&lt;%<\/span><br \/>\n<span style=\"color: purple;\">%&gt;&lt;%@page session=&#8221;false&#8221;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import=&#8221;com.adobe.granite.ui.components.AttrBuilder,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; com.adobe.granite.ui.components.Config,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; com.adobe.granite.ui.components.Field,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; com.adobe.granite.ui.components.Tag&#8221; %&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;%<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; Config cfg = cmp.getConfig();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; ValueMap vm = (ValueMap) request.getAttribute(Field.class.getName());<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; Field field = new Field(cfg);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; boolean isMixed = field.isMixed(cmp.getValue());<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; String name = cfg.get(&#8220;name&#8221;, String.class);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; Tag tag = cmp.consumeTag();<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; AttrBuilder attrs = tag.getAttrs();<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; attrs.add(&#8220;id&#8221;, cfg.get(&#8220;id&#8221;, String.class));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; attrs.addClass(cfg.get(&#8220;class&#8221;, String.class));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; attrs.addRel(cfg.get(&#8220;rel&#8221;, String.class));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; attrs.add(&#8220;title&#8221;, i18n.getVar(cfg.get(&#8220;title&#8221;, String.class)));<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; attrs.addClass(&#8220;coral-InputGroup&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; attrs.add(&#8220;value&#8221;, cfg.get(&#8220;value&#8221;, String.class));&nbsp;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; \/\/ Use JCR standard date format for storage<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; \/\/ FIXME data-stored-format is a bad name; use data-value-format<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; if (isMixed) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; attrs.addClass(&#8220;foundation-field-mixed&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; attrs.addOthers(cfg.getProperties(), &#8220;id&#8221;, &#8220;class&#8221;, &#8220;rel&#8221;, &#8220;title&#8221;, &#8220;name&#8221;, &#8220;value&#8221;, &#8220;emptyText&#8221;, &#8220;type&#8221;, &#8220;displayedFormat&#8221;, &#8220;minDate&#8221;, &#8220;maxDate&#8221;, &#8220;displayTimezoneMessage&#8221;, &#8220;fieldLabel&#8221;, &#8220;fieldDescription&#8221;, &#8220;renderReadOnly&#8221;, &#8220;ignoreData&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; AttrBuilder attrsInput = new AttrBuilder(request, xssAPI);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; attrsInput.addClass(&#8220;coral-InputGroup-input coral-Textfield&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; attrsInput.add(&#8220;name&#8221;, name);<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; attrsInput.addDisabled(cfg.get(&#8220;disabled&#8221;, false));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; attrsInput.add(&#8220;type&#8221;, cfg.get(&#8220;type&#8221;, &#8220;text&#8221;));<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; if (isMixed) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; attrsInput.add(&#8220;placeholder&#8221;, i18n.get(&#8220;&lt;Mixed Entries&gt;&#8221;));&nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; } else {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; attrsInput.add(&#8220;value&#8221;, vm.get(&#8220;value&#8221;, String.class));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; log.info(&#8220;Current value:&#8221; + vm.get(&#8220;value&#8221;, String.class)+&#8221;:&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; attrsInput.add(&#8220;placeholder&#8221;, i18n.getVar(cfg.get(&#8220;emptyText&#8221;, String.class)));<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; if (cfg.get(&#8220;required&#8221;, false)) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; attrsInput.add(&#8220;aria-required&#8221;, true);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp; AttrBuilder typeAttrs = new AttrBuilder(request, xssAPI);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; typeAttrs.add(&#8220;type&#8221;, &#8220;hidden&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; typeAttrs.add(&#8220;value&#8221;, &#8220;Color&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; if (name != null &amp;&amp; name.trim().length() &gt; 0) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; typeAttrs.add(&#8220;name&#8221;, name + &#8220;@TypeHint&#8221;);<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; }<\/span><\/p>\n<p><span style=\"color: purple;\">%&gt;&lt;div &lt;%= attrs.build() %&gt;&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &lt;input id=&#8221;full&#8221; &lt;%= attrsInput.build() %&gt;&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &lt;div class=&#8221;coral-InputGroup-button&#8221;&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &lt;button data-toggle=&#8221;popover&#8221; data-target=&#8221;#colorpicker&#8221; class=&#8221;coral-Button coral-Button&#8211;square&#8221; id=&#8221;customColorButton&#8221; type=&#8221;button&#8221; title=&#8221;&lt;%= xssAPI.encodeForHTMLAttr(i18n.get(&#8220;Date Picker&#8221;)) %&gt;&#8221;&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;i class=&#8221;coral-Icon coral-Icon&#8211;sizeS coral-Icon coral-Icon&#8211;colorPalette&#8221;&gt;&lt;\/i&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &lt;\/button&gt;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &lt;\/div&gt;<\/span><br \/>\n<span style=\"color: purple;\">&lt;\/div&gt;<\/span><\/p>\n<p><span style=\"color: purple;\">&lt;div &nbsp;id=&#8221;colorpicker&#8221; class=&#8221;coral-Popover&#8221;&gt;&lt;\/div&gt;<\/span><br \/>\n<span style=\"color: purple;\">&lt;script type=&#8221;text\/javascript&#8221;&gt;<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; $(document).ready(function() {<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; &nbsp;$(&#8220;#full&#8221;).spectrum({<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; color: &#8220;#ECC&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; showInput: true,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; className: &#8220;full-spectrum&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; showInitial: true,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; showPalette: true,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; showSelectionPalette: true,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; maxSelectionSize: 10,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; preferredFormat: &#8220;hex&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; localStorageKey: &#8220;spectrum.demo&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; move: function (color) {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; show: function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; beforeShow: function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; hide: function () {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; change: function() {<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; },<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; palette: [<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; [&#8220;rgb(0, 0, 0)&#8221;, &#8220;rgb(67, 67, 67)&#8221;, &#8220;rgb(102, 102, 102)&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(204, 204, 204)&#8221;, &#8220;rgb(217, 217, 217)&#8221;,&#8221;rgb(255, 255, 255)&#8221;],<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; [&#8220;rgb(152, 0, 0)&#8221;, &#8220;rgb(255, 0, 0)&#8221;, &#8220;rgb(255, 153, 0)&#8221;, &#8220;rgb(255, 255, 0)&#8221;, &#8220;rgb(0, 255, 0)&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(0, 255, 255)&#8221;, &#8220;rgb(74, 134, 232)&#8221;, &#8220;rgb(0, 0, 255)&#8221;, &#8220;rgb(153, 0, 255)&#8221;, &#8220;rgb(255, 0, 255)&#8221;],&nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; [&#8220;rgb(230, 184, 175)&#8221;, &#8220;rgb(244, 204, 204)&#8221;, &#8220;rgb(252, 229, 205)&#8221;, &#8220;rgb(255, 242, 204)&#8221;, &#8220;rgb(217, 234, 211)&#8221;,&nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(208, 224, 227)&#8221;, &#8220;rgb(201, 218, 248)&#8221;, &#8220;rgb(207, 226, 243)&#8221;, &#8220;rgb(217, 210, 233)&#8221;, &#8220;rgb(234, 209, 220)&#8221;,&nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(221, 126, 107)&#8221;, &#8220;rgb(234, 153, 153)&#8221;, &#8220;rgb(249, 203, 156)&#8221;, &#8220;rgb(255, 229, 153)&#8221;, &#8220;rgb(182, 215, 168)&#8221;,&nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(162, 196, 201)&#8221;, &#8220;rgb(164, 194, 244)&#8221;, &#8220;rgb(159, 197, 232)&#8221;, &#8220;rgb(180, 167, 214)&#8221;, &#8220;rgb(213, 166, 189)&#8221;,&nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(204, 65, 37)&#8221;, &#8220;rgb(224, 102, 102)&#8221;, &#8220;rgb(246, 178, 107)&#8221;, &#8220;rgb(255, 217, 102)&#8221;, &#8220;rgb(147, 196, 125)&#8221;,&nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(118, 165, 175)&#8221;, &#8220;rgb(109, 158, 235)&#8221;, &#8220;rgb(111, 168, 220)&#8221;, &#8220;rgb(142, 124, 195)&#8221;, &#8220;rgb(194, 123, 160)&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(166, 28, 0)&#8221;, &#8220;rgb(204, 0, 0)&#8221;, &#8220;rgb(230, 145, 56)&#8221;, &#8220;rgb(241, 194, 50)&#8221;, &#8220;rgb(106, 168, 79)&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(69, 129, 142)&#8221;, &#8220;rgb(60, 120, 216)&#8221;, &#8220;rgb(61, 133, 198)&#8221;, &#8220;rgb(103, 78, 167)&#8221;, &#8220;rgb(166, 77, 121)&#8221;,<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(91, 15, 0)&#8221;, &#8220;rgb(102, 0, 0)&#8221;, &#8220;rgb(120, 63, 4)&#8221;, &#8220;rgb(127, 96, 0)&#8221;, &#8220;rgb(39, 78, 19)&#8221;,&nbsp;<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; &nbsp; &nbsp; &#8220;rgb(12, 52, 61)&#8221;, &#8220;rgb(28, 69, 135)&#8221;, &#8220;rgb(7, 55, 99)&#8221;, &#8220;rgb(32, 18, 77)&#8221;, &#8220;rgb(76, 17, 48)&#8221;]<\/span><br \/>\n<span style=\"color: purple;\">&nbsp; &nbsp; ]<\/span><br \/>\n<span style=\"color: purple;\">});<\/span><\/p>\n<p><span style=\"color: purple;\">&nbsp; });<\/span><\/p>\n<p><span style=\"color: purple;\">&lt;\/script&gt;<\/span><br \/>\n<b><br \/>\n<\/b><b>Copy above code in render.jsp<\/b><br \/>\n<b><br \/>\n<\/b>After this I created my component named as helloworld with cq:dialog and dialog.<\/p>\n<div style=\"clear: both; text-align: center;\"><a href=\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture2.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img decoding=\"async\" border=\"0\" src=\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture2.png\"><\/a><\/div>\n<p>Specify a path that references JQuery plugin as a value of the sling:resourceType &nbsp;property in CRXDE Lite as shown below:<\/p>\n<div style=\"clear: both; text-align: center;\"><\/div>\n<div style=\"clear: both; text-align: center;\"><\/div>\n<div style=\"clear: both; text-align: center;\"><a href=\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture3.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img fetchpriority=\"high\" decoding=\"async\" border=\"0\" height=\"104\" src=\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture3-300x49.png\" width=\"640\"><\/a><\/div>\n<p>Now when drop this component on a page and open the dialog in edit &nbsp;mode then it look like this:<\/p>\n<div style=\"clear: both; text-align: center;\"><a href=\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture4.png\" style=\"margin-left: 1em; margin-right: 1em;\"><img decoding=\"async\" border=\"0\" height=\"227\" src=\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture4-300x213.png\" width=\"320\"><\/a><\/div>\n<p><b>For getting the value of the dialog, Here is the code of helloworld.html:<\/b><\/p>\n<p><span style=\"color: purple;\">&lt;p&gt; Color : ${properties.color}&lt;\/p&gt;<\/span><br \/>\n<span style=\"color: purple;\">&lt;p style=&#8221;color:${properties.color @ context=&#8217;styleToken&#8217;};&#8221;&gt; Text : ${properties.text}&lt;\/p&gt;<\/span><\/p>\n<p>This HTL code will displaying the color values.<\/p>\n<p><span style=\"color: purple;\"><b><i>Be Happy<\/i><\/b><\/span><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In this blog I am going to discuss how to create a custom sling resource type for the AEM Touch [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,82,185,186,188,184,187],"tags":[],"class_list":["post-234","post","type-post","status-publish","format-standard","hentry","category-aem","category-cq5","category-creating-a-custom-experience-manager-slingresourcetype-for-touch-ui","category-custom-slingresourcetype","category-full-color-spectrum-field-for-a-touch-ui-component-dialog","category-slingresourcetype","category-touchui"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Creating a custom Experience Manager sling:resourceType for Touch UI - AEM Blog | Lhotse Technologies<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating a custom Experience Manager sling:resourceType for Touch UI - AEM Blog | Lhotse Technologies\" \/>\n<meta property=\"og:description\" content=\"In this blog I am going to discuss how to create a custom sling resource type for the AEM Touch [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/\" \/>\n<meta property=\"og:site_name\" content=\"AEM Blog | Lhotse Technologies\" \/>\n<meta property=\"article:published_time\" content=\"2017-02-20T14:16:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-01-17T07:35:39+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png\" \/>\n<meta name=\"author\" content=\"Team Lhotse\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Team Lhotse\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"104 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/\"},\"author\":{\"name\":\"Team Lhotse\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/fd7bee89b050d7c7195fc75b681b053d\"},\"headline\":\"Creating a custom Experience Manager sling:resourceType for Touch UI\",\"datePublished\":\"2017-02-20T14:16:00+00:00\",\"dateModified\":\"2020-01-17T07:35:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/\"},\"wordCount\":20839,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png\",\"articleSection\":[\"AEM\",\"CQ5\",\"Creating a custom Experience Manager sling:resourceType for Touch UI\",\"Custom sling:resourceType\",\"full color spectrum field for a touch UI component dialog\",\"sling:resourceType\",\"TouchUI\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/\",\"url\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/\",\"name\":\"Creating a custom Experience Manager sling:resourceType for Touch UI - AEM Blog | Lhotse Technologies\",\"isPartOf\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png\",\"datePublished\":\"2017-02-20T14:16:00+00:00\",\"dateModified\":\"2020-01-17T07:35:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#primaryimage\",\"url\":\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png\",\"contentUrl\":\"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/lhotsetechnologies.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creating a custom Experience Manager sling:resourceType for Touch UI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#website\",\"url\":\"https:\/\/lhotsetechnologies.com\/blog\/\",\"name\":\"AEM Blog | Lhotse Technologies\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/lhotsetechnologies.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#organization\",\"name\":\"AEM Blog | Lhotse Technologies\",\"url\":\"https:\/\/lhotsetechnologies.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2019\/07\/lhotse-logo.png\",\"contentUrl\":\"https:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2019\/07\/lhotse-logo.png\",\"width\":539,\"height\":172,\"caption\":\"AEM Blog | Lhotse Technologies\"},\"image\":{\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/fd7bee89b050d7c7195fc75b681b053d\",\"name\":\"Team Lhotse\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g\",\"caption\":\"Team Lhotse\"},\"url\":\"https:\/\/lhotsetechnologies.com\/blog\/author\/team-lhotse\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creating a custom Experience Manager sling:resourceType for Touch UI - AEM Blog | Lhotse Technologies","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/","og_locale":"en_US","og_type":"article","og_title":"Creating a custom Experience Manager sling:resourceType for Touch UI - AEM Blog | Lhotse Technologies","og_description":"In this blog I am going to discuss how to create a custom sling resource type for the AEM Touch [&hellip;]","og_url":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/","og_site_name":"AEM Blog | Lhotse Technologies","article_published_time":"2017-02-20T14:16:00+00:00","article_modified_time":"2020-01-17T07:35:39+00:00","og_image":[{"url":"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png","type":"","width":"","height":""}],"author":"Team Lhotse","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Team Lhotse","Est. reading time":"104 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#article","isPartOf":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/"},"author":{"name":"Team Lhotse","@id":"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/fd7bee89b050d7c7195fc75b681b053d"},"headline":"Creating a custom Experience Manager sling:resourceType for Touch UI","datePublished":"2017-02-20T14:16:00+00:00","dateModified":"2020-01-17T07:35:39+00:00","mainEntityOfPage":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/"},"wordCount":20839,"commentCount":0,"publisher":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/#organization"},"image":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#primaryimage"},"thumbnailUrl":"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png","articleSection":["AEM","CQ5","Creating a custom Experience Manager sling:resourceType for Touch UI","Custom sling:resourceType","full color spectrum field for a touch UI component dialog","sling:resourceType","TouchUI"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/","url":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/","name":"Creating a custom Experience Manager sling:resourceType for Touch UI - AEM Blog | Lhotse Technologies","isPartOf":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#primaryimage"},"image":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#primaryimage"},"thumbnailUrl":"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png","datePublished":"2017-02-20T14:16:00+00:00","dateModified":"2020-01-17T07:35:39+00:00","breadcrumb":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#primaryimage","url":"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png","contentUrl":"http:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2017\/02\/Capture1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/lhotsetechnologies.com\/blog\/creating-a-custom-experience-manager-slingresourcetype-for-touch-ui\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/lhotsetechnologies.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Creating a custom Experience Manager sling:resourceType for Touch UI"}]},{"@type":"WebSite","@id":"https:\/\/lhotsetechnologies.com\/blog\/#website","url":"https:\/\/lhotsetechnologies.com\/blog\/","name":"AEM Blog | Lhotse Technologies","description":"","publisher":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/lhotsetechnologies.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/lhotsetechnologies.com\/blog\/#organization","name":"AEM Blog | Lhotse Technologies","url":"https:\/\/lhotsetechnologies.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2019\/07\/lhotse-logo.png","contentUrl":"https:\/\/lhotsetechnologies.com\/blog\/wp-content\/uploads\/2019\/07\/lhotse-logo.png","width":539,"height":172,"caption":"AEM Blog | Lhotse Technologies"},"image":{"@id":"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/fd7bee89b050d7c7195fc75b681b053d","name":"Team Lhotse","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/lhotsetechnologies.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","caption":"Team Lhotse"},"url":"https:\/\/lhotsetechnologies.com\/blog\/author\/team-lhotse\/"}]}},"_links":{"self":[{"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/comments?post=234"}],"version-history":[{"count":3,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/234\/revisions"}],"predecessor-version":[{"id":586,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/234\/revisions\/586"}],"wp:attachment":[{"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/media?parent=234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/categories?post=234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lhotsetechnologies.com\/blog\/wp-json\/wp\/v2\/tags?post=234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}