From b7c57a7ebcd735f5c37f574bed62f271fdc4fbf5 Mon Sep 17 00:00:00 2001 From: ulrich <not disclosed> Date: Sat, 30 Dec 2017 08:44:42 +0000 Subject: [PATCH] Selector hinzugenommen --- README.md | 93 +++++++++++++++++++++++++++++++ app-menu.js | 76 ++++++++++--------------- 2 files changed, 123 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md new file mode 100644 index 0000000..1c50fed --- /dev/null +++ b/README.md @@ -0,0 +1,93 @@ +# app-menu + +Ein universelles Menü für Webanwendungen. + +## Beschreibung + +Das app-menu ist eine Sammlung aus JavaScript-Funktionen, die eine Liste von Auswahlpunkten aus einer Beschreibung in der JavaScript Object Notation (JSON) formen. Die Gestaltung des Menüs wird über ein Cascading Stylesheet (CSS) bestimmt. + +## Anwendung + +Das app-menu wird wie folgt in eigene Webanwendungen eingebaut. + +1. Einbinden der Abhängigkeiten (jQuery und Mustache) +2. Einbinden der Stylesheets +3. Weitere Schritte + +Weiterer Text + + + + +## Einbinden von jQuery und Mustache + + + +``` +<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> +<script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/2.3.0/mustache.min.js"></script> +``` +Das obige Beispiel bindet jQuery und Mustache aus dem Content Delivery Network [cdnjs](https://cdnjs.com/) ein. Stattdessen können die beiden JavaScript-Komponenten auch lokal ausgeliefert werden. + +## Einbinden des Stylesheets + + + +``` +<link rel="stylesheet" type="text/css" href="applib/app-menu/nav-toggle.css"> +<link rel="stylesheet" type="text/css" href="applib/app-menu/app-menu.css"> +``` + + +#### Einbinden des Skripts +``` +<script src="applib/app-menu/app-menu.js"></script> +``` + +#### Aufruf des Menüs +``` +app_menu_init("menu/", "hauptmenue.json", "applib/app-menu/app-menu.tpl", ".west"); +``` + +Parameter 1: Name des Unterverzeichnisses mit Menübeschreibungen +Parameter 2: Name der Menübeschreibung, die zuerst angezeigt werden soll +Parameter 3: Unterverzeichnis und Name der Menüvorlage für Mustache +Parameter 4: Name des Selektors, der das Menü aufnehmen soll + +### Menüvorlage + +Im Verzeichnis `applib/app-menu` befindet sich eine Vorlage für ein dynamisches Menü, das ein- und ausgeblendet werden kann und seine Inhalte von Beschreibungen in JSON erhält. Menüs werden dynamisch aus JSON-Strukturen erstellt, die ein Menü beschreiben. In dieser Form sind die Menübeschreibungen gut mit einem Serverdienst zu ersetzen. Eine Beschreibung sieht wie folgt aus + +``` +{ + "menue": { + "menuetitel": "Hauptmenü", + "wurzel": true, + "vorgaenger": { + "vtitel": "", + "vverweis": "" + }, + "inhalt": [ + { + "titel": "H Menüeintrag 1", + "umenue": false, + "funktion": "app_menu_test" + }, + { + "titel": "H Menüeintrag 2", + "umenue": true, + "verweis": "untermenue-1.json" + }, + { + "titel": "H Menüeintrag 3", + "umenue": false, + "funktion": "app_menu_test_2" + } + ] + } +} +``` + +Der Schalter `wurzel` legt fest, ob noch ein übergeordnetes Menü dargestellt wird. Wenn ja (`wurzel=false`) wird in `vorgaenger.vverweis` der Name der Menübeschreibung und in `vorgaenger.vtitel` der Name, unter dem der Eintrag im Menü erscheinen soll angegeben. Ebenso legt der Schalter `umenue` fest, ob ein Untermenue dargestellt wird. Dann muss in `verweis` der Name der Menübeschreibung angegeben sein. + +Im Element `funktion` eines Menüeintrages wird ein Funktionsname notiert. Die so benannte Funktion wird aufgerufen, wenn das Menü gewählt wird. Eine solche Funktion darf keine Parameter erwarten. diff --git a/app-menu.js b/app-menu.js index 14a974e..f0cfad4 100644 --- a/app-menu.js +++ b/app-menu.js @@ -1,42 +1,25 @@ - /* - * die nachfolgenden Funktionen steuern das ein- und + * die nachfolgenden Funktionen steuern das ein- und * ausblenden des menues */ -function app_menu_init(url_prefix, mdesc, mtpl) { +function app_menu_init(url_prefix, mdesc, mtpl, mselector) { + _app_menu_selector = mselector; document.querySelector( "#nav-toggle" ).addEventListener("click", function() { - /* - this.classList.toggle( "active" ); - this.blur(); app_menu_toggle(); - */ - //app_menu_do_toggle(this); - app_menu_toggle(); - }); - document.getElementsByClassName('west')[0].style.flexBasis = "0em"; - $('.ost').hide(); + }); + $(_app_menu_selector).css("flex-basis", "0em"); _app_menu_url_prefix = url_prefix; - app_menu_template_laden(mtpl); - - var menuDiv = $("<div/>"); - $(menuDiv).addClass('app-menu-content'); - $(menuDiv).css('position', "relative"); - $(menuDiv).css('left', '-300px'); - $(menuDiv).css('right', '0px'); - $('.west').append(menuDiv); - - app_menu_laden(mdesc); -} - -function app_menu_template_laden(tpl) { - $.ajax({ - // url: _app_menu_url_prefix + "app-menu.tpl", - url: tpl, - type: "GET", - dataType : "text" - }).done(function( template ) { - _app_menu_template = template; + $.get(mtpl, function(template) { + _app_menu_template = template; Mustache.parse(_app_menu_template); // optional, speeds up future uses + var menuDiv = $("<div/>"); + $(menuDiv).addClass('app-menu-content'); + $(menuDiv).css('position', "relative"); + $(menuDiv).css('left', '-300px'); + $(menuDiv).css('right', '0px'); + $(_app_menu_selector).append(menuDiv); + + app_menu_laden(mdesc); }); } @@ -49,13 +32,13 @@ function app_menu_toggle() { document.querySelector( "#nav-toggle" ).classList.toggle( "active" ); document.querySelector( "#nav-toggle" ).blur(); - var westDiv = document.getElementsByClassName('west')[0]; - if(westDiv.classList.contains('app-menu-open')) { - westDiv.classList.remove('app-menu-open'); - westDiv.style.flexBasis = "0em"; + var westDiv = $(_app_menu_selector); + if($(westDiv).hasClass('app-menu-open')) { + $(westDiv).removeClass('app-menu-open'); + $(westDiv).css("flex-basis", "0em"); } else { - westDiv.classList.add('app-menu-open'); - westDiv.style.flexBasis = "16em"; + $(westDiv).addClass('app-menu-open'); + $(westDiv).css("flex-basis", "16em"); } } @@ -65,6 +48,7 @@ var _app_menu_url_prefix = ""; var _app_menu_template; +var _app_menu_selector; /* * mdesc: der URL einer JSON-Datei mit einer Menuebeschreibung @@ -77,7 +61,7 @@ }).done(function( json ) { app_menu_bauen(json, richtung); }); - + } function app_menu_bauen(menuejs, richtung) { @@ -91,7 +75,7 @@ // Endposition des neuen Menues beim Wechsel herauf var linksEndeNeu = "0px"; var rechtsEndeNeu = "300px"; - + if(richtung === 'herunter') { // Endposition des bestehenden Menues beim Wechsel herunter linksEndeAlt = "-300px"; @@ -103,15 +87,15 @@ linksEndeNeu = "0px"; rechtsEndeNeu = "300px"; } - + var menuDiv = $("<div/>"); $(menuDiv).addClass('app-menu-content'); $(menuDiv).css('position', "relative"); $(menuDiv).css('left', linksAnfangNeu); $(menuDiv).css('right', rechtsAnfangNeu); - $(menuDiv).html(Mustache.render(_app_menu_template, menuejs)); - + $(menuDiv).html(Mustache.render(_app_menu_template, menuejs)); + $('.app-menu-content').delay(100).animate( {left: linksEndeAlt }, 100, @@ -119,9 +103,9 @@ $('.smenu').attr('onclick','').unbind('click'); $('.bitem').attr('onclick','').unbind('click'); $('.mitem').attr('onclick','').unbind('click'); - $('.west').empty(); + $(_app_menu_selector).empty(); - $('.west').append(menuDiv); + $(_app_menu_selector).append(menuDiv); $('.smenu').on('click', app_menu_klick_herunter); $('.bitem').on('click', app_menu_klick_herauf); $('.mitem').on('click', app_menu_ausfuehren); @@ -152,4 +136,4 @@ function app_menu_test_2() { alert("Test 2"); -} \ No newline at end of file +} -- Gitblit v1.9.3