diff --git a/web/eccs.js b/web/eccs.js index c3a79c49c0b2ac1432acf3bab277cd72478a4836..ca30a8cf7c45544ded022b1f0430abfcf2f4b8c3 100644 --- a/web/eccs.js +++ b/web/eccs.js @@ -2,143 +2,146 @@ var table; var url = "/eccs/api/eccsresults?eccsdt=1"; var infoCircle = '<a href="https://wiki.geant.org/display/eduGAIN/eduGAIN+Connectivity+Check+2#eduGAINConnectivityCheck2-Statusesandresults"><i class="fas fa-info-circle"></i></a>'; +var dateFrom; +var dateTo; /* * Secure Hash Algorithm (SHA1) * https://www.webtoolkit.info/javascript_sha1.html -*/ + */ function SHA1(msg) { - function rotate_left(n,s) { - var t4 = ( n<<s ) | (n>>>(32-s)); - return t4; - }; - function lsb_hex(val) { - var str=''; - var i; - var vh; - var vl; - for( i=0; i<=6; i+=2 ) { - vh = (val>>>(i*4+4))&0x0f; - vl = (val>>>(i*4))&0x0f; - str += vh.toString(16) + vl.toString(16); - } - return str; - }; - function cvt_hex(val) { - var str=''; - var i; - var v; - for( i=7; i>=0; i-- ) { - v = (val>>>(i*4))&0x0f; - str += v.toString(16); - } - return str; - }; - function Utf8Encode(string) { - string = string.replace(/\r\n/g,'\n'); - var utftext = ''; - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } - else if((c > 127) && (c < 2048)) { - utftext += String.fromCharCode((c >> 6) | 192); - utftext += String.fromCharCode((c & 63) | 128); - } - else { - utftext += String.fromCharCode((c >> 12) | 224); - utftext += String.fromCharCode(((c >> 6) & 63) | 128); - utftext += String.fromCharCode((c & 63) | 128); - } - } - return utftext; - }; - var blockstart; - var i, j; - var W = new Array(80); - var H0 = 0x67452301; - var H1 = 0xEFCDAB89; - var H2 = 0x98BADCFE; - var H3 = 0x10325476; - var H4 = 0xC3D2E1F0; - var A, B, C, D, E; - var temp; - msg = Utf8Encode(msg); - var msg_len = msg.length; - var word_array = new Array(); - for( i=0; i<msg_len-3; i+=4 ) { - j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 | - msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3); - word_array.push( j ); - } - switch( msg_len % 4 ) { - case 0: - i = 0x080000000; - break; - case 1: - i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000; - break; - case 2: - i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000; - break; - case 3: - i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8 | 0x80; - break; - } - word_array.push( i ); - while( (word_array.length % 16) != 14 ) word_array.push( 0 ); - word_array.push( msg_len>>>29 ); - word_array.push( (msg_len<<3)&0x0ffffffff ); - for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) { - for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i]; - for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1); - A = H0; - B = H1; - C = H2; - D = H3; - E = H4; - for( i= 0; i<=19; i++ ) { - temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; - E = D; - D = C; - C = rotate_left(B,30); - B = A; - A = temp; - } - for( i=20; i<=39; i++ ) { - temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; - E = D; - D = C; - C = rotate_left(B,30); - B = A; - A = temp; - } - for( i=40; i<=59; i++ ) { - temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; - E = D; - D = C; - C = rotate_left(B,30); - B = A; - A = temp; - } - for( i=60; i<=79; i++ ) { - temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; - E = D; - D = C; - C = rotate_left(B,30); - B = A; - A = temp; - } - H0 = (H0 + A) & 0x0ffffffff; - H1 = (H1 + B) & 0x0ffffffff; - H2 = (H2 + C) & 0x0ffffffff; - H3 = (H3 + D) & 0x0ffffffff; - H4 = (H4 + E) & 0x0ffffffff; - } - var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4); + function rotate_left(n, s) { + var t4 = (n << s) | (n >>> (32 - s)); + return t4; + }; - return temp.toLowerCase(); + function lsb_hex(val) { + var str = ''; + var i; + var vh; + var vl; + for (i = 0; i <= 6; i += 2) { + vh = (val >>> (i * 4 + 4)) & 0x0f; + vl = (val >>> (i * 4)) & 0x0f; + str += vh.toString(16) + vl.toString(16); + } + return str; + }; + + function cvt_hex(val) { + var str = ''; + var i; + var v; + for (i = 7; i >= 0; i--) { + v = (val >>> (i * 4)) & 0x0f; + str += v.toString(16); + } + return str; + }; + + function Utf8Encode(string) { + string = string.replace(/\r\n/g, '\n'); + var utftext = ''; + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + if (c < 128) { + utftext += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + } + return utftext; + }; + var blockstart; + var i, j; + var W = new Array(80); + var H0 = 0x67452301; + var H1 = 0xEFCDAB89; + var H2 = 0x98BADCFE; + var H3 = 0x10325476; + var H4 = 0xC3D2E1F0; + var A, B, C, D, E; + var temp; + msg = Utf8Encode(msg); + var msg_len = msg.length; + var word_array = new Array(); + for (i = 0; i < msg_len - 3; i += 4) { + j = msg.charCodeAt(i) << 24 | msg.charCodeAt(i + 1) << 16 | + msg.charCodeAt(i + 2) << 8 | msg.charCodeAt(i + 3); + word_array.push(j); + } + switch (msg_len % 4) { + case 0: + i = 0x080000000; + break; + case 1: + i = msg.charCodeAt(msg_len - 1) << 24 | 0x0800000; + break; + case 2: + i = msg.charCodeAt(msg_len - 2) << 24 | msg.charCodeAt(msg_len - 1) << 16 | 0x08000; + break; + case 3: + i = msg.charCodeAt(msg_len - 3) << 24 | msg.charCodeAt(msg_len - 2) << 16 | msg.charCodeAt(msg_len - 1) << 8 | 0x80; + break; + } + word_array.push(i); + while ((word_array.length % 16) != 14) word_array.push(0); + word_array.push(msg_len >>> 29); + word_array.push((msg_len << 3) & 0x0ffffffff); + for (blockstart = 0; blockstart < word_array.length; blockstart += 16) { + for (i = 0; i < 16; i++) W[i] = word_array[blockstart + i]; + for (i = 16; i <= 79; i++) W[i] = rotate_left(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + A = H0; + B = H1; + C = H2; + D = H3; + E = H4; + for (i = 0; i <= 19; i++) { + temp = (rotate_left(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff; + E = D; + D = C; + C = rotate_left(B, 30); + B = A; + A = temp; + } + for (i = 20; i <= 39; i++) { + temp = (rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff; + E = D; + D = C; + C = rotate_left(B, 30); + B = A; + A = temp; + } + for (i = 40; i <= 59; i++) { + temp = (rotate_left(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff; + E = D; + D = C; + C = rotate_left(B, 30); + B = A; + A = temp; + } + for (i = 60; i <= 79; i++) { + temp = (rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff; + E = D; + D = C; + C = rotate_left(B, 30); + B = A; + A = temp; + } + H0 = (H0 + A) & 0x0ffffffff; + H1 = (H1 + B) & 0x0ffffffff; + H2 = (H2 + C) & 0x0ffffffff; + H3 = (H3 + D) & 0x0ffffffff; + H4 = (H4 + E) & 0x0ffffffff; + } + var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4); + + return temp.toLowerCase(); } @@ -149,214 +152,233 @@ function SHA1(msg) { // status (the ECCS IdP Status) // check_result (the ECCS check result) if (date) { - url = url.concat("&date=" + date); + url = url.concat("&date=" + date); } if (reg_auth) { - url = url.concat("®_auth=" + reg_auth); + url = url.concat("®_auth=" + reg_auth); } if (idp) { - url = url.concat("&idp=" + idp); + url = url.concat("&idp=" + idp); } if (status) { - url = url.concat("&status=" + status); + url = url.concat("&status=" + status); } if (check_result) { - url = url.concat("&check_result=" + check_result); + url = url.concat("&check_result=" + check_result); } function getPastResults() { - var checkDate = $.datepicker.formatDate("yy-mm-dd", $('#datepicker').datepicker().datepicker('getDate')); - - url = "/eccs/api/eccsresults?eccsdt=1&date=" + checkDate; - $("#datepicker").datepicker("setDate",checkDate); - table.ajax.url( url ).load(); + let dateFrom = $("#datepicker").data('daterangepicker').startDate.format('YYYY-MM-DD'); + let dateTo = $("#datepicker").data('daterangepicker').endDate.format('YYYY-MM-DD'); + let getUrl = window.location; + let baseUrl = getUrl.protocol + "//" + getUrl.host + "/"; + table.clear().draw(); - var getUrl = window.location; - var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1]; + // solution used to load each selected day separately + let iterator = moment(dateFrom); + let dataSourceIterator = baseUrl + "/eccs/api/eccsresults?eccsdt=1&date="; + while (iterator.isSameOrBefore(moment(dateTo), 'day')) { + //$.get(dataSourceIterator + iterator.format('YYYY-MM-DD'), // <<< PROD + $.get('http://localhost/eccs/text_' + iterator.format('YYYY-MM-DD') + '.json', /// <<< TEST + function(data) { + table.rows.add(data).draw(); + }); + iterator.add(1, 'days'); + } - document.location.href = baseUrl + "?date=" + checkDate; + // solution used to load entire data set at once + //let dataSource = baseUrl + "/eccs/api/eccsresults?eccsdt=1&dateFrom=" + dateFrom + "&dateTo=" + dateTo; + //table.ajax.url(dataSource).load(); } + // use URL constructor and return hostname function getHostname(url) { - if (url == ""){ - return null - } - const urlNew = new URL(url); - if (urlNew.hostname){ - return urlNew.hostname; - } - else { - return url.replace(/.+:/g, ''); - } + if (url == "") { + return null + } + const urlNew = new URL(url); + if (urlNew.hostname) { + return urlNew.hostname; + } else { + return url.replace(/.+:/g, ''); + } } -function getCheckResult(checkResult){ - if (checkResult == "OK"){ - return '<div class="tooltip">OK <span class="tooltiptext tooltip-top tooltip-ok">The IdP is consuming correctly the eduGAIN metadata and return a valid login page</span></div> '+infoCircle; - } - else if (checkResult == "Timeout"){ - return '<div class="tooltip">Timeout <span class="tooltiptext tooltip-top tooltip-timeout">The IdP does not load a valid login page within 30 seconds</span></div> '+infoCircle; - } - else if (checkResult == "Invalid-Form"){ - return '<div class="tooltip">Invalid Form <span class="tooltiptext tooltip-top tooltip-invalid-form">The IdP does not load a valid login page</span></div> '+infoCircle; - } - else if (checkResult == "Connection-Error"){ - return '<div class="tooltip">Connection Error <span class="tooltiptext tooltip-top tooltip-invalid-form">Check failed due a connection error</span></div> '+infoCircle; - } - else if (checkResult == "No-eduGAIN-Metadata"){ - return '<div class="tooltip">No-eduGAIN-Metadata <span class="tooltiptext tooltip-top tooltip-no-edugain-metadata">The IdP is not consuming correctly edugGAIN metadata stream</span></div> '+infoCircle - } - else if (checkResult == "SSL-Error"){ - return '<div class="tooltip">SSL-Error <span class="tooltiptext tooltip-top tooltip-ssl-error">The IdP has a problem on its SSL certificate</span></div> '+infoCircle; - } - else if (checkResult == "IdP-Error"){ - return '<div class="tooltip">IdP-Error <span class="tooltiptext tooltip-top tooltip-idp-error">The IdP reported an error</span></div> '+infoCircle - } - else if (checkResult == "DISABLED"){ - return '<div class="tooltip">Disabled <span class="tooltiptext tooltip-top tooltip-disabled">The check has been disabled for the IdP</span></div> '+infoCircle; - } - else{ - return checkResult; - } +function getCheckResult(checkResult) { + if (checkResult == "OK") { + return '<div class="tooltip">OK <span class="tooltiptext tooltip-top tooltip-ok">The IdP is consuming correctly the eduGAIN metadata and return a valid login page</span></div> ' + infoCircle; + } else if (checkResult == "Timeout") { + return '<div class="tooltip">Timeout <span class="tooltiptext tooltip-top tooltip-timeout">The IdP does not load a valid login page within 30 seconds</span></div> ' + infoCircle; + } else if (checkResult == "Invalid-Form") { + return '<div class="tooltip">Invalid Form <span class="tooltiptext tooltip-top tooltip-invalid-form">The IdP does not load a valid login page</span></div> ' + infoCircle; + } else if (checkResult == "Connection-Error") { + return '<div class="tooltip">Connection Error <span class="tooltiptext tooltip-top tooltip-invalid-form">Check failed due a connection error</span></div> ' + infoCircle; + } else if (checkResult == "No-eduGAIN-Metadata") { + return '<div class="tooltip">No-eduGAIN-Metadata <span class="tooltiptext tooltip-top tooltip-no-edugain-metadata">The IdP is not consuming correctly edugGAIN metadata stream</span></div> ' + infoCircle + } else if (checkResult == "SSL-Error") { + return '<div class="tooltip">SSL-Error <span class="tooltiptext tooltip-top tooltip-ssl-error">The IdP has a problem on its SSL certificate</span></div> ' + infoCircle; + } else if (checkResult == "IdP-Error") { + return '<div class="tooltip">IdP-Error <span class="tooltiptext tooltip-top tooltip-idp-error">The IdP reported an error</span></div> ' + infoCircle + } else if (checkResult == "DISABLED") { + return '<div class="tooltip">Disabled <span class="tooltiptext tooltip-top tooltip-disabled">The check has been disabled for the IdP</span></div> ' + infoCircle; + } else { + return checkResult; + } } /* Formatting function for row details - modify as you need */ -function format ( d ) { +function format(d) { // `d` is the original data object for the row - return '<table id="inner-table">'+ - '<tr>'+ - '<td class="strong">IdP DisplayName:</td>'+ - '<td>'+d.displayName+'</td>'+ - '</tr>'+ - '<tr>'+ - '<td class="strong">Technical Contacts:</td>'+ - '<td>'+d.contacts.technical+'</td>'+ - '</tr>'+ - '<tr>'+ - '<td class="strong">Support Contacts:</td>'+ - '<td>'+d.contacts.support+'</td>'+ - '<td class="strong">Check Time</td>'+ - '<td class="strong">Check Result</td>'+ - //'<td class="strong">HTTP Code</td>'+ - '<td class="strong">Page Source</td>'+ - '<td class="strong">Retry Check</td>'+ - '</tr>'+ - '<tr>'+ - '<td class="strong">SP1:</td>'+ - '<td>https://'+getHostname(d.sp1.wayflessUrl)+'</td>'+ - '<td>'+d.sp1.checkTime+'</td>'+ - '<td>'+getCheckResult(d.sp1.checkResult)+'</td>'+ - //'<td>'+d.sp1.httpCode+'</td>'+ - '<td><a href="/eccs/html/'+d.date+'/'+SHA1(d.entityID)+'---'+getHostname(d.sp1.wayflessUrl)+'.html" target="_blank">Click to open</a></td>'+ - '<td><a href="'+d.sp1.wayflessUrl+'" target="_blank">Click to retry</a></td>'+ - '</tr>'+ - '<tr>'+ - '<td class="strong">SP2:</td>'+ - '<td>https://'+getHostname(d.sp2.wayflessUrl)+'</td>'+ - '<td>'+d.sp2.checkTime+'</td>'+ - '<td>'+getCheckResult(d.sp2.checkResult)+'</td>'+ - //'<td>'+d.sp2.httpCode+'</td>'+ - '<td><a href="/eccs/html/'+d.date+'/'+SHA1(d.entityID)+'---'+getHostname(d.sp2.wayflessUrl)+'.html" target="_blank">Click to open</a></td>'+ - '<td><a href="'+d.sp2.wayflessUrl+'" target="_blank">Click to retry</a></td>'+ - '</tr>'+ - '</table>'; + return '<table id="inner-table">' + + '<tr>' + + '<td class="strong">IdP DisplayName:</td>' + + '<td>' + d.displayName + '</td>' + + '</tr>' + + '<tr>' + + '<td class="strong">Technical Contacts:</td>' + + '<td>' + d.contacts.technical + '</td>' + + '</tr>' + + '<tr>' + + '<td class="strong">Support Contacts:</td>' + + '<td>' + d.contacts.support + '</td>' + + '<td class="strong">Check Time</td>' + + '<td class="strong">Check Result</td>' + + //'<td class="strong">HTTP Code</td>'+ + '<td class="strong">Page Source</td>' + + '<td class="strong">Retry Check</td>' + + '</tr>' + + '<tr>' + + '<td class="strong">SP1:</td>' + + '<td>https://' + getHostname(d.sp1.wayflessUrl) + '</td>' + + '<td>' + d.sp1.checkTime + '</td>' + + '<td>' + getCheckResult(d.sp1.checkResult) + '</td>' + + //'<td>'+d.sp1.httpCode+'</td>'+ + '<td><a href="/eccs/html/' + d.date + '/' + SHA1(d.entityID) + '---' + getHostname(d.sp1.wayflessUrl) + '.html" target="_blank">Click to open</a></td>' + + '<td><a href="' + d.sp1.wayflessUrl + '" target="_blank">Click to retry</a></td>' + + '</tr>' + + '<tr>' + + '<td class="strong">SP2:</td>' + + '<td>https://' + getHostname(d.sp2.wayflessUrl) + '</td>' + + '<td>' + d.sp2.checkTime + '</td>' + + '<td>' + getCheckResult(d.sp2.checkResult) + '</td>' + + //'<td>'+d.sp2.httpCode+'</td>'+ + '<td><a href="/eccs/html/' + d.date + '/' + SHA1(d.entityID) + '---' + getHostname(d.sp2.wayflessUrl) + '.html" target="_blank">Click to open</a></td>' + + '<td><a href="' + d.sp2.wayflessUrl + '" target="_blank">Click to retry</a></td>' + + '</tr>' + + '</table>'; } $(document).ready(function() { + + $("#datepicker").daterangepicker({ + opens: 'left', + todayHighlight: 'TRUE', + autoApply: false, + defaultDate: new Date() + }, function(start, end, label) { + dateFrom = start.format('YYYY-MM-DD'); + dateTo = end.format('YYYY-MM-DD'); + }).on('apply.daterangepicker', function(ev, picker) { + getPastResults() + }); + // Setup - add a text input to each footer cell - $('#eccstable thead tr').clone(true).appendTo( '#eccstable thead' ); - $('#eccstable thead tr:not(:eq(1)) th').each( function (i) { - var title = $('#eccstable thead th').eq( $(this).index() ).text(); - if($(this).index() !=0 && $(this).index() !=5) $(this).html( '<input type="text" placeholder="Search '+title+'" style="text-align:center;width: 100%;" />' ); - - $( 'input', this ).on( 'keyup change', function () { - if ( table.column(i).search() !== this.value ) { + $('#eccstable thead tr').clone(true).appendTo('#eccstable thead'); + $('#eccstable thead tr:not(:eq(1)) th').each(function(i) { + var title = $('#eccstable thead th').eq($(this).index()).text(); + if ($(this).index() != 0 && $(this).index() != 5) $(this).html('<input type="text" placeholder="Search ' + title + '" style="text-align:center;width: 100%;" />'); + + $('input', this).on('keyup change', function() { + if (table.column(i).search() !== this.value) { table .column(i) - .search( this.value ) + .search(this.value) .draw(); } - } ); - } ); + }); + }); - table = $('#eccstable').DataTable( { + table = $('#eccstable').DataTable({ "responsive": "true", - "ajax": { - "url": url, - "dataSrc": "" + "ajax": { + "url": url, + "dataSrc": "" }, - "lengthMenu": [[10, 30, 50, 100, -1], [10, 30, 50, 100, "All"]], + "lengthMenu": [ + [10, 30, 50, 100, -1], + [10, 30, 50, 100, "All"] + ], "autoWidth": false, "dom": '<"top"lip>rt<"bottom"><"clear">', - "columns": [ - { - "className": 'details-control', - "orderable": false, - "data": null, - "defaultContent": '' + "columns": [{ + "className": 'details-control', + "orderable": false, + "data": null, + "defaultContent": '' }, - { - "data": "displayName", - "defaultContent": '' + { + "data": "displayName", + "defaultContent": '' }, { "data": "entityID" }, { "data": "registrationAuthority" }, - { - "data": "date", - "width": "180px", - "className": "dt-body-center", - "visible": false + { + "data": "date", + "width": "180px", + "className": "dt-body-center", + "visible": false }, - { - "data": "status", - "className": "dt-body-center", - "visible": false + { + "data": "status", + "className": "dt-body-center", + "visible": false } ], - "rowCallback": function( row, data, index ) { - if (data.status == "ERROR") { - //$('td', row).css('background-color', '#EA4335'); // NEW ECCS - $('td', row).css('background-color', '#EA3D3F'); // OLD ECCS - //$('td', row).css('background-color', '#FF0000'); - //$('td', row).css('background-color', '#F22422'); - } - if (data.status == "DISABLED") { - $('td', row).css('background-color', '#FFFFFF'); - } - if (data.status == "OK") { - //$('td', row).css('background-color', '#34A853'); - //$('td', row).css('background-color', '#00CE00'); // NEW ECCS - $('td', row).css('background-color', '#72F81B'); // OLD ECCS - } + "rowCallback": function(row, data, index) { + if (data.status == "ERROR") { + //$('td', row).css('background-color', '#EA4335'); // NEW ECCS + $('td', row).css('background-color', '#EA3D3F'); // OLD ECCS + //$('td', row).css('background-color', '#FF0000'); + //$('td', row).css('background-color', '#F22422'); + } + if (data.status == "DISABLED") { + $('td', row).css('background-color', '#FFFFFF'); + } + if (data.status == "OK") { + //$('td', row).css('background-color', '#34A853'); + //$('td', row).css('background-color', '#00CE00'); // NEW ECCS + $('td', row).css('background-color', '#72F81B'); // OLD ECCS + } }, - "order": [[1, 'asc']] - } ); - + "order": [ + [1, 'asc'] + ] + }); + // Add event listener for opening and closing details - $('#eccstable tbody').on('click', 'td.details-control', function () { + $('#eccstable tbody').on('click', 'td.details-control', function() { var tr = $(this).closest('tr'); - var row = table.row( tr ); - - if ( row.child.isShown() ) { + var row = table.row(tr); + + if (row.child.isShown()) { // This row is already open - close it row.child.hide(); tr.removeClass('shown'); - } - else { + } else { // Open this row - row.child( format(row.data()) ).show(); + row.child(format(row.data())).show(); tr.addClass('shown'); } - } ); + }); - $('input:checkbox').on('change', function () { - //build a regex filter string with an or(|) condition - var sts = $('input:checkbox[name="status"]:checked').map(function() { - return this.value; - }).get().join('|'); + $('input:checkbox').on('change', function() { + //build a regex filter string with an or(|) condition + var sts = $('input:checkbox[name="status"]:checked').map(function() { + return this.value; + }).get().join('|'); - //filter in column 5, with an regex, no smart filtering, not case sensitive - table.column(5).search(sts, true, false, false).draw(false); + //filter in column 5, with an regex, no smart filtering, not case sensitive + table.column(5).search(sts, true, false, false).draw(false); }); -} ); +}); \ No newline at end of file diff --git a/web/index.php b/web/index.php index a1912cf1b6c30d96d55dc15b272e8faa8346e220..9db88bf9fc0e793f6e8e9918531136473784053e 100644 --- a/web/index.php +++ b/web/index.php @@ -26,19 +26,12 @@ $data['check_result'] = htmlspecialchars($_GET["check_result"]); <meta charset=utf-8 /> <script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js" crossorigin="anonymous"></script> <script type="text/javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script> + <script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script> + <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css"/> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css"/> + <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" /> <link rel="stylesheet" type="text/css" href="eccs.css" /> - <script> - $( function() { - $( "#datepicker" ).datepicker({ - dateFormat: "yy-mm-dd", - minDate: "<?php echo $data['firstDate'] ?>", - maxDate: "<?php echo $data['lastDate'] ?>", - defaultDate: "<?php echo $data['date'] ?>" - }).datepicker("setDate","<?php echo $data['date'] ?>"); - } ); - </script> <title>eduGAIN Connectivity Check Service</title> </head> <body> @@ -56,7 +49,6 @@ $data['check_result'] = htmlspecialchars($_GET["check_result"]); </div> <div class="boxCalendar"> <div id="calendarGo"> - <button id="goButton" onclick="getPastResults()">Go</button> <label id="lbl-datepicker" for="datepicker" class="strong">Select date:</label> <input type="text" id="datepicker" /> </div>