// ==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);