diff --git a/bvletools.user.js b/bvletools.user.js index f8db06bb3fd10ac2e7aa096c053c42667a532e9a..b5eb09fcfe4de70a7d4b48e990f5f2622e77142e 100644 --- a/bvletools.user.js +++ b/bvletools.user.js @@ -35,81 +35,6 @@ </div> */ -// Behaviour page script modifications -if (window.location.href.endsWith("/Behaviour")) { - console.log("[RB9] Override function handlers"); - // copied from https://vle.bromcomcloud.com/lib/pages/js/behaviour.js - var toCamelCase = (str) => { - return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) { - return index == 0 ? word.toLowerCase() : word.toUpperCase(); - }).replace(/\s+/g, ''); - } - - // copied from https://vle.bromcomcloud.com/lib/pages/js/behaviour.js - var loadBehaviourTable = () => { - $(".wait").show(); - $.ajax({ - url: "/Behaviour/StudentBehaviour", - type: "Post", - data: null, - contentType: false, - processData: false, - cache: false, - success: function (data) { - console.log(data); - $(".wait").hide(); - var content = ""; - var headerContent = ""; - if (data.behaviourStudentEventHeader.length > 0) { - headerContent += "<tr>" - for (var i = 0; i < data.behaviourStudentEventHeader.length; i++) { - headerContent += "<th>" + data.behaviourStudentEventHeader[i].displayName.replace(/([A-Z])/g, ' $1').trim() + "</th>" - } - headerContent += "</tr>" - } - if (data.studentEvents.length > 0) { - for (var i = 0; i < data.studentEvents.length; i++) { - content += "<tr>" - for (var j = 0; j < data.behaviourStudentEventHeader.length; j++) { - content += '<td>' + - data.studentEvents[i][toCamelCase(data.behaviourStudentEventHeader[j].fieldName = data.behaviourStudentEventHeader[j].fieldName == "" ? data.behaviourStudentEventHeader[j].displayName : data.behaviourStudentEventHeader[j].fieldName)] + '</td>'; - } - content += "</tr>" - } - } - - $('#Behaviour thead').empty(); - $('#Behaviour tbody').empty(); - $('#Behaviour thead').html(headerContent); - $('#Behaviour tbody').html(content); - - - $.fn.dataTable.moment('DD/MM/YYYY HH:mm'); - $('#Behaviour').DataTable({ - "bPaginate": false, - columnDefs: [{ - target: [0], - type: 'datetime-moment' - }], - "order": [[0,'desc']], - "fnDrawCallback": function () { - $('th').each(function () { - if (($(this).hasClass('sorting')) || ($(this).hasClass('sorting_desc'))) { - $(this).attr({ title: 'Sort Ascending' }); - } else { - $(this).attr({ title: 'Sort Descending' }); - } - }); - } - }); - }, - error: function (msg) { - $(".wait").hide(); - } - }); - } -} - (function() { 'use strict'; function formatDate(date) { @@ -148,10 +73,10 @@ if (window.location.href.endsWith("/Behaviour")) { $("#widgetsDahsboard .grid-stack") .append("\n<div class=\"grid-stack-item ui-draggable ui-resizable ui-resizable-autohide ui-resizable-disabled\" id=\"gs_RB9Buttons\" data-color=\"danger\" data-gs-id=\"gs_RB9Buttons\" data-gs-x=\"8\" data-gs-y=\"2\" data-gs-width=\"4\" data-gs-height=\"2\" data-gs-no-resize=\"yes\">\n <div class=\"panel panel-danger shadow grid-stack-item-content ui-draggable-handle\">\n <div class=\"panel-heading\">\n <table>\n <tbody>\n <tr class=\"tableheader\">\n <td><i style=\"font-size:35px; padding-right:5px; padding-left:5px\" class=\"fa fa fa-wrench \"><\/i><\/td>\n <td>\n <h3 class=\"panel-title\">Toolkit<\/h3><h5 class=\"panelSubTitle\">Utilities Toolkit<\/h5>\n <\/td>\n <\/tr>\n <tr><\/tr>\n <\/tbody>\n <\/table>\n <\/div>\n <div id=\"content_RB9Buttons\" style=\"display:block; width: 100%;padding:0px;\" class=\"ifNoDataInWidget\">\n<\/div>\n <\/div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90; display: none;\"><\/div>\n <\/div>"); - + //$("#content_RB9Buttons").append("<span class=\"txtalignCenter\"><a id=\"rb9ButtonGetTTWeek\">Get Timetable (This Week)<\/a><\/span>"); //$("#content_RB9Buttons").append("<br /><a onclick=\"alert(userGuidingUserId.split('$')[0]);\">Get User ID</a>"); - + appendUtilButton("rb9ButtonGetTTWeek", "Get Timetable (This Week)"); appendUtilButton("rb9ButtonGetTTWeekNext", "Get Timetable (Next Week)"); appendUtilButton("rb9ButtonGetUserId", "Get User ID"); @@ -187,4 +112,131 @@ if (window.location.href.endsWith("/Behaviour")) { }); }); } + // Behaviour page script modifications + if (window.location.href.endsWith("/Behaviour")) { + console.log("[RB9] Behaviour function handlers"); + // copied from https://vle.bromcomcloud.com/lib/pages/js/behaviour.js + var toCamelCase = (str) => { + return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) { + return index == 0 ? word.toLowerCase() : word.toUpperCase(); + }).replace(/\s+/g, ''); + } + + // copied from https://vle.bromcomcloud.com/lib/pages/js/behaviour.js + var loadBehaviourTable = () => { + $(".wait").show(); + $.ajax({ + url: "/Behaviour/StudentBehaviour", + type: "Post", + data: null, + contentType: false, + processData: false, + cache: false, + success: function (data) { + console.log(data); + $(".wait").hide(); + var content = ""; + + var headerContentArr = [].concat(data.behaviourStudentEventHeader); + var lastPositionFromTop = 1; + + if (headerContentArr.length > 0) { + lastPositionFromTop = headerContentArr[headerContentArr - 1].positionFromTop; + } + + // Collect list of all field names + var headerContentArrKeys = []; + for(var j = 0; j < headerContentArr.length; j++) { + var cc = toCamelCase(data.behaviourStudentEventHeader[j].fieldName = data.behaviourStudentEventHeader[j].fieldName == "" ? data.behaviourStudentEventHeader[j].displayName : data.behaviourStudentEventHeader[j].fieldName); + headerContentArrKeys.push(cc); + } + + console.log("[RB9] Existing field names: "); + console.log(headerContentArrKeys); + + + // Append any non-existing contents to header + if (data.studentEvents.length > 0) { + var headerFirstObjectKeys = Object.keys(data.studentEvents[0]); + for(var i = 0; i < headerFirstObjectKeys.length; i++) { + var key = headerFirstObjectKeys[i]; + if(!headerContentArrKeys.includes(key)) { + var data = { + active: "True", + fieldName: key, + displayName: key, + positionFromTop: lastPositionFromTop + }; + + headerContentArrKeys.push(data); + console.log("[RB9] " + JSON.stringify(data)); + + lastPositionFromTop++; + } + } + } + + var headerContent = ""; + headerContent += "<tr>" + for (var i = 0; i < headerContentArr.length; i++) { + headerContent += "<th>" + headerContentArr[i].displayName.replace(/([A-Z])/g, ' $1').trim() + "</th>" + } + headerContent += "</tr>" + + if (data.studentEvents.length > 0) { + for (var i = 0; i < data.studentEvents.length; i++) { + content += "<tr>" + for (var j = 0; j < data.behaviourStudentEventHeader.length; j++) { + content += '<td>' + + data.studentEvents[i][toCamelCase(data.behaviourStudentEventHeader[j].fieldName = data.behaviourStudentEventHeader[j].fieldName == "" ? data.behaviourStudentEventHeader[j].displayName : data.behaviourStudentEventHeader[j].fieldName)] + '</td>'; + } + content += "</tr>" + } + } + + $('#Behaviour thead').empty(); + $('#Behaviour tbody').empty(); + $('#Behaviour thead').html(headerContent); + $('#Behaviour tbody').html(content); + + + $.fn.dataTable.moment('DD/MM/YYYY HH:mm'); + + $('#Behaviour').DataTable({ + "bPaginate": false, + columnDefs: [{ + target: [0], + type: 'datetime-moment' + }], + "order": [[0,'desc']], + "fnDrawCallback": function () { + $('th').each(function () { + if (($(this).hasClass('sorting')) || ($(this).hasClass('sorting_desc'))) { + $(this).attr({ title: 'Sort Ascending' }); + } else { + $(this).attr({ title: 'Sort Descending' }); + } + }); + } + }); + }, + error: function (msg) { + $(".wait").hide(); + } + }); + } + console.log("[RB9] Destroying existing table.") + $("#Behaviour").empty(); + //if($.fn.DataTable.isDataTable("#Behaviour")) { + + //} + console.log("[RB9] Creating new table.") + // <table id="Behaviour" class="DataTable table table-theme dataTable"><thead></thead><tbody></tbody></table> + $("#BehaviourDiv").append( + "<table id=\"Behaviour\" class=\"DataTable table table-theme\">" + + "<thead></thead>" + + "<tbody></tbody>" + + "</table>"); + loadBehaviourTable(); + } })();