server/java/renkan-web/src/main/webapp/static/lib/spectrum.js
author ymh <ymh.work@gmail.com>
Mon, 21 Jul 2014 14:48:01 +0200
changeset 316 242510015401
parent 309 server/renkan-web/src/main/webapp/static/lib/spectrum.js@0c3e6e66881f
permissions -rw-r--r--
move java server project to sub folder
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
130
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
// Spectrum Colorpicker v1.0.9
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
// https://github.com/bgrins/spectrum
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
// Author: Brian Grinstead
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
// License: MIT
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
(function (window, $, undefined) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
    var defaultOpts = {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
        // Callbacks
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
        beforeShow: noop,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
        move: noop,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
        change: noop,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
        show: noop,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
        hide: noop,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
        // Options
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
        color: false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
        flat: false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
        showInput: false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
        showButtons: true,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
        clickoutFiresChange: false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
        showInitial: false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
        showPalette: false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        showPaletteOnly: false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        showSelectionPalette: true,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        localStorageKey: false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
        maxSelectionSize: 7,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        cancelText: "cancel",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        chooseText: "choose",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        preferredFormat: false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
        className: "",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
        showAlpha: false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
        theme: "sp-light",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        palette: ['fff', '000'],
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        selectionPalette: [],
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        disabled: false
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    spectrums = [],
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
    IE = !!/msie/i.exec( window.navigator.userAgent ),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
    rgbaSupport = (function() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        function contains( str, substr ) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
            return !!~('' + str).indexOf(substr);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
        var elem = document.createElement('div');
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        var style = elem.style;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        style.cssText = 'background-color:rgba(0,0,0,.5)';
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        return contains(style.backgroundColor, 'rgba') || contains(style.backgroundColor, 'hsla');
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    })(),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    replaceInput = [
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        "<div class='sp-replacer'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
            "<div class='sp-preview'><div class='sp-preview-inner'></div></div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
            "<div class='sp-dd'>&#9660;</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
        "</div>"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    ].join(''),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    markup = (function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        // IE does not support gradients with multiple stops, so we need to simulate
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
        //  that for the rainbow slider with 8 divs that each have a single gradient
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
        var gradientFix = "";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
        if (IE) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
            for (var i = 1; i <= 6; i++) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
                gradientFix += "<div class='sp-" + i + "'></div>";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        return [
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
            "<div class='sp-container sp-hidden'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
                "<div class='sp-palette-container'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
                    "<div class='sp-palette sp-thumb sp-cf'></div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
                "</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
                "<div class='sp-picker-container'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
                    "<div class='sp-top sp-cf'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
                        "<div class='sp-fill'></div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
                        "<div class='sp-top-inner'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
                            "<div class='sp-color'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
                                "<div class='sp-sat'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
                                    "<div class='sp-val'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
                                        "<div class='sp-dragger'></div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
                                    "</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
                                "</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
                            "</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
                            "<div class='sp-hue'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
                                "<div class='sp-slider'></div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
                                gradientFix,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
                            "</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
                        "</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
                        "<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
                    "</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
                    "<div class='sp-input-container sp-cf'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
                        "<input class='sp-input' type='text' spellcheck='false'  />",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
                    "</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
                    "<div class='sp-initial sp-thumb sp-cf'></div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
                    "<div class='sp-button-container sp-cf'>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
                        "<a class='sp-cancel' href='#'></a>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
                        "<button class='sp-choose'></button>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
                    "</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
                "</div>",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
            "</div>"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
        ].join("");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
    })();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    function paletteTemplate (p, color, className) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
        var html = [];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
        for (var i = 0; i < p.length; i++) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
            var tiny = tinycolor(p[i]);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
            var c = tiny.toHsl().l < 0.5 ? "sp-thumb-el sp-thumb-dark" : "sp-thumb-el sp-thumb-light";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
            c += (tinycolor.equals(color, p[i])) ? " sp-thumb-active" : "";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
            var swatchStyle = rgbaSupport ? ("background-color:" + tiny.toRgbString()) : "filter:" + tiny.toFilter();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
            html.push('<span title="' + tiny.toRgbString() + '" data-color="' + tiny.toRgbString() + '" class="' + c + '"><span class="sp-thumb-inner" style="' + swatchStyle + ';" /></span>');
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
        return "<div class='sp-cf " + className + "'>" + html.join('') + "</div>";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
    function hideAll() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
        for (var i = 0; i < spectrums.length; i++) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
            if (spectrums[i]) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
                spectrums[i].hide();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    function instanceOptions(o, callbackContext) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
        var opts = $.extend({}, defaultOpts, o);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
        opts.callbacks = {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
            'move': bind(opts.move, callbackContext),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
            'change': bind(opts.change, callbackContext),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
            'show': bind(opts.show, callbackContext),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
            'hide': bind(opts.hide, callbackContext),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
            'beforeShow': bind(opts.beforeShow, callbackContext)
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
        return opts;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    function spectrum(element, o) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
        var opts = instanceOptions(o, element),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
            flat = opts.flat,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
            showSelectionPalette = opts.showSelectionPalette,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
            localStorageKey = opts.localStorageKey,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
            theme = opts.theme,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
            callbacks = opts.callbacks,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
            resize = throttle(reflow, 10),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
            visible = false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
            dragWidth = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
            dragHeight = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
            dragHelperHeight = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
            slideHeight = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
            slideWidth = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
            alphaWidth = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
            alphaSlideHelperWidth = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
            slideHelperHeight = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
            currentHue = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
            currentSaturation = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
            currentValue = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
            currentAlpha = 1,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
            palette = opts.palette.slice(0),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
            paletteArray = $.isArray(palette[0]) ? palette : [palette],
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
            selectionPalette = opts.selectionPalette.slice(0),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
            maxSelectionSize = opts.maxSelectionSize,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
            draggingClass = "sp-dragging";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
        var doc = element.ownerDocument,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
            body = doc.body,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
            boundElement = $(element),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
            disabled = false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
            container = $(markup, doc).addClass(theme),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
            dragger = container.find(".sp-color"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
            dragHelper = container.find(".sp-dragger"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
            slider = container.find(".sp-hue"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
            slideHelper = container.find(".sp-slider"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
            alphaSliderInner = container.find(".sp-alpha-inner"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
            alphaSlider = container.find(".sp-alpha"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
            alphaSlideHelper = container.find(".sp-alpha-handle"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
            textInput = container.find(".sp-input"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
            paletteContainer = container.find(".sp-palette"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
            initialColorContainer = container.find(".sp-initial"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
            cancelButton = container.find(".sp-cancel"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
            chooseButton = container.find(".sp-choose"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
            isInput = boundElement.is("input"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
            shouldReplace = isInput && !flat,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
            replacer = (shouldReplace) ? $(replaceInput).addClass(theme) : $([]),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
            offsetElement = (shouldReplace) ? replacer : boundElement,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
            previewElement = replacer.find(".sp-preview-inner"),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
            initialColor = opts.color || (isInput && boundElement.val()),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
            colorOnShow = false,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
            preferredFormat = opts.preferredFormat,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
            currentPreferredFormat = preferredFormat,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
            clickoutFiresChange = !opts.showButtons || opts.clickoutFiresChange;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
        function applyOptions() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
            container.toggleClass("sp-flat", flat);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
            container.toggleClass("sp-input-disabled", !opts.showInput);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
            container.toggleClass("sp-alpha-enabled", opts.showAlpha);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
            container.toggleClass("sp-buttons-disabled", !opts.showButtons || flat);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
            container.toggleClass("sp-palette-disabled", !opts.showPalette);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
            container.toggleClass("sp-palette-only", opts.showPaletteOnly);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
            container.toggleClass("sp-initial-disabled", !opts.showInitial);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
            container.addClass(opts.className);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
            reflow();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
        function initialize() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
            if (IE) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
                container.find("*:not(input)").attr("unselectable", "on");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
            applyOptions();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
            if (shouldReplace) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
                boundElement.hide().after(replacer);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
            if (flat) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
                boundElement.after(container).hide();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
            else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
                $(body).append(container);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
            if (localStorageKey && window.localStorage) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
                // Migrate old palettes over to new format.  May want to remove this eventually.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
                try {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
                    var oldPalette = window.localStorage[localStorageKey].split(",#");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
                    if (oldPalette.length > 1) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
                        delete window.localStorage[localStorageKey];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
                        $.each(oldPalette, function(i, c) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
                             addColorToSelectionPalette(c);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
                        });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
                catch(e) { }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
                try {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
                    selectionPalette = window.localStorage[localStorageKey].split(";");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
                catch (e) { }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
            offsetElement.bind("click.spectrum touchstart.spectrum", function (e) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
                if (!disabled) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
                    toggle();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
                e.stopPropagation();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
                if (!$(e.target).is("input")) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
                    e.preventDefault();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
            if(boundElement.is(":disabled") || (opts.disabled === true)) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
                disable();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
            // Prevent clicks from bubbling up to document.  This would cause it to be hidden.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
            container.click(stopPropagation);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
            // Handle user typed input
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
            textInput.change(setFromTextInput);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
            textInput.bind("paste", function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
                setTimeout(setFromTextInput, 1);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
            textInput.keydown(function (e) { if (e.keyCode == 13) { setFromTextInput(); } });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
            cancelButton.text(opts.cancelText);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
            cancelButton.bind("click.spectrum", function (e) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
                e.stopPropagation();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
                e.preventDefault();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
                hide("cancel");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
            chooseButton.text(opts.chooseText);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
            chooseButton.bind("click.spectrum", function (e) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
                e.stopPropagation();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
                e.preventDefault();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
                if (isValid()) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
                    updateOriginalInput(true);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
                    hide();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
            draggable(alphaSlider, function (dragX, dragY, e) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
                currentAlpha = (dragX / alphaWidth);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
                if (e.shiftKey) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
                    currentAlpha = Math.round(currentAlpha * 10) / 10;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
                move();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
            draggable(slider, function (dragX, dragY) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
                currentHue = parseFloat(dragY / slideHeight);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
                move();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
            }, dragStart, dragStop);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
            draggable(dragger, function (dragX, dragY) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
                currentSaturation = parseFloat(dragX / dragWidth);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
                currentValue = parseFloat((dragHeight - dragY) / dragHeight);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
                move();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
            }, dragStart, dragStop);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
            if (!!initialColor) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
                set(initialColor);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
                // In case color was black - update the preview UI and set the format
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
                // since the set function will not run (default color is black).
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
                updateUI();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
                currentPreferredFormat = preferredFormat || tinycolor(initialColor).format;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
                addColorToSelectionPalette(initialColor);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
            else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
                updateUI();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
            if (flat) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
                show();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
            function palletElementClick(e) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
                if (e.data && e.data.ignore) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
                    set($(this).data("color"));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
                    move();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
                else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
                    set($(this).data("color"));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
                    updateOriginalInput(true);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
                    move();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
                    hide();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
                return false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
            var paletteEvent = IE ? "mousedown.spectrum" : "click.spectrum touchstart.spectrum";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
            paletteContainer.delegate(".sp-thumb-el", paletteEvent, palletElementClick);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
            initialColorContainer.delegate(".sp-thumb-el:nth-child(1)", paletteEvent, { ignore: true }, palletElementClick);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
        function addColorToSelectionPalette(color) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
            if (showSelectionPalette) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
                var colorRgb = tinycolor(color).toRgbString();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
                if ($.inArray(colorRgb, selectionPalette) === -1) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
                    selectionPalette.push(colorRgb);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
                    while(selectionPalette.length > maxSelectionSize) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
                        selectionPalette.shift();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
                if (localStorageKey && window.localStorage) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
                    try {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
                        window.localStorage[localStorageKey] = selectionPalette.join(";");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
                    catch(e) { }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
        function getUniqueSelectionPalette() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
            var unique = [];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
            var p = selectionPalette;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
            var paletteLookup = {};
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
            var rgb;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
            if (opts.showPalette) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
                for (var i = 0; i < paletteArray.length; i++) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
                    for (var j = 0; j < paletteArray[i].length; j++) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
                        rgb = tinycolor(paletteArray[i][j]).toRgbString();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
                        paletteLookup[rgb] = true;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
                for (i = 0; i < p.length; i++) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
                    rgb = tinycolor(p[i]).toRgbString();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
                    if (!paletteLookup.hasOwnProperty(rgb)) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
                        unique.push(p[i]);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
                        paletteLookup[rgb] = true;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
            return unique.reverse().slice(0, opts.maxSelectionSize);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
        function drawPalette() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
            var currentColor = get();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
            var html = $.map(paletteArray, function (palette, i) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
                return paletteTemplate(palette, currentColor, "sp-palette-row sp-palette-row-" + i);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
            if (selectionPalette) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
                html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, "sp-palette-row sp-palette-row-selection"));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
            paletteContainer.html(html.join(""));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
        function drawInitial() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
            if (opts.showInitial) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
                var initial = colorOnShow;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
                var current = get();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
                initialColorContainer.html(paletteTemplate([initial, current], current, "sp-palette-row-initial"));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
        function dragStart() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
            if (dragHeight === 0 || dragWidth === 0 || slideHeight === 0) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
                reflow();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
            container.addClass(draggingClass);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
        function dragStop() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
            container.removeClass(draggingClass);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
        function setFromTextInput() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
            var tiny = tinycolor(textInput.val());
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
            if (tiny.ok) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
                set(tiny);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
            else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
                textInput.addClass("sp-validation-error");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
        function toggle() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
            if (visible) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
                hide();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
            else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
                show();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
        function show() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
            var event = $.Event('beforeShow.spectrum');
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
            if (visible) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
                reflow();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
                return;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
            boundElement.trigger(event, [ get() ]);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
            if (callbacks.beforeShow(get()) === false || event.isDefaultPrevented()) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
                return;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
            hideAll();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
            visible = true;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
            $(doc).bind("click.spectrum", hide);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
            $(window).bind("resize.spectrum", resize);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
            replacer.addClass("sp-active");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
            container.removeClass("sp-hidden");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
            if (opts.showPalette) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
                drawPalette();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
            reflow();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
            updateUI();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
            colorOnShow = get();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
            drawInitial();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
            callbacks.show(colorOnShow);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
            boundElement.trigger('show.spectrum', [ colorOnShow ]);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
        function hide(e) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
            // Return on right click
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
            if (e && e.type == "click" && e.button == 2) { return; }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
            // Return if hiding is unnecessary
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
            if (!visible || flat) { return; }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
            visible = false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
            $(doc).unbind("click.spectrum", hide);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
            $(window).unbind("resize.spectrum", resize);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
            replacer.removeClass("sp-active");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
            container.addClass("sp-hidden");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
            var colorHasChanged = !tinycolor.equals(get(), colorOnShow);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
            if (colorHasChanged) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
                if (clickoutFiresChange && e !== "cancel") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
                    updateOriginalInput(true);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
                else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
                    revert();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
            callbacks.hide(get());
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
            boundElement.trigger('hide.spectrum', [ get() ]);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
        function revert() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
            set(colorOnShow, true);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
        function set(color, ignoreFormatChange) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
            if (tinycolor.equals(color, get())) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
                return;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
            var newColor = tinycolor(color);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
            var newHsv = newColor.toHsv();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
            currentHue = newHsv.h;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
            currentSaturation = newHsv.s;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
            currentValue = newHsv.v;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
            currentAlpha = newHsv.a;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
            updateUI();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
            if (newColor.ok && !ignoreFormatChange) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
                currentPreferredFormat = preferredFormat || newColor.format;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
        function get() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
            return tinycolor.fromRatio({ h: currentHue, s: currentSaturation, v: currentValue, a: Math.round(currentAlpha * 100) / 100 });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
        function isValid() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
            return !textInput.hasClass("sp-validation-error");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
        function move() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
            updateUI();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
            callbacks.move(get());
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
            boundElement.trigger('move.spectrum', [ get() ]);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
        function updateUI() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
            textInput.removeClass("sp-validation-error");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
            updateHelperLocations();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
            // Update dragger background color (gradients take care of saturation and value).
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
            var flatColor = tinycolor({ h: currentHue, s: "1.0", v: "1.0" });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
            dragger.css("background-color", flatColor.toHexString());
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
            // Get a format that alpha will be included in (hex and names ignore alpha)
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
            var format = currentPreferredFormat;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
            if (currentAlpha < 1) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
                if (format === "hex" || format === "name") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
                    format = "rgb";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
            var realColor = get(),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
                realHex = realColor.toHexString(),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
                realRgb = realColor.toRgbString();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
            // Update the replaced elements background color (with actual selected color)
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
            if (rgbaSupport || realColor.alpha === 1) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
                previewElement.css("background-color", realRgb);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
            else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
                previewElement.css("background-color", "transparent");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
                previewElement.css("filter", realColor.toFilter());
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
            if (opts.showAlpha) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
                var rgb = realColor.toRgb();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
                rgb.a = 0;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
                var realAlpha = tinycolor(rgb).toRgbString();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
                var gradient = "linear-gradient(left, " + realAlpha + ", " + realHex + ")";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
                if (IE) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
                    alphaSliderInner.css("filter", tinycolor(realAlpha).toFilter({ gradientType: 1 }, realHex));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
                else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
                    alphaSliderInner.css("background", "-webkit-" + gradient);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
                    alphaSliderInner.css("background", "-moz-" + gradient);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
                    alphaSliderInner.css("background", "-ms-" + gradient);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
                    alphaSliderInner.css("background", gradient);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
            // Update the text entry input as it changes happen
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
            if (opts.showInput) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
                if (currentAlpha < 1) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
                    if (format === "hex" || format === "name") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
                        format = "rgb";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
                textInput.val(realColor.toString(format));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
            if (opts.showPalette) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
                drawPalette();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
            drawInitial();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
        function updateHelperLocations() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
            var s = currentSaturation;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
            var v = currentValue;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
            // Where to show the little circle in that displays your current selected color
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
            var dragX = s * dragWidth;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
            var dragY = dragHeight - (v * dragHeight);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
            dragX = Math.max(
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
                -dragHelperHeight,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
                Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight)
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
            );
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
            dragY = Math.max(
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
                -dragHelperHeight,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
                Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight)
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
            );
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
            dragHelper.css({
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
                "top": dragY,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
                "left": dragX
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
            var alphaX = currentAlpha * alphaWidth;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
            alphaSlideHelper.css({
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
                "left": alphaX - (alphaSlideHelperWidth / 2)
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
            // Where to show the bar that displays your current selected hue
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
            var slideY = (currentHue) * slideHeight;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
            slideHelper.css({
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
                "top": slideY - slideHelperHeight
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
        function updateOriginalInput(fireCallback) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
            var color = get();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
            if (isInput) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
                boundElement.val(color.toString(currentPreferredFormat)).change();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
            var hasChanged = !tinycolor.equals(color, colorOnShow);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
            colorOnShow = color;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
            // Update the selection palette with the current color
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
            addColorToSelectionPalette(color);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
            if (fireCallback && hasChanged) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
                callbacks.change(color);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
                boundElement.trigger('change.spectrum', [ color ]);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
        function reflow() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
            dragWidth = dragger.width();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
            dragHeight = dragger.height();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
            dragHelperHeight = dragHelper.height();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
            slideWidth = slider.width();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
            slideHeight = slider.height();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
            slideHelperHeight = slideHelper.height();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
            alphaWidth = alphaSlider.width();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
            alphaSlideHelperWidth = alphaSlideHelper.width();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
            if (!flat) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
                container.offset(getOffset(container, offsetElement));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
            updateHelperLocations();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
        function destroy() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
            boundElement.show();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
            offsetElement.unbind("click.spectrum touchstart.spectrum");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
            container.remove();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
            replacer.remove();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
            spectrums[spect.id] = null;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
        function option(optionName, optionValue) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
            if (optionName === undefined) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
                return $.extend({}, opts);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
            if (optionValue === undefined) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
                return opts[optionName];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
            opts[optionName] = optionValue;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
            applyOptions();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
        function enable() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
            disabled = false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
            boundElement.attr("disabled", false);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
            offsetElement.removeClass("sp-disabled");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
        function disable() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
            hide();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
            disabled = true;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
            boundElement.attr("disabled", true);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
            offsetElement.addClass("sp-disabled");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
        initialize();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
        var spect = {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
            show: show,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
            hide: hide,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
            toggle: toggle,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
            reflow: reflow,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
            option: option,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
            enable: enable,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
            disable: disable,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
            set: function (c) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
                set(c);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
                updateOriginalInput();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
            },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
            get: get,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
            destroy: destroy,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
            container: container
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
        spect.id = spectrums.push(spect) - 1;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
        return spect;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
    /**
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
    * checkOffset - get the offset below/above and left/right element depending on screen position
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
    * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
    */
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
    function getOffset(picker, input) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
        var extraY = 0;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
        var dpWidth = picker.outerWidth();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
        var dpHeight = picker.outerHeight();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
        var inputHeight = input.outerHeight();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
        var doc = picker[0].ownerDocument;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
        var docElem = doc.documentElement;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
        var viewWidth = docElem.clientWidth + $(doc).scrollLeft();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
        var viewHeight = docElem.clientHeight + $(doc).scrollTop();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
        var offset = input.offset();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
        offset.top += inputHeight;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
        offset.left -=
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
            Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
            Math.abs(offset.left + dpWidth - viewWidth) : 0);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
        offset.top -=
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
            Math.min(offset.top, ((offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
            Math.abs(dpHeight + inputHeight - extraY) : extraY));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
        return offset;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
    /**
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
    * noop - do nothing
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
    */
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
    function noop() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
    /**
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
    * stopPropagation - makes the code only doing this a little easier to read in line
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
    */
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
    function stopPropagation(e) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
        e.stopPropagation();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
    /**
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
    * Create a function bound to a given object
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
    * Thanks to underscore.js
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
    */
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
    function bind(func, obj) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
        var slice = Array.prototype.slice;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
        var args = slice.call(arguments, 2);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
        return function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
            return func.apply(obj, args.concat(slice.call(arguments)));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
    /**
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
    * Lightweight drag helper.  Handles containment within the element, so that
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
    * when dragging, the x is within [0,element.width] and y is within [0,element.height]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
    */
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
    function draggable(element, onmove, onstart, onstop) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
        onmove = onmove || function () { };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
        onstart = onstart || function () { };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
        onstop = onstop || function () { };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
        var doc = element.ownerDocument || document;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
        var dragging = false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
        var offset = {};
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
        var maxHeight = 0;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
        var maxWidth = 0;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
        var hasTouch = ('ontouchstart' in window);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
        var duringDragEvents = {};
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
        duringDragEvents["selectstart"] = prevent;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
        duringDragEvents["dragstart"] = prevent;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
        duringDragEvents[(hasTouch ? "touchmove" : "mousemove")] = move;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
        duringDragEvents[(hasTouch ? "touchend" : "mouseup")] = stop;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
        function prevent(e) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
            if (e.stopPropagation) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
                e.stopPropagation();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
            if (e.preventDefault) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
                e.preventDefault();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
            e.returnValue = false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
        function move(e) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
            if (dragging) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
                // Mouseup happened outside of window
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
                if (IE && document.documentMode < 9 && !e.button) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
                    return stop();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
                var touches = e.originalEvent.touches;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
                var pageX = touches ? touches[0].pageX : e.pageX;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
                var pageY = touches ? touches[0].pageY : e.pageY;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
                var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
                var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
                if (hasTouch) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
                    // Stop scrolling in iOS
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
                    prevent(e);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
                onmove.apply(element, [dragX, dragY, e]);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
        function start(e) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
            var rightclick = (e.which) ? (e.which == 3) : (e.button == 2);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
            var touches = e.originalEvent.touches;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
            if (!rightclick && !dragging) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
                if (onstart.apply(element, arguments) !== false) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
                    dragging = true;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
                    maxHeight = $(element).height();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
                    maxWidth = $(element).width();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
                    offset = $(element).offset();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
                    $(doc).bind(duringDragEvents);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
                    $(doc.body).addClass("sp-dragging");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
                    if (!hasTouch) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
                        move(e);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
                    prevent(e);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
        function stop() {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
            if (dragging) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
                $(doc).unbind(duringDragEvents);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
                $(doc.body).removeClass("sp-dragging");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
                onstop.apply(element, arguments);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
            dragging = false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
        $(element).bind(hasTouch ? "touchstart" : "mousedown", start);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
    function throttle(func, wait, debounce) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
        var timeout;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
        return function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
            var context = this, args = arguments;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
            var throttler = function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
                timeout = null;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
                func.apply(context, args);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
            };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
            if (debounce) clearTimeout(timeout);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
            if (debounce || !timeout) timeout = setTimeout(throttler, wait);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
    /**
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
    * Define a jQuery plugin
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
    */
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
    var dataID = "spectrum.id";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
    $.fn.spectrum = function (opts, extra) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
        if (typeof opts == "string") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
            var returnValue = this;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
            var args = Array.prototype.slice.call( arguments, 1 );
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
            this.each(function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
                var spect = spectrums[$(this).data(dataID)];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
                if (spect) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
                    var method = spect[opts];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
                    if (!method) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
                        throw new Error( "Spectrum: no such method: '" + opts + "'" );
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
                    if (opts == "get") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
                        returnValue = spect.get();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
                    else if (opts == "container") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
                        returnValue = spect.container;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
                    else if (opts == "option") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
                        returnValue = spect.option.apply(spect, args);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
                    else if (opts == "destroy") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
                        spect.destroy();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
                        $(this).removeData(dataID);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
                    else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
                        method.apply(spect, args);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
            return returnValue;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
        // Initializing a new instance of spectrum
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
        return this.spectrum("destroy").each(function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
            var spect = spectrum(this, opts);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
            $(this).data(dataID, spect.id);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
        });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
    };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
    $.fn.spectrum.load = true;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
    $.fn.spectrum.loadOpts = {};
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
    $.fn.spectrum.draggable = draggable;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
    $.fn.spectrum.defaults = defaultOpts;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
    $.spectrum = { };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
    $.spectrum.localization = { };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
    $.spectrum.palettes = { };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
    $.fn.spectrum.processNativeColorInputs = function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
        var colorInput = $("<input type='color' value='!' />")[0];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
        var supportsColor = colorInput.type === "color" && colorInput.value != "!";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
        if (!supportsColor) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
            $("input[type=color]").spectrum({
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
                preferredFormat: "hex6"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
    };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
    // TinyColor.js - <https://github.com/bgrins/TinyColor> - 2011 Brian Grinstead - v0.5
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
    (function (window) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
        var trimLeft = /^[\s,#]+/,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
        trimRight = /\s+$/,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
        tinyCounter = 0,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
        math = Math,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
        mathRound = math.round,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
        mathMin = math.min,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
        mathMax = math.max,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
        mathRandom = math.random,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
        parseFloat = window.parseFloat;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
        function tinycolor(color, opts) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
            // If input is already a tinycolor, return itself
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
            if (typeof color == "object" && color.hasOwnProperty("_tc_id")) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
                return color;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
            var rgb = inputToRGB(color);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
            var r = rgb.r, g = rgb.g, b = rgb.b, a = parseFloat(rgb.a), format = rgb.format;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
            return {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
                ok: rgb.ok,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
                format: format,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
                _tc_id: tinyCounter++,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
                alpha: a,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
                toHsv: function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
                    var hsv = rgbToHsv(r, g, b);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
                    return { h: hsv.h, s: hsv.s, v: hsv.v, a: a };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
                },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
                toHsvString: function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
                    var hsv = rgbToHsv(r, g, b);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
                    var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
                    return (a == 1) ?
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
                  "hsv(" + h + ", " + s + "%, " + v + "%)" :
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
                  "hsva(" + h + ", " + s + "%, " + v + "%, " + a + ")";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
                },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
                toHsl: function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
                    var hsl = rgbToHsl(r, g, b);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
                    return { h: hsl.h, s: hsl.s, l: hsl.l, a: a };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
                },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
                toHslString: function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
                    var hsl = rgbToHsl(r, g, b);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
                    var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
                    return (a == 1) ?
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
                  "hsl(" + h + ", " + s + "%, " + l + "%)" :
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
                  "hsla(" + h + ", " + s + "%, " + l + "%, " + a + ")";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
                },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
                toHex: function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
                    return rgbToHex(r, g, b);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
                },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
                toHexString: function (force6Char) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
                    return '#' + rgbToHex(r, g, b, force6Char);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
                },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
                toRgb: function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
                    return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
                },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
                toRgbString: function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
                    return (a == 1) ?
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
                  "rgb(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ")" :
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
                  "rgba(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ", " + a + ")";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
                },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
                toName: function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
                    return hexNames[rgbToHex(r, g, b)] || false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
                },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
                toFilter: function (opts, secondColor) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
                    var hex = rgbToHex(r, g, b, true);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
                    var secondHex = hex;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
                    var alphaHex = Math.round(parseFloat(a) * 255).toString(16);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
                    var secondAlphaHex = alphaHex;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
                    var gradientType = opts && opts.gradientType ? "GradientType = 1, " : "";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
                    if (secondColor) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
                        var s = tinycolor(secondColor);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
                        secondHex = s.toHex();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
                        secondAlphaHex = Math.round(parseFloat(s.alpha) * 255).toString(16);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
                    return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr=#" + pad2(alphaHex) + hex + ",endColorstr=#" + pad2(secondAlphaHex) + secondHex + ")";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
                },
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
                toString: function (format) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
                    format = format || this.format;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
                    var formattedString = false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
                    if (format === "rgb") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
                        formattedString = this.toRgbString();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
                    if (format === "hex") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
                        formattedString = this.toHexString();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
                    if (format === "hex6") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
                        formattedString = this.toHexString(true);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
                    if (format === "name") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
                        formattedString = this.toName();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
                    if (format === "hsl") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
                        formattedString = this.toHslString();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
                    if (format === "hsv") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
                        formattedString = this.toHsvString();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
                    return formattedString || this.toHexString(true);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
            };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
        // If input is an object, force 1 into "1.0" to handle ratios properly
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
        // String input requires "1.0" as input, so 1 will be treated as 1
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
        tinycolor.fromRatio = function (color) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
            if (typeof color == "object") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
                for (var i in color) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
                    if (color[i] === 1) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
                        color[i] = "1.0";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
                    }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
            return tinycolor(color);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
        // Given a string or object, convert that input to RGB
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
        // Possible string inputs:
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
        //
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
        //     "red"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
        //     "#f00" or "f00"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
        //     "#ff0000" or "ff0000"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
        //     "rgb 255 0 0" or "rgb (255, 0, 0)"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
        //     "rgb 1.0 0 0" or "rgb (1, 0, 0)"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
        //     "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
        //     "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
        //     "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
        //     "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
        //     "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
        //
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
        function inputToRGB(color) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
            var rgb = { r: 0, g: 0, b: 0 };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
            var a = 1;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
            var ok = false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
            var format = false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
            if (typeof color == "string") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
                color = stringInputToObject(color);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
            if (typeof color == "object") {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
                if (color.hasOwnProperty("r") && color.hasOwnProperty("g") && color.hasOwnProperty("b")) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
                    rgb = rgbToRgb(color.r, color.g, color.b);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
                    ok = true;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
                    format = "rgb";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
                else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("v")) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
                    rgb = hsvToRgb(color.h, color.s, color.v);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
                    ok = true;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
                    format = "hsv";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
                else if (color.hasOwnProperty("h") && color.hasOwnProperty("s") && color.hasOwnProperty("l")) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
                    rgb = hslToRgb(color.h, color.s, color.l);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
                    ok = true;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
                    format = "hsl";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
                if (color.hasOwnProperty("a")) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
                    a = color.a;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
            rgb.r = mathMin(255, mathMax(rgb.r, 0));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
            rgb.g = mathMin(255, mathMax(rgb.g, 0));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
            rgb.b = mathMin(255, mathMax(rgb.b, 0));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
            // Don't let the range of [0,255] come back in [0,1].
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
            // Potentially lose a little bit of precision here, but will fix issues where
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
            // .5 gets interpreted as half of the total, instead of half of 1.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
            // If it was supposed to be 128, this was already taken care of in the conversion function
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
            if (rgb.r < 1) { rgb.r = mathRound(rgb.r); }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
            if (rgb.g < 1) { rgb.g = mathRound(rgb.g); }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
            if (rgb.b < 1) { rgb.b = mathRound(rgb.b); }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
            return {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
                ok: ok,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
                format: (color && color.format) || format,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
                r: rgb.r,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
                g: rgb.g,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
                b: rgb.b,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
                a: a
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
            };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
        // Conversion Functions
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
        // --------------------
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
        // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
        // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
        // `rgbToRgb`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
        // Handle bounds / percentage checking to conform to CSS color spec
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
        // <http://www.w3.org/TR/css3-color/>
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
        // *Assumes:* r, g, b in [0, 255] or [0, 1]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
        // *Returns:* { r, g, b } in [0, 255]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
        function rgbToRgb(r, g, b) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
            return {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
                r: bound01(r, 255) * 255,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
                g: bound01(g, 255) * 255,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
                b: bound01(b, 255) * 255
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
            };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
        // `rgbToHsl`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
        // Converts an RGB color value to HSL.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
        // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
        // *Returns:* { h, s, l } in [0,1]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
        function rgbToHsl(r, g, b) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
            r = bound01(r, 255);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
            g = bound01(g, 255);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
            b = bound01(b, 255);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
            var max = mathMax(r, g, b), min = mathMin(r, g, b);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
            var h, s, l = (max + min) / 2;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
            if (max == min) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
                h = s = 0; // achromatic
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
            else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
                var d = max - min;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
                s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
                switch (max) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
                    case r: h = (g - b) / d + (g < b ? 6 : 0); break;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
                    case g: h = (b - r) / d + 2; break;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
                    case b: h = (r - g) / d + 4; break;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
                h /= 6;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
            return { h: h, s: s, l: l };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
        // `hslToRgb`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
        // Converts an HSL color value to RGB.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
        // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
        // *Returns:* { r, g, b } in the set [0, 255]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
        function hslToRgb(h, s, l) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
            var r, g, b;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
            h = bound01(h, 360);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
            s = bound01(s, 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
            l = bound01(l, 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
            function hue2rgb(p, q, t) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
                if (t < 0) t += 1;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
                if (t > 1) t -= 1;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
                if (t < 1 / 6) return p + (q - p) * 6 * t;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
                if (t < 1 / 2) return q;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
                if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
                return p;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
            if (s === 0) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
                r = g = b = l; // achromatic
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
            else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
                var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
                var p = 2 * l - q;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
                r = hue2rgb(p, q, h + 1 / 3);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
                g = hue2rgb(p, q, h);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
                b = hue2rgb(p, q, h - 1 / 3);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
            return { r: r * 255, g: g * 255, b: b * 255 };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
        // `rgbToHsv`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
        // Converts an RGB color value to HSV
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
        // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
        // *Returns:* { h, s, v } in [0,1]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
        function rgbToHsv(r, g, b) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
            r = bound01(r, 255);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
            g = bound01(g, 255);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
            b = bound01(b, 255);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
            var max = mathMax(r, g, b), min = mathMin(r, g, b);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
            var h, s, v = max;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
            var d = max - min;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
            s = max === 0 ? 0 : d / max;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
            if (max == min) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
                h = 0; // achromatic
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
            else {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
                switch (max) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
                    case r: h = (g - b) / d + (g < b ? 6 : 0); break;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
                    case g: h = (b - r) / d + 2; break;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
                    case b: h = (r - g) / d + 4; break;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
                h /= 6;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
            return { h: h, s: s, v: v };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
        // `hsvToRgb`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
        // Converts an HSV color value to RGB.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
        // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
        // *Returns:* { r, g, b } in the set [0, 255]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
        function hsvToRgb(h, s, v) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
            h = bound01(h, 360) * 6;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
            s = bound01(s, 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
            v = bound01(v, 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
            var i = math.floor(h),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
                f = h - i,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
                p = v * (1 - s),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
                q = v * (1 - f * s),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
                t = v * (1 - (1 - f) * s),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
                mod = i % 6,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
                r = [v, q, p, p, t, v][mod],
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
                g = [t, v, v, q, p, p][mod],
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
                b = [p, p, t, v, v, q][mod];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
            return { r: r * 255, g: g * 255, b: b * 255 };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
        // `rgbToHex`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
        // Converts an RGB color to hex
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
        // Assumes r, g, and b are contained in the set [0, 255]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
        // Returns a 3 or 6 character hex
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
        function rgbToHex(r, g, b, force6Char) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
            var hex = [
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
                pad2(mathRound(r).toString(16)),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
                pad2(mathRound(g).toString(16)),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
                pad2(mathRound(b).toString(16))
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
            ];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
            // Return a 3 character hex if possible
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
            if (!force6Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
                return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
            return hex.join("");
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
        // `equals`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
        // Can be called with any tinycolor input
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
        tinycolor.equals = function (color1, color2) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
            if (!color1 || !color2) { return false; }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
            return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
        tinycolor.random = function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
            return tinycolor.fromRatio({
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
                r: mathRandom(),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
                g: mathRandom(),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
                b: mathRandom()
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
            });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
        // Modification Functions
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
        // ----------------------
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
        // Thanks to less.js for some of the basics here
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
        // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
        tinycolor.desaturate = function (color, amount) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
            var hsl = tinycolor(color).toHsl();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
            hsl.s -= ((amount || 10) / 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
            hsl.s = clamp01(hsl.s);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
            return tinycolor(hsl);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
        tinycolor.saturate = function (color, amount) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
            var hsl = tinycolor(color).toHsl();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
            hsl.s += ((amount || 10) / 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
            hsl.s = clamp01(hsl.s);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
            return tinycolor(hsl);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
        tinycolor.greyscale = function (color) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
            return tinycolor.desaturate(color, 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
        tinycolor.lighten = function (color, amount) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
            var hsl = tinycolor(color).toHsl();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
            hsl.l += ((amount || 10) / 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
            hsl.l = clamp01(hsl.l);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
            return tinycolor(hsl);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
        tinycolor.darken = function (color, amount) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
            var hsl = tinycolor(color).toHsl();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
            hsl.l -= ((amount || 10) / 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
            hsl.l = clamp01(hsl.l);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
            return tinycolor(hsl);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
        tinycolor.complement = function (color) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
            var hsl = tinycolor(color).toHsl();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
            hsl.h = (hsl.h + 0.5) % 1;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
            return tinycolor(hsl);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
        // Combination Functions
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
        // ---------------------
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
        // Thanks to jQuery xColor for some of the ideas behind these
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
        // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
        tinycolor.triad = function (color) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
            var hsl = tinycolor(color).toHsl();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
            var h = hsl.h * 360;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
            return [
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
            tinycolor(color),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
            tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
            tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
        ];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
        tinycolor.tetrad = function (color) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
            var hsl = tinycolor(color).toHsl();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
            var h = hsl.h * 360;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
            return [
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
            tinycolor(color),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
            tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
            tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
            tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
        ];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
        tinycolor.splitcomplement = function (color) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
            var hsl = tinycolor(color).toHsl();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
            var h = hsl.h * 360;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
            return [
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
            tinycolor(color),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
            tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
            tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l })
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
        ];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
        tinycolor.analogous = function (color, results, slices) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
            results = results || 6;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
            slices = slices || 30;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
            var hsl = tinycolor(color).toHsl();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
            var part = 360 / slices;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
            var ret = [tinycolor(color)];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
            hsl.h *= 360;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
            for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
                hsl.h = (hsl.h + part) % 360;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
                ret.push(tinycolor(hsl));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
            return ret;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
        tinycolor.monochromatic = function (color, results) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
            results = results || 6;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
            var hsv = tinycolor(color).toHsv();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
            var h = hsv.h, s = hsv.s, v = hsv.v;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
            var ret = [];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
            var modification = 1 / results;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
            while (results--) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
                ret.push(tinycolor({ h: h, s: s, v: v }));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
                v = (v + modification) % 1;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
            return ret;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
        tinycolor.readable = function (color1, color2) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
            var a = tinycolor(color1).toRgb(), b = tinycolor(color2).toRgb();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
            return (
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
            (b.r - a.r) * (b.r - a.r) +
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
            (b.g - a.g) * (b.g - a.g) +
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
            (b.b - a.b) * (b.b - a.b)
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
        ) > 0x28A4;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
        // Big List of Colors
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
        // ---------
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
        // <http://www.w3.org/TR/css3-color/#svg-color>
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
        var names = tinycolor.names = {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
            aliceblue: "f0f8ff",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
            antiquewhite: "faebd7",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
            aqua: "0ff",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
            aquamarine: "7fffd4",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
            azure: "f0ffff",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
            beige: "f5f5dc",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
            bisque: "ffe4c4",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
            black: "000",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
            blanchedalmond: "ffebcd",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
            blue: "00f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
            blueviolet: "8a2be2",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
            brown: "a52a2a",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
            burlywood: "deb887",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
            burntsienna: "ea7e5d",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
            cadetblue: "5f9ea0",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
            chartreuse: "7fff00",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
            chocolate: "d2691e",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
            coral: "ff7f50",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
            cornflowerblue: "6495ed",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
            cornsilk: "fff8dc",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
            crimson: "dc143c",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
            cyan: "0ff",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
            darkblue: "00008b",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
            darkcyan: "008b8b",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
            darkgoldenrod: "b8860b",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
            darkgray: "a9a9a9",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
            darkgreen: "006400",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
            darkgrey: "a9a9a9",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
            darkkhaki: "bdb76b",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
            darkmagenta: "8b008b",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
            darkolivegreen: "556b2f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
            darkorange: "ff8c00",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
            darkorchid: "9932cc",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
            darkred: "8b0000",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
            darksalmon: "e9967a",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
            darkseagreen: "8fbc8f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
            darkslateblue: "483d8b",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
            darkslategray: "2f4f4f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
            darkslategrey: "2f4f4f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
            darkturquoise: "00ced1",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
            darkviolet: "9400d3",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
            deeppink: "ff1493",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
            deepskyblue: "00bfff",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
            dimgray: "696969",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
            dimgrey: "696969",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
            dodgerblue: "1e90ff",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
            firebrick: "b22222",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
            floralwhite: "fffaf0",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
            forestgreen: "228b22",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
            fuchsia: "f0f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
            gainsboro: "dcdcdc",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
            ghostwhite: "f8f8ff",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
            gold: "ffd700",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
            goldenrod: "daa520",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
            gray: "808080",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
            green: "008000",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
            greenyellow: "adff2f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
            grey: "808080",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
            honeydew: "f0fff0",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
            hotpink: "ff69b4",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
            indianred: "cd5c5c",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
            indigo: "4b0082",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
            ivory: "fffff0",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
            khaki: "f0e68c",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
            lavender: "e6e6fa",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
            lavenderblush: "fff0f5",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
            lawngreen: "7cfc00",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
            lemonchiffon: "fffacd",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
            lightblue: "add8e6",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
            lightcoral: "f08080",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
            lightcyan: "e0ffff",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
            lightgoldenrodyellow: "fafad2",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
            lightgray: "d3d3d3",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
            lightgreen: "90ee90",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
            lightgrey: "d3d3d3",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
            lightpink: "ffb6c1",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
            lightsalmon: "ffa07a",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
            lightseagreen: "20b2aa",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
            lightskyblue: "87cefa",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
            lightslategray: "789",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
            lightslategrey: "789",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
            lightsteelblue: "b0c4de",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
            lightyellow: "ffffe0",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
            lime: "0f0",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
            limegreen: "32cd32",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
            linen: "faf0e6",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
            magenta: "f0f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1540
            maroon: "800000",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
            mediumaquamarine: "66cdaa",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
            mediumblue: "0000cd",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
            mediumorchid: "ba55d3",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1544
            mediumpurple: "9370db",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
            mediumseagreen: "3cb371",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
            mediumslateblue: "7b68ee",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
            mediumspringgreen: "00fa9a",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
            mediumturquoise: "48d1cc",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
            mediumvioletred: "c71585",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
            midnightblue: "191970",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
            mintcream: "f5fffa",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
            mistyrose: "ffe4e1",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
            moccasin: "ffe4b5",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
            navajowhite: "ffdead",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
            navy: "000080",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
            oldlace: "fdf5e6",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
            olive: "808000",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
            olivedrab: "6b8e23",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
            orange: "ffa500",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
            orangered: "ff4500",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
            orchid: "da70d6",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
            palegoldenrod: "eee8aa",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
            palegreen: "98fb98",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
            paleturquoise: "afeeee",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
            palevioletred: "db7093",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
            papayawhip: "ffefd5",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
            peachpuff: "ffdab9",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
            peru: "cd853f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
            pink: "ffc0cb",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
            plum: "dda0dd",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
            powderblue: "b0e0e6",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
            purple: "800080",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
            red: "f00",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
            rosybrown: "bc8f8f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
            royalblue: "4169e1",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
            saddlebrown: "8b4513",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
            salmon: "fa8072",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
            sandybrown: "f4a460",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
            seagreen: "2e8b57",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
            seashell: "fff5ee",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
            sienna: "a0522d",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
            silver: "c0c0c0",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
            skyblue: "87ceeb",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
            slateblue: "6a5acd",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
            slategray: "708090",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
            slategrey: "708090",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
            snow: "fffafa",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
            springgreen: "00ff7f",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
            steelblue: "4682b4",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
            tan: "d2b48c",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
            teal: "008080",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
            thistle: "d8bfd8",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
            tomato: "ff6347",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
            turquoise: "40e0d0",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
            violet: "ee82ee",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
            wheat: "f5deb3",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
            white: "fff",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
            whitesmoke: "f5f5f5",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
            yellow: "ff0",
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
            yellowgreen: "9acd32"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
        };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
        // Make it easy to access colors via `hexNames[hex]`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
        var hexNames = tinycolor.hexNames = flip(names);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
        // Utilities
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
        // ---------
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
        // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
        function flip(o) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
            var flipped = {};
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
            for (var i in o) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
                if (o.hasOwnProperty(i)) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
                    flipped[o[i]] = i;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
                }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
            return flipped;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
        // Take input from [0, n] and return it as [0, 1]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
        function bound01(n, max) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
            if (isOnePointZero(n)) { n = "100%"; }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
            var processPercent = isPercentage(n);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
            n = mathMin(max, mathMax(0, parseFloat(n)));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
            // Automatically convert percentage into number
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
            if (processPercent) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
                n = n * (max / 100);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
            // Handle floating point rounding errors
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
            if (math.abs(n - max) < 0.000001) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
                return 1;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
            else if (n >= 1) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
                return (n % max) / parseFloat(max);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
            return n;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
        // Force a number between 0 and 1
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
        function clamp01(val) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
            return mathMin(1, mathMax(0, val));
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
        // Parse an integer into hex
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
        function parseHex(val) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
            return parseInt(val, 16);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
        // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
        // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
        function isOnePointZero(n) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
            return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
        // Check to see if string passed in is a percentage
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
        function isPercentage(n) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
            return typeof n === "string" && n.indexOf('%') != -1;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
        // Force a hex value to have 2 characters
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
        function pad2(c) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
            return c.length == 1 ? '0' + c : '' + c;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
        var matchers = (function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
            // <http://www.w3.org/TR/css3-values/#integers>
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
            var CSS_INTEGER = "[-\\+]?\\d+%?";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
            // <http://www.w3.org/TR/css3-values/#number-value>
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
            var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1676
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
            // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1678
            var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1679
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1680
            // Actual matching.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
            // Parentheses and commas are optional, but not required.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
            // Whitespace can take the place of commas or opening paren
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
            var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
            var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
            return {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
                rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
                rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
                hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
                hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
                hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
                hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
                hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
            };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
        })();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
        // `stringInputToObject`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
        // Permissive string parsing.  Take in a number of formats, and output an object
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
        // based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
        function stringInputToObject(color) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
            color = color.replace(trimLeft, '').replace(trimRight, '').toLowerCase();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
            var named = false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
            if (names[color]) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
                color = names[color];
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
                named = true;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
            else if (color == 'transparent') {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
                return { r: 0, g: 0, b: 0, a: 0 };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
            // Try to match string input using regular expressions.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
            // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
            // Just return an object and let the conversion functions handle that.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
            // This way the result will be the same whether the tinycolor is initialized with string or object.
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
            var match;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
            if ((match = matchers.rgb.exec(color))) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
                return { r: match[1], g: match[2], b: match[3] };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
            if ((match = matchers.rgba.exec(color))) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
                return { r: match[1], g: match[2], b: match[3], a: match[4] };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
            if ((match = matchers.hsl.exec(color))) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
                return { h: match[1], s: match[2], l: match[3] };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
            if ((match = matchers.hsla.exec(color))) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
                return { h: match[1], s: match[2], l: match[3], a: match[4] };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
            if ((match = matchers.hsv.exec(color))) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
                return { h: match[1], s: match[2], v: match[3] };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
            if ((match = matchers.hex6.exec(color))) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
                return {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
                    r: parseHex(match[1]),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
                    g: parseHex(match[2]),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
                    b: parseHex(match[3]),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
                    format: named ? "name" : "hex"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
                };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
            if ((match = matchers.hex3.exec(color))) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
                return {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
                    r: parseHex(match[1] + '' + match[1]),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
                    g: parseHex(match[2] + '' + match[2]),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
                    b: parseHex(match[3] + '' + match[3]),
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
                    format: named ? "name" : "hex"
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
                };
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
            }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
            return false;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
        // Everything is ready, expose to window
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
        window.tinycolor = tinycolor;
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
    })(this);
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
    $(function () {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
        if ($.fn.spectrum.load) {
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
            $.fn.spectrum.processNativeColorInputs();
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
        }
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
    });
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
    function log(){window.console&&(log=Function.prototype.bind?Function.prototype.bind.call(console.log,console):function(){Function.prototype.apply.call(console.log,console,arguments)},log.apply(this,arguments))};
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
13ed4f7543d2 add spectrum and ace dependencies
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
})(window, jQuery);