Created
February 9, 2016 19:16
-
-
Save Moussa/5bbe801737407b7fd2be to your computer and use it in GitHub Desktop.
Zombies, Run! Mission counts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function () { | |
'use strict'; | |
var base_url = 'https://api.zombiesrungame.com/runs/summaries/?page='; | |
var page = 1; | |
var results = []; | |
var alphanumericalSort = function (a, b) { | |
// Taken from https://gist.github.com/devinus/453520#file-gistfile1-js | |
var NUMBER_GROUPS = /(-?\d*\.?\d+)/g; | |
var aa = String(a).split(NUMBER_GROUPS); | |
var bb = String(b).split(NUMBER_GROUPS); | |
var min = Math.min(aa.length, bb.length); | |
for (var i = 0; i < min; i++) { | |
var x = parseFloat(aa[i]) || aa[i].toLowerCase(); | |
var y = parseFloat(bb[i]) || bb[i].toLowerCase(); | |
if (x < y) return -1; | |
else if (x > y) return 1; | |
} | |
return 0; | |
}; | |
var getResults = function (page) { | |
console.log('Fetching page ' + page + '...'); | |
return getJSON(base_url + page, { Authorization: 'JWT ' + auth_token.slice(1, -1) }); | |
}; | |
var parseResults = function (response, deferred) { | |
results = results.concat(response.results); | |
if (response.next) { | |
page++; | |
getResults(page).then(deferred.resolve); | |
} else { | |
deferred.resolve().promise(); | |
} | |
}; | |
var getJSON = function (url, headers) { | |
var deferred = $.Deferred(); | |
$.ajax({ | |
url: url, | |
headers: headers, | |
data: { | |
format: 'json' | |
}, | |
error: function() { | |
deferred.reject({"error": data.statusText}); | |
}, | |
success: function(data) { | |
parseResults(data, deferred); | |
}, | |
type: 'GET' | |
}); | |
return deferred.promise(); | |
}; | |
var processResults = function () { | |
var stats = {}; | |
for (var i = 0; i < results.length; i++) { | |
var missions = results[i]['missions']; | |
for (var j = 0; j < missions.length; j++) { | |
var mission = missions[j]; | |
if (mission['completed']) { | |
var identifier = mission['mission']; | |
var materials = mission['materials']; | |
if (identifier in stats) { | |
stats[identifier] = { count: stats[identifier]['count'] + 1, materials: stats[identifier]['materials'] + materials }; | |
} else { | |
stats[identifier] = { count: 1, materials: materials }; | |
} | |
} | |
} | |
} | |
return stats; | |
}; | |
var printStats = function (stats) { | |
var table = $('#RunSummaries').find('tbody')[0]; | |
$(table).empty(); | |
var sorted_missions = Object.keys(stats).sort(alphanumericalSort); | |
for (var i = 0; i < sorted_missions.length; i++) { | |
var mission = sorted_missions[i]; | |
var mission_stats = stats[mission]; | |
var element = document.createElement('tr'); | |
var td = document.createElement('td'); | |
td.innerHTML = mission; | |
element.appendChild(td); | |
var td2 = document.createElement('td'); | |
td2.innerHTML = mission_stats['count']; | |
element.appendChild(td2); | |
table.appendChild(element); | |
} | |
}; | |
if (document.URL !== 'https://zombiesrungame.com/zombielink/home/') { | |
alert('Please run this script on the Zombies, Run! homepage'); | |
return; | |
} | |
// Main | |
var auth_token = localStorage.getItem('jwt'); | |
var promise = getResults(page); | |
promise.done(function () { | |
var stats = processResults(); | |
printStats(stats); | |
}); | |
})(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
javascript:!function(){"use strict";var e="https://api.zombiesrungame.com/runs/summaries/?page=",t=1,r=[],n=function(e,t){for(var r=/(-?\d*\.?\d+)/g,n=String(e).split(r),o=String(t).split(r),a=Math.min(n.length,o.length),i=0;a>i;i++){var s=parseFloat(n[i])||n[i].toLowerCase(),u=parseFloat(o[i])||o[i].toLowerCase();if(u>s)return-1;if(s>u)return 1}return 0},o=function(t){return console.log("Fetching page "+t+"..."),i(e+t,{Authorization:"JWT "+c.slice(1,-1)})},a=function(e,n){r=r.concat(e.results),e.next?(t++,o(t).then(n.resolve)):n.resolve().promise()},i=function(e,t){var r=$.Deferred();return $.ajax({url:e,headers:t,data:{format:"json"},error:function(){r.reject({error:data.statusText})},success:function(e){a(e,r)},type:"GET"}),r.promise()},s=function(){for(var e={},t=0;t<r.length;t++)for(var n=r[t].missions,o=0;o<n.length;o++){var a=n[o];if(a.completed){var i=a.mission,s=a.materials;i in e?e[i]={count:e[i].count+1,materials:e[i].materials+s}:e[i]={count:1,materials:s}}}return e},u=function(e){var t=$("#RunSummaries").find("tbody")[0];$(t).empty();for(var r=Object.keys(e).sort(n),o=0;o<r.length;o++){var a=r[o],i=e[a],s=document.createElement("tr"),u=document.createElement("td");u.innerHTML=a,s.appendChild(u);var c=document.createElement("td");c.innerHTML=i.count,s.appendChild(c),t.appendChild(s)}};if("https://zombiesrungame.com/zombielink/home/"!==document.URL)return void alert("Please run this script on the Zombies, Run! homepage");var c=localStorage.getItem("jwt"),m=o(t);m.done(function(){var e=s();u(e)})}(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment