server/java/renkan-web/src/main/webapp/static/lib/spectrum.js
author rougeronj
Tue, 22 Sep 2015 15:14:10 +0200
changeset 543 5f7bebdcfc0d
parent 316 242510015401
permissions -rw-r--r--
Improve the way we init the view. The data loader send a "loaded" event, hooked by the scene.py and initializing the backbone.history and the view. We don't use redraw_active in save-once and full-json, because it was making the view initialization dependent of these file which are externals. Small fix to hide the "set saved view" button when there is only one view.
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);