// ==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 // @downloadURL https://update.greasyfork.icu/scripts/17691/Chat%20Line%20Highlighting.user.js // @updateURL https://update.greasyfork.icu/scripts/17691/Chat%20Line%20Highlighting.meta.js // ==/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 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 ['', user, ''].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: ' + color + ''); botMessage('Whisper color: ' + wcolor + ''); botMessage("Highlighting friends: " + (holodeck._hl_friends ? "Yes" : "No") + ' (color: ' + fcolor + ')'); botMessage("Highlighting mods: " + (holodeck._hl_mods ? "Yes" : "No") + ' (color: ' + mcolor + ')'); 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, script 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);