<!DOCTYPE html>
<html>
<head>
<link data-require="bootstrap@*" data-semver="3.3.2" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" />
<script data-require="bootstrap@*" data-semver="3.3.2" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<script data-require="jquery@*" data-semver="2.1.4" src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-sm-offset-3 col-sm-6 page-header">
<span>
<h1>Leaderboard</h1>
</span>
<span class="button-span pull-right">
<button class="btn btn-default btn-sm btn-custom" id="refresh">Refresh</button>
</span>
</div>
<div class="col-sm-offset-4 col-sm-4">
<ol id="leaderboard"></ol>
</div>
</div>
</div>
</body>
</html>
var $$ = {
storeData: function(array) {
localStorage["karma.data"] = JSON.stringify(array);
},
readData: function() {
this.data = JSON.parse(localStorage["karma.data"]);
},
sortBoard: function(resp) {
console.log(resp);
return resp.sort(function(a, b) { return b.points-a.points });
},
fillLeaderboard: function(board) {
participants = [];
for(var i = 0; i < board.length; i++) {
var $li = $("<li>").addClass("participant"),
$h3 = $("<h3>").addClass("participant-tag");
$li.text( i+1 + ". " + board[i].name + " " + "(" + board[i].points + ")" );
$h3.append($li);
participants.push($h3);
}
$("#leaderboard").append(participants);
},
setBoard: function(resp) {
var sortedLeaders = [];
$("#leaderboard").empty();
sortedLeaders = this.sortBoard(resp);
this.fillLeaderboard(sortedLeaders);
},
asyncFill: function() {
$.ajax("data.json", {}).success(function(response) {
var currentData;
$$.storeData(response.data);
$$.setBoard(response.data);
}).error(function(error, a, b) {
console.log("error loop");
console.log(error, a, b);
});
},
setData: function() {
var currentData;
if ( !localStorage["karma.data"] ) {
this.asyncFill();
} else {
this.readData();
this.setBoard(this.data);
}
},
modifyPointsFor: function(indexInArray, newPoints) {
this.data[indexInArray].points = newPoints;
this.storeData();
},
data: []
};
$(document).ready(function() {
$$.setData();
$("#refresh").on("click", function() {
$$.setData();
$$.modifyPointsFor(0,100);
$$.setData();
})
});
/* Styles go here */
body, html {
background-color: whitesmoke;
}
span {
display: inline-block;
}
.btn-custom {
margin-top: 28px;
}
#leaderboard {
text-align: center;
padding-left: 0;
padding-bottom: 10px;
}
.participant {
list-style: none;
border: 3px solid black;
padding-top: 5px;
padding-bottom: 5px;
background-color: white;
border-radius: 3px;
}
.page-header {
border-bottom: gray solid 1px;
}
.formatter {
margin-left: auto;
margin-right: auto;
}
{ "data": [
{ "name": "Sheryl Boughton", "points": 1 },
{ "name": "Tania Leonian", "points": 1 },
{ "name": "Loren Barrick", "points": 3 },
{ "name": "Stanley Liu", "points": 0 },
{ "name": "Ryan Taylor", "points": 0 },
{ "name": "Son Truong", "points": 1 },
{ "name": "Michael Sankovich", "points": 0 },
{ "name": "Gerald Anekwe", "points": 2 },
{ "name": "Juan Barragan", "points": 1 },
{ "name": "Troy Wood", "points": 0 },
{ "name": "Bonnie So", "points": 0 },
{ "name": "Collin Webb", "points": 2 },
{ "name": "Elijah Olegnowicz", "points": 0 },
{ "name": "Trey Huffine", "points": 1 },
{ "name": "Sean Blattenberger", "points": 0 },
{ "name": "Dan Ward", "points": 1 },
{ "name": "Aliou Maiga", "points": 0 },
{ "name": "Javier Escobar", "points": 2 },
{ "name": "Perrin Clark", "points": 1 }
] }