您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Ein Tool welches das Schreiben von Berichtsheften erleichtert
// ==UserScript== // @name IHKez // @namespace https://github.com/flushedface // @match https://bildung.ihk.de/webcomponent/dibe/AUSZUBILDENDER/berichtsheft/wochenansicht* // @grant none // @version 1.0 // @author flushedface // @description Ein Tool welches das Schreiben von Berichtsheften erleichtert // ==/UserScript== window.DEBUG_LOG = []; console.debug("IHKez") class IHKezBerichtsheft { constructor(ctx,args) { if (ctx.__zone_symbol__xhrURL != "https://digbe.services.ihk.de/digitales-berichtsheft/erstellen-api/v1/berichtswoche") { return; } const berichtsheft = JSON.parse(args[0]); try { switch(true) { case berichtsheft.wochenBasis != "TAG": alert("Wochenberichte werden nicht Unterstützt") return; break; } console.debug(berichtsheft); } catch(e) { console.error(new Error(e)); } this.berichtsheft = berichtsheft; this.tagesBerichte = berichtsheft.tagesBerichte; console.debug(this.berichtsheft,this.tagesBerichte) } copyBerichtsheft(stopAt=8) { for (let i in this.tagesBerichte) { // Überspringe den ersten eintrag i = (i == 0) ? 1 : i; // Wochenende Überspringen if (i >= stopAt) {break;} // Kopiere inhalt const copySrc = this.tagesBerichte[0]; const copyKeys=["anwesenheit", "eintraege", "ort"]; copyKeys.forEach((key) => this.tagesBerichte[i][key] = copySrc[key]); } this.berichtsheft.tagesBerichte = this.tagesBerichte; console.debug(this.berichtsheft.tagesBerichte); } clearBerichtsheft(stopAt=8) { for (let i in this.tagesBerichte) { // Wochenende Überspringen if (i >= stopAt) {break;} // Kopiere inhalt const copyKeys=["anwesenheit", "ort"]; copyKeys.forEach((key) => this.tagesBerichte[i][key] = null); this.tagesBerichte[i]["eintraege"] = []; } this.berichtsheft.tagesBerichte = this.tagesBerichte; console.debug(this.berichtsheft.tagesBerichte); } toString() { return JSON.stringify(this.berichtsheft) } forArgument() { return [JSON.stringify(this.berichtsheft)]; } } var buttons=[ { "name": "Werktage multi-edit", "func": function() { hook = { apply(target,ctx,args) { let berichtsheft = new IHKezBerichtsheft(ctx,args); if(berichtsheft == undefined) { console.debug("Berichtsheft konnte nicht gefunden werden"); return Reflect.apply(...arguments)} alert(`${berichtsheft.tagesBerichte.length} einträge gefunden`) berichtsheft.copyBerichtsheft(5); // Objekt muss wieder in string umgewandelt werden welcher an stelle 0 des arrays ist const newArg = berichtsheft.forArgument(); console.debug(newArg); const returnVal = Reflect.apply(target,ctx,newArg); setTimeout(() => location.reload(),3000); return returnVal; } } XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, hook); this.sendMessage("Bitte auf speichern drücken"); } }, { "name": "Alle Tage Multi-Edit (inkl. Samstag & Sonntag)", "func": function() { hook = { apply(target,ctx,args) { let berichtsheft = new IHKezBerichtsheft(ctx,args); if(berichtsheft == undefined) { console.debug("Berichtsheft konnte nicht gefunden werden"); return Reflect.apply(...arguments)} alert(`${berichtsheft.tagesBerichte.length} einträge gefunden`) berichtsheft.copyBerichtsheft(); // Objekt muss wieder in string umgewandelt werden welcher an stelle 0 des arrays ist const newArg = berichtsheft.forArgument(); console.debug(newArg); const returnVal = Reflect.apply(target,ctx,newArg); setTimeout(() => location.reload(),3000); return returnVal; } } XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, hook); this.sendMessage("Bitte auf speichern drücken und dann die seite neuladen !") } }, { "name": "Woche löschen", "func": function() { hook = { apply(target,ctx,args) { let berichtsheft = new IHKezBerichtsheft(ctx,args); if(berichtsheft == undefined) { console.debug("Berichtsheft konnte nicht gefunden werden"); return Reflect.apply(...arguments)} alert(`${berichtsheft.tagesBerichte.length} einträge gefunden`) berichtsheft.clearBerichtsheft(); // Objekt muss wieder in string umgewandelt werden welcher an stelle 0 des arrays ist const newArg = berichtsheft.forArgument(); console.debug(newArg); const returnVal = Reflect.apply(target,ctx,newArg); setTimeout(() => location.reload(),3000); return returnVal; } } XMLHttpRequest.prototype.send = new Proxy(XMLHttpRequest.prototype.send, hook); this.sendMessage("Bitte auf speichern drücken und dann die seite neuladen !") } }, ] // Array End function simpleUi(...args) { let IHKez = document.getElementById("IHKez"); function createButton(buttonCallback) { console.debug(buttonCallback,'created'); const name = buttonCallback.name; const elementId = `IHKez-${name}`; let button = document.createElement("button"); button.id = elementId; button.innerHTML = `${name}`; button.addEventListener('notify', function (e) { const message = e.detail; const content = button.textContent; setTimeout(function() { button.textContent = content; button.classList.remove('notify'); button.onclick = button.onclick }, 5000); button.classList.add('notify'); button.textContent = message; }); let buttonFunction = function() { button.sendMessage = (message) => { this.dispatchEvent(new CustomEvent('notify', { "detail": message })); } buttonCallback.func.apply(button,...arguments); } button.onclick = buttonFunction; return button; } function createIHKez() { let container = document.createElement("div"); let containerStyle = document.createElement("style"); containerStyle.textContent = ` #IHKez-title { width: 100%; letter-spacing: 4x; text-align: center; pointer-events: none; animation: mymove 5s infinite; } .notify { background-color: #cdef10; border-color: red; } #IHKez-buttons { display: flex; flex-wrap: wrap; position: absolute; width: 100%; } #IHKez-buttons button { flex-grow: 1; text-align: center; } @keyframes mymove { 50% {letter-spacing: 50px;} } #IHKez-logo { width: 100%; height: 100%; position: absolute; pointer-events: none; opacity: 30%; }`; container.style.backgroundColor="white"; container.style.display="block"; container.style.position="fixed"; container.style.width="30%"; container.style.zIndex=100; container.id="IHKez"; let title = document.createElement("h3"); title.textContent = "IHKez"; title.id = "IHKez-title"; let logo = document.createElement("img"); logo.src = "https://i.ibb.co/7YbBh2h/3dgifmaker49719.gif"; logo.id = "IHKez-logo" container.appendChild(containerStyle); container.appendChild(logo); container.appendChild(title); let buttonContainer = document.createElement("div"); buttonContainer.id = "IHKez-buttons" buttons.forEach((func) => { buttonContainer.appendChild( createButton(func) ) }); container.appendChild(buttonContainer); document.body.prepend(container); } if(IHKez == undefined) { createIHKez(); IHKez = document.getElementById("IHKez"); } switch (true) { // Auswahl UI erstellen default: break; } } simpleUi(); document["IHKezHelper"] = { "uniq": () => { test = []; window.DEBUG_LOG.forEach((log) => { (log.ctx.name != undefined &! test.includes(log.ctx.name) ) ? test.push(log.ctx.name) : "" }) return test; } } document["IHKezHelper"] = { "uniq": () => { test = []; window.DEBUG_LOG.forEach((log) => { (log.ctx.name != undefined &! test.includes(log.ctx.name) ) ? test.push(log.ctx.name) : "" }) return test; } }