NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Student Checklist
// @namespace http://tampermonkey.net/
// @version 0.9
// @description tweaks the SIDs student checklist page with a larger first row and blank last row
// @author allan.caughey@ocdsb.ca
// @match https://staffapps.ocdsb.ca/sid/ClassCheckList.aspx*
// @grant none
// @require http://code.jquery.com/jquery-3.3.1.min.js
// @license MIT
// ==/UserScript==
(function() {
'use strict';
var $ = window.jQuery;
$(`<style type='text/css'>
#p-date-picker { border: 2px solid #999; border-radius: 20px; box-shadow: 3px 4px #ccc; padding: 10px 26px; width: fit-content; }
.thr th{ text-transform: capitalize; }
#prev-week, #next-week{ display:none;}
.cohort-x{ background: red!important; }
[data-ctw="true"] .cohort-a .cohort-a{ background: #F9B233!important; color:#FFF; }
[data-ctw="true"] .cohort-b .cohort-b{ background: #29D3E3!important; color:#FFF; }
[data-ctw="true"] .cohort-a .cohort-a:after,[data-ctw="true"] .cohort-b .cohort-b:after{ content: "(in-person)"; display: block; padding-top:8px; }
[data-ctw="true"] .cohort-a .cohort-b:after,[data-ctw="true"] .cohort-b .cohort-a:after{ content: "(at-home)"; display: block; padding-top:8px; }
#not-this-week{ background-color:yellow; font-weight: bold; margin-left:20px; padding: 2px 12px;}
[data-ctw="true"] #not-this-week{ display:none; }
[data-week="2020-11-16"][data-timeslot="QA1"] th:nth-child(5):after, [data-week="2020-11-16"][data-timeslot="QA1"] th:nth-child(6):after, [data-week="2020-11-16"][data-timeslot="QA1"] th:nth-child(7):after { display: none; }
[data-week="2020-11-16"][data-timeslot="QA1"] th:nth-child(5), [data-week="2020-11-16"][data-timeslot="QA1"] th:nth-child(6), [data-week="2020-11-16"][data-timeslot="QA1"] th:nth-child(7) { background-color: #ccc!important; color: #ccc!important; }
[data-week="2020-11-16"][data-timeslot="QB1"] th:nth-child(3):after, [data-week="2020-11-16"][data-timeslot="QB1"] th:nth-child(4):after { display: none; }
[data-week="2020-11-16"][data-timeslot="QB1"] th:nth-child(3), [data-week="2020-11-16"][data-timeslot="QB1"] th:nth-child(4) { background-color: #ccc!important; color: #ccc!important; }
td.cohort-x {background: linear-gradient(to top right, white 48%,#333, white 52%)!important;}
.end-of-table td {background: #EEE!important;}
@media print {
#p-date-picker {
display: none;
}
}
</style>`).appendTo("head");
// old: let cohortExceptions=["Adams,Maya", "Wilson,Finn", "Earle,Talia", "Baxter,Sienna"]
// updated for QM1
// let cohortExceptions=[ "Adams,Maya", "Baxter,Sienna", "Earle,Talia", "Martel,Jayden", "McCallum,Rory", "Newell,Trent", "O'Brien,Alice", "Wilson,Finn" ]
//updated for Fall 2021
let cohortExceptions=[ ]
let mondays={
'sep 6' : {s:'x,x,x,1,1'},
'oct 11' : {s:'x,1,1,1,1'},
'nov 8' : {s:'1,1,1,1,x'},
'dec 20' : {s:'x,x,x,x,x'},
'dec 27' : {s:'x,x,x,x,x'},
'feb 14' : {s:'1,1,1,1,x'},
'feb 21' : {s:'x,1,1,1,1'},
'mar 14' : {s:'x,x,x,x,x'},
'apr 11' : {s:'1,1,1,1,x'},
'apr 18' : {s:'x,1,1,1,1'},
'may 23' : {s:'x,1,1,1,1'},
'jun 27' : {s:'1,1,x,x,x'},
}
let timeslot = $('#lblInfo').text().indexOf('QA1')>-1 ? 'QA1' : 'QB1'
function twoD( v ){
return ('0'+Number(v)).slice(-2)
}
function getMonday(d) {
let da=d.split('-')
//console.log('getMonday - da', da)
let td = new Date( da[0], da[1]-1, da[2] );
var day = td.getDay(),
diff = td.getDate() - day + (day == 0 ? 1:1); // adjust when day is sunday
td.setDate(diff)
let nd = td.getFullYear()+'-'+twoD(td.getMonth()*1+1)+'-'+twoD(td.getDate())
//console.log('getMonday', d, td, nd)
$('#date-picker').val( nd )
return new Date( td );
}
$('<p>').attr('id', 'p-date-picker').insertBefore($('#grvClassCheckList'))
$('<button>').attr('id', 'prev-week').attr( 'title', 'Jump two weeks back in the calendar ').text('<').appendTo($('#p-date-picker'))
$('<input>').attr('id', 'date-picker').attr( 'type', 'date').appendTo($('#p-date-picker'))
$('<button>').attr('id', 'next-week').attr( 'title', 'Jump two weeks ahead in the calendar').text('>').appendTo($('#p-date-picker'))
$('<span>').attr('id', 'not-this-week').text('Not this week!').appendTo($('#p-date-picker'))
$('tr').last().clone().addClass('end-of-table').appendTo($('table'))
$('tr:last td').text('').css({"height":"64px","border-top":"3px double"})
$('tr:odd').css({"background-color":"#eeee"})
$('tr:last td').text('').css({"height":"64px","border-top":"3px double","background-color":"#ccc"})
$('tr:first').css({"height":"96px","border-bottom":"3px double"})
$('tr:first-of-type').children().css({"background-color":"#ccc"})
//break into cohorts
let found = false
/*
$( 'tr' ).each( function( a, b ){
if ( found ) return
let cn = $( b ).find( 'td' )[ 1 ]
if ( $( cn ).text().toUpperCase() < 'L' ){
return
}
$( 'tr' ).first().clone().addClass( 'start-of-cohort-b' ).insertBefore( $( 'table' ).find( 'tr' )[ a ])
$( 'tr' ).last().clone().removeClass( 'end-of-table' ).addClass( 'end-of-cohort-a' ).insertBefore( $( 'table').find( 'tr' )[ a ] )
found = true
})
*/
let thcn = $( 'th:contains("Name")' )
thcn.parents( 'tr' ).addClass( 'thr' )
//$( '.thr' ).first().addClass( 'cohort-a' )
//$( '.start-of-cohort-b' ).last().addClass( 'cohort-b' )
//thcn.first().text( 'Cohort A' ).addClass( 'thr' )
//thcn.last().text( 'Cohort B' ).addClass( 'thr' )
$('tr').each(function(a,b){
if( $(b).hasClass('thr') ){
//console.log( 'skip thr' )
return
}
let cn = $( b ).find( 'td' )[ 1 ], sn = $( cn ).text()
//console.log( 'sn', sn )
if( sn.toUpperCase() < 'L' ){
// $(b).addClass('cohort-a')
}
else{
// $(b).addClass('cohort-b')
}
if( cohortExceptions.includes( sn ) ){
console.log( 'exception', sn )
if( sn.toUpperCase() < 'L' ){
$(b).addClass('cohort-a')
//console.log('Append ' + sn + ' to Cohort B')
$(b).detach().removeClass('cohort-b').addClass('cohort-a').insertAfter($('.start-of-cohort-b'))
}
else{
//console.log('Append ' + sn + ' to Cohort A')
$(b).detach().removeClass('cohort-a').addClass('cohort-b').insertBefore($('.end-of-cohort-a'))
}
}
})
let dow=[ 'Sun' , 'Mon' , 'Tues' , 'Wed' , 'Thu' , 'Fri' , 'Sat' ]
let moy=[ 'jan' , 'feb' , 'mar' , 'apr' , 'may' , 'jun' , 'jul', 'aug', 'sep', 'oct', 'nov', 'dec' ]
$('#date-picker').change(function() {
$('th').removeClass('cohort-a cohort-b')
$('.cohort-x').removeClass('cohort-x')
$('#prev-week, #next-week').fadeIn('slow')
let cd=$('#date-picker').val()
let mocw = getMonday( cd )
$('#grvClassCheckList').attr('data-week', cd )
let dn=mocw.getDate(), mn=mocw.getMonth()
let period = (!!mondays[ moy[ mn ] + ' ' + dn ] ? mondays[ moy[ mn ] + ' ' + dn ].p : '')
let classes = (!!mondays[ moy[ mn ] + ' ' + dn ] ? mondays[ moy[ mn ] + ' ' + dn ].s : '').split(',')
$('#grvClassCheckList').attr('data-timeslot', timeslot )
$('body').attr('data-ctw', period == timeslot || cd == '2020-11-16' )
let chrc = $('#grvClassCheckList th')
//console.log( 'chrc', chrc )
for( let x=0; x<5; x++ ){
let dn=mocw.getDate(), mn=mocw.getMonth()
$( chrc[ x+2 ] ).html( dow[ x+1 ] + '<br/>' + moy[ mn ] + ' ' + dn ).addClass('cohort-'+classes[ x ] )
$( chrc[ x+9 ] ).html( dow[ x+1 ] + '<br/>' + moy[ mn ] + ' ' + dn ).addClass('cohort-'+classes[ x ] )
mocw.setDate( mocw.getDate() + 1 )
}
for(let n=2;n<7;n++){
$('tr td:nth-child('+(n+1)+')').addClass($($('.thr th')[n]).attr('class'))
}
} )
$('#next-week').click(function() {
let da=$( '#date-picker' ).val().split( '-' )
let nv = new Date( da[0], da[1]-1, da[2]*1 + 7 )
let nd = nv.getFullYear() + '-' + twoD( nv.getMonth()+1 ) + '-' + twoD( nv.getDate() )
$('#date-picker').val( nd ).change()
return false
})
$('#prev-week').click(function() {
let da=$('#date-picker').val().split( '-' )
let nv = new Date( da[0], da[1]-1, da[2]*1 - 7 )
let nd = nv.getFullYear() + '-' + twoD( nv.getMonth()+1 ) + '-' + twoD( nv.getDate() )
$('#date-picker').val( nd ).change()
return false
})
})();