- // ==UserScript==
- // @name Chat Timestamp And Whisper Link *OLD*
- // @namespace tag://kongregate
- // @description Shows timestamp and whisper-link on mouseover of message sender
- // @include http://www.kongregate.com/games/*
- // @author Ventero
- // @version 1.2.2
- // @date 06.04.2013
- // @license MIT license
- // @require https://greasyfork.org/scripts/18206-chat-timestamp-and-whisper-link-library/code/Chat%20Timestamp%20And%20Whisper%20Link%20Library.js?version=114947
- // ==/UserScript==
-
- // Written by Ventero (http://www.kongregate.com/accounts/Ventero) 06/04/09
- // Copyright (c) 2009-2013 Ventero, licensed under MIT/X11 license
- // http://www.opensource.org/licenses/mit-license.php
-
- function init_timestamp(dom){
-
- var holodeck = dom.holodeck,
- ChatDialogue = dom.ChatDialogue,
- $ = dom.$;
-
- function injectMouseover(dom, $, holodeck, ChatDialogue) {
- var message_rollover_template = new dom.Element("div", {id: "message_rollover_template", "class": "user_rollover_container spritesite", style: "display: none"});
- var message_rollover = new dom.Element("div", {"class": "user_rollover spritesite"});
- var message_rollover_inner = new dom.Element("div", {"class": "user_rollover_inner"});
- var rollover_private_message_holder = new dom.Element("p", {"class": "rollover_message_private_message_link_message_link_holder"});
- var rollover_private_message_link = new dom.Element("a", {id: "rollover_message_private_message_link", "class": "rollover_message_private_message_link", href: "#"}).update("Private Message");
- rollover_private_message_holder.appendChild(rollover_private_message_link);
- var rollover_time_text = new dom.Element("p", {id: "rollover_time_text"});
- message_rollover_inner.appendChild(rollover_time_text);
- message_rollover_inner.appendChild(rollover_private_message_holder);
- message_rollover.appendChild(message_rollover_inner);
- message_rollover_template.appendChild(message_rollover);
- $('chat_tab_pane').appendChild(message_rollover_template);
-
- var MessageRollover = dom.MessageRollover = function(chat_dialogue) {
- this.initialize(chat_dialogue);
- return this;
- }
-
- MessageRollover.prototype = {
- initialize: function(chat_dialogue){
- this._active_dialogue = chat_dialogue;
- this._holodeck = chat_dialogue._holodeck;
- this._rollover_template_node = $('message_rollover_template');
- this._private_message_node = $('rollover_message_private_message_link');
- this._time_node = $('rollover_time_text');
-
- this._private_message_observer = function(){};
-
- if(this._rollover_template_node){
- var rollover = this;
- this._rollover_template_node.observe('mouseover', function(event){
- rollover.stopHide();
- dom.Event.stop(event);
- });
- this._rollover_template_node.observe('mouseout', function(event){
- rollover.beginHide();
- dom.Event.stop(event);
- });
- }
- },
- show: function(time, user, event){
- if(this._hideTimer) clearTimeout(this._hideTimer);
- this.updatePrivateMessageLink(user);
- this.updateTimeText(time);
- this.setRolloverPosition(event);
- this._rollover_template_node.show();
- },
- setRolloverPosition: function(event) {
- var messagenode = event.target;
- var current_scroll_top = this._active_dialogue._message_window_node.scrollTop;
- var current_message_top = messagenode.positionedOffset()[1];
- // nudge the user rollover up a little
- current_message_top = current_message_top - 9;
-
- var new_top_val = current_message_top;
- if ( current_scroll_top < current_message_top ) {
- new_top_val = current_message_top - current_scroll_top;
- }
-
- var top_style_str = new_top_val + 'px';
- this._rollover_template_node.setStyle({ top: top_style_str });
-
- // set left position based on username length
- var username_width = messagenode.getWidth();
- var new_left_val = 20 + username_width;
-
- var left_style_str = new_left_val + 'px';
- this._rollover_template_node.setStyle({ left: left_style_str });
- },
-
- updatePrivateMessageLink: function(username){
- var cw = this._holodeck.chatWindow();
- // replace observer
- this._private_message_node.stopObserving('click');
- this._private_message_observer = dom.CapturesToInlineRegistration.decorate(function(event){
- // just put /w <username> in the chat input field
- cw.insertPrivateMessagePrefixFor(username);
- dom.Event.stop(event);
- return false;
- });
- this._private_message_node.observe('click', this._private_message_observer);
- },
- updateTimeText: function(time){
- this._time_node.innerHTML = time;
- },
- beginHide: function() {
- var rollover = this;
- if(this._hideTimer){ clearTimeout(this._hideTimer); }
- this._hideTimer = setTimeout(function() { rollover.hide(); }, 500);
- },
- stopHide: function() {
- clearTimeout(this._hideTimer);
- },
- hide: function() {
- this._rollover_template_node.hide();
- }
- };
-
- ChatDialogue.MESSAGE_TEMPLATE.template = '<p class="#{classNames}"><span username="#{username}" time="#{time}" class="username #{userClassNames}">#{prefix}#{username}</span><span class="separator">: </span><span class="message">#{message}</span><span class="clear"></span></p>';
- ChatDialogue.MESSAGE_TEMPLATE.old_evaluate = ChatDialogue.MESSAGE_TEMPLATE.evaluate;
- ChatDialogue.MESSAGE_TEMPLATE.evaluate = function(args){
- var date = new Date();
- var hours = date.getHours();
- var minutes = date.getMinutes();
- var seconds = date.getSeconds();
- var time;
- if (holodeck._timeFormat == 12){
- time = (hours<10?(hours==0?"12":"0"+hours):(hours>12?(hours>21?hours-12:"0"+(hours-12)):hours))+":"+(minutes<10?"0":"")+minutes+":"+(seconds<10?"0":"")+seconds+(hours>11?" PM":" AM"); // 12-hour clock
- } else {
- time = (hours<10?"0":"")+hours+":"+(minutes<10?"0":"")+minutes+":"+(seconds<10?"0":"")+seconds; //24-hour clock
- }
- args.time = time;
- return this.old_evaluate(args);
- };
-
- ChatDialogue.prototype.initialize = function(parent_node, onInputFunction, holodeck, user_manager) {
- this._messages_until_next_collection = 0;
- this._holodeck = holodeck;
- this._user_manager = user_manager;
- this._parent_node = parent_node;
- this._messages_count = 0;
- this._insertion_count = 0;
- this._onInputFunction = onInputFunction;
- this._message_rollover_manager = new MessageRollover(this);
-
- // Establish references to re-used nodes
- this._message_window_node = parent_node.down('.chat_message_window');
- this._input_node = parent_node.down('.chat_input');
-
- this._messages_to_retain = 200;
-
- this._message_window_node.stopObserving();
-
- this._message_window_node.observe('mouseover', function(event) {
- var time = event.target.getAttribute("time"),
- user = event.target.getAttribute("username");
- if (time){
- holodeck.activeDialogue().showMessageRollover(time, user, event);
- dom.Event.stop(event);
- }
- });
-
- this._message_window_node.observe('mouseout', function(event) {
- holodeck.activeDialogue().hideMessageRollover();
- dom.Event.stop(event);
- });
-
- // Bind event listeners
- var dialogue = this,
- input_node = this._input_node;
- this._input_node.observe('keypress', function(event) { dialogue.onKeyPress(event); });
- this._input_node.observe('focus', function(event) { dialogue.clearPrompt(); });
-
- // Trigger mini-profile for clicks on usernames in chat.
- this._message_window_node.observe('click',
- function(event) {
- if (event.target) {
- var username = event.target.getAttribute('username');
- if(username){
- event.stop();
- user_manager.showProfile(username);
- }
- }
- });
- }
-
- ChatDialogue.prototype.showMessageRollover = function (time, user, event){
- this._message_rollover_manager.show(time, user, event);
- }
-
- ChatDialogue.prototype.hideMessageRollover = function(){
- this._message_rollover_manager.beginHide();
- }
- }
-
- if(holodeck && ChatDialogue){
- if(!ChatDialogue.prototype && dom.CDprototype)
- ChatDialogue.prototype = dom.CDprototype;
-
- if(!holodeck.__mouseover){
- holodeck.__mouseover = true;
-
- var script = document.createElement("script");
- script.type = "text/javascript";
- script.textContent = "(" + injectMouseover.toString() + ")(window, $, holodeck, ChatDialogue);";
- document.body.appendChild(script);
- setTimeout(function(){document.body.removeChild(script);}, 100);
-
- holodeck.addChatCommand("timeformat", function(l,n){
- var k = n.match(/^\/\S+\s+(\d+)/),
- m = "",
- q = l.activeDialogue();
- k && (m=k[1]);
- if(m==12 || m==24){
- l._timeFormat = m;
- window.setTimeout(function(){GM_setValue("kong_timeformat", m);}, 0);
- q.displayMessage("Timeformat", "Set to "+m+"-hour clock (hh:mm:ss"+(m==12?" AM/PM)":")"), { "class": "whisper received_whisper"}, {non_user: true});
- } else {
- q.displayMessage("Timeformat", "Allowed values: 12 and 24", { "class": "whisper received_whisper"}, {non_user: true});
- }
- return false;
- });
-
- var timeformat = 12;
-
- if(typeof GM_setValue !== "undefined"){
- timeformat = GM_getValue("kong_timeformat", 12)||12;
- }else{
- GM_setValue = function(){};
- }
-
- holodeck._timeFormat = timeformat;
- }
- }
- }
-
- function check(){
- var dom = (typeof unsafeWindow === "undefined"?window:unsafeWindow);
- var injectScript = dom.injectScript||(document.getElementById("injectScriptDiv")?document.getElementById("injectScriptDiv").onclick():0);
- if(injectScript){
- injectScript(init_timestamp, 0);
- } 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);