Select Git revision
-
Friederike Schwager authoredFriederike Schwager authored
collapse.js 5.23 KiB
// JavaScript Code genommen und angepasst von local/boostnavigation/amd/src
// User-Preferences erstmal entfernt
define(['jquery'], function($) {
"use strict";
var nodesArray = [];
function toggleClickHandler(node, nodename) {
node.click(function(e) {
// Prevent that the browser opens the node's default action link (if existing).
e.preventDefault();
if(nodename == "mycourses") {
// "MyCourses" angeklickt um diesen einzuklappen
if (node.attr('data-collapse') == 0) {
// Alle Semester verstecken
nodesArray.forEach(function(semster){
$('.list-group-item[data-key=' + semster + ']').attr("data-collapse", "1");
$('.list-group-item[data-key=' + semster + ']').attr("data-hidden", "0");
});
// TODO User-Preferences setzen
//M.util.set_user_preference('local_hsh_boostnavigation-collapse_' + nodename + '_node', 1);
// If the parent node is currently collapsed.
} else if (node.attr('data-collapse') == 1) {
// Alle Kurse verstecken
nodesArray.forEach(function(nodekey) {
// Set the hidden attribute to true for all elements which have the nodename as their data-parent-key attribute.
$('.list-group-item[data-parent-key=' + nodekey + ']').attr("data-hidden", "1");
$('.list-group-item[data-parent-key=' + nodekey + ']').attr("data-collapse", "1");
});
// Semester wieder sichtbar machen, Kurse weiterhin verstecken
nodesArray.forEach(function(semster){
$('.list-group-item[data-key=' + semster + ']').attr("data-collapse", "1");
$('.list-group-item[data-key=' + semster + ']').attr("data-hidden", "1");
});
//TODO: User-Preferences einbinden
//M.util.set_user_preference('local_hsh_boostnavigation-collapse_' + nodename + '_node', 0);
}
} else {
// Ein Semester angeklickt um dieses auf oder zu zu klappen
// If the parent node is currently expanded.
if (node.attr('data-collapse') == 0) {
// Set the hidden attribute to true for all elements which have the nodename as their data-parent-key attribute.
$('.list-group-item[data-parent-key=' + nodename + ']').attr("data-hidden", "1");
// Change the collapse attribute of the node itself to true.
node.attr("data-collapse", "1");
// TODO User-Preferences setzen
//M.util.set_user_preference('local_hsh_boostnavigation-collapse_' + nodename + '_node', 1);
// If the parent node is currently collapsed.
} else if (node.attr('data-collapse') == 1) {
// Set the hidden attribute to false for all elements which have the nodename as their data-parent-key attribute.
$('.list-group-item[data-parent-key=' + nodename + ']').attr("data-hidden", "0");
// Change the collapse attribute of the node itself to false.
node.attr("data-collapse", "0");
// TODO User-Preferences setzen
//M.util.set_user_preference('local_hsh_boostnavigation-collapse_' + nodename + '_node', 0);
}
}
});
}
function initToggleNodes(nodename) {
// Sonst wäre das Array mit "" initialisiert -> Fehler
if(nodesArray[0] === "") {
nodesArray = new Array();
}
// Search node to be collapsible.
var node = $('.list-group-item[data-key="' + nodename + '"]');
if(nodename === "mycourses") {
node.attr("data-collapse", "0");
} else {
node.attr("data-collapse", "1");
}
if(nodename !== "" && nodename !== "mycourses") {
node.addClass('list-group-item-action semesternode');
node.attr("data-isexpandable", "1");
var childNode = $('.list-group-item[data-parent-key=' + nodename + ']');
childNode.attr("data-hidden", "1");
childNode.attr("data-collapse", "1");
if(!nodesArray.includes(nodename)) {
nodesArray.push(nodename);
}
}
// Add a click handler to this node.
toggleClickHandler(node, nodename);
}
function openNode(nodename) {
var node = $('.list-group-item[data-key="' + nodename + '"]');
node.attr("data-hidden", "0");
node.attr("data-collapse", "0");
$('.list-group-item[data-parent-key=' + nodename + ']').attr("data-hidden", "0");
$('.list-group-item[data-parent-key=' + nodename + ']').attr("data-collapse", "0");
}
return {
init: function(params) {
for (var i = 0, len = params.length; i < len; i++) {
initToggleNodes(params[i]);
}
},
openSemester: function (nodename) {
openNode(nodename);
}
};
});