summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ajax/maps.ajax.php14
-rw-r--r--ajax/scores.ajax.php108
-rw-r--r--css/maps.css10
-rw-r--r--includes/maps.php4
-rw-r--r--js/scores.js67
-rw-r--r--pages/home.php3
-rw-r--r--pages/scores.php644
7 files changed, 307 insertions, 543 deletions
diff --git a/ajax/maps.ajax.php b/ajax/maps.ajax.php
index d2ae750..a5d72f2 100644
--- a/ajax/maps.ajax.php
+++ b/ajax/maps.ajax.php
@@ -1,20 +1,22 @@
<?
+ob_start("ob_gzhandler");
//CACHE HEADERS
include('../includes/mapclass.php');
include('../includes/maps.php');
//RETURN MAP w/ CACHE HEADERS
-$mapID = $_GET['mapid'] * 1;
+$tmp = explode(".", $_GET['mapid']);
+$mapID = $tmp[0] * 1;
if (!is_int($mapID)) exit;
$map = new map(getMapCode($mapID), $mapID);
-// 62 days
-// $expires = 62*24*60*60
-// header("Pragma: public");
-// header("Cache-Control: maxage=".$expires);
-// header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');
+//62 days
+$expires = 62*24*60*60;
+header("Cache-Control: public, maxage=".$expires);
+header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');
+header("Content-type: text/javascript");
echo json_encode($map);
?> \ No newline at end of file
diff --git a/ajax/scores.ajax.php b/ajax/scores.ajax.php
index b95d22e..7ba25d0 100644
--- a/ajax/scores.ajax.php
+++ b/ajax/scores.ajax.php
@@ -8,6 +8,7 @@ $userID = $_SESSION['userID'];
require('../includes/maps.php');
require('../includes/mapclass.php');
require('../includes/datas.php');
+include_once('../includes/sqli.php');
if ($_GET['getmap'] == 'true') {
$mapID = $_GET['mapID'];
@@ -28,17 +29,105 @@ if ($_GET['getmaplist'] == 'true') {
echo getMapNavigation($todaysScoreMaps);
}
+if (isset($_GET['getmapidsbydate'])) {
+ //TODO: SANATIZE
+ $requestDate = $_GET['getmapidsbydate'];
+ echo json_encode(getMapIDsByDate($requestDate));
+}
+
+// Here is that SQL for you
+// SELECT correctMapIds.mapType, maps.ID, maps.code
+// FROM maps
+// INNER JOIN
+// (
+ // SELECT MIN(mapOfTheDay.mapId) AS mapId, mapOfTheDay.mapType
+ // FROM `mapOfTheDay`
+ // INNER JOIN
+ // (
+ // SELECT mapType, MIN(mapExpireTime) AS mapExpireTime
+ // FROM mapOfTheDay
+ // WHERE mapExpireTime > DATE_ADD(CURDATE(), INTERVAL -1 DAY)
+ // GROUP BY mapType
+ // ) AS expireTimes ON mapOfTheDay.mapType = expireTimes.mapType
+ // AND mapOfTheDay.mapExpireTime = expireTimes.mapExpireTime
+ // GROUP BY mapOfTheDay.mapType
+// ) AS correctMapIds ON maps.ID = correctMapIds.mapId
+
+//TODO: SANITIZE.
+function getMapIDsByDate($date) {
+ global $mysqli;
+$sql = "SELECT MIN(mapOfTheDay.mapId) AS mapId
+FROM `mapOfTheDay`
+INNER JOIN
+(
+ SELECT mapType, MIN(mapExpireTime) AS mapExpireTime
+ FROM mapOfTheDay
+ WHERE mapExpireTime > ?
+ GROUP BY mapType
+) AS expireTimes ON mapOfTheDay.mapType = expireTimes.mapType
+ AND mapOfTheDay.mapExpireTime = expireTimes.mapExpireTime
+GROUP BY mapOfTheDay.mapType";
+
+$stmt = $mysqli->prepare($sql);
+$stmt->bind_param("s", $date);
+$stmt->execute();
+
+ $stmt->bind_result($mapID);
+ /* fetch values */
+ while ($stmt->fetch()) {
+ $ids[] = $mapID;
+ }
+
+ return $ids;
+
+var_dump($ids);
+
+
+while ($myrow[] = $result->fetch_assoc()) {}
+
+ $result = mysql_query($sql) or die(mysql_error());
+ if (mysql_num_rows($result) == 0) return -1;
+ global $mapNamesByType;
+ $r = array();
+ while($data[] = mysql_fetch_array($result)) {
+ $mapID = $data['mapID'];
+ $mapType = $data['mapType'];
+ $map = new map($code);
+ if ($map->name == '')
+ $map->name = $mapNamesByType[$mapType];
+ $r[$mapID] = $map;
+ }
+ return $myrow;
+}
function getMapsPlayed($daysAgo) {
- $sql = "
- SELECT `mapID`, `code`, `mapType`
- FROM `mapOfTheDay`
- INNER JOIN `maps` ON `mapID` = maps.ID
- WHERE DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) =
- mapDate AND
- `mapType` IN (1, 2, 3, 4)
- ";
+ // $sql = "
+ // SELECT `mapID`, `code`, `mapType`
+ // FROM `mapOfTheDay`
+ // INNER JOIN `maps` ON `mapID` = maps.ID
+ // WHERE DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) =
+ // mapDate AND
+ // `mapType` IN (1, 2, 3, 4, 5)
+ // ";
+
+ $sql = "SELECT correctMapIds.mapType, maps.ID as mapID, maps.code
+FROM maps
+INNER JOIN
+(
+ SELECT MIN(mapOfTheDay.mapId) AS mapId, mapOfTheDay.mapType
+ FROM `mapOfTheDay`
+ INNER JOIN
+ (
+ SELECT mapType, MIN(mapExpireTime) AS mapExpireTime
+ FROM mapOfTheDay
+ WHERE mapExpireTime > DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY)
+ GROUP BY mapType
+ ) AS expireTimes ON mapOfTheDay.mapType = expireTimes.mapType
+ AND mapOfTheDay.mapExpireTime = expireTimes.mapExpireTime
+ GROUP BY mapOfTheDay.mapType
+) AS correctMapIds ON maps.ID = correctMapIds.mapId";
+
$result = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($result) == 0)
return -1;
@@ -49,8 +138,7 @@ function getMapsPlayed($daysAgo) {
$mapID = $data['mapID'];
$mapType = $data['mapType'];
$map = new map($code);
- if ($map->name == '')
- $map->name = $mapNamesByType[$mapType];
+ if ($map->name == '') $map->name = $mapNamesByType[$mapType];
$r[$mapID] = $map;
}
diff --git a/css/maps.css b/css/maps.css
index 57ddc7e..86ca3c4 100644
--- a/css/maps.css
+++ b/css/maps.css
@@ -36,6 +36,14 @@
background-image: url(../images/OverlayTileFaceted50b.png);
background-color: #b85555;
}
+.map .r2 {
+ background-color: #CCCCCC;
+ background-image: url(../images/OverlayTileFaceted50b.png);
+}
+.map .p {
+ background-color: #FFFFEE;
+ background-image: url(../images/PathableOnly1.png.png);
+}
.map .s {
background-image: url(../images/OverlayStart50b.png);
background-color: #fbfefb;
@@ -320,7 +328,7 @@
background-image: url(../images/OverlayTileFaceted50b.png);
}
.grid_td_path {
- background-image: url(../images/OverlayTeleport.png);
+ background-image: url(../images/PathableOnly1.png.png);
background-color: #FFFFEE;
}
diff --git a/includes/maps.php b/includes/maps.php
index efe17b8..1af64a2 100644
--- a/includes/maps.php
+++ b/includes/maps.php
@@ -324,9 +324,9 @@ function DisplayMapThumbnail($map, $link = false) {
$size = $size.'%';
//$size = '1.2px';
if ($link) {
- $r .= "<table style='cursor:pointer' onclick='document.location.href=\"$link\"' class='map_thumbnail'>";
+ $r .= "<table style='cursor:pointer' onclick='document.location.href=\"$link\"' class='map'>";
} else {
- $r .= "<table style='width:$width;height:$height;' class='map_thumbnail'>";
+ $r .= "<table style='width:$width;height:$height;' class='map'>";
}
for ($y = 0; $y < $map->height; $y++) { //Number of Rows
$r .= "<tr>";
diff --git a/js/scores.js b/js/scores.js
index 47a37c3..7c97a2d 100644
--- a/js/scores.js
+++ b/js/scores.js
@@ -55,7 +55,7 @@ function scoresUpdatePage(mapid, page, html) {
scorePages[mapid][page].html = html;
//if (scorePages[mapid][page] == currentPage[mapid]) {
if (page == currentPage[mapid]) {
- scoresShowPage(mapid, page);
+ scoresShowPage(page, mapid);
}
}
@@ -63,7 +63,7 @@ function scoresShowMyPage(mapid) {
//Future use
}
-function scoresShowPage(mapid, page) {
+function scoresShowPage(page, mapid) {
mapid = mapid - 0;
page = page - 0;
// console.log('scoresShowPage', mapid, page);
@@ -106,13 +106,16 @@ function scoresPreparePage (mapid, page) {
return true;
}
+var scoresShowNavSideBtns = false;
function scoresFormatPage(JO) {
// console.log("Formating page");
var p = "<table class='score'>";
+ console.log("jo object", JO);
+ var navi = '';
if (JO.pageCount > 1) {
- var navi = scoresFormatPageNavi(JO);
- p = p+"<tr><td colspan='3' style='text-align:center;'>"+navi+"</td></tr>";
+ navi = "<tr><th colspan='3' style='text-align:center;'>"+formatPageNavi(JO, "scoresShowPage", JO.mapid)+"</th></tr>";
+ p = p+navi;
}
p = p+"<tr title='Updated "+JO.updateTime+"'>";
p = p+"<th>Rank</th>";
@@ -183,18 +186,20 @@ function scoresFormatPage(JO) {
}
//p = p+"<tr><th colspan='3' style='text-align:center;'>"+navi+"</th></tr>";
+ p = p+navi;
p = p+"</table>";
var nextPage = JO.page - 0 + 1;
var prevPage = JO.page - 1;
- if (JO.pageCount > 1) {
+ //TODO: Re'enable this somehow?
+ if (JO.pageCount > 1 && scoresShowNavSideBtns) {
if (JO.page < JO.pageCount) {
- p = p+"<a href='javascript:scoresShowPage("+JO.mapid+", "+nextPage+")' class='rightBtn scoreActive'>&gt;</a>";
+ p = p+"<a href='javascript:scoresShowPage("+nextPage+", "+JO.mapid+")' class='rightBtn scoreActive'>&gt;</a>";
} else
p = "<div class='rightBtn scoreDisabled'>&gt;</div>"+p;
if (JO.page > 1) {
- p = "<a href='javascript:scoresShowPage("+JO.mapid+", "+prevPage+")' class='leftBtn scoreActive'>&lt;</a>"+p;
+ p = "<a href='javascript:scoresShowPage("+prevPage+", "+JO.mapid+")' class='leftBtn scoreActive'>&lt;</a>"+p;
} else
p = "<div class='leftBtn scoreDisabled'>&lt;</div>"+p;
}
@@ -208,36 +213,6 @@ function scoresFormatPage(JO) {
return p;
}
-function scoresFormatPageNavi(JO) {
- var r = '';
- var showedPrevPage = true;
- for (var i = 1; i <= JO.pageCount; i++) {
- if (
- (JO.page > i - 3 && JO.page < i + 3)
- || (i == 1)
- || (i == JO.pageCount)
- || (i == JO.userPage)
- ) {
-
- if (!showedPrevPage)
- r = r + ' ... ';
- if (JO.page == i) {
- r = r + " <b style='color:#aaaabb; font-size:150%;'>" + i + "</b>";
- } else if (i == JO.userPage) {
- r = r + " <a href='javascript:scoresShowPage("+JO.mapid+", "+i+")' style='color:#99cc99;' title='You are on this page'><i>" + i + '</i></a>';
- } else {
- r = r + " <a href='javascript:scoresShowPage("+JO.mapid+", "+i+")'>" + i + '</a>';
- }
- showedPrevPage = true;
- } else {
- showedPrevPage = false;
- }
- }
-
- return r;
-}
-
-
//Memberlist related functions:
var membersPages = new Object;
var membersCurrentPage = 1;
@@ -346,7 +321,7 @@ function membersUpdatePage(page, html) {
}
}
-function membersFormatPageNavi(JO) {
+function formatPageNavi(JO, callback) {
var r = '';
var showedPrevPage = true;
for (var i = 1; i <= JO.pageCount; i++) {
@@ -362,9 +337,9 @@ function membersFormatPageNavi(JO) {
if (JO.page == i) {
r = r + " <b style='color:#aaaabb; font-size:150%;'>" + i + "</b>";
} else if (i == JO.userPage) {
- r = r + " <a href='javascript:membersShowPage("+i+")' style='color:#99cc99;' title='You are on this page'><i>" + i + '</i></a>';
+ r = r + " <a href='javascript:"+callback+"("+i+", "+arguments[2]+", "+arguments[3]+")' style='color:#99cc99;' title='You are on this page'><i>" + i + '</i></a>';
} else {
- r = r + " <a href='javascript:membersShowPage("+i+")'>" + i + '</a>';
+ r = r + " <a href='javascript:"+callback+"("+i+", "+arguments[2]+", "+arguments[3]+")'>" + i + '</a>';
}
showedPrevPage = true;
} else {
@@ -375,15 +350,15 @@ function membersFormatPageNavi(JO) {
var prevPage = JO.page - 1;
if (JO.pageCount > 1) {
if (JO.page < JO.pageCount) {
- r = r+" <a class='scoreRight' title='Last' href='javascript:membersShowPage("+JO.pageCount+")'>&gt;&gt;&gt;</a>";
- r = r+" <a class='scoreRight' title='Next' href='javascript:membersShowPage("+nextPage+")'>&gt;</a>";
+ r = r+" <a class='scoreRight' title='Last' href='javascript:"+callback+"("+JO.pageCount+", "+arguments[2]+", "+arguments[3]+")'>&gt;&gt;&gt;</a>";
+ r = r+" <a class='scoreRight' title='Next' href='javascript:"+callback+"("+nextPage+", "+arguments[2]+", "+arguments[3]+")'>&gt;</a>";
} else {
r = r+" <span class='scoreRight'>&gt;&gt;&gt;</span>";
r = r+" <span class='scoreRight'>&gt;</span>";
}
if (JO.page > 1) {
- r = " <a class='scoreLeft' title='Previous' href='javascript:membersShowPage("+prevPage+")'>&lt;</a>"+r;
- r = " <a class='scoreLeft' title='First' href='javascript:membersShowPage(1)'>&lt;&lt;&lt;</a>"+r;
+ r = " <a class='scoreLeft' title='Previous' href='javascript:"+callback+"("+prevPage+", "+arguments[2]+", "+arguments[3]+")'>&lt;</a>"+r;
+ r = " <a class='scoreLeft' title='First' href='javascript:"+callback+"(1, "+arguments[2]+", "+arguments[3]+")'>&lt;&lt;&lt;</a>"+r;
} else {
r = r+" <span class='scoreLeft'>&lt;&lt;&lt;</span>";
r = r+" <span class='scoreLeft'>&lt;</span>";
@@ -399,7 +374,7 @@ function membersFormatPage(JO) {
var p = "<table class='membersList score'>";
var navi = '';
if (JO.pageCount > 1) {
- navi = "<tr><th colspan='10' style='text-align:center;'>"+membersFormatPageNavi(JO)+"</th></tr>";
+ navi = "<tr><th colspan='10' style='text-align:center;'>"+formatPageNavi(JO, "membersShowPage")+"</th></tr>";
p = p+navi;
}
@@ -476,7 +451,7 @@ function membersFormatPage(JO) {
previousI = i;
}
- p = p+navi
+ p = p+navi;
p = p+"</table>";
return p;
}
diff --git a/pages/home.php b/pages/home.php
index cc94068..31ea756 100644
--- a/pages/home.php
+++ b/pages/home.php
@@ -55,6 +55,7 @@ echo soundManager2();
<script type="text/javascript">
playerWallColor = '<?PHP echo isset($wallColor) ? $wallColor : ''; ?>';
playerWallEmblem = '<?PHP echo isset($wallEmblem) ? $wallEmblem : ''; ?>';
+scoresShowNavSideBtns = true;
</script>
<!-- Advertisement -->
@@ -200,7 +201,7 @@ function displayMaze($motd, $mapType) {
$topscorediv = "
<div class='scoreContainer2' style='position:relative;' id='$mapID,dspScore'>
</div>
-<script>scoresShowPage($mapID, 1);</script>
+<script>scoresShowPage(1, $mapID);</script>
";
$mysolution = '';
diff --git a/pages/scores.php b/pages/scores.php
index 43bc7dc..118dfa7 100644
--- a/pages/scores.php
+++ b/pages/scores.php
@@ -45,7 +45,8 @@ $datePrevDay = date('Y-m-d', strtotime("-1 day", $dateAgo));
if ($daysAgo < 1)
die("You must specify a date previous to today.");
-
+//!! TODO:
+$timeUntilNewDailyMap = strtotime("tomorrow") - strtotime("now");
?>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
@@ -59,44 +60,60 @@ playerWallEmblem = '<?PHP echo isset($wallEmblem) ? $wallEmblem : ''; ?>';
<script>
-//Contra
-$(document).bind('keystrokes', {
-keys: ['arrow up', 'arrow up', 'arrow down', 'arrow down', 'arrow left', 'arrow right', 'arrow left', 'arrow right', 'b', 'a', 'enter']
-}, function(){
-alert('You unlocked awesomeness!');
-});
+var tomorrow = new Date();
+tomorrow.setTime(tomorrow.getTime() + <? echo $timeUntilNewDailyMap; ?> * 1000);
+var serverTomorrow = '<? echo $dateNextDay; ?>';
+var serverTime = new Date();
+serverTime.setTime(<? echo time() * 1000; ?>);
-var daysAgo = <? echo $daysAgo; ?>;
+var pointerTime = new Date();
+pointerTime.setTime(serverTime.getTime())
-$.ajaxSetup ({
- cache: false
-});
-var ajax_load = "<img src='images/loading.gif' alt='loading...' />";
-// load() functions
-var loadUrl = "ajax/load.php";
-$("#load_basic").click(function(){
- $("#result").html(ajax_load).load(loadUrl);
-});
+setTimeout("start();", 500);
-var loadUrl = "ajax/load.php";
+var pointerMapID = -1;
+var goToPointer = true;
+function start() {
+ var hash = window.location.hash.substring(1);
+ console.log("HASH:", hash);
+ if (hash !== '') {
+ hashParts = hash.split('_')
+ dateSplit = hashParts[0].split("-");
+ if (typeof(hashParts[1]) !== 'undefined') {
+ pointerMapID = hashParts[1];
+ }
+ //+1 because i'm gonna use prev.
+ pointerTime = new Date(dateSplit[0],dateSplit[1]-1,dateSplit[2]-0+1);
+ }
+ getMapIDs('prev');
+}
+//$(window).on('hashchange', function() {
-$("#load_basic").click(function(){
- $("#result").html(ajax_load).load(loadUrl);
+//Contra
+$(document).bind('keystrokes', {
+keys: ['arrow up', 'arrow up', 'arrow down', 'arrow down', 'arrow left', 'arrow right', 'arrow left', 'arrow right', 'b', 'a', 'enter']
+}, function(){
+alert('You unlocked awesomeness!');
});
-
-function displayMap(mapID) {
- //var urlString = 'ajax/scores.ajax.php?getmap=true&mapID='+mapID;
- var urlString = 'map/'+mapID;
+function displayMap(mapID, divID, goalSize) {
$("#mapDisplay").fadeOut('fast');
- //.html(ajax_load)
-
- //$("#mapDisplay").load(urlString, null, function() {$("#mapDisplay").fadeIn('slow');});
- //urlString = 'do.php?r=reqScorePage&reqPage=1&mapID='+mapID;
- //$("#scoreDisplay").html(ajax_load).load(urlString);
-
+ $.ajax({
+ type: "GET",
+ url: 'map/'+mapID+".js",
+ cache: true,
+ data: '',
+ //TODO: Better fail option?
+ fail: (function() { console.log("FAIL Map Download"); }),
+ complete: function(data) {$("#"+divID).html(mapAsHTML(decryptJSON(data.responseText), goalSize)).fadeIn('slow');}
+ });
+}
+
+function displayMapScores(mapID) {
+ pointerMapID = mapID;
+ updateHash();
if (!$('#'+mapID+',dspScore').length) {
var newDiv = $('<div/>', {
'id': mapID+',dspScore',
@@ -105,89 +122,116 @@ function displayMap(mapID) {
$('#scoreDisplay').empty();
newDiv.prependTo('#scoreDisplay');
}
- scoresShowPage(mapID, 1);
-
- $.ajax({
- type: "GET",
- url: 'map/'+mapID,
- data: '',
- success: function(data) {$("#mapDisplay").html(mapAsHTML(decryptJSON(data), 595)).fadeIn('slow');}
- });
- // var newDiv = $('<div/>', {
- // 'id': mapID+',dspScore',
- // 'class': 'my-new-list',
- // 'style': 'display: none',
- // html: ''
- // });
+ scoresShowPage(1, mapID);
+ displayMap(mapID, "mapDisplay", 595);
}
-//TODO:
-function getMapOnce(mapid) {
- if (typeof(mapdata[mapid]) != 'object') {
- return mapdata[mapid];
- }
-}
-// function request_path_done() {
- // var JO = decryptJSON(ajax.response);
-// }
+function updateHash() {
+ var tmp = document.location + '';
+ tmp = tmp.split("#");
+ var anchorTag = tmp[0]+'#'+pointerDate;
+ anchorTag += "_"+pointerMapID;
+ document.location=anchorTag;
+}
-function getMaplist(request) {
- // daysAgo++
+var pointerDate;
+function getMapIDs(request) {
+ console.log("getMapIDs exe", request);
+
+ pointerDate = request;
switch (request) {
case "next":
- if (daysAgo <= 1)
+ if (pointerTime.getTime() + (24*60*60*1000) > serverTime.getTime()) {
+ alert("Tomorrow hasn't happened yet. Alerts are bad. - TMP!");
return;
- daysAgo--;
+ }
+ pointerTime.setTime(pointerTime.getTime() + (24*60*60*1000));
+ pointerDate = pointerTime.format("yyyy-mm-dd");
break;
case "prev":
- daysAgo++;
- break;
- case "yesterday":
- if (daysAgo == 1)
+
+ if (pointerTime.getTime() - (24*60*60*1000) > serverTime.getTime()) {
+ alert("Tomorrow hasn't happened yet. Alerts are bad. - TMP!");
return;
- daysAgo = 1;
+ }
+ pointerTime.setTime(pointerTime.getTime() - (24*60*60*1000));
+ pointerDate = pointerTime.format("yyyy-mm-dd");
break;
}
- var urlString = 'ajax/scores.ajax.php?getmaplist=true&daysago='+daysAgo;
- $("#mapNavigation").hide('fast');
- //.html(ajax_load)
- $("#mapNavigation").load(urlString, null, function() {$("#mapNavigation").show('slow');});
+ console.log("setting showdate");
+ $('#displayDate').html(pointerTime.format("dddd, mmmm ddS, yyyy"));
+
+ var urlString = "ajax/scores.ajax.php?getmapidsbydate="+pointerDate;
+
+ updateHash();
+
+ $.ajax({
+ type: "GET",
+ url: urlString,
+ cache: true,
+ data: '',
+ fail: function() { alert("error"); },
+ complete: function(data) {getMapIDsResponse(data.responseText);}
+ });
}
-//TODO
-function handleJSONResponse(data) {
- json = jQuery.parseJSON(data);
- // $.each(json, function(key, user) {
+var mapsInNav = new Array();
+function getMapIDsResponse(response) {
+ var json = decryptJSON(response);
- // }
+ //Delete removed maps
+ //console.log("going through mapsInNav", mapsInNav);
+ mapsInNav = $.grep(mapsInNav, function(mapID, key) {
+ console.log("del: compare:", key, mapID, json, jQuery.inArray(mapID, json));
+ if (jQuery.inArray(mapID, json) < 0 && typeof(mapID) != 'undefined') {
+ removeMapFromNav(mapID);
+ return false
+ } else return true;
+ });
+
+ //Add non-existing maps
+ //console.log("going through json", json);
+ $.each(json, function(key, mapID) {
+ //console.log("add: compare:", mapID, mapsInNav);
+ if (jQuery.inArray(mapID, mapsInNav) == -1) {
+ addMapToNav(mapID);
+ if (goToPointer == true && pointerMapID < 0) {
+ pointerMapID = mapID;
+ }
+ }
+ });
+
+ if (goToPointer == true) {
+ goToPointer = false;
+ displayMapScores(pointerMapID);
+ }
}
+function addMapToNav(mapID) {
+ //console.log("adding map to nav:", mapID);
+ var $newdiv1 = $("<div style='float:left;' id='thumb_"+mapID+"'/>");
-// var global = getCSSRule('.global');
-
-//TODO: Playing around with this:
-//setPlayerSettings(playerWallEmblem, playerWallColor);
-//function setPlayerSettings(wallEmblem, wallColor) {
- //css(".playable .o:hover", "background-color", playerWallColor);
- //css(".playable .o:hover", "background-image", "url(http://www.mazetd.4xg.net/images/marks/"+wallEmblem+")");
-//}
-// function css(selector, property, value) {
- // for (var i=0; i<document.styleSheets.length;i++) {//Loop through all styles
- // //Try add rule
- // try { document.styleSheets[i].insertRule(selector+ ' {'+property+':'+value+'}', document.styleSheets[i].cssRules.length);
- // } catch(err) {try { document.styleSheets[i].addRule(selector, property+':'+value);} catch(err) {}}//IE
- // }
-// }
-
-
-
-
-
-//alert("I'm working on this page right now - this IS beta");
+ $("#mapNavigation").append($newdiv1);
+
+ $.ajax({
+ type: "GET",
+ url: 'map/'+mapID,
+ cache: true,
+ data: '',
+ fail: function() { alert("error"); },
+ complete: function(data) {
+ $("#thumb_"+mapID).html(mapThumbnailHTML(decryptJSON(data.responseText), 100)).show('slow');
+ }
+ });
+ mapsInNav.push(mapID);
+}
-var mymap = {"ID":502,"teleports":0,"checkpoints":4,"width":"15","height":"9","walls":"13","name":"","flags":null,"dateCreated":null,"dateExpires":null,"isBlind":false,"isMultiPath":false,"code":null,"tiles":[[["s",""],["o"],["o"],["o"],["r",""],["o"],["o"],["o"],["o"],["o"],["o"],["r",""],["o"],["o"],["f",""]],[["s",""],["r",""],["o"],["r",""],["o"],["o"],["o"],["c",3],["r",""],["c",2],["o"],["o"],["o"],["o"],["f",""]],[["s",""],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["r",""],["o"],["o"],["o"],["o"],["o"],["f",""]],[["s",""],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["f",""]],[["s",""],["o"],["o"],["r",""],["o"],["o"],["o"],["o"],["r",""],["o"],["r",""],["o"],["o"],["o"],["f",""]],[["s",""],["o"],["r",""],["r",""],["o"],["o"],["r",""],["r",""],["o"],["o"],["o"],["o"],["o"],["o"],["f",""]],[["s",""],["o"],["o"],["c",4],["r",""],["r",""],["o"],["c",""],["o"],["o"],["o"],["o"],["o"],["o"],["f",""]],[["s",""],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["r",""],["o"],["o"],["o"],["o"],["o"],["f",""]],[["s",""],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["o"],["f",""]]]};
+function removeMapFromNav(mapID) {
+ console.log("remove map:", mapID, mapsInNav.indexOf(mapID));
+ $("#thumb_"+mapID).hide('fast', function(){ $("#thumb_"+mapID).remove(); });
+}
var Tile = {"Wall" : "w",
"Empty" : "o",
@@ -200,424 +244,70 @@ var Tile = {"Wall" : "w",
"Unbuildable" : "o",
"SinglePath" : "o"};
-
-function mapThumbnailHTML(map) {
- var r = '<table class="map">';
+function mapThumbnailHTML(map, targetWidth) {
+ var r = '';
+ r += "<div class='mapThumbnail' onclick='displayMapScores("+map.ID+")'>";
+ r += map.name;
+
+ if (!targetWidth) targetWidth = 100;
+ var scale = map.width / targetWidth;
+
+ var width = parseInt(map.width / scale);
+ var height = parseInt(map.height / scale);
+ var tileWidth = parseInt(width / map.width);
+
+ width = tileWidth * map.width;
+
+ var mapgrid = '';
+
+ mapgrid += '<div class="map" style="width:'+width+'px; height:'+height+'px">';
for (var y in map.tiles) {
- r += '<tr>';
for (var x in map.tiles[y]) {
var type = map.tiles[y][x][0];
var value = map.tiles[y][x][1];
if (!value) value = '';
- r += "<td class='"+type+value+"'>";
- r += '</td>';
+
+ mapgrid += "<div style='float:left; width:"+tileWidth+"px; height:"+tileWidth+"px; ' class='mapcell "+type+value+"'>";
+ mapgrid += "</div>";
}
- r += '</tr>';
}
- r += '</table>';
-
- //return r;
+ mapgrid += '</div>';
- //alert(r);
+ r += mapgrid;
+ r += '</div>';
- //$("#tmp").html(r).show('slow');;
- //$("#tmp").html(mapAsHTML(map,100)).show('slow');;
+ return r;
}
-
-
</script>
-
-
<body>
<?php
topbar($Links);
-
-
-
-$todaysScoreMaps = getMapsPlayed($daysAgo);
-
?>
<div class="wrapper">
-<div id='tmp'>
-Work in progress
-</div>
-
-<div id='#displayDate' style='text-align:center;padding-bottom:7px;'>
-<h2 title='Maps that were played during this day'><? echo $dateAsStr; ?></h2>
+<div style='font-size: 105%;text-align:center;padding-bottom:7px;' id='displayDate'>
+Loading...
</div>
<div id="daynav">
-<a href='javascript:getMaplist("prev");' title='Older'>&lt; Previous Day</a>
-<a href='javascript:getMaplist("next");' title='Newer'>Next Day &gt;</a>
-<a href='javascript:getMaplist("yesterday");' title='Now'>Yesterday &gt;&gt;</a>
<div class='mapNavCon'>
- <div class='mapNavLeft mapNavBtn' onclick='$("#mapNavigation").scrollLeft(0)'>&lt;</div>
- <div class='mapNavRight mapNavBtn' onclick='$("#mapNavigation").scrollLeft(1000)'>&gt;</div>
+ <div class='mapNavLeft mapNavBtn' onclick='javascript:getMapIDs("prev");'>&lt;</div>
+ <div class='mapNavRight mapNavBtn' onclick='javascript:getMapIDs("next");'>&gt;</div>
<div class='mapNavCenter'>
<div id='mapNavigation'>
- <? echo getMapNavigation($todaysScoreMaps); ?>
+ Loading...
</div>
</div>
</div>
<div style='clear:both'></div>
<?
-
-function getMapsPlayed($daysAgo) {
- $sql = "
- SELECT `mapID`, `code`, `mapType`
- FROM `mapOfTheDay`
- INNER JOIN `maps` ON `mapID` = maps.ID
- WHERE DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) =
- mapDate AND
- `mapType` IN (1, 2, 3, 4)
- ";
- $result = mysql_query($sql) or die(mysql_error());
- if (mysql_num_rows($result) == 0)
- return -1;
- global $mapNamesByType;
- $r = array();
- while($data = mysql_fetch_array($result)) {
- $code = $data['code'];
- $mapID = $data['mapID'];
- $mapType = $data['mapType'];
- $map = new map($code);
- if ($map->name == '')
- $map->name = $mapNamesByType[$mapType];
- $r[$mapID] = $map;
-
- }
- return $r;
-}
-
-
-function getMapNavigation(&$maps) {
- foreach ($maps as $mapID => &$map) {
- $r .= "<div class='mapThumbnail' onclick='displayMap($mapID)'>";
- $r .= $map->name;
- $r .= DisplayMapThumbnail($map);
- $r .= "</div>";;
- }
- return $r;
-}
-
-
-
-$time_start = microtime(true);
-
-
-$special = 'Special';
-if ($specialMapName != '')
- $special = $specialMapName;
-
-?>
-</div>
-
- <div style="clear: both"></div>
- <div id=\"yms-$mapType\">
-
- <div id='scoreDisplay' class="col1">
-
- </div>
-
- <div id='mapDisplay' style='display:none' class="col2">
-
- </div>
- </div>
-
-<?
-
-
-//echo $statContent;
-
-
-
-
-?>
-
-<div style="clear: both"></div>
-
-<!--
-<div id="yms-5">
- <div class="col1">
- <? echo $tStats;?>
- </div>
- <div class="col2">
- <? echo $yStats;?>
- </div>
-</div>
-
-<div id="yms-6">
- <div class="col1">
- <? echo $wStats;?>
- </div>
- <div class="col2">
- <? echo $mStats;?>
- </div>
-</div>
--->
-
-<br class="clear">
-</div>
-
-<script>
-
-
-
-//function showStats(type) {
- //super usefulll
- //var anchor = window.location.hash.substring(1);
-
- // for (var i = 1; i <= 4; i++) {
- // var elem = document.getElementById("yms-" + i);
- // if (elem.className.indexOf('hidden-stats') < 0)
- // elem.className += 'hidden-stats';
- // elem = document.getElementById("dl-" + i);
- // elem.className = elem.className.replace('selected', '');
- // }
- // elem = document.getElementById("yms-" + type);
- // elem.className = elem.className.replace('hidden-stats', '');
- // elem = document.getElementById("dl-" + type);
- // if (elem.className.indexOf('selected') < 0)
- // elem.className += 'selected';
-// }
-// showStats(1);
-</script>
-
<script src="sounds/script/soundmanager.js"></script>
<script type="text/javascript">soundManagerInit();</script>
<?php
-
-
-
-
htmlFooter();
-
-//TODO !! DELETE FUNCTIONS WHEN DONE!!
-function mysql_field_array( $query ) {
- $field = mysql_num_fields( $query );
- for ( $i = 0; $i < $field; $i++ ) {
- $names[] = mysql_field_name( $query, $i );
- }
- return $names;
-}
-function displaystats($result, $caption = NULL) {
- //Get names.
- $headers = "<tr class='leaderboardHeaders'>";
- $headers .= "<th class='leaderboardHeadersRank'>Rank</th>";
- $headers .= "<th class='leaderboardHeadersName'>Name</th>";
- $headers .= "<th class='leaderboardHeadersMoves'>Moves</th>";
- $headers .= "<th class='leaderboardHeadersTime'>Time taken</th>";
- $headers .= "</th>";
- //Start table
- //$r .= "<table style='border:1px solid #FFF'>";
- //$r .= "<caption>$caption</caption>";
- //Headers on the top. including Rank.
- //$r .= "<tr>";
- //$r .= $headers;
- //$r .= "</tr>";
-
- $i = 1;
- $championPoints = null;
- while ($row = mysql_fetch_assoc($result)) {
- $rowcontent = '';
- $mapid = $row['mapID'];
- $solution = $row['solution'];
- $wallColor = $row['wallColor'];
- $wallEmblem = $row['wallEmblem'];
- $displayColor = $row['displayColor'];
- $displayName = $row['Name'];
- $userID = $row['userID'];
-
- //Default
- if ($wallColor == '')
- $wallColor = '#666666';
-
- $x = "<tr class='lbrow' onmouseover='changeWallEmblem(\"$wallEmblem\"); changeWallColor(\"$wallColor\"); loadSol(\"$mapid:$solution\");'>\n";
- $x .= "<td>$i</td>";
- $x .= "<td class='leaderboardName'><span title='UserID: $userID'><a href='achievements?id=$userID' style='color:$displayColor'>$displayName</a></span></td>";
- //$x .= "<td style='color:$displayColor';>" . $row['Name'] . '</td>';
- $x .= '<td><a href="javascript:void(0)">' . $row['Moves'] . '</a></td>';
- $x .= '<td>' . $row['Timetaken'] . '</td>';
- $x .= "</tr>";
-
- if ($userID == $_SESSION['userID']) {
- $promotedContent .= $x;
- $championPoints = $row['championPointsWorth'];
- } else {
- $content .= $x;
- }
-
- $i++;
- }
-
- $r = '';
- if($championPoints != null && $championPoints > 0)
- {
- $r .= "<div class='myPoints'>Points earned: <span class='myPointsValue'>$championPoints</span> <img src='../images/championpoints.png' width='16px' height='16px'></img></div>";
- }
- $r .= "<table style='border:1px solid #FFF'>";
- $r .= "<caption>$caption</caption>";
- $r .= $headers;
- $r .= $promotedContent;
- $r .= $content;
-
- $r .= "</table>";
- return $r;
-}
-
-function day_diff($date1, $date2) {
- $current = $date1;
- $datetime2 = date_create($date2);
- $count = 0;
- while(date_create($current) < $datetime2){
- $current = gmdate("Y-m-d", strtotime("+1 day", strtotime($current)));
- $count++;
- }
- return $count;
-}
-
-
-function getStat ($type, $daysAgo = 1) {
- switch ($type) {
-
- //Todays
- case 1:
- $where = "
- DATE_ADD(CURDATE(), INTERVAL -0 DAY) =
- DATE_FORMAT(solutions.dateModified,'%Y-%m-%d')
- AND DATE_ADD(CURDATE(), INTERVAL -0 DAY) =
- DATE_FORMAT(maps.dateCreated,'%Y-%m-%d')
- ";
- $statname = "Today's Best Overall:";
- break;
- //Yesterdays
- case 2:
- $where = "
- DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) =
- DATE_FORMAT(solutions.dateModified,'%Y-%m-%d')
- AND DATE_ADD(CURDATE(), INTERVAL -$daysAgo DAY) =
- DATE_FORMAT(maps.dateCreated,'%Y-%m-%d')
- ";
- $statname = "Yesterday's Best Overall:";
- if ($daysAgo > 1) {
- $statname = "$daysAgo days ago's Best Overall.";
- }
- break;
- case 3:
- $where = "
- YEARweek(solutions.dateModified) = YEARweek(CURRENT_DATE)
- ";
- $statname = "This week, starting Sunday";
- break;
- case 4:
- $where = "
- ( month(solutions.dateModified) = month(CURRENT_DATE) AND year(solutions.dateModified) = year(CURRENT_DATE) )
- ";
- $statname = "This month's Best";
- break;
- }
-
- $sql = "SELECT
- users.displayName as Name,
- SUM(solutions.moves) as Moves,
- timediff(MAX(dateModified), maps.dateCreated) as Timetaken,
- users.wallColor,
- users.wallEmblem,
- users.displayColor,
- users.ID as userID,
- SUM(CASE WHEN solutions.dateModified < CURDATE()
- THEN solutions.championPointsWorth
- ELSE 0 END) AS championPointsWorth
- FROM `maps`
- JOIN `solutions`
- ON maps.ID = solutions.mapID
- JOIN `users`
- ON solutions.userID = users.ID
- WHERE $where
- GROUP BY solutions.userID
- ORDER BY Moves DESC, MAX(dateModified) ASC
- ";
- $result = mysql_query($sql);
- return displayStats($result, $statname);
-}
-
-function displayPastMaze($mapType, $name, $daysAgo = 1) {
- //Ensure no cheating
- if ($daysAgo < 1)
- return;
-
- $pastMap = pastMap($mapType, $daysAgo);
- $mapID = $pastMap;
- $mapcode = getMapCode($mapID);
- $map = GenerateMapByCode($mapcode);
-
- $sql = "SELECT
- maps.ID as mapID,
- solution,
- users.displayName as Name,
- SUM(solutions.moves) as Moves,
- timediff(solutions.dateModified, maps.dateCreated) as Timetaken,
- users.wallColor,
- users.wallEmblem,
- users.displayColor,
- users.ID as userID,
- solutions.championPointsWorth
- FROM `maps`
- JOIN `solutions`
- ON maps.ID = solutions.mapID
- JOIN `users`
- ON solutions.userID = users.ID
- JOIN `mapOfTheDay`
- ON maps.ID = mapOfTheDay.mapID
- WHERE
- maps.ID = '$mapID'
- GROUP BY solutions.userID
- ORDER BY Moves DESC, `dateModified` ASC
- ";
-
- $result = mysql_query($sql) or die(mysql_error());
-
- $statname = "Yesterday's Best $name:";
- if ($daysAgo > 1) {
- $statname = "$daysAgo days ago's Best $name:";
- }
- $stats = displayStats($result, $statname);
-
- //Sucky temporary solution:
- $GLOBALS['specialMapName'] = $map[0][6];
-
- $sql = "SELECT `moves`, `displayName`, `solution`
- FROM `solutions`
- LEFT JOIN `users`
- ON solutions.userID = users.ID
- WHERE `mapID` = '$mapID'
- ORDER BY `moves` DESC, `dateModified` ASC
- LIMIT 1";
- $result = mysql_query($sql) or die(mysql_error());
- if (mysql_num_rows($result) > 0) {
- list($bestMoves, $byName, $solution) = mysql_fetch_row($result);
- }
- $r = '';
-
- $r .= '<div style="clear: both"></div>';
- $r .= "<div id=\"yms-$mapType\">";
- $r .= '<div class="col1">';
- $r .= $stats;
- $r .= '</div>';
-
- $r .= '<div class="col2">';
- $r .= "Best solution for this map: <b>$bestMoves by $byName </b>";
- $r .= DisplayMap($map, $mapID, 'normal', 2);
- $r .= '</div>';
- $r .= '</div>';
- return $r;
-}
-
-
-?>
+?> \ No newline at end of file