MediaWiki: Group-personal.js: Unterschied zwischen den Versionen
Aus lernlog Hilfesystem
K (1 Version importiert) |
(kein Unterschied)
|
Aktuelle Version vom 12. März 2025, 09:15 Uhr
/*
Wenn die Seite wie pageNameToManipulate heißt
(Suche danach in "firstHeading" Element.)
dann sollten die Elemente der Form wieder sichtbar werden.
Sehe /wiki/index.php/MediaWiki:Group-mitarbeiter.js dazu.
*/
/*
See MediaWiki:Common.js for this:
const foreignPageMessage = "<p>Dieses Bereich ist nicht für Sie bestimmt!</p>";
const pageNameToManipulate = "Bearbeite Onboarding Formular: ";
const catNameToManipulate = "Mitarbeiter Onboarding";
var loggedUser = ...
/**/
const cooldown = 500;
var tasks, tasksPlaned;
var xhr = new XMLHttpRequest();
function procedureChanged() {
const form = document.getElementById("Form_0");
if (form) {
var items = form.getElementsByClassName("multipleTemplateInstance");
tasksPlaned = new Array();
for (i=0; i<items.length; i++) {
var item = items[i];
var select = item.getElementsByTagName("select")[0];
var name = select.options[select.selectedIndex].text;
if (name != "") {
// Frage die Prozedur-Seiten ab welche Aufgaben sind dort aufgelistet.
// https://aptest.betterknow.de/wiki/index.php/
xhr.open('GET', '/wiki/index.php/' + name, false );
xhr.send(null);
var response = xhr.responseText;
var doc = document.implementation.createHTMLDocument('');
doc.open();
doc.write(response);
doc.close;
var content = doc.getElementById("mw-content-text");
var paragraphs = content.getElementsByTagName("p");
for (j=0; j<paragraphs.length; j++) {
var link = paragraphs[j].getElementsByTagName("a")[0];
if (link && !tasksPlaned.includes(link.innerHTML)) {
tasksPlaned.push(link.innerHTML);
}
}
}
}
tasksPlaned.sort();
tasks = getTasks();
tAdd = getTasksAdd(tasks, tasksPlaned);
tDelete = getTasksDelete(tasks, tasksPlaned);
//for (i=0; i < tasksPlaned.length; i++) console.log("=" + tasksPlaned[i] + "=");
//for (i=0; i < tasks.length; i++) console.log("<" + tasks[i]["name"] + " - " + tasks[i]["checkbox"].checked + ">");
//for (i=0; i < tDelete.length; i++) console.log(">" + tDelete[i]["name"] + " - " + tDelete[i]["checkbox"].checked + "<");
//deleteTasks(tDelete);
//addTasks(tAdd);
setTimeout(deleteTasks, cooldown, tDelete);
setTimeout(addTasks, cooldown, tAdd);
setTimeout(setEmptyTasks, cooldown, tAdd);
}
}
function addTasks(tAdd) {
var adder = document.getElementById("Form_1_Adder_0");
console.log("\ntasks to add");
for (i=0; i<tAdd.length; i++) {
console.log(">" + tAdd[i] + "<");
adder.click();
}
}
function deleteTasks(tDelete) {
console.log("\ntasks to delete");
for (i=tDelete.length-1; i>-1; i--) {
console.log("<" + tDelete[i]["name"] + " - " + tDelete[i]["checkbox"].checked + ">");
tDelete[i]["removeButton"].click();
}
}
function procedureAdded() {
setTimeout(giveNames, cooldown);
}
function procedureRemoved() {
console.log(this.id + " was clicked");
setTimeout(procedureChanged, cooldown);
}
function setEmptyTasks(tAdd) {
for (i=0; i<tAdd.length; i++) {
console.log(">" + tAdd[i] + "<");
}
const form = document.getElementById("Form_1");
if (form) {
const items = form.getElementsByClassName("multipleTemplateInstance");
for (i=0; i<items.length; i++) {
var item = items[i];
var select = item.getElementsByTagName("select")[0];
var name = select.options[select.selectedIndex].text;
if (name == "") {
select.value = tAdd.shift();
}
}
}
}
function getTasks() {
const form = document.getElementById("Form_1");
var tasks = new Array();
if (form) {
const items = form.getElementsByClassName("multipleTemplateInstance");
for (i=0; i<items.length; i++) {
var item = items[i];
var select = item.getElementsByTagName("select")[0];
var name = select.options[select.selectedIndex].text;
var checkbox = item.getElementsByClassName("oo-ui-inputWidget-input")[0];
var textarea = item.getElementsByTagName("textarea")[0];
var removeButton = item.getElementsByClassName("removeButton")[0];
var task = new Array();
task["name"] = name;
task["select"] = select;
task["checkbox"] = checkbox;
task["textarea"] = textarea;
task["removeButton"] = removeButton;
tasks.push(task);
}
//Onboarding 2 Aufgaben Zuweisung Vorlage[num][Onboarding_Aufgabe]
//Onboarding 2 Aufgaben Zuweisung Vorlage[num][Onboarding_Aufgabe_Erledigt][value]
//Onboarding 2 Aufgaben Zuweisung Vorlage[num][Onboarding_Aufgabe_Beschreibung]
}
return tasks;
}
function getTasksAdd(tasks, tasksPlaned) {
var lTasksPlaned = [].concat(tasksPlaned);
for (i=0; i < tasks.length; i++) {
if (lTasksPlaned.includes(tasks[i]["name"])) {
lTasksPlaned.splice(lTasksPlaned.indexOf(tasks[i]["name"]), 1);
}
}
return lTasksPlaned;
}
function getTasksDelete(tasksUndone, tasksPlaned) {
var lTasksPlaned = [].concat(tasksPlaned);
var lTasks = [].concat(tasks);
var lTasksNames = new Array();
var lTasksDelete = new Array();
for (i=0; i < lTasks.length; i++) {
lTasksNames.push(lTasks[i]["name"]);
}
for (i=0; i < lTasksNames.length; i++) {
if (!lTasksPlaned.includes(lTasksNames[i]) && !lTasks[i]["checkbox"].checked) {
lTasksDelete.push( lTasks[i] );
}
}
return lTasksDelete;
}
function giveNames() {
const embededForms = document.getElementsByClassName("multipleTemplateWrapper");
if (embededForms.length > 0) {
for (i = 0; i < embededForms.length; i++) {
embededForms[i].id = "Form_" + i
var embededLists = embededForms[i].getElementsByClassName("multipleTemplateList");
if (embededLists.length > 0) {
for (j = 0; j < embededLists.length; j++) {
if (!embededLists[j].id) {
embededLists[j].id = embededForms[i].id + "_List_" + j;
}
}
}
var embededInstances = embededForms[i].getElementsByClassName("multipleTemplateInstance");
if (embededInstances.length > 0) {
for (j = 0; j < embededInstances.length; j++) {
// wenn noch keinen id hat (neu)
if (!embededInstances[j].id) {
// event handlers für dropdowns hinzufügen
var selectElements = embededInstances[j].getElementsByTagName("select");
for (k = 0; k < selectElements.length; k++) {
if (embededForms[i].id == "Form_0") {
selectElements[k].addEventListener('change', procedureChanged);
console.log(selectElements[k].id + " listener added");
}
}
}
embededInstances[j].id = embededForms[i].id + "_Instance_" + j;
}
}
// eventHandler für "Weitere Hinzufügen" Button (multipleTemplateAdder)
var adderElements = embededForms[i].getElementsByClassName("multipleTemplateAdder");
for (j = 0; j < adderElements.length; j++) {
if (!adderElements[j].id) {
adderElements[j].addEventListener('click', procedureAdded);
}
adderElements[j].id = embededForms[i].id + "_Adder_" + j;
}
// (removeButton)
var removeElements = embededForms[i].getElementsByClassName("removeButton");
for (j = 0; j < removeElements.length; j++) {
if (!removeElements[j].id) {
// if (embededForms[i].id == "Form_0") {
removeElements[j].addEventListener('click', procedureRemoved);
}
removeElements[j].id = embededForms[i].id + "_Remover_" + j;
}
}
}
}
/* ================================================================================== */
function modifyItems(className) {
const elements = document.getElementsByClassName(className);
if (elements.length > 0) {
for (i = 0; i < elements.length; i++) {
elements[i].style.display = '';
}
}
}
function disableCheckboxes() {
const form = document.getElementById("Form_1");
if (form) {
//var checkboxes = form.getElementsByClassName("oo-ui-inputWidget-input");
var checkboxes = form.querySelectorAll('input[type=checkbox]');
for (i=0; i<checkboxes.length; i++) {
checkboxes[i].addEventListener('change', restoreCheckboxState);
}
}
}
function restoreCheckboxState() {
this.checked = !this.checked;
}
/*
function disableCheckboxes_v1() {
const form = document.getElementById("Form_1");
if (form) {
//var checkboxes = form.getElementsByClassName("oo-ui-inputWidget-input");
var checkboxes = form.querySelectorAll('input[type=checkbox]');
for (i=0; i<checkboxes.length; i++) {
checkboxes[i].disabled = true;
}
}
}
*/
/* ================================================================================== */
$(function () {
// Wenn die Seite wie pageNameToManipulate heißt
// (Suche danach in "firstHeading" Element.)
// dann sollten die Elemente versteckt werden.
giveNames();
if (document.getElementById("firstHeading").innerHTML.search(pageNameToManipulate) > -1 ) {
modifyItems("addAboveButton");
modifyItems("removeButton");
modifyItems("multipleTemplateAdder");
disableCheckboxes();
}
}());