MediaWiki:Group-personal.js

Aus lernlog Hilfesystem
Version vom 12. März 2025, 09:15 Uhr von Bk admin (Diskussion | Beiträge) (1 Version importiert)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/*
  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();
}

}());