summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSnap <snapwilliam@gmail.com>2015-05-01 16:25:28 -0700
committerSnap <snapwilliam@gmail.com>2015-05-01 16:25:28 -0700
commite6b60448bc08df316daf220db8ecfddc58aefe84 (patch)
tree8ec936e42a24a68cb775eb75688eabe2f71c5a18
parent6001d7ef9b8b26fe388ea5965139d84bdd63ca22 (diff)
downloadpathery-e6b60448bc08df316daf220db8ecfddc58aefe84.tar.xz
Minor fixes and adjustments.
Moved Javascript in chat to: js/chat.js re-ordered script loading so Jquery loads first. Fixed cookie login issue.
-rw-r--r--ajax/chat.ajax.php4
-rw-r--r--globe.php3
-rw-r--r--includes/header.php11
-rw-r--r--index.php42
-rw-r--r--js/chat.js430
-rw-r--r--js/globe.js30
-rw-r--r--js/mapspecs.js28
-rw-r--r--pages/chat.php441
8 files changed, 501 insertions, 488 deletions
diff --git a/ajax/chat.ajax.php b/ajax/chat.ajax.php
index 2ffa878..036efad 100644
--- a/ajax/chat.ajax.php
+++ b/ajax/chat.ajax.php
@@ -72,10 +72,8 @@ $use_psuedo_longpoll = true;
// }
require_once('../includes/chats.php');
-
-//exit;
-
enterChannel($userID);
+
$sent = false;
//User is sending a message
diff --git a/globe.php b/globe.php
index fe7123b..5abff5f 100644
--- a/globe.php
+++ b/globe.php
@@ -98,7 +98,8 @@ function CookieLogin() {
$_SESSION['displayName'] = $display;
$_SESSION['dateJoined'] = $dateJoined;
if ($isAdmin == 1) $_SESSION['isAdmin'] = true;
- header("Location: $mydomain");
+ // There should be no reason to re-load the page.
+ //header("Location: $mydomain");
} else {
setcookie("doLogin", "lastAttemptFailed");
setcookie("userID", "");
diff --git a/includes/header.php b/includes/header.php
index cb34fac..427a57d 100644
--- a/includes/header.php
+++ b/includes/header.php
@@ -22,18 +22,21 @@ function htmlHeader($css = array(), $title = 'Pathery', $desc = '', $scripts = a
<link rel="image_src" type="image/png" href="/images/linkdsp.png" />
<link rel="icon" href="/favicon.ico" type="image/x-icon"/>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
-<?php
+<?
foreach ($css as $c) {
echo " <link href=\"css/$c.css?v=$resourceVer.css\" rel=\"stylesheet\" type=\"text/css\" />\n";
}
- if ($desc !== '') echo " <meta name='Description' content='$desc'>";
-
- foreach ($scripts as $s) echo "<script src='js/$s.js?v=$resourceVer.js'></script>";
?>
<script src="js/ajax.js" async="async"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="js/mapspecs.js?v=050513.js"></script>
<script src="js/globe.js?v=050513.js"></script>
+<?
+ if ($desc !== '') echo " <meta name='Description' content='$desc'>";
+
+ foreach ($scripts as $s) echo "<script src='js/$s.js?v=$resourceVer.js'></script>";
+?>
+
<script>
(function(c,a){window.mixpanel=a;var b,d,h,e;b=c.createElement("script");b.type="text/javascript";b.async=!0;b.src=("https:"===c.location.protocol?"https:":"http:")+'//cdn.mxpnl.com/libs/mixpanel-2.1.min.js';d=c.getElementsByTagName("script")[0];d.parentNode.insertBefore(b,d);a._i=[];a.init=function(b,c,f){function d(a,b){var c=b.split(".");2==c.length&&(a=a[c[0]],b=c[1]);a[b]=function(){a.push([b].concat(Array.prototype.slice.call(arguments,0)))}}var g=a;"undefined"!==typeof f?
diff --git a/index.php b/index.php
index 3d99b95..2ac1aa1 100644
--- a/index.php
+++ b/index.php
@@ -46,18 +46,28 @@ if (!$accepted) {
if (isset($_SESSION['accepted']) AND $_SESSION['accepted'] == 1)
$accepted = true;
-//TODO: We could store this data in the session
-if ($accepted) {
- $userID = $_SESSION['userID'];
- $sql = "
- SELECT
- users.wallColor,
- users.wallEmblem,
- users.wallOrientation
- FROM `users`
- WHERE ID = '$userID' ";
- $result = mysql_query($sql);
- if ($result) list($wallColor, $wallEmblem, $wallOrientation) = mysql_fetch_row($result);
+//Could be simplified; but store $wallColor and etc.
+if ($accepted && !isset($wallColor)) {
+ if (isset($_SESSION['wallColor'])) {
+ $wallColor = $_SESSION['wallColor'];
+ $wallEmblem = $_SESSION['wallEmblem'];
+ $wallOrientation = $_SESSION['wallOrientation'];
+ } else {
+ $userID = $_SESSION['userID'];
+ $sql = "
+ SELECT
+ users.wallColor,
+ users.wallEmblem,
+ users.wallOrientation
+ FROM `users`
+ WHERE ID = '$userID' ";
+ $result = mysql_query($sql);
+ if ($result) list($wallColor, $wallEmblem, $wallOrientation) = mysql_fetch_row($result);
+
+ $_SESSION['wallColor'] = $wallColor;
+ $_SESSION['wallEmblem'] = $wallEmblem;
+ $_SESSION['wallOrientation'] = $wallOrientation;
+ }
}
// Footer Links
@@ -135,6 +145,14 @@ switch ($request) {
case "test":
require("pages/test.php");
break;
+
+ case "creategame":
+ require("pages/creategame.php");
+ break;
+
+ case "games":
+ require("pages/games.php");
+ break;
case "m":
require("pages/mobile.php");
diff --git a/js/chat.js b/js/chat.js
new file mode 100644
index 0000000..207c598
--- /dev/null
+++ b/js/chat.js
@@ -0,0 +1,430 @@
+
+var lastID = 1;
+//Internet Explorer doesn't support "const"
+//CONSTANTS: ...
+var channelTimerDelay = 30000;
+var chatTimerDelayUpper = 9000;
+var chatTimerDelayLower = 2000;
+var chatTimerDelayDefault = 5000;
+var chatTimerDelayWindowHidden = 90000;
+
+var chatTimerDelay = chatTimerDelayDefault;
+var isChatWindowVisible = true;
+var skipNextGetChat = false;
+var chatBuffer = new Array();
+
+getChatTimer();
+function getChatTimer() {
+ setTimeout("getChatTimer()", chatTimerDelay);
+ if (isChatWindowVisible)
+ chatTimerDelay = Math.min(chatTimerDelay + 300, chatTimerDelayUpper);
+ if (skipNextGetChat) {
+ skipNextGetChat = false;
+ return;
+ }
+ getChat();
+ //addChatMessage("Debug", "Chat timer called!");
+}
+
+
+var pollChannelListTimer = setInterval(function () {pollChannelList()}, channelTimerDelay);
+
+var firstGetChat = true;
+function getChatDone(data) {
+ var newChats = false;
+
+ ////console.log('datalength', data.length);
+
+ if (data.length < 3 || data == 'false')
+ return;
+
+ //console.log("START BUILD");
+
+ //console.log("JSON TO PARSE", data);
+
+ json = jQuery.parseJSON(data);
+
+ //console.log("JSON PREPED");
+
+ $.each(json, function(key, chat) {
+
+ var postDate = new Date();
+ postDate.setTime(postDate.getTime() + chat.secondsSince * 1000);
+
+ if (!chat.message) return;
+
+ var isSelf = (chat.userID == userObj.ID);
+ var isServer = false;
+
+ if (chat.userID == null || chat.userID <= 0) {
+ isServer = true;
+ chat.displayName = 'SERVER'
+ }
+
+ if (chat.isJoinLeave == 'true') {
+ console.log('IsJoin Leave!')
+ //return true;
+ }
+
+ //Message is legitimately new or a server message?
+ if (chat.ID > lastID || typeof(chat.ID) == 'undefined') {
+ addChatMessage(chat.displayName, chat.message, postDate, isSelf, isServer, chat.wallColor, chat.wallEmblem,
+ chat.wallOrientation, chat.userID, chat.displayColor, chat.ID);
+ newChats = true;
+ }
+
+ //console.log("INSIDE BUILD START");
+ if (chat.ID > 0)
+ lastID = chat.ID;
+ });
+
+ //console.log("BUILD DONE");
+
+ if (newChats && !firstGetChat) {
+ if (isChatWindowVisible)
+ chatTimerDelay = chatTimerDelayLower;
+
+ if (chatIsMuted == 'false') {
+ soundManager.setVolume('charm', 20);
+ soundManager.setPan('charm', -60)
+ soundManager.setPosition('charm',150);
+ soundManager.play('charm');
+ }
+ }
+
+ firstGetChat = false;
+}
+
+function addChatMessage(displayName, message, postDate, isSelf, isServer, wallColor, wallEmblem, wallOrientation, userID, displayColor, chatID)
+{
+ if(!postDate)
+ postDate = new Date();
+ var timestamp = postDate.format("hh:MM:ss");
+ var timestampDetails = postDate.format("ddd h:MM TT");
+
+ var strClass = '';
+ if (isSelf)
+ strClass += ' self';
+ if (isServer)
+ strClass += ' server';
+
+ var usernameClass = '';
+ if (message.indexOf("/me ") == 0) {
+ message = message.substring(4);
+ usernameClass = ' me';
+ }
+
+ var isSpoiler = false;
+ if (message.indexOf("/spoiler ") == 0) {
+ message = message.substring(9);
+ isSpoiler = true;
+ }
+
+ if (!isSpoiler) {
+ document.title = displayName + ': '+ message.substring(0, 20) + ' | Pathery Chat';
+ } else {
+ document.title = displayName + ': ~Spoiler~ | Pathery Chat';
+ }
+
+ var p = '';
+ p = p+ " <div class='chatColumn1'>";
+ p = p+ " <span class='chatTimestamp' title='"+timestampDetails+"'>["+timestamp+"]</span>";
+ p = p+ " <div class='grid_td chatBadge' style='float:left; width:35px; height:35px; background:"+wallColor+" url("+linkEmblem(wallEmblem, wallOrientation)+");'>";
+ 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 (userID == null || userID <= 0) {
+ p = p+ "<span class='chatUsername"+usernameClass+"'><a href='home'>";
+ } else {
+ p = p+ "<span class='chatUsername"+usernameClass+"'><a href='achievements?id="+userID+"' style='color:"+displayColor+"'>";
+ }
+ p = p+ displayName+"</a></span>";
+
+ if (isSpoiler == true) p = p+ " <span class='chatText spoiler' onclick='spoil(this);'>";
+ else p = p+ " <span class='chatText'>";
+ p = p+ chatReplaceAndEncode(message);
+ p = p+ " </span>";
+ p = p+ " </div>";
+
+ var chatContainer = $("#chatContainer");
+ var isAtBottom = (chatContainer.length == 1 && chatContainer.scrollTop() >= chatContainer[0].scrollHeight - chatContainer.outerHeight() - 1);
+
+ chatContainer.append('<div class="chatMessage'+strClass+'" id="C_' + chatID + '">' + p + '</div>');
+
+ if (isAtBottom || firstGetChat) {
+ chatContainer.scrollTop(chatContainer[0].scrollHeight);
+ }
+}
+
+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' onclick='return doNothingWhenClickingLinks(this);'>$1</a>");
+
+ //Replace # with %23, & with %26, ? with %3F
+ 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=(.*?)(&amp;)(.*?)' target='_blank'/ig, "<a href='redirect?to=$1%26$3' target='_blank'");
+ chat = chat.replace(/<a href='redirect\?to=(.*?)(\?)(.*?)' target='_blank'/ig, "<a href='redirect?to=$1%3F$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 title=":)" class="chatSmiley" src="images/smileys/Smiling.png" />');
+ chat = chat.replace(/:\(|=\(/g, '<img title=":(" class="chatSmiley" src="images/smileys/Unhappy.png" />');
+ chat = chat.replace(/\^\_\^/g, '<img title="^_^" class="chatSmiley" src="images/smileys/Happy_3.png" />');
+ chat = chat.replace(/\:d/gi, '<img title=":D" class="chatSmiley" src="images/smileys/Grinning.png" />');
+ chat = chat.replace(/\:o/gi, '<img title=":O" class="chatSmiley" src="images/smileys/Gasping.png" />');
+ chat = chat.replace(/\:p/gi, '<img title=":P" class="chatSmiley" src="images/smileys/Tongue_Out.png" />');
+ chat = chat.replace(/;p/gi, '<img title=";p" class="chatSmiley" src="images/smileys/Tongue_Out_Winking.png" />');
+ chat = chat.replace(/\:c/gi, '<img title=":c" class="chatSmiley" src="images/smileys/Childish.png" />');
+ chat = chat.replace(/\:s/gi, '<img title=":s" class="chatSmiley" src="images/smileys/Confused.png" />');
+ chat = chat.replace(/\&gt;_\&lt;/g, '<img title=">_<" class="chatSmiley" src="images/smileys/Gah.png" />');
+ chat = chat.replace(/\$_\$/gi, '<img title="$_$" class="chatSmiley" src="images/smileys/Greedy.png" />');
+ chat = chat.replace(/-\.-|-_-/gi, '<img title="-.-" class="chatSmiley" src="images/smileys/Tired.png" />');
+ chat = chat.replace(/o\.O|o\_O/g, '<img title="o_O" class="chatSmiley" src="images/smileys/Huh.png" />');
+ chat = chat.replace(/O\.o|O\_o/g, '<img title="O_o" class="chatSmiley" src="images/smileys/Huh_2.png" />');
+ chat = chat.replace(/O\.O|O\_O/g, '<img title="O_O" class="chatSmiley" src="images/smileys/Madness.png" />');
+ chat = chat.replace(/\:-\//g, '<img title="O_O" class="chatSmiley" src="images/smileys/Uncertain.png" />');
+ chat = chat.replace(/\(y\)/gi, '<img title="(y)" class="chatSmiley" src="images/smileys/Thumb_Up.png" />');
+ chat = chat.replace(/\(n\)/gi, '<img title="(n)" class="chatSmiley" src="images/smileys/Thumb_Down.png" />');
+ chat = chat.replace(/\&lt;3/g, '<img title="<3" class="chatSmiley" src="images/smileys/Heart.png" />');
+ return chat;
+}
+
+function prepChat(chat) {
+ chat = chat.join('|:|');
+ chat = chat.replace(/\&/g,'%26')
+ chat = chat.replace(/\+/g,'%2B')
+ return chat;
+}
+
+var chatIsBusy = false;
+function getChat(message) {
+ var dataString = 'getChatFromID='+lastID;
+ var backup = new Array();
+
+ var fncComplete = '';
+ if (!chatIsBusy && chatBuffer.length > 0) {
+ chatIsBusy = true;
+ dataString += '&send=true&messages='+prepChat(chatBuffer);
+ backup = chatBuffer.slice(0);
+ chatBuffer.length = 0;
+ fncComplete = function() {chatIsBusy = false;};
+ }
+ $.ajax({
+ type: "POST",
+ url: "ajax/chat.ajax.php",
+ data: dataString,
+ error: function() {
+ chatBuffer = backup.concat(chatBuffer);
+ //console.log('concated:', chatBuffer, backup);
+ },
+ success: function(data) {
+ getChatDone(data);
+ //console.log('b:', backup);
+ },
+ complete: fncComplete
+ });
+}
+
+function pollChannelList() {
+ $.ajax({
+ //type: "POST",
+ url: "ajax/chat.ajax.php?pollChannelList=1",
+ error: function() {
+ console.log('Error: Failed pollChannelList');
+ },
+ success: function(data) {
+ console.log("ChannelPoll data recieved", data);
+ pollChannelListDone(data);
+ }
+ });
+}
+
+function pollChannelListDone(data) {
+
+ console.log('data recieved:', data);
+ if (data.length < 3 || data == 'false') {
+ $("#channelContainer").html('Channel Empty');
+ return;
+ }
+ json = jQuery.parseJSON(data);
+
+ console.log('Loading channel.');
+ var c = channelListShow(json)
+ console.log(c);
+
+ var b = $("#channelContainer");
+ b.html(c);
+}
+
+
+function channelListShow(JO) {
+ console.log("Formating channelList");
+
+ var p = "<table class='membersList score' style='border-style:none; max-height:400px; width:220px; background-color:transparent; '>";
+
+ console.log('beginloop');
+
+ var previousI = 0;
+ for (var i in JO.users) {
+ console.log('loop')
+ var u = JO.users[i];
+ var styleClass = '';
+
+ if (previousI != i + 1) {
+ if (previousI < i - 1 && previousI != 0) {
+ styleClass = 'border-top: 6px solid #777799;';
+ }
+ }
+
+ // u.secFromLastActive could be used in here someplace..
+
+ var dateEntered = new Date();
+ dateEntered.setTime(dateEntered.getTime() + u.secFromEntered * 1000);
+
+ if (u.wallEmblem == undefined) u.wallEmblem = 'blank.png';
+ p = p+ "<tr style='"+styleClass+" background-color: "+u.background+"; color:"+u.displayColor+";' title='Entered channel " + dateEntered.format("ddd h:MM TT") + "'>";
+
+ p = p+ "<td style='vertical-align: middle;width:100px;'>";
+ p = p+ " <div class='grid_td' style='float:left; width:35px; height:35px; background:"+u.wallColor+" url("+linkEmblem(u.wallEmblem, u.wallOrientation)+");'>";
+ p = p+ " <div style='background-color:transparent;' class='grid_td_inner grid_td_rocks'>";
+ p = p+ " </div>";
+ p = p+ " </div>";
+ p = p+ " <span class='scoreName' style='float:left;'><a target='_blank' href='achievements?id="+u.ID+"' style='color:"+u.displayColor+"'>"+u.display+"</a></span>";
+ p = p+ "</td>";
+
+ previousI = i;
+ }
+ p = p+"</table>";
+ return p;
+}
+
+
+
+function sendChat() {
+ var message = $("input#message").val().replace("|:|", "||");
+ if (message == '') return false;
+ chatBuffer.push(message);
+ $("input#message").val('');
+ if (skipNextGetChat == false) {
+ skipNextGetChat = true;
+ }
+ getChat();
+ return false;
+}
+
+function spoil(obj) {
+ $(obj).removeClass("spoiler").hide().fadeIn(600);
+ $(obj).children().removeAttr('onclick');
+}
+
+$(document).ready(function() {
+ $('#sendChat').live("submit", function() {
+ sendChat()
+ });
+
+ //Prevent clicking on links in spoilers
+ $(document).on('click', '.spoiler > a', function()
+ {
+ addChatMessage("Debug", "Child called");
+ });
+});
+
+function htmlEncode(value){
+ if (value) {
+ return jQuery('<div />').text(value).html();
+ } else {
+ return '';
+ }
+}
+
+function doNothingWhenClickingLinks(self)
+{
+ return !$(self).closest('.spoiler').length;
+}
+
+//Code for checking if the window is currently visible or not
+//Adapted from http://stackoverflow.com/a/1060034/238419
+$(function() {
+ var hidden = "hidden";
+
+ // Standards:
+ if (hidden in document)
+ document.addEventListener("visibilitychange", onchange);
+ else if ((hidden = "mozHidden") in document)
+ document.addEventListener("mozvisibilitychange", onchange);
+ else if ((hidden = "webkitHidden") in document)
+ document.addEventListener("webkitvisibilitychange", onchange);
+ else if ((hidden = "msHidden") in document)
+ document.addEventListener("msvisibilitychange", onchange);
+ // IE 9 and lower:
+ else if ('onfocusin' in document)
+ document.onfocusin = document.onfocusout = onchange;
+ // All others:
+ else
+ window.onpageshow = window.onpagehide
+ = window.onfocus = window.onblur = onchange;
+
+ function onchange (evt) {
+ var eventMapIsWindowShown = {
+ focus:true, focusin:true, pageshow:true, blur:false, focusout:false, pagehide:false
+ };
+
+ evt = evt || window.event;
+ if (evt.type in eventMapIsWindowShown)
+ isChatWindowVisible = eventMapIsWindowShown[evt.type];
+ else
+ isChatWindowVisible = !this[hidden];
+
+ if(isChatWindowVisible)
+ onChatWindowShown();
+ else
+ onChatWindowHidden();
+ }
+});
+
+function onChatWindowShown()
+{
+ chatTimerDelay = chatTimerDelayDefault;
+ getChat();
+}
+
+function onChatWindowHidden()
+{
+ chatTimerDelay = chatTimerDelayWindowHidden;
+}
+
+
+function setChatMute() {
+ var mutePref = getCookie('pref_chatMute');
+
+ $('#chatMute').removeClass("chatMute_"+mutePref);
+ if (mutePref == 'true') {
+ mutePref = 'false';
+ soundManager.setVolume('pit', 20);
+ soundManager.setPan('pit', -60)
+ soundManager.play('pit');
+ } else {
+ mutePref = 'true';
+ }
+ chatIsMuted = mutePref;
+ $('#chatMute').addClass("chatMute_"+mutePref);
+ savePref('chatMute', mutePref);
+}
+
+pollChannelList();
+
diff --git a/js/globe.js b/js/globe.js
index 1dc61a0..0893f20 100644
--- a/js/globe.js
+++ b/js/globe.js
@@ -9,6 +9,36 @@ function hideSignin() {
}
}
+
+function savePref(pref, value) {
+ setCookie('pref_'+pref, value, 9999);
+}
+
+//Cookie functions from w3schools.com
+function setCookie(c_name,value,exdays)
+{
+ var exdate=new Date();
+ exdate.setDate(exdate.getDate() + exdays);
+ var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
+ document.cookie=c_name + "=" + c_value;
+}
+function getCookie(c_name)
+{
+ var i,x,y,ARRcookies=document.cookie.split(";");
+ for (i=0;i<ARRcookies.length;i++)
+ {
+ x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
+ y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
+ x=x.replace(/^\s+|\s+$/g,"");
+ if (x==c_name)
+ {
+ return unescape(y);
+ }
+ }
+ return "";
+}
+
+
//Make unselectable elements unselectable (hack for IE 9.0 and below, which doesn't support our CSS)
$(document).ready(function()
{
diff --git a/js/mapspecs.js b/js/mapspecs.js
index 1a0693f..7226a52 100644
--- a/js/mapspecs.js
+++ b/js/mapspecs.js
@@ -1055,31 +1055,3 @@ function getSpeedOptions(mapID) {
return r;
}
-
-function savePref(pref, value) {
- setCookie('pref_'+pref, value, 9999);
-}
-
-//Cookie functions from w3schools.com
-function setCookie(c_name,value,exdays)
-{
- var exdate=new Date();
- exdate.setDate(exdate.getDate() + exdays);
- var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
- document.cookie=c_name + "=" + c_value;
-}
-function getCookie(c_name)
-{
- var i,x,y,ARRcookies=document.cookie.split(";");
- for (i=0;i<ARRcookies.length;i++)
- {
- x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
- y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
- x=x.replace(/^\s+|\s+$/g,"");
- if (x==c_name)
- {
- return unescape(y);
- }
- }
- return "";
-}
diff --git a/pages/chat.php b/pages/chat.php
index cc8d0eb..5fe5d9e 100644
--- a/pages/chat.php
+++ b/pages/chat.php
@@ -2,7 +2,7 @@
htmlHeader(
array('stats', 'chat'), 'Chat',
'Chat for Pathery.com',
- array('scores', 'dateformat')
+ array('scores', 'dateformat', 'chat')
);
?>
@@ -17,445 +17,6 @@ if (!$accepted) {
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
-<script>
-
-var lastID = 1;
-//Internet Explorer doesn't support "const"
-//CONSTANTS: ...
-var channelTimerDelay = 30000;
-var chatTimerDelayUpper = 9000;
-var chatTimerDelayLower = 2000;
-var chatTimerDelayDefault = 5000;
-var chatTimerDelayWindowHidden = 90000;
-
-var chatTimerDelay = chatTimerDelayDefault;
-var isChatWindowVisible = true;
-var skipNextGetChat = false;
-var chatBuffer = new Array();
-
-getChatTimer();
-function getChatTimer() {
- setTimeout("getChatTimer()", chatTimerDelay);
- if (isChatWindowVisible)
- chatTimerDelay = Math.min(chatTimerDelay + 300, chatTimerDelayUpper);
- if (skipNextGetChat) {
- skipNextGetChat = false;
- return;
- }
- getChat();
- //addChatMessage("Debug", "Chat timer called!");
-}
-
-
-var pollChannelListTimer = setInterval(function () {pollChannelList()}, channelTimerDelay);
-// pollChannelListTimer();
-// function pollChannelListTimer() {
- // setTimeout("pollChannelListTimer()", channelTimerDelay);
- // pollChannelList();
-// }
-
-var firstGetChat = true;
-function getChatDone(data) {
- var newChats = false;
-
- ////console.log('datalength', data.length);
-
- if (data.length < 3 || data == 'false')
- return;
-
- //console.log("START BUILD");
-
- //console.log("JSON TO PARSE", data);
-
- json = jQuery.parseJSON(data);
-
- //console.log("JSON PREPED");
-
- $.each(json, function(key, chat) {
-
- var postDate = new Date();
- postDate.setTime(postDate.getTime() + chat.secondsSince * 1000);
-
- if (!chat.message) return;
-
- var isSelf = (chat.userID == userObj.ID);
- var isServer = false;
-
- if (chat.userID == null || chat.userID <= 0) {
- isServer = true;
- chat.displayName = 'SERVER'
- }
-
- if (chat.isJoinLeave == 'true') {
- console.log('IsJoin Leave!')
- //return true;
- }
-
- //Message is legitmently new or a server message?
- if (chat.ID > lastID || typeof(chat.ID) == 'undefined') {
- addChatMessage(chat.displayName, chat.message, postDate, isSelf, isServer, chat.wallColor, chat.wallEmblem,
- chat.wallOrientation, chat.userID, chat.displayColor, chat.ID);
- newChats = true;
- }
-
- //console.log("INSIDE BUILD START");
- if (chat.ID > 0)
- lastID = chat.ID;
- });
-
- //console.log("BUILD DONE");
-
- if (newChats && !firstGetChat) {
- if (isChatWindowVisible)
- chatTimerDelay = chatTimerDelayLower;
-
- if (chatIsMuted == 'false') {
- soundManager.setVolume('charm', 20);
- soundManager.setPan('charm', -60)
- soundManager.setPosition('charm',150);
- soundManager.play('charm');
- }
- }
-
- firstGetChat = false;
-}
-
-function addChatMessage(displayName, message, postDate, isSelf, isServer, wallColor, wallEmblem, wallOrientation, userID, displayColor, chatID)
-{
- if(!postDate)
- postDate = new Date();
- var timestamp = postDate.format("hh:MM:ss");
- var timestampDetails = postDate.format("ddd h:MM TT");
-
- var strClass = '';
- if (isSelf)
- strClass += ' self';
- if (isServer)
- strClass += ' server';
-
- var usernameClass = '';
- if (message.indexOf("/me ") == 0) {
- message = message.substring(4);
- usernameClass = ' me';
- }
-
- var isSpoiler = false;
- if (message.indexOf("/spoiler ") == 0) {
- message = message.substring(9);
- isSpoiler = true;
- }
-
- if (!isSpoiler) {
- document.title = displayName + ': '+ message.substring(0, 20) + ' | Pathery Chat';
- } else {
- document.title = displayName + ': ~Spoiler~ | Pathery Chat';
- }
-
- var p = '';
- p = p+ " <div class='chatColumn1'>";
- p = p+ " <span class='chatTimestamp' title='"+timestampDetails+"'>["+timestamp+"]</span>";
- p = p+ " <div class='grid_td chatBadge' style='float:left; width:35px; height:35px; background:"+wallColor+" url("+linkEmblem(wallEmblem, wallOrientation)+");'>";
- 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 (userID == null || userID <= 0) {
- p = p+ "<span class='chatUsername"+usernameClass+"'><a href='home'>";
- } else {
- p = p+ "<span class='chatUsername"+usernameClass+"'><a href='achievements?id="+userID+"' style='color:"+displayColor+"'>";
- }
- p = p+ displayName+"</a></span>";
-
- if (isSpoiler == true) p = p+ " <span class='chatText spoiler' onclick='spoil(this);'>";
- else p = p+ " <span class='chatText'>";
- p = p+ chatReplaceAndEncode(message);
- p = p+ " </span>";
- p = p+ " </div>";
-
- var chatContainer = $("#chatContainer");
- var isAtBottom = (chatContainer.length == 1 && chatContainer.scrollTop() >= chatContainer[0].scrollHeight - chatContainer.outerHeight() - 1);
-
- chatContainer.append('<div class="chatMessage'+strClass+'" id="C_' + chatID + '">' + p + '</div>');
-
- if (isAtBottom || firstGetChat) {
- chatContainer.scrollTop(chatContainer[0].scrollHeight);
- }
-}
-
-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' onclick='return doNothingWhenClickingLinks(this);'>$1</a>");
-
- //Replace # with %23, & with %26, ? with %3F
- 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=(.*?)(&amp;)(.*?)' target='_blank'/ig, "<a href='redirect?to=$1%26$3' target='_blank'");
- chat = chat.replace(/<a href='redirect\?to=(.*?)(\?)(.*?)' target='_blank'/ig, "<a href='redirect?to=$1%3F$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 title=":)" class="chatSmiley" src="images/smileys/Smiling.png" />');
- chat = chat.replace(/:\(|=\(/g, '<img title=":(" class="chatSmiley" src="images/smileys/Unhappy.png" />');
- chat = chat.replace(/\^\_\^/g, '<img title="^_^" class="chatSmiley" src="images/smileys/Happy_3.png" />');
- chat = chat.replace(/\:d/gi, '<img title=":D" class="chatSmiley" src="images/smileys/Grinning.png" />');
- chat = chat.replace(/\:o/gi, '<img title=":O" class="chatSmiley" src="images/smileys/Gasping.png" />');
- chat = chat.replace(/\:p/gi, '<img title=":P" class="chatSmiley" src="images/smileys/Tongue_Out.png" />');
- chat = chat.replace(/;p/gi, '<img title=";p" class="chatSmiley" src="images/smileys/Tongue_Out_Winking.png" />');
- chat = chat.replace(/\:c/gi, '<img title=":c" class="chatSmiley" src="images/smileys/Childish.png" />');
- chat = chat.replace(/\:s/gi, '<img title=":s" class="chatSmiley" src="images/smileys/Confused.png" />');
- chat = chat.replace(/\&gt;_\&lt;/g, '<img title=">_<" class="chatSmiley" src="images/smileys/Gah.png" />');
- chat = chat.replace(/\$_\$/gi, '<img title="$_$" class="chatSmiley" src="images/smileys/Greedy.png" />');
- chat = chat.replace(/-\.-|-_-/gi, '<img title="-.-" class="chatSmiley" src="images/smileys/Tired.png" />');
- chat = chat.replace(/o\.O|o\_O/g, '<img title="o_O" class="chatSmiley" src="images/smileys/Huh.png" />');
- chat = chat.replace(/O\.o|O\_o/g, '<img title="O_o" class="chatSmiley" src="images/smileys/Huh_2.png" />');
- chat = chat.replace(/O\.O|O\_O/g, '<img title="O_O" class="chatSmiley" src="images/smileys/Madness.png" />');
- chat = chat.replace(/\:-\//g, '<img title="O_O" class="chatSmiley" src="images/smileys/Uncertain.png" />');
- chat = chat.replace(/\(y\)/gi, '<img title="(y)" class="chatSmiley" src="images/smileys/Thumb_Up.png" />');
- chat = chat.replace(/\(n\)/gi, '<img title="(n)" class="chatSmiley" src="images/smileys/Thumb_Down.png" />');
- chat = chat.replace(/\&lt;3/g, '<img title="<3" class="chatSmiley" src="images/smileys/Heart.png" />');
- return chat;
-}
-
-function prepChat(chat) {
- chat = chat.join('|:|');
- chat = chat.replace(/\&/g,'%26')
- chat = chat.replace(/\+/g,'%2B')
- return chat;
-}
-
-var chatIsBusy = false;
-function getChat(message) {
- var dataString = 'getChatFromID='+lastID;
- var backup = new Array();
-
- var fncComplete = '';
- if (!chatIsBusy && chatBuffer.length > 0) {
- chatIsBusy = true;
- dataString += '&send=true&messages='+prepChat(chatBuffer);
- backup = chatBuffer.slice(0);
- chatBuffer.length = 0;
- fncComplete = function() {chatIsBusy = false;};
- }
- $.ajax({
- type: "POST",
- url: "ajax/chat.ajax.php",
- data: dataString,
- error: function() {
- chatBuffer = backup.concat(chatBuffer);
- //console.log('concated:', chatBuffer, backup);
- },
- success: function(data) {
- getChatDone(data);
- //console.log('b:', backup);
- },
- complete: fncComplete
- });
-}
-
-function pollChannelList() {
- $.ajax({
- //type: "POST",
- url: "ajax/chat.ajax.php?pollChannelList=1",
- error: function() {
- console.log('Error: Failed pollChannelList');
- },
- success: function(data) {
- console.log("ChannelPoll data recieved", data);
- pollChannelListDone(data);
- }
- });
-}
-
-function pollChannelListDone(data) {
-
- console.log('data recieved:', data);
- if (data.length < 3 || data == 'false') return;
- json = jQuery.parseJSON(data);
-
- console.log('Loading channel.');
- var c = channelListShow(json)
- console.log(c);
-
- var b = $("#channelContainer");
- b.html(c);
-}
-
-
-function channelListShow(JO) {
- console.log("Formating channelList");
-
- var p = "<table class='membersList score' style='border-style:none; max-height:400px; width:220px; background-color:transparent; '>";
-
- console.log('beginloop');
-
- var previousI = 0;
- for (var i in JO.users) {
- console.log('loop')
- var u = JO.users[i];
- var styleClass = '';
-
- if (previousI != i + 1) {
- if (previousI < i - 1 && previousI != 0) {
- styleClass = 'border-top: 6px solid #777799;';
- }
- }
-
- // u.secFromLastActive could be used in here someplace..
-
- var dateEntered = new Date();
- dateEntered.setTime(dateEntered.getTime() + u.secFromEntered * 1000);
-
- if (u.wallEmblem == undefined) u.wallEmblem = 'blank.png';
- p = p+ "<tr style='"+styleClass+" background-color: "+u.background+"; color:"+u.displayColor+";' title='Entered channel " + dateEntered.format("ddd h:MM TT") + "'>";
-
- p = p+ "<td style='vertical-align: middle;width:100px;'>";
- p = p+ " <div class='grid_td' style='float:left; width:35px; height:35px; background:"+u.wallColor+" url("+linkEmblem(u.wallEmblem, u.wallOrientation)+");'>";
- p = p+ " <div style='background-color:transparent;' class='grid_td_inner grid_td_rocks'>";
- p = p+ " </div>";
- p = p+ " </div>";
- p = p+ " <span class='scoreName' style='float:left;'><a target='_blank' href='achievements?id="+u.ID+"' style='color:"+u.displayColor+"'>"+u.display+"</a></span>";
- p = p+ "</td>";
-
- previousI = i;
- }
- p = p+"</table>";
- return p;
-}
-
-
-
-function sendChat() {
- var message = $("input#message").val().replace("|:|", "||");
- if (message == '') return false;
- chatBuffer.push(message);
- $("input#message").val('');
- if (skipNextGetChat == false) {
- skipNextGetChat = true;
- }
- getChat();
- return false;
-}
-
-function spoil(obj) {
- $(obj).removeClass("spoiler").hide().fadeIn(600);
- $(obj).children().removeAttr('onclick');
-}
-
-$(document).ready(function() {
- $('#sendChat').live("submit", function() {
- sendChat()
- });
-
- //Prevent clicking on links in spoilers
- $(document).on('click', '.spoiler > a', function()
- {
- addChatMessage("Debug", "Child called");
- });
-});
-
-function htmlEncode(value){
- if (value) {
- return jQuery('<div />').text(value).html();
- } else {
- return '';
- }
-}
-
-function doNothingWhenClickingLinks(self)
-{
- return !$(self).closest('.spoiler').length;
-}
-
-//Code for checking if the window is currently visible or not
-//Adapted from http://stackoverflow.com/a/1060034/238419
-$(function() {
- var hidden = "hidden";
-
- // Standards:
- if (hidden in document)
- document.addEventListener("visibilitychange", onchange);
- else if ((hidden = "mozHidden") in document)
- document.addEventListener("mozvisibilitychange", onchange);
- else if ((hidden = "webkitHidden") in document)
- document.addEventListener("webkitvisibilitychange", onchange);
- else if ((hidden = "msHidden") in document)
- document.addEventListener("msvisibilitychange", onchange);
- // IE 9 and lower:
- else if ('onfocusin' in document)
- document.onfocusin = document.onfocusout = onchange;
- // All others:
- else
- window.onpageshow = window.onpagehide
- = window.onfocus = window.onblur = onchange;
-
- function onchange (evt) {
- var eventMapIsWindowShown = {
- focus:true, focusin:true, pageshow:true, blur:false, focusout:false, pagehide:false
- };
-
- evt = evt || window.event;
- if (evt.type in eventMapIsWindowShown)
- isChatWindowVisible = eventMapIsWindowShown[evt.type];
- else
- isChatWindowVisible = !this[hidden];
-
- if(isChatWindowVisible)
- onChatWindowShown();
- else
- onChatWindowHidden();
- }
-});
-
-function onChatWindowShown()
-{
- chatTimerDelay = chatTimerDelayDefault;
- getChat();
-}
-
-function onChatWindowHidden()
-{
- chatTimerDelay = chatTimerDelayWindowHidden;
-}
-
-<?
-$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';
- soundManager.setVolume('pit', 20);
- soundManager.setPan('pit', -60)
- soundManager.play('pit');
- } else {
- value = 'true';
- }
- chatIsMuted = value;
- $('#chatMute').addClass("chatMute_"+value);
- savePref('chatMute', value);
-}
-
-pollChannelList();
-
-</script>
-
<div class='wrapper'>
<h3>Pathery Chat - BETA</h3>