diff options
Diffstat (limited to 'pages/chat.php')
-rw-r--r-- | pages/chat.php | 142 |
1 files changed, 106 insertions, 36 deletions
diff --git a/pages/chat.php b/pages/chat.php index b90226c..c6ff79c 100644 --- a/pages/chat.php +++ b/pages/chat.php @@ -45,6 +45,9 @@ function getChatDone(data) { var p; //our prep string
var newChats = false;
+ var lastDisplay = '';
+ var lastMessage = '';
+
////console.log('datalength', data.length);
if (data.length < 3 || data == 'false')
@@ -58,52 +61,69 @@ function getChatDone(data) { //console.log("JSON PREPED");
- $.each(json, function(key, user) {
+ $.each(json, function(key, chat) {
var postDate = new Date();
- postDate.setTime(postDate.getTime() + user.secondsSince * 1000);
+ postDate.setTime(postDate.getTime() + chat.secondsSince * 1000);
//var timestamp = postDate.format("ddd h:MM TT");
//var timestamp = postDate.format("h:MM:ss");
var timestamp = postDate.format("hh:MM:ss");
+ var timestampDetails = postDate.format("ddd h:MM TT");
var strClass = '';
- if (user.userID == userObj.ID) {
+ if (chat.userID == userObj.ID) {
strClass += ' self';
- }
- if (user.userID == '-1') {
+ }
+ if (chat.userID == '-1') {
strClass += ' server';
- user.displayName = 'SERVER'
+ chat.displayName = 'SERVER'
}
-
+
+ var usernameClass = '';
+ if (chat.message.indexOf("/me ") == 0) {
+ chat.message = chat.message.substring(4);
+ usernameClass = ' me';
+ }
+
+ var isSpoiler = false;
+ if (chat.message.indexOf("/spoiler ") == 0) {
+ chat.message = chat.message.substring(9);
+ isSpoiler = true;
+ }
+
+
//console.log("INSIDE BUILD START");
p = '';
p = p+ " <div class='chatColumn1'>";
- p = p+ " <span class='chatTimestamp'>["+timestamp+"]</span>";
- p = p+ " <div class='grid_td chatBadge' style='float:left; width:35px; height:35px; background:"+user.wallColor+" url(images/marks/"+user.wallEmblem+");'>";
+ p = p+ " <span class='chatTimestamp' title='"+timestampDetails+"'>["+timestamp+"]</span>";
+ p = p+ " <div class='grid_td chatBadge' style='float:left; width:35px; height:35px; background:"+chat.wallColor+" url(images/marks/"+chat.wallEmblem+");'>";
p = p+ " <div style='background-color:transparent;' class='grid_td_inner grid_td_rocks'>";
p = p+ " </div>";
p = p+ " </div>";
p = p+ " </div>";
p = p+ " <div class='chatColumn2'>";
- if (user.userID == '-1') {
- p = p+ "<span class='chatUsername'><a href='home'>";
+ if (chat.userID == '-1') {
+ p = p+ "<span class='chatUsername"+usernameClass+"'><a href='home'>";
} else {
- p = p+ "<span class='chatUsername'><a href='achievements?id="+user.userID+"' style='color:"+user.displayColor+"'>";
+ p = p+ "<span class='chatUsername"+usernameClass+"'><a href='achievements?id="+chat.userID+"' style='color:"+chat.displayColor+"'>";
}
- p = p+ user.displayName+"</a>:</span>";
+ p = p+ chat.displayName+"</a></span>";
- p = p+ " <span class='chatText'>";
- p = p+ htmlEncode(user.message);
+ if (isSpoiler == true) p = p+ " <span class='chatText spoiler' onclick='spoil(this);'>";
+ else p = p+ " <span class='chatText'>";
+ p = p+ chatReplaceAndEncode(chat.message);
p = p+ " </span>";
p = p+ " </div>";
//Message is legitmently new or a server message?
- if (user.ID > lastID || typeof(user.ID) == 'undefined') {
- items.push('<div class="chatMessage'+strClass+'" id="C_' + user.ID + '">' + p + '</div>');
+ if (chat.ID > lastID || typeof(chat.ID) == 'undefined') {
+ items.push('<div class="chatMessage'+strClass+'" id="C_' + chat.ID + '">' + p + '</div>');
newChats = true;
}
- if (user.ID > 0) lastID = user.ID;
+ lastDisplay = chat.displayName
+ lastMessage = chat.message
+ if (chat.ID > 0) lastID = chat.ID;
});
//console.log("BUILD DONE");
@@ -111,32 +131,55 @@ function getChatDone(data) { if (newChats) {
if (chatTimerDelay > chatTimerDelayLower) chatTimerDelay -= 1000;
- var new_chatDiv = $('<div/>', {
- 'class': 'my-new-list',
- //'style': 'display: none',
- html: items.join('')
- });
var elem = $("#chatContainer");
- //var atBottom = (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight());
var atBottom = (elem.scrollTop() >= elem[0].scrollHeight - elem.outerHeight() - 1);
-
-
- //var elem = $("#chatContainer"); console.log ("Ret", elem[0].scrollHeight, elem.scrollTop(), elem.outerHeight(), elem[0].scrollHeight - elem.scrollTop());
-
- //new_chatDiv.appendTo('#chatContainer').slideDown('fast');
- new_chatDiv.appendTo('#chatContainer');
-
+
+ $("#chatContainer").append(items.join(''));
+
if (atBottom || firstGetChat) {
$("#chatContainer").scrollTop($("#chatContainer")[0].scrollHeight);
firstGetChat = false;
}
- soundManager.setVolume('charm', 20);
- soundManager.setPan('charm', -60)
- soundManager.setPosition('charm',150);
- soundManager.play('charm');
+ document.title = lastDisplay+': '+lastMessage.substring(0, 10)+'... Pathery Chat';
+ if (chatIsMuted == 'true') {
+ soundManager.setVolume('charm', 20);
+ soundManager.setPan('charm', -60)
+ soundManager.setPosition('charm',150);
+ soundManager.play('charm');
+ }
}
}
+function chatReplaceAndEncode(chat) {
+ chat = htmlEncode(chat);
+ chat = chat.replace(/\*\*(\S(.*?\S)?)\*\*/gm, "<b>$1</b>");
+ chat = chat.replace(/\~\~(\S(.*?\S)?)\~\~/gm, "<s>$1</s>");
+ chat = chat.replace(/\*(\S(.*?\S)?)\*/gm, "<i>$1</i>");
+
+ chat = replaceSmileys(chat);
+
+ //Surround all URLs with a <a> link
+ var URLexp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
+ chat = chat.replace(URLexp, "<a href='redirect?to=$1' target='_blank'>$1</a>");
+
+ //Replace # in the URL with %23
+ chat = chat.replace(/<a href='redirect\?to=(.*?)(#)(.*?)' target='_blank'>/ig, "<a href='redirect?to=$1%23$3' target='_blank'>");
+ chat = chat.replace(/<a href='redirect\?to=(.*?)(&)(.*?)' target='_blank'>/ig, "<a href='redirect?to=$1%26$3' target='_blank'>");
+ //Making the bet that not all browsers do the same:
+ chat = chat.replace(/<a href='redirect\?to=(.*?)(&)(.*?)' target='_blank'>/ig, "<a href='redirect?to=$1%26$3' target='_blank'>");
+
+ return chat;
+}
+
+function replaceSmileys(chat) {
+ chat = chat.replace(/:\)/g, '<img class="chatSmiley" src="images/smileys/Smiling.png" />');
+ chat = chat.replace(/\(:/g, '<img class="chatSmiley" src="images/smileys/Smiling.png" />');
+ //chat = chat.replace(/:\//g, '<img class="chatSmiley" src="images/smileys/Uncertain.png" />');
+ chat = chat.replace(/:\(/g, '<img class="chatSmiley" src="images/smileys/Unhappy.png" />');
+ chat = chat.replace(/\<3/g, '<img class="chatSmiley" src="images/smileys/Heart.png" />');
+ return chat;
+}
+
function prepChat(chat) {
chat = chat.join('|:|');
chat = chat.replace(/\&/g,'%26')
@@ -144,6 +187,10 @@ function prepChat(chat) { return chat;
}
+function spoil(obj) {
+ $(obj).removeClass("spoiler");
+}
+
function getChat(message) {
var dataString = 'getChatFromID='+lastID;
if (chatBuffer.length > 0) {
@@ -166,8 +213,8 @@ function sendChat() { $("input#message").val('');
if (skipNextGetChat == false) {
skipNextGetChat = true;
- getChat();
}
+ getChat();
return false;
}
@@ -187,6 +234,23 @@ function htmlEncode(value){ }
}
+
+<?
+$chatMute = (isset($_COOKIE['pref_chatMute']) && $_COOKIE['pref_chatMute'] == "true");
+$chatMute = ($chatMute) ? 'true' : 'false';
+?>
+var chatIsMuted = '<? echo $chatMute; ?>';
+function setChatMute() {
+ var value = chatIsMuted;
+
+ $('#chatMute').removeClass("chatMute_"+value);
+ if (value == 'true') value = 'false';
+ else value = 'true';
+ chatIsMuted = value;
+ $('#chatMute').addClass("chatMute_"+value);
+ savePref('chatMute', value);
+}
+
</script>
<div class='wrapper'>
@@ -198,6 +262,12 @@ function htmlEncode(value){ <form id='sendChat' onsubmit="return false">
<? if($accepted) { /*Only show the chat button if we're logged in*/ ?>
<input type="hidden" name="stuff" value="1724">
+
+ <?
+ echo "
+ <a title='Mute sound?' class='chatMute_$chatMute unselectable' href='javascript:setChatMute()' id='chatMute'/></a>";
+ ?>
+
<input class='chatButton' type="button" class="send" id='chatSendBtn' value='Send' onClick="sendChat();">
<input class='chatInputMessage' type="text" name="message" id="message" value="" maxlength="255" autocomplete="off" >
<? } ?>
|