// ==UserScript== // @icon https://www38.polyu.edu.hk/eStudent/favicon.ico // @name PolyU - Add/Drop Toolkit // @description Provide useful functions inside add/drop page. DISCLAIMER: All data provided by this script is for reference only. This script do not guarantee the successful of add/drop. You should use this script at your own risk. // @namespace polyu.adddrop.toolkit@marco129 // @include https://www38.polyu.edu.hk/eStudent/secure/my-subject-registration/subject-register-select-subject.jsf // @updateURL https://raw.githubusercontent.com/Marco129/PolyUAddDropToolkit/master/polyu.adddrop.toolkit.meta.js // @downloadURL https://raw.githubusercontent.com/Marco129/PolyUAddDropToolkit/master/polyu.adddrop.toolkit.user.js // @version 1.1 // @grant none // ==/UserScript== 'use strict'; var jq = window.jQuery; var refresh; jq(document).ready(function(){ // Save selected subject info jq('input[name$="AddSubjectButton_"]').click(function(){ sessionStorage['subjectId'] = jq(this).parent().prev().find('select option:first').attr('value'); sessionStorage['subjectCode'] = jq(this).parent().prev().prev().prev().prev().find('span').text(); if(jq(this).attr('name').match(/basicSearch/i)){ sessionStorage['searchType'] = 'basic'; }else if(jq(this).attr('name').match(/advSearch/i)){ sessionStorage['searchType'] = 'adv'; }else if(jq(this).attr('name').match(/retakePass/i)){ sessionStorage['searchType'] = 'retakePass'; } var idSplit = jq(this).attr('id').split(':'); sessionStorage['eleId'] = idSplit[0] + ':' + idSplit[1] + ':' + idSplit[2]; }); // Clear subject info jq('input[name="mainForm:backButton"]').click(function(){ delete sessionStorage['subjectId']; delete sessionStorage['subjectCode']; delete sessionStorage['searchType']; delete sessionStorage['eleId']; }); // Auto refresh vacancies if(jq('table[id$="ComponentTable"]').length === 1 && sessionStorage.length === 4){ jq('table[id$="ComponentTable"]').next().append('
Add/Drop Toolkit: ACTIVE
DISCLAIMER: All data provided by this script is for reference only. This script do not guarantee the successful of add/drop. You should use this script at your own risk.
'); var viewStateId = parseInt(jq('input[name="javax.faces.ViewState"]').val().replace('j_id', '')) - 1; var dataObj = {}; dataObj['javax.faces.ViewState'] = `j_id${viewStateId}`; dataObj['mainForm'] = 'mainForm'; if(sessionStorage['searchType'] === 'basic'){ dataObj['mainForm:basicSearchSubjectCode'] = sessionStorage['subjectCode']; dataObj[`${sessionStorage['eleId']}:basicSearchAddSubjectButton_`] = '+'; dataObj[`${sessionStorage['eleId']}:basicSearchSubjectGroup_`] = sessionStorage['subjectId']; }else if(sessionStorage['searchType'] === 'adv'){ dataObj['mainForm:advSearchCategory'] = ''; dataObj['mainForm:advSearchProgId'] = 0; dataObj['mainForm:advSearchSubjectCode'] = ''; dataObj[`${sessionStorage['eleId']}:advSearchAddSubjectButton_`] = '+'; dataObj[`${sessionStorage['eleId']}:advSearchSubjectGroup_`] = sessionStorage['subjectId']; }else if(sessionStorage['searchType'] === 'retakePass'){ dataObj[`${sessionStorage['eleId']}:retakePassAddSubjectButton_`] = '+'; dataObj[`${sessionStorage['eleId']}:retakePassSubjectGroup_`] = sessionStorage['subjectId']; } refresh = setInterval(function(){ jq.post('https://www38.polyu.edu.hk/eStudent/secure/my-subject-registration/subject-register-select-subject.jsf', dataObj, function(data){ if(data.match(/selectCompVacancies_">(\d+)<\/span>/g)){ var vacancies = data.match(/selectCompVacancies_">(\d+)<\/span>/g); jq('[id$="selectCompVacancies_"]').each(function(i){ jq(this).text(vacancies[i].replace('selectCompVacancies_">', '').replace('', '')); }); var date = new Date(); jq('table[id$="ComponentTable"] .rich-table-subheadercell:eq(8)').html('Vacancies
(' + padNumber(date.getHours(), 2) + ':' + padNumber(date.getMinutes(), 2) + ':' + padNumber(date.getSeconds(), 2)+ ')'); jq('input[name="javax.faces.ViewState"]').val(data.match(/