mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-17 05:54:19 +01:00
168 lines
4.1 KiB
JavaScript
168 lines
4.1 KiB
JavaScript
function teamid (){
|
|
loc = window.location.pathname
|
|
return loc.substring(loc.lastIndexOf('/')+1, loc.length);
|
|
}
|
|
|
|
function colorhash (x) {
|
|
color = ""
|
|
for (var i = 20; i <= 60; i+=20){
|
|
x += i
|
|
x *= i
|
|
color += x.toString(16)
|
|
};
|
|
return "#" + color.substring(0, 6)
|
|
}
|
|
|
|
function cumulativesum (arr) {
|
|
var result = arr.concat();
|
|
for (var i = 0; i < arr.length; i++){
|
|
result[i] = arr.slice(0, i + 1).reduce(function(p, i){ return p + i; });
|
|
}
|
|
return result
|
|
}
|
|
|
|
function scoregraph () {
|
|
var times = []
|
|
var scores = []
|
|
var teamname = $('#team-id').text()
|
|
$.get('/solves/'+teamid(), function( data ) {
|
|
solves = $.parseJSON(JSON.stringify(data));
|
|
solves = solves['solves']
|
|
|
|
console.log(solves)
|
|
|
|
if (solves.length == 0)
|
|
return
|
|
|
|
for (var i = 0; i < solves.length; i++) {
|
|
times.push(solves[i].time * 1000)
|
|
scores.push(solves[i].value)
|
|
};
|
|
scores = cumulativesum(scores)
|
|
|
|
times.unshift('x1')
|
|
// times.push( Math.round(new Date().getTime()) )
|
|
|
|
scores.unshift('data1')
|
|
// scores.push( scores[scores.length-1] )
|
|
|
|
console.log(scores)
|
|
|
|
var chart = c3.generate({
|
|
bindto: "#score-graph",
|
|
data: {
|
|
xs: {
|
|
"data1": 'x1',
|
|
},
|
|
columns: [
|
|
times,
|
|
scores,
|
|
],
|
|
type: "area-step",
|
|
colors: {
|
|
data1: colorhash(teamid()),
|
|
},
|
|
labels: true,
|
|
names : {
|
|
data1: teamname
|
|
}
|
|
},
|
|
axis : {
|
|
x : {
|
|
tick: {
|
|
format: function (x) {
|
|
return moment(x).local().format('M/D h:mm:ss');
|
|
}
|
|
},
|
|
|
|
},
|
|
y:{
|
|
label: {
|
|
text: 'Score'
|
|
}
|
|
}
|
|
},
|
|
zoom : {
|
|
enabled: true
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function keys_percentage_graph(){
|
|
// Solves and Fails pie chart
|
|
$.get('/fails/'+teamid(), function(data){
|
|
res = $.parseJSON(JSON.stringify(data));
|
|
solves = res['solves']
|
|
fails = res['fails']
|
|
total = solves+fails
|
|
|
|
if (total == 0)
|
|
return
|
|
|
|
var chart = c3.generate({
|
|
bindto: '#keys-pie-graph',
|
|
data: {
|
|
columns: [
|
|
['Solves', solves],
|
|
['Fails', fails],
|
|
],
|
|
type : 'donut'
|
|
},
|
|
color: {
|
|
pattern: ["#00D140", "#CF2600"]
|
|
},
|
|
donut: {
|
|
title: "Solves vs Fails",
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function category_breakdown_graph(){
|
|
$.get('/solves/'+teamid(), function(data){
|
|
solves = $.parseJSON(JSON.stringify(data));
|
|
solves = solves['solves']
|
|
if (solves.length == 0)
|
|
return
|
|
|
|
categories = []
|
|
for (var i = 0; i < solves.length; i++) {
|
|
categories.push(solves[i].category)
|
|
};
|
|
|
|
keys = categories.filter(function(elem, pos) {
|
|
return categories.indexOf(elem) == pos;
|
|
})
|
|
|
|
data = []
|
|
for (var i = 0; i < keys.length; i++) {
|
|
temp = []
|
|
count = 0
|
|
for (var x = 0; x < categories.length; x++) {
|
|
if (categories[x] == keys[i]){
|
|
count++
|
|
}
|
|
};
|
|
temp.push(keys[i])
|
|
temp.push(count)
|
|
data.push(temp)
|
|
};
|
|
|
|
var chart = c3.generate({
|
|
bindto: '#categories-pie-graph',
|
|
data: {
|
|
columns: data,
|
|
type : 'donut',
|
|
labels: true
|
|
},
|
|
donut: {
|
|
title: "Category Breakdown",
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
category_breakdown_graph()
|
|
keys_percentage_graph()
|
|
scoregraph() |