From 64e1316b1e773371e7e3a1e21a1a92fd91b6b54d Mon Sep 17 00:00:00 2001 From: Thomas Forgione Date: Tue, 3 Oct 2017 14:17:26 +0200 Subject: [PATCH] Hide empty courses, click to show them Fixes #7 --- .../total/templates/totalTableByCourse.pug | 12 +++- controllers/total/views.js | 2 +- static/js/totalTable.js | 32 +++++++++- utils/calendar.js | 63 +++++++++++-------- 4 files changed, 79 insertions(+), 30 deletions(-) diff --git a/controllers/total/templates/totalTableByCourse.pug b/controllers/total/templates/totalTableByCourse.pug index 303e4fb..df83a9c 100644 --- a/controllers/total/templates/totalTableByCourse.pug +++ b/controllers/total/templates/totalTableByCourse.pug @@ -7,11 +7,20 @@ table.table.table-bordered.table-striped.table-hover th Total TD equivalent tbody each course in courses - tr + tr(class=course.totalTdEquivalent === 0 ? "no-courses" : "") td #{course.name} each type in types td #{course[type]} td #{course.totalTdEquivalent} + tr#extend + td + a(href="#") ... + each type in types + td + a(href="#") ... + td + a(href="#") ... + tr.table-active td strong #{total.name} @@ -25,3 +34,4 @@ p. If you think there is a mistake in this table, feel free to open an issue exaplaining what are the problem so we can fix it. Thanks! + diff --git a/controllers/total/views.js b/controllers/total/views.js index 3c9915f..725482c 100644 --- a/controllers/total/views.js +++ b/controllers/total/views.js @@ -61,7 +61,7 @@ function computeUserTableByCourse(user, callback) { courses.push(item); } - result.courses = courses; + result.courses = courses.sort((a,b) => -(a.totalTdEquivalent - b.totalTdEquivalent)); result.total = total; callback(result); diff --git a/static/js/totalTable.js b/static/js/totalTable.js index 94f42d3..725b6ad 100644 --- a/static/js/totalTable.js +++ b/static/js/totalTable.js @@ -1,6 +1,6 @@ -let loadingDiv = document.getElementById('loading'); -let errorDiv = document.getElementById('error'); -let resultDiv = document.getElementById('result'); +var loadingDiv = document.getElementById('loading'); +var errorDiv = document.getElementById('error'); +var resultDiv = document.getElementById('result'); const timeout = 10000; function getTable() { @@ -27,6 +27,32 @@ function setData(text) { loadingDiv.style.display = "none"; errorDiv.style.display = "none"; resultDiv.innerHTML = text; + + var emptyCourses = document.getElementsByClassName('no-courses'); + if (emptyCourses.length === 0) { + showEmptyCourses(); + } else { + hideEmptyCourses(); + document.getElementById('extend').addEventListener('click', function() { + showEmptyCourses(); + }); + } +} + +function showEmptyCourses() { + var emptyCourses = document.getElementsByClassName('no-courses'); + for (var i = 0; i < emptyCourses.length; i++) { + emptyCourses[i].style.display = ""; + } + document.getElementById('extend').style.display = "none"; +} + +function hideEmptyCourses() { + var emptyCourses = document.getElementsByClassName('no-courses'); + for (var i = 0; i < emptyCourses.length; i++) { + emptyCourses[i].style.display = "none"; + } + document.getElementById('extend').style.display = ""; } function setError() { diff --git a/utils/calendar.js b/utils/calendar.js index bea2e15..80638d5 100644 --- a/utils/calendar.js +++ b/utils/calendar.js @@ -20,22 +20,27 @@ function fromIcal(string) { } cal.Type = { - TD: 1, - TP: 2, - BE: 3, - CTD: 4, - CM: 5, - Other: 6, + CM: 1, + CTD: 2, + TD: 3, + TP: 4, + Other: { + BE: 5, + Examen: 6, + }, + Unkown: 7, } cal.getTypeName = function(type) { switch (type) { - case cal.Type.TD: return "TD"; - case cal.Type.TP: return "TP"; - case cal.Type.CTD: return "CTD"; - case cal.Type.CM: return "CM"; - case cal.Type.BE: return "BE"; - default: return "Other"; + case cal.Type.TD: return "TD"; + case cal.Type.TP: return "TP"; + case cal.Type.CTD: return "CTD"; + case cal.Type.CM: return "CM"; + case cal.Type.Other.BE: + case cal.Type.Other.Examen: + return "Other"; + default: return "Unknown"; } } @@ -43,7 +48,8 @@ cal.getFactor = function(type) { switch (type) { case cal.Type.TD: case cal.Type.TP: - case cal.Type.BE: + case cal.Type.Other.BE: + case cal.Type.Other.Examen: return 1; case cal.Type.CTD: return 1.25; case cal.Type.CM: return 1.5; @@ -51,6 +57,23 @@ cal.getFactor = function(type) { } } +cal.getTypeFromName = function(name) { + + if (name.indexOf("CTD") !== -1) { + return cal.Type.CTD; + } else if (name.indexOf("TP") !== -1) { + return cal.Type.TP; + } else if (name.indexOf("TD") !== -1) { + return cal.Type.TD; + } else if (name.indexOf("CM") !== -1) { + return cal.Type.CM; + } else if (name.indexOf("BE") !== -1) { + return cal.Type.Other.BE; + } else if (name.indexOf("Examen") !== -1) { + return cal.Type.Other.Examen; + } +} + cal.Event = class { constructor(content, firstLineIndex = 0) { @@ -58,24 +81,14 @@ cal.Event = class { this.finishTime = undefined; this.name = undefined; this.location = undefined; - this.type = cal.Type.Other; + this.type = cal.Type.Unkown; if (content !== undefined) this.setFromContent(content, firstLineIndex); } guessTypeFromName() { - if (this.name.indexOf("CTD") !== -1) { - this.type = cal.Type.CTD; - } else if (this.name.indexOf("TP") !== -1) { - this.type = cal.Type.TP; - } else if (this.name.indexOf("TD") !== -1) { - this.type = cal.Type.TD; - } else if (this.name.indexOf("CM") !== -1) { - this.type = cal.Type.CM; - } else if (this.name.indexOf("BE") !== -1) { - this.type = cal.Type.BE; - } + this.type = cal.getTypeFromName(this.name); } getDurationInHours() {