- // ==UserScript==
- // @name Chat Line Highlighting
- // @include http://www.kongregate.com/games/*
- // @description Highlights lines which include your name and other set words
- // @author Ventero
- // @version 2.6
- // @date 2012-10-21
- // require http://kong.ventero.de/updates/49868.js
- // @namespace https://greasyfork.org/users/32649
- // ==/UserScript==
-
- // Written by Ventero (http://www.kongregate.com/accounts/Ventero) 05/23/09
- // Copyright (c) 2009-2012 Ventero, licensed under MIT/X11 license
- // http://www.opensource.org/licenses/mit-license.php
-
- var dom = (typeof unsafeWindow === "undefined"?window:unsafeWindow);
-
- function init_highlighting(){
-
- var holodeck = dom.holodeck,
- CDialogue = dom.ChatDialogue,
- CRoom = dom.ChatRoom,
- CWindow = dom.ChatWindow;
-
- if(CRoom && CDialogue){
-
- CDialogue.prototype = dom.CDprototype||dom.ChatDialogue.prototype;
- CRoom.prototype = dom.CRprototype||dom.ChatRoom.prototype;
- CWindow.prototype = dom.CWprototype||dom.ChatWindow.prototype;
- if(!CDialogue.prototype.searchWord){
-
- if(!String.prototype.trim){
- String.prototype.trim = function(){
- return this.replace(/^\s+/, "").replace(/\s+$/, "");
- }
- }
-
- CDialogue.prototype.searchWord = function(a, b){
- for (var i=0;i<b.length;i++){
- var r = b[i].replace(/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\)/g, '\\$1'),
- reg = new RegExp("\\b"+r+"\\b");
- if (reg.test(a)) return true;
- }
- return false;
- };
-
- CDialogue.prototype.searchUser = function(a){
- return this.searchWord(a, this._holodeck._hluser);
- };
-
- CDialogue.prototype.searchText = function(a){
- var l = this._holodeck,
- z = l._highlighting.concat([l._username.toLowerCase()]);
- return this.searchWord(a, z);
- }
-
- CWindow.prototype.hlFriend = function(a){
- return this._holodeck._hl_friends && this.isFriend(a);
- }
-
- CWindow.prototype.hlMod = function(a){
- if(!this._holodeck._hl_mods) return;
-
- return this._rooms.any(function(roomArr){
- var room = roomArr[1];
- var user = room.user(a);
- return user && room.canUserModerate(user);
- });
- }
-
- CWindow.prototype.friendOrMod = function(a){
- if(a.toLowerCase() == this._holodeck._username.toLowerCase()) return "";
-
- var colors = [];
- if(this.hlMod(a)) colors.push(" hlmod");
- if(this.hlFriend(a)) colors.push(" hlfriend");
- if(colors.length > 1)
- return colors[this._holodeck._hl_priority]
-
-
- return (colors[0] || "");
- }
-
- CDialogue.prototype.displayUnsanitizedMessageOldHighlight = CDialogue.prototype.displayUnsanitizedMessage;
-
- CDialogue.prototype.displayUnsanitizedMessage = function(user, msg, attributes, options){
- if(!attributes) attributes = {};
- var classes = attributes["class"] || "";
- var isWhisper = (classes.indexOf("whisper") >= 0);
-
- if(!(options && options["private"]))
- classes += this._user_manager.friendOrMod(user.toLowerCase());
-
- if(!isWhisper &&
- !this._user_manager.isMuted(user.toLowerCase()) &&
- (this.searchUser(user.toLowerCase()) ||
- this.searchText(msg.toLowerCase()))) {
- classes += " highlight";
- if(typeof this.new_private_message === "function") {
- var oldChime = holodeck._pm_chime;
- holodeck._pm_chime = holodeck._hl_chime;
- this.new_private_message();
- holodeck._pm_chime = oldChime;
- }
- }
-
- attributes["class"] = classes;
-
- this.displayUnsanitizedMessageOldHighlight(user, msg, attributes, options);
- }
-
- holodeck.addChatCommand("highlight", function(l,n){
- var k = n.match(/^\/\S+\s+(.+)/),
- z = "";
- k&&(z = k[1])
- if(z){
- z = z.replace(/\s+/g, ' ').trim();
- window.setTimeout(function(){GM_setValue("kong_highlighting", z.toLowerCase());}, 0);
- l.activeDialogue().kongBotMessage("Now highlighting: "+z+" "+l._username);
- l._highlighting = z.toLowerCase().split(' ');
- }
- return false;
- });
-
- holodeck.addChatCommand("hluser", function(l,n){
- var k = n.match(/^\/\S+\s+(.+)/),
- z = "";
- k&&(z = k[1])
- if(z){
- z = z.replace(/\s+/g, ' ').trim();
- window.setTimeout(function(){GM_setValue("kong_highlightuser", z.toLowerCase());}, 0);
- l.activeDialogue().kongBotMessage("Now highlighting user(s): "+z);
- l._hluser = z.toLowerCase().split(' ');
- }
- return false;
- });
-
- function generateCallback(name, stop, start){
- return function(l, n){
- if(l["_hl_" + name]){
- l["_hl_" + name] = 0;
- l.activeDialogue().kongBotMessage(stop || "Stopped highlighting messages by " + name);
- }else{
- l["_hl_" + name] = 1;
- l.activeDialogue().kongBotMessage(start || "Now highlighting messages by " + name);
- }
- window.setTimeout(function(){GM_setValue("kong_highlight"+name, l["_hl_" + name]);}, 0);
- return false;
- }
- }
-
- holodeck.addChatCommand("hlmods", generateCallback("mods"));
- holodeck.addChatCommand("hlfriends", generateCallback("friends"));
- holodeck.addChatCommand("hlchime", generateCallback("chime", "Stopped playing the chime for highlighted messages",
- "Now playing the chime for highlighted messages"));
- holodeck.addChatCommand("hlpriority", generateCallback("priority", "Now prioritizing mods over friends", "Now prioritizing friends over mods"));
-
- function generateColorCallback(selector, rule, name, text, max){
- if(!max) max = 1;
- return function(l, n){
- var k = n.match(/^\/\S+\s+#?([0-9a-f]{6})/i),
- z = "",
- count = 0;
- if(k) z = "#" + k[1];
- if(z){
- for(var i = 0; i < sheet.cssRules.length; i++){
- if(sheet.cssRules[i].selectorText.indexOf(selector) == 0){
- sheet.cssRules[i].style.setProperty(rule, z, "important");
- if(++count == max){
- window.setTimeout(function(){GM_setValue("kong_" + name, z);}, 0);
- l.activeDialogue().kongBotMessage("New " + (text||name) + ": " + z);
- return false;
- }
- }
- }
- } else {
- l.activeDialogue().kongBotMessage("No valid color! Format is /" + name + " XXXXXX (X = hex character)");
- }
- return false;
- }
- };
-
- holodeck.addChatCommand(
- "whispercolor",
- generateColorCallback("#kong_game_ui .chat_message_window .whisper",
- "background-color",
- "whispercolor")
- )
-
- holodeck.addChatCommand(
- "friendcolor",
- generateColorCallback("#kong_game_ui .chat_message_window .hlfriend span.chat_message_window_username",
- "color",
- "friendcolor")
- )
- holodeck.addChatCommand(
- "hlcolor",
- generateColorCallback("#kong_game_ui .chat_message_window .highlight",
- "background-color",
- "hlcolor",
- "highlighting-color",
- 2)
- )
- holodeck.addChatCommand(
- "modcolor",
- generateColorCallback("#kong_game_ui .chat_message_window .hlmod span.chat_message_window_username",
- "color",
- "modcolor")
- )
-
- holodeck.addChatCommand("hllist", function(l, n) {
- var diag = l.activeDialogue();
- function botMessage(msg) {
- diag.displayUnsanitizedMessage("Kong Bot", msg);
- }
-
- botMessage("Current highlighting settings:");
-
- if(holodeck._hluser.length > 0) {
- botMessage('Users:');
- botMessage('Users: ' + holodeck._hluser.map(function(user) {
- return ['<a href="#" onclick="holodeck.showMiniProfile(\'', user,
- '\'); return false;">', user, '</a>'].join("");
- }).join(" "));
- } else {
- botMessage("No users highlighted");
- }
-
- if(holodeck._highlighting.length > 0) {
- botMessage('Words: ' + holodeck._highlighting.join(" "));
- } else {
- botMessage("No words highlighted");
- }
-
- botMessage('Highlight color: <span style="color: ' + color + '">' +
- color + '</span>');
- botMessage('Whisper color: <span style="color: ' + wcolor + '">' +
- wcolor + '</span>');
-
- botMessage("Highlighting friends: " +
- (holodeck._hl_friends ? "Yes" : "No") +
- ' (color: <span style="color: ' + fcolor + '">' +
- fcolor + '</span>)');
- botMessage("Highlighting mods: " +
- (holodeck._hl_mods ? "Yes" : "No") +
- ' (color: <span style="color: ' + mcolor + '">' +
- mcolor + '</span>)');
-
- botMessage("Highlight priority: " +
- (holodeck._hl_priority ? "Friends over mods" : "Mods over friends"));
- botMessage("Playing chime: " +
- (holodeck._hl_chime ?
- (typeof holodeck._pm_chime !== "undefined" ? "Yes" :
- 'No, <a href="http://userscripts.org/scripts/show/65622">script</a> not installed') :
- "No"));
- return false;
- });
-
- holodeck.addChatCommand("hlreset", function(l, n) {
- var diag = l.activeDialogue();
- diag.kongBotMessage("Resetting all highlighting preferences");
-
- holodeck._chat_commands.hlcolor[0](holodeck, "/color #def6ea");
- holodeck._chat_commands.whispercolor[0](holodeck, "/color #deeaf6");
- holodeck._chat_commands.friendcolor[0](holodeck, "/color #006600");
- holodeck._chat_commands.modcolor[0](holodeck, "/color #ba6328");
- holodeck._hl_priority = 1;
- holodeck._hl_friends = 1;
- holodeck._hl_mods = 1;
- holodeck._hl_chime = 1;
- holodeck._highlighting = [];
- holodeck._hluser = [];
-
- ["highlighting", "highlightuser", "hlcolor", "whispercolor", "friendcolor",
- "modcolor", "highlightfriends", "highlightpriority", "highlightmods",
- "highlightchime"].forEach(function(pref) {
- window.setTimeout(function() {
- GM_deleteValue("kong_" + pref);
- }, 0);
- });
-
- return false;
- });
-
- holodeck._chat_commands.hl = holodeck._chat_commands.highlight;
- holodeck._chat_commands.hlfriend = holodeck._chat_commands.hlfriends;
-
- holodeck._highlighting = [];
- holodeck._hluser = [];
-
-
- var color = "#def6ea", wcolor = "#deeaf6", fcolor = "#006600", mcolor = "#ba6328", priority = 1, friends = 1, mods = 1, chime = 1;
-
- if(typeof GM_setValue !== "function"){
- GM_setValue = GM_getValue = function(){};
- } else {
- // migrate old value
- var temp = GM_getValue("kong_highlightcolor", "");
- if(temp){
- GM_setValue("kong_hlcolor", temp);
- if(typeof GM_deleteValue === "undefined"){
- GM_setValue("kong_highlightcolor", "");
- } else {
- GM_deleteValue("kong_highlightcolor");
- }
- }
-
- var list = GM_getValue("kong_highlighting"),
- user = GM_getValue("kong_highlightuser");
- color = GM_getValue("kong_hlcolor", "#def6ea")||"#def6ea";
- wcolor = GM_getValue("kong_whispercolor", "#deeaf6")||"#deeaf6";
- fcolor = GM_getValue("kong_friendcolor", "#006600")||"#006600";
- mcolor = GM_getValue("kong_modcolor", "#ba6328")||"#ba6328";
- friends = GM_getValue("kong_highlightfriends", 1);
- priority = GM_getValue("kong_highlightpriority", 1);
- mods = GM_getValue("kong_highlightmods", 1);
- chime = GM_getValue("kong_highlightchime", 1);
- if(list){holodeck._highlighting = list.trim().split(' ')};
- if(user){holodeck._hluser = user.trim().split(' ')}
- }
-
- holodeck._hl_friends = friends;
- holodeck._hl_mods = mods;
- holodeck._hl_chime = chime;
- holodeck._hl_priority = priority;
-
- // guarantee we have a non-crossdomain stylesheet
- var style = document.createElement("style");
- var head = document.getElementsByTagName("head")[0];
- (head || document.body).appendChild(style);
-
- // now find it...
- var sheet = null;
- for(var s = document.styleSheets.length - 1; s >= 0; --s) {
- try{
- if(document.styleSheets[s].cssRules && document.styleSheets[s].cssRules.length) {
- sheet = document.styleSheets[s];
- break;
- }
- }catch(e){ /* no-op */ }
- }
-
- if(!sheet) {
- alert("Kongregate Chat Line Highlighting could not find a style sheet!\nPlease send a message to Ventero about this problem.");
- return;
- }
-
- sheet.insertRule('#kong_game_ui .chat_message_window .whisper { background-color: '+wcolor+' !important; }', sheet.cssRules.length);
- sheet.insertRule('#kong_game_ui .chat_message_window .highlight.even { background-color: '+color+' !important; }', sheet.cssRules.length);
- sheet.insertRule('#kong_game_ui .chat_message_window .highlight { background-color: '+color+' !important; }', sheet.cssRules.length);
- sheet.insertRule('#kong_game_ui .chat_message_window .hlfriend span.chat_message_window_username { color: '+fcolor+' !important; }', sheet.cssRules.length);
- sheet.insertRule('#kong_game_ui .chat_message_window .hlmod span.chat_message_window_username { color: '+mcolor+' !important; }', sheet.cssRules.length);
- }
- }
- }
-
- function check(){
- dom.injectScript = dom.injectScript||(document.getElementById("injectScriptDiv")?document.getElementById("injectScriptDiv").onclick():0);
- if(dom.injectScript){
- dom.injectScript(init_highlighting, 300);
- } else if(!dom._promptedFramework && !/Chrome/i.test(navigator.appVersion)){
- if(confirm("You don't have the latest version of the framework-script!\n" +
- "Please install it, otherwise the scripts won't work.\n" +
- "Clicking ok will open a new tab where you can install the script"))
- window.open("http://userscripts.org/scripts/show/54245", "_blank");
- dom._promptedFramework = true;
- }
- }
-
- setTimeout(check, 0);