Einführung in die Programmierung
+ *
+ *
+ * Übungsblätter
+ * ...
+ *
+ */
+
+ var ASIDENAV_UTIL_NAME = 'asidenav';
+ var ASIDENAV_UTIL_SELECTOR = '[uw-asidenav]';
var FAVORITES_BTN_CLASS = 'navbar__list-item--favorite';
var FAVORITES_BTN_ACTIVE_CLASS = 'navbar__list-item--active';
+ var ASIDENAV_INITIALIZED_CLASS = 'asidenav--initialized';
var ASIDENAV_EXPANDED_CLASS = 'main__aside--expanded';
var ASIDENAV_LIST_ITEM_CLASS = 'asidenav__list-item';
var ASIDENAV_SUBMENU_CLASS = 'asidenav__nested-list-wrapper';
- window.utils.aside = function(asideEl) {
+ var asidenavUtil = function(element) {
- if (!asideEl) {
- throw new Error('asideEl not defined');
+ function init() {
+ if (!element) {
+ throw new Error('Asidenav utility cannot be setup without an element!');
+ }
+
+ if (element.classList.contains(ASIDENAV_INITIALIZED_CLASS)) {
+ return false;
+ }
+
+ initFavoritesButton();
+ initAsidenavSubmenus();
+
+ // mark initialized
+ element.classList.add(ASIDENAV_INITIALIZED_CLASS);
+
+ return {
+ name: ASIDENAV_UTIL_NAME,
+ element: element,
+ destroy: function() {},
+ };
}
function initFavoritesButton() {
var favoritesBtn = document.querySelector('.' + FAVORITES_BTN_CLASS);
favoritesBtn.addEventListener('click', function(event) {
favoritesBtn.classList.toggle(FAVORITES_BTN_ACTIVE_CLASS);
- asideEl.classList.toggle(ASIDENAV_EXPANDED_CLASS);
+ element.classList.toggle(ASIDENAV_EXPANDED_CLASS);
event.preventDefault();
}, true);
}
function initAsidenavSubmenus() {
- var asidenavLinksWithSubmenus = Array.from(asideEl.querySelectorAll('.' + ASIDENAV_LIST_ITEM_CLASS))
+ var asidenavLinksWithSubmenus = Array.from(element.querySelectorAll('.' + ASIDENAV_LIST_ITEM_CLASS))
.map(function(listItem) {
var submenu = listItem.querySelector('.' + ASIDENAV_SUBMENU_CLASS);
return { listItem, submenu };
@@ -53,12 +96,14 @@
};
}
- initFavoritesButton();
- initAsidenavSubmenus();
-
- return {
- scope: asideEl,
- destroy: function() {},
- };
+ return init();
};
+
+ if (UtilRegistry) {
+ UtilRegistry.register({
+ name: ASIDENAV_UTIL_NAME,
+ selector: ASIDENAV_UTIL_SELECTOR,
+ setup: asidenavUtil,
+ });
+ }
})();
diff --git a/templates/widgets/asidenav/asidenav.hamlet b/templates/widgets/asidenav/asidenav.hamlet
index 6bbcb159c..1640e0953 100644
--- a/templates/widgets/asidenav/asidenav.hamlet
+++ b/templates/widgets/asidenav/asidenav.hamlet
@@ -1,5 +1,5 @@
$newline never
-