Advertisement
az4521

Gradient with Unicode surrogate pair iteration

Aug 25th, 2016
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Name: Gradients
  3.  * Version: 2.3.0
  4.  * Author: headzoo and az4521
  5.  * Import: https://upnext.fm/js/rainbowvis.js
  6.  *
  7.  * Applies a color gradient to the messages you send.
  8.  *
  9.  * Gradient text is toggled on and off by typing the command /colors into
  10.  * the chat text box, or by clicking the "Gradient On/Off" button.
  11.  *
  12.  * To share your colors with the channel, type the command "/colors share".
  13.  * Your colors will be published to the channel. Other users running this
  14.  * script can click those colors to import them.
  15.  */
  16. (function() {
  17.     var DEFAULT_COLORS = [
  18.     '#00efd3',
  19.     '#00d7d1',
  20.     '#00cacf',
  21.     '#00bccd',
  22.     '#00afcb',
  23.     '#00a1c9',
  24.     '#0094c7',
  25.     '#0086c4',
  26.     '#0079c3',
  27.     '#006bc1'
  28.     ];
  29.    
  30.     var DEFAULT_COLOR_COUNT = 5;
  31.     var DEFAULT_MODE        = "stretch";
  32.     var MARK                = "Gradients Script";
  33.     var MARK_VERSION        = "v2.2.5";
  34.     var REGEX_BR            = new RegExp('\\[br\\]', "g");
  35.     var REGEX_CODE          = new RegExp('`([^`]+)`', "g");
  36.     var REGEX_EMOTE         = new RegExp(':([^:]+):', "g");
  37.     var REGEX_URL           = new RegExp('(http|ftp|https)://[\\w-]+(\\.[\\w-]+)+([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?', "gi");
  38.     var REGEX_MACRO         = new RegExp('@([^@]+)@', "g");
  39.     var REGEX_HEX_COLOR     = new RegExp('#[a-f0-9]{6}', "gi");
  40.     var REGEX_UNICODE_PAIR  = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
  41.     var REGEX_UNICODE_FIRST = /[\uD800-\uDBFF]/g;
  42.     var REGEX_UNICODE_SECOND= /[\uDC00-\uDFFF]/g;
  43.  
  44.     var pickers     = [];
  45.     var state       = [];
  46.     var stylesheet  = new $stylesheet("us-chat-gradient-styles");
  47.    
  48.     var Colorizer = {
  49.         is_on       : $store.local.get("gradient-is-on", true),
  50.         colors      : DEFAULT_COLORS,
  51.         color_count : DEFAULT_COLOR_COUNT,
  52.         mode        : DEFAULT_MODE,
  53.         rainbow     : new Rainbow(),
  54.         working     : [],
  55.         range       : 0,
  56.         index       : 0,
  57.         length      : 0,
  58.        
  59.         reset: function(range) {
  60.             this.working = Array.prototype.slice.call(this.colors);
  61.             this.length  = this.working.length;
  62.             this.range   = range;
  63.             this.index   = 0;
  64.             if (this.mode == "stretch") {
  65.                 this.working.push("#000000");
  66.                 this.rainbow.setSpectrumByArray(this.working);
  67.                 this.rainbow.setNumberRange(0, range);
  68.             }
  69.         },
  70.        
  71.         next: function() {
  72.             var color = null;
  73.             if (this.mode == "stretch") {
  74.                 color = "#" + this.rainbow.colourAt(this.index);
  75.             } else {
  76.                 if (this.index >= this.length) {
  77.                     if (this.mode == "alternate") {
  78.                         this.working.reverse();
  79.                     }
  80.                     this.index = 0;
  81.                 }
  82.                
  83.                 color = this.working[this.index];
  84.             }
  85.            
  86.             this.index++;
  87.             return color;
  88.         },
  89.        
  90.         parse: function(msg, force_on) {
  91.             if (!this.is_on && !force_on) {
  92.                 return msg;
  93.             }
  94.            
  95.             var parsed = "";
  96.             var len    = msg.length;
  97.             var chars  = msg
  98.             var ig_pos = this.getIgnoredPositions(msg);
  99.             this.reset(len);
  100.    
  101.             for (var i = 0; i < len; i++) {
  102.                 if (this.isIgnoredPosition(ig_pos, i)) {
  103.                     parsed = parsed + chars[i];
  104.                 } else if (REGEX_UNICODE_PAIR.test(chars[i]+chars[i+1])) {
  105.             parsed = parsed + "[" + this.next() + "]" + String(chars[i] + chars[i+1]) + "[/#]";
  106.         } else if (REGEX_UNICODE_FIRST.test(chars[i])) {
  107.             parsed = parsed;
  108.         } else if (REGEX_UNICODE_SECOND.test(chars[i])) {
  109.             parsed = parsed;
  110.         } else if (chars[i] != " ") {
  111.                     parsed = parsed + "[" + this.next() + "]" + chars[i] + "[/#]";
  112.                 } else {
  113.                     parsed = parsed + " ";
  114.                 }
  115.             }
  116.    
  117.             return parsed;
  118.         },
  119.        
  120.         getIgnoredPositions: function(msg) {
  121.             var ig_pos = [], matches;
  122.    
  123.             matches = REGEX_URL.exec(msg);
  124.             while(matches !== null) {
  125.                 ig_pos.push({
  126.                     start: matches.index,
  127.                     end: REGEX_URL.lastIndex
  128.                 });
  129.                 matches = REGEX_URL.exec(msg);
  130.             }
  131.            
  132.             matches = REGEX_BR.exec(msg);
  133.             while(matches !== null) {
  134.                 ig_pos.push({
  135.                     start: matches.index,
  136.                     end: REGEX_BR.lastIndex
  137.                 });
  138.                 matches = REGEX_BR.exec(msg);
  139.             }
  140.            
  141.             matches = REGEX_CODE.exec(msg);
  142.             while(matches !== null) {
  143.                 ig_pos.push({
  144.                     start: matches.index,
  145.                     end: REGEX_CODE.lastIndex
  146.                 });
  147.                 matches = REGEX_CODE.exec(msg);
  148.             }
  149.            
  150.             //matches = REGEX_UNICODE_PAIR.exec(msg);
  151.             //while(matches !== null) {
  152.             //    ig_pos.push({
  153.             //        start: matches.index,
  154.             //        end: REGEX_UNICODE_PAIR.lastIndex
  155.             //    });
  156.             //    matches = REGEX_UNICODE_PAIR.exec(msg);
  157.             //}
  158.            
  159.             matches = REGEX_EMOTE.exec(msg);
  160.             while(matches !== null) {
  161.                 ig_pos.push({
  162.                     start: matches.index,
  163.                     end: REGEX_EMOTE.lastIndex
  164.                 });
  165.                 matches = REGEX_EMOTE.exec(msg);
  166.             }
  167.            
  168.             matches = REGEX_MACRO.exec(msg);
  169.             while(matches !== null) {
  170.                 ig_pos.push({
  171.                     start: matches.index,
  172.                     end: REGEX_MACRO.lastIndex
  173.                 });
  174.                 matches = REGEX_MACRO.exec(msg);
  175.             }
  176.            
  177.             return ig_pos;
  178.         },
  179.        
  180.         isIgnoredPosition: function(ig_pos, i) {
  181.             for(var y = 0; y < ig_pos.length; y++) {
  182.                 if (i >= ig_pos[y].start && i < ig_pos[y].end) {
  183.                     return true;
  184.                 }
  185.             }
  186.            
  187.             return false;
  188.         }
  189.     };
  190.    
  191.     var pushState = function() {
  192.         state.unshift({
  193.             colors: Array.prototype.slice.call(Colorizer.colors),
  194.             color_count: Colorizer.color_count,
  195.             mode: Colorizer.mode
  196.         });
  197.         $("#gradients-undo").removeClass("disabled");
  198.     };
  199.    
  200.     var resetState = function() {
  201.         state = [];
  202.         $("#gradients-undo").addClass("disabled");
  203.     };
  204.    
  205.     var addStylesheet = function() {
  206.         stylesheet.add("#us-chat-gradient-preview", {
  207.             "background-color": "#000",
  208.             "padding": "8px 12px",
  209.             "border": "1px solid #444"
  210.         }).add("#us-chat-gradient-preview .timestamp", {
  211.             "color": "c8c8c8",
  212.             "margin-right": "4px"
  213.         }).add("#us-chat-gradient-preview .username", {
  214.             "color": "#c8c8c8",
  215.             "margin-right": "4px",
  216.             "font-weight": "700"
  217.         }).add("#gradients-credits", {
  218.             "font-size": "12px",
  219.             "text-align": "right",
  220.             "-webkit-transition-property": "color",
  221.             "-webkit-transition-duration": "1s 1s",
  222.             "-webkit-transition-timing-function": "linear, ease-in"
  223.         }).add("#gradients-indicator", {
  224.             "display": "inline-block",
  225.             "cursor": "pointer"
  226.         }).add(".gradients-reset-undo", {
  227.             "-webkit-user-select": "none",
  228.             "-moz-user-select": "none",
  229.             "-ms-user-select": "none",
  230.             "text-transform": "uppercase",
  231.             "font-size": "12px",
  232.             "margin-top": "-5px",
  233.             "margin-left": "4px",
  234.             "color": "#5bc0de",
  235.             "text-decoration": "underline",
  236.             "cursor": "pointer"
  237.         }).add(".gradients-reset-undo.disabled", {
  238.             "color": "#5C7C86"
  239.         }).add(".gradient-color-picker", {
  240.             "float": "left"
  241.         }).add(".gradient-indicator-active::after", {
  242.             "content": '"\\2022"',
  243.             "margin-left": "8px",
  244.             "color": "#00FF00"
  245.         }).add(".gradient-indicator-inactive::after", {
  246.             "content": '"\\2022"',
  247.             "margin-left": "8px",
  248.             "color": "#aaa"
  249.         }).add(".gradient-picker-add", {
  250.             "margin-left": "10px",
  251.             "width": "20px",
  252.             "height": "30px",
  253.             "display": "inline-block",
  254.             "text-align": "center"
  255.         }).add(".gradient-picker-add .glyphicon", {
  256.             "vertical-align": "text-bottom",
  257.             "font-size": "20px",
  258.             "line-height": "8px",
  259.             "cursor": "pointer",
  260.             "text-shadow": "1px 1px rgba(0, 0, 0, 0.7)"
  261.         }).add(".gradient-picker-add:hover .glyphicon", {
  262.             "color": "#FFF",
  263.             "text-shadow": "2px 2px rgba(0, 0, 0, 0.9)"
  264.         }).append();
  265.     };
  266.    
  267.     var addOptions = function() {
  268.         $("#us-gradients-tab").remove();
  269.         $("#us-gradients-pane").remove();
  270.    
  271.         var tab  = $options.makeTab("Gradients", "us-gradients-tab", "tint");
  272.         var pane = $options.makePane("us-gradients-pane", tab);
  273.         $options.tabs().append(tab);
  274.         $options.panes().append(pane);
  275.        
  276.         var options = $(
  277.             '<form id="us-chat-gradient-settings" class="form-horizontal">' +
  278.                 '<h4 style="text-align: right;color:#FFF;margin-bottom:2px;">' + MARK + ' ' + MARK_VERSION + '</h4>' +
  279.                 '<p id="gradients-credits">' +
  280.                     'Credits: headzoo, az4521.' +
  281.                 '</p>' +
  282.                
  283.                 '<div class="form-group">' +
  284.                     '<label class="control-label col-sm-1">' +
  285.                         'Colors' +
  286.                     '</label>' +
  287.                     '<div class="col-sm-11">' +
  288.                         '<div id="us-chat-gradients-colors-mount" style="text-align: left;"/>' +
  289.                     '</div>' +
  290.                 '</div>' +
  291.  
  292.                 '<div class="form-group">' +
  293.                     '<label class="control-label col-sm-1" for="us-chat-gradients-mode">' +
  294.                         'Mode' +
  295.                     '</label>' +
  296.                     '<div class="col-sm-11">' +
  297.                         '<select class="form-control gradient-setting-control" id="us-chat-gradients-mode">' +
  298.                             '<option value="stretch">Stretch</option>' +
  299.                             '<option value="alternate">Alternate</option>' +
  300.                             '<option value="repeat">Repeat</option>' +
  301.                         '</select>' +
  302.                     '</div>' +
  303.                 '</div>' +
  304.  
  305.                 '<div class="form-group">' +
  306.                     '<label class="control-label col-sm-1" for="us-chat-gradients-color-count">' +
  307.                     '</label>' +
  308.                     '<div class="col-sm-11">' +
  309.                         '<div id="us-chat-gradient-preview">' +
  310.                             '<span class="timestamp">[20:48:14]</span><span class="username">' + $user.name + ':</span><span class="text gradient-preview-text">lol</span><br/>' +
  311.                             '<span class="timestamp">[20:49:23]</span><span class="username">' + $user.name + ':</span><span class="text gradient-preview-text">hahahaha</span><br/>' +
  312.                             '<span class="timestamp">[20:51:02]</span><span class="username">' + $user.name + ':</span><span class="text gradient-preview-text">i always pictured Toto as a black Freddie Mercury</span><br/>' +
  313.                             '<span class="timestamp">[20:53:46]</span><span class="username">' + $user.name + ':</span><span class="text gradient-preview-text">if i wa s lockm smtih, hw eaxtaly wwpuld i make the ke to ouru heeat?</span><br/>' +
  314.                         '</div>' +
  315.                     '</div>' +
  316.                 '</div>' +
  317.  
  318.                 '<span id="gradients-random" class="gradients-reset-undo pull-right">Random</span>' +
  319.                 '<span id="gradients-reset" class="gradients-reset-undo pull-right">Reset</span>' +
  320.                 '<span id="gradients-undo" class="gradients-reset-undo disabled pull-right">Undo</span>' +
  321.             '</form>'
  322.         );
  323.        
  324.         pane.append(options);
  325.         $("#us-chat-gradients-colors-mount").append(generatePickers());
  326.         $("#us-chat-gradients-mode").val(Colorizer.mode);
  327.     };
  328.    
  329.     var addIndicator = function() {
  330.         var indicator = $('<button class="btn btn-default btn-sm" id="gradients-indicator">Gradient</button>');
  331.         indicator.on("click", function() {
  332.             toggleColorizer();
  333.         });
  334.         updateIndicator(indicator);
  335.        
  336.         $("#gradients-indicator").remove();
  337.         $(".chatbuttons > .btn-group").append(indicator);
  338.     };
  339.    
  340.     var updateIndicator = function(indicator) {
  341.         indicator = indicator || $("#gradients-indicator");
  342.         if (Colorizer.is_on) {
  343.             indicator
  344.                 .attr("title", "Gradients are active. Click to disable.")
  345.                 .removeClass("gradient-indicator-inactive")
  346.                 .addClass("gradient-indicator-active");
  347.         } else {
  348.             indicator
  349.                 .attr("title", "Gradients are not activated. Click to enable.")
  350.                 .removeClass("gradient-indicator-active")
  351.                 .addClass("gradient-indicator-inactive");
  352.         }
  353.     };
  354.    
  355.     var toggleColorizer = function() {
  356.         Colorizer.is_on = !Colorizer.is_on;
  357.         $store.local.set("gradient-is-on", Colorizer.is_on);
  358.         updateIndicator();
  359.     };
  360.    
  361.     var generatePickers = function() {
  362.         var useroptions = $("#useroptions");
  363.         var container   = $('<div/>');
  364.        
  365.         for(var i = 0; i < Colorizer.color_count; i++) {
  366.             (function(index) {
  367.                 if (!Colorizer.colors[index]) {
  368.                     Colorizer.colors[index] = DEFAULT_COLORS[index];
  369.                 }
  370.                
  371.                 var picker = $('<input/>')
  372.                     .attr("id", "chat-color-" + index)
  373.                     .attr("type", "color");
  374.                 pickers.push(picker);
  375.                 container.append(picker);
  376.                
  377.                 picker.spectrum({
  378.                     color: Colorizer.colors[index],
  379.                     preferredFormat: "hex",
  380.                     showInput: true,
  381.                     clickoutFiresChange: true,
  382.                     replacerClassName: "gradient-color-picker",
  383.                     appendTo: useroptions,
  384.                     hide: function() {
  385.                         pushState();
  386.                         Colorizer.colors[index] = picker.spectrum("get").toString("hex");
  387.                         updatePreview();
  388.                     }
  389.                 });
  390.             })(i);
  391.         }
  392.    
  393.         var picker_add = $(
  394.             '<div class="gradient-picker-add" title="Add Color">' +
  395.                 '<span class="glyphicon glyphicon-plus"></span>' +
  396.             '</div>'
  397.         ).on("click", function() {
  398.             pushState();
  399.             Colorizer.color_count = parseInt(Colorizer.color_count) + 1;
  400.             if (Colorizer.color_count > DEFAULT_COLORS.length) {
  401.                 Colorizer.color_count = DEFAULT_COLORS.length;
  402.             }
  403.             updatePickers();
  404.             Colorizer.colors = getPickerColors();
  405.             updatePreview();
  406.         });
  407.         container.append(picker_add);
  408.    
  409.         var picker_minus = $(
  410.             '<div class="gradient-picker-add" title="Remove Color">' +
  411.                 '<span class="glyphicon glyphicon-minus"></span>' +
  412.             '</div>'
  413.         ).on("click", function() {
  414.             pushState();
  415.             Colorizer.color_count = parseInt(Colorizer.color_count) - 1;
  416.             if (Colorizer.color_count < 2) {
  417.                 Colorizer.color_count = 2;
  418.             }
  419.             updatePickers();
  420.             Colorizer.colors = getPickerColors();
  421.             updatePreview();
  422.         });
  423.         container.append(picker_minus);
  424.        
  425.         return container;
  426.     };
  427.    
  428.     var updatePickers = function() {
  429.         $each(pickers, function(picker) {
  430.             picker.spectrum("destroy").remove();
  431.         });
  432.         pickers = [];
  433.         $("#us-chat-gradients-colors-mount")
  434.             .empty()
  435.             .append(generatePickers());
  436.     };
  437.    
  438.     var getPickerColors = function() {
  439.         var colors = [];
  440.         $each(pickers, function(picker) {
  441.             colors.push(picker.spectrum("get").toString());
  442.         });
  443.        
  444.         return colors;
  445.     };
  446.    
  447.     var updatePreview = function() {
  448.         $(".gradient-preview-text").each(function(i, el) {
  449.             var target = $(el);
  450.             var html   = parseBBCodes(Colorizer.parse(target.text(), true));
  451.             target.html(html);
  452.         });
  453.     };
  454.    
  455.     var saveSettings = function() {
  456.         $store.local.set("gradient-colors",      Colorizer.colors);
  457.         $store.local.set("gradient-mode",        Colorizer.mode);
  458.         $store.local.set("gradient-color-count", Colorizer.color_count);
  459.     };
  460.    
  461.     var restoreSettings = function() {
  462.         Colorizer.color_count = $store.local.get("gradient-color-count", DEFAULT_COLOR_COUNT);
  463.         Colorizer.colors      = $store.local.get("gradient-colors", DEFAULT_COLORS);
  464.         Colorizer.mode        = $store.local.get("gradient-mode", DEFAULT_MODE);
  465.     };
  466.    
  467.     var resetColors = function() {
  468.         if (confirm("Are you sure you want to reset your colors?")) {
  469.             $store.local.remove("gradient-colors");
  470.             $store.local.remove("gradient-mode");
  471.             $store.local.remove("gradient-color-count");
  472.            
  473.             Colorizer.mode        = DEFAULT_MODE;
  474.             Colorizer.color_count = DEFAULT_COLOR_COUNT;
  475.             for(var i = 0; i < Colorizer.color_count; i++) {
  476.                 Colorizer.colors[i] = DEFAULT_COLORS[i];
  477.             }
  478.    
  479.             $each(pickers, function(picker) {
  480.                 picker.spectrum("destroy").remove();
  481.             });
  482.             pickers = [];
  483.             $("#us-chat-gradients-colors-mount")
  484.                 .empty()
  485.                 .append(generatePickers());
  486.             $("#us-chat-gradients-mode").val(Colorizer.mode);
  487.            
  488.             updatePickers();
  489.             updatePreview();
  490.             resetState();
  491.         }
  492.     };
  493.    
  494.     var undoColors = function() {
  495.         var saved = state.shift();
  496.         if (saved !== undefined) {
  497.             Colorizer.mode        = saved.mode;
  498.             Colorizer.colors      = saved.colors;
  499.             Colorizer.color_count = saved.color_count;
  500.    
  501.             $each(pickers, function(picker) {
  502.                 picker.spectrum("destroy").remove();
  503.             });
  504.             pickers = [];
  505.             $("#us-chat-gradients-colors-mount")
  506.                 .empty()
  507.                 .append(generatePickers());
  508.             $("#us-chat-gradients-mode").val(Colorizer.mode);
  509.            
  510.             updatePickers();
  511.             updatePreview();
  512.            
  513.             if (state.length == 0) {
  514.                 $("#gradients-undo").addClass("disabled");
  515.             }
  516.         }
  517.     };
  518.    
  519.     var randomizeColors = function() {
  520.         var colors = [];
  521.         for(var i = 0; i < Colorizer.color_count; i++) {
  522.             Colorizer.colors[i] = "#000000".replace(/0/g,function(){return (~~(Math.random()*16)).toString(16);});
  523.         }
  524.    
  525.         $each(pickers, function(picker) {
  526.             picker.spectrum("destroy").remove();
  527.         });
  528.         pickers = [];
  529.         $("#us-chat-gradients-colors-mount")
  530.             .empty()
  531.             .append(generatePickers());
  532.    
  533.         updatePickers();
  534.         updatePreview();
  535.     };
  536.    
  537.     var shareColors = function() {
  538.         var my_colors = [];
  539.         for(var i = 0; i < Colorizer.colors.length; i++) {
  540.             my_colors.push(
  541.                 "[" + Colorizer.colors[i] + "]" + Colorizer.colors[i].toUpperCase() + "[/#] "
  542.             )
  543.         }
  544.         $chat.send("[#FFFFFF]" + MARK + " " + MARK_VERSION + ":[/#] " + my_colors.join(" "));
  545.     };
  546.    
  547.     var removeColorCodes = function(msg) {
  548.         msg = msg.replace(/\[color (#[a-f0-9]{3,6})\](.*?)\[\/color\]/gi, '$2');
  549.         msg = msg.replace(/\[(#[a-f0-9]{3,6})\](.*?)\[\/#\]/gi, '$2');
  550.        
  551.         return msg;
  552.     };
  553.    
  554.     var isNonColorMessage = function(msg) {
  555.         var orig = msg;
  556.         msg = removeColorCodes(msg);
  557.         return (msg[0] == "/" || msg[0] == "$" || msg[0] == "@" || msg.indexOf(MARK) == 0 || msg[0] == ">" || msg != orig);
  558.     };
  559.    
  560.     var importColors = function(line) {
  561.         var matches = REGEX_HEX_COLOR.exec(line);
  562.         if (matches === null) {
  563.             return;
  564.         }
  565.        
  566.         var colors  = [];
  567.         while(matches !== null) {
  568.             colors.push(matches[0]);
  569.             matches = REGEX_HEX_COLOR.exec(line);
  570.         }
  571.         if (colors.length < 2 && colors.length > DEFAULT_COLORS.length) {
  572.             return;
  573.         }
  574.        
  575.         if (confirm(MARK + " " + MARK_VERSION +". Import these " + colors.length + " colors?\n\n" + colors.join(", "))) {
  576.             Colorizer.color_count = colors.length;
  577.             Colorizer.colors      = colors;
  578.             saveSettings();
  579.             updatePickers();
  580.             updatePreview();
  581.             $chat.toast("The colors have been imported.");
  582.         }
  583.     };
  584.    
  585.     var startCredits = function() {
  586.         var an_timer = null;
  587.         var an_index = 0;
  588.         var credits  = $("#gradients-credits")
  589.             .css("color", Colorizer.colors[an_index]);
  590.         var useroptions = $("#useroptions");
  591.         useroptions.on("show.bs.modal", function() {
  592.             an_timer = setInterval(function() {
  593.                 an_index++;
  594.                 if (an_index > Colorizer.colors.length) {
  595.                     an_index = 0;
  596.                 }
  597.                 credits.css("color", Colorizer.colors[an_index]);
  598.             }, 1000);
  599.         });
  600.         useroptions.on("hidden.bs.modal", function() {
  601.             if (an_timer) {
  602.                 clearInterval(an_timer);
  603.             }
  604.         });
  605.     };
  606.    
  607.     $chat.on("loaded", function() {
  608.         restoreSettings();
  609.         addStylesheet();
  610.         addOptions();
  611.         addIndicator();
  612.         updatePreview();
  613.         startCredits();
  614.        
  615.         var settings = $(".gradient-setting-control");
  616.         settings.off("change.gradients");
  617.         settings.on("change.gradients", function() {
  618.             pushState();
  619.             Colorizer.mode = $("#us-chat-gradients-mode").val();
  620.             updatePickers();
  621.             Colorizer.colors = getPickerColors();
  622.             updatePreview();
  623.         });
  624.    
  625.         var reset = $("#gradients-reset");
  626.         reset.off("click.gradients");
  627.         reset.on("click.gradients", resetColors);
  628.        
  629.         var undo = $("#gradients-undo");
  630.         undo.off("click.gradients");
  631.         undo.on("click.gradients", undoColors);
  632.        
  633.         var random = $("#gradients-random");
  634.         random.off("click.gradients");
  635.         random.on("click.gradients", randomizeColors);
  636.        
  637.         var buffer = $("#messagebuffer");
  638.         buffer.off("click.gradients");
  639.         buffer.on("click.gradients", ".chat-msg", function() {
  640.             var target = $(this);
  641.             if (target.is(".chat-msg")) {
  642.                 importColors(target.find(".chat-msg-line:first").text());
  643.             }
  644.         });
  645.        
  646.         $("#us-chat-gradient-settings").on("click", ".sp-input", function() {
  647.             var target = $(this);
  648.             console.log(target);
  649.             var val = prompt("Color", target.val());
  650.             if (val && val[0] == "#") {
  651.                 target.data("element").spectrum("set", val);
  652.             }
  653.         });
  654.     });
  655.    
  656.     $chat.on("user_options_save", function() {
  657.         saveSettings();
  658.     });
  659.    
  660.     $chat.on("send", function(e, data) {
  661.         if (data.msg.match(/^\/colou?rs/i)) {
  662.             var args = data.msg.replace(/^\/colou?rs\s+/i, '');
  663.             if (args.toLowerCase() == "share") {
  664.                 shareColors();
  665.             } else {
  666.                 toggleColorizer();
  667.             }
  668.             e.cancel();
  669.         } else if (!isNonColorMessage(data.msg)) {
  670.             data.msg = Colorizer.parse(data.msg);
  671.         }
  672.     });
  673. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement