Skip to content

Instantly share code, notes, and snippets.

@Moussa
Created February 9, 2016 19:16
Show Gist options
  • Save Moussa/5bbe801737407b7fd2be to your computer and use it in GitHub Desktop.
Save Moussa/5bbe801737407b7fd2be to your computer and use it in GitHub Desktop.
Zombies, Run! Mission counts
(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);
});
})();
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