Greasy Fork is available in English.
Show homeroom for unreported absenses
- // ==UserScript==
- // @name Almascript - Unreported Absense Helper
- // @namespace https://greasyfork.org/en/users/8332-sreyemnayr
- // @version 2019.8.27.1
- // @description Show homeroom for unreported absenses
- // @author Ryan Meyers
- // @author You
- // @match https://sges.getalma.com/reports/school-attendance?date=*
- // @grant none
- // ==/UserScript==
- function clearBody(body) {
- body = body.replace(/src=/g,"data-src=");
- body = body.replace(/<link/g, "nolink");
- return body;
- }
- async function fetchAndUpdate(node) {
- const updateNode = node;
- // https://sges.getalma.com/reports/school-attendance?date=2019-08-27&status=255
- // https://sges.getalma.com/student/5d165b14749ea438fa6dc7ff/attendance?week=2019-W35
- // https://sges.getalma.com/home/get-student-schedule?studentId=5d165b14749ea438fa6dc7ff&date=2019-08-28
- var url=node.href.replace(/student\//g, "home/get-student-schedule?studentId=");
- url = url.replace(/\/attendance.*/g,"&"+document.location.search.replace(/\?/g,"&"));
- if (["PS1","PS2","PK3"].indexOf(updateNode.parentElement.parentElement.children[2].innerText.trim()) <= -1) {
- console.log(updateNode.parentElement.parentElement.children[2].innerText);
- fetch(url)
- .then(function(response) {
- return response.json();
- })
- .then(function(body) {
- body = clearBody(body.Message.html);
- var parser = new DOMParser();
- var doc = parser.parseFromString(body, "text/html");
- var n = nodesFromXpath("//div[@class='class-info']", doc);
- //console.log(n[0]);
- //console.log(node.textContent.trim());
- //var newNode = document.createElement("div");
- //newNode.classList.add("pill");
- //newNode.innerHTML =
- // '<i class="far fa-times-circle" style="color:#eb6841;"></i>' +
- // node.textContent.trim();
- updateNode.parentElement.parentElement.children[4].append(n[0]);
- });
- }
- }
- function nodesFromXpath(xpath, doc=document) {
- // var xpath = "//tr[td[text()='No Record']]/td[2]/a";
- var r###lt = document.evaluate(
- xpath,
- doc,
- null,
- XPathR###lt.ANY_TYPE,
- null
- );
- var node,
- nodes = [];
- while ((node = r###lt.iterateNext())) {
- nodes.push(node);
- }
- return nodes;
- }
- async function doIncomplete() {
- for (let node of nodesFromXpath("//tr[td[span[@class='attendance-nottaken']]]/td[2]/a[1]")) {
- await fetchAndUpdate(node);
- //console.log(node);
- }
- }
- (async function() {
- 'use strict';
- var newStyle = document.createElement("style");
- newStyle.innerHTML = `
- .pill {
- background-color: #fff;
- padding: .5em;
- border-radius: 5px;
- display: inline-block;
- cursor: default;
- margin-top: 1em;
- font-size: 8pt;
- }
- .pure-button-pdf { color: #eb6841; background: #fff; padding: 0.1em;}
- .pdfIcon { margin-left:2px; margin-right:2px;}
- .lds-circle { display: inline-block; transform: translateZ(1px); }
- .lds-circle { display: inline-block; animation: lds-circle 2.4s cubic-bezier(0, 0.2, 0.8, 1) infinite; }
- @keyframes lds-circle { 0%, 100% { animation-timing-function: cubic-bezier(0.5, 0, 1, 0.5); } 0% { transform: rotateY(0deg); } 50% { transform: rotateY(1800deg); animation-timing-function: cubic-bezier(0, 0.5, 0.5, 1); } 100% { transform: rotateY(3600deg); } }
- .class-info {
- flex-grow:1;
- padding-right: 0.75em;
- }
- .class-grade {
- flex: 0 0 50px;
- text-align: center;
- font-size: 1.5em;
- color: #888;
- }
- .class-grade small {
- display: block;
- font-size: .6em;
- }
- .class-info > span {
- font-size: .9em;
- color: #888;
- margin-right: 1em;
- white-space: nowrap;
- }
- .class-name {
- margin: 0 0 0.2em 0;
- font-size: 1em;
- }
- `;
- document.getElementsByTagName("head")[0].append(newStyle);
- await doIncomplete();
- // Your code here...
- })();