Ein universelles Menü für Webanwendungen
ulrich
2018-01-05 f649862384174588f1200df67d1ae7a1bef71d64
commit | author | age
b7c57a 1 # app-menu
U 2
c08a3b 3 Ein Menü für Webanwendungen.
b7c57a 4
U 5 ## Beschreibung
6
67e0a8 7 Das app-menu ist eine Liste von Auswahlpunkten für eine Webanwendung. Der Benutzer kann aus ihnen wählen um Funktionen auszuführen oder ein weiteres Menü aufzurufen. Eine große Anzahl von Funktionsaufrufen kann auf hierarchisch verschachtelte Menüs verteilt werden, deren Beschreibungen vom app-menu dynamisch geladen werden.
39d472 8
c08a3b 9 Menüinhalte werden während der Ausführung der Webanwendung aus Beschreibungen geformt, die in der JavaScript Object Notation (JSON) hinterlegt sind. Die Gestaltung des Menüs wird über ein Cascading Stylesheet (CSS) bestimmt.
39d472 10
c08a3b 11 Mit der [Demo-Anwendung](/data/ulrich/demo/app-vorlage/) kann das app-menu direkt im Browser ausprobiert werden.
5d18e5 12
67e0a8 13 ## Einbau des app-menu in eine Webanwendung
b7c57a 14
67e0a8 15 Das app-menu wird wie folgt in eine Webanwendung eingebaut.
b7c57a 16
67e0a8 17 1. Hinzufügen des Ordners `app-menu`
b7c57a 18 1. Einbinden der Abhängigkeiten (jQuery und Mustache)
67e0a8 19 1. Einbinden der Stylesheets
U 20 1. Hinzufügen einer Menüschaltfläche
21 1. Herstellen der Menübeschreibungen
22 1. Aufruf der Funktion `app_menu_init`
b7c57a 23
67e0a8 24 Die obigen Schritte sind nachfolgend im Detail beschrieben.
b7c57a 25
c08a3b 26 ### <a name="add-folder"></a>Hinzufügen des Ordners `app-menu`
b7c57a 27
c08a3b 28 Damit eine Webanwendung das app-menu verwenden kann, wird der Inhalt des Ordners `app-menu` der Webanwendung zugänglich gemacht. Für die weitere Beschreibung wird angenommen, dass der Ordner `app-menu` in einem Ordner `jslib` abgelegt wurde und dass eine Datei `index.html` den Einstiegspunkt in die Webanwendung bildet.
b7c57a 29
67e0a8 30 ```
U 31 /webanwendung
32   /jslib
33     /app-menu
34   /menu
35   index.html
36   ..
37 ```
b7c57a 38
67e0a8 39 Die folgenden Schritte beschreiben die Ergänzungen in der Datei `index.html` für eine Verwendung des app-menu.
b7c57a 40
67e0a8 41 ### Einbinden der Abhängigkeiten
b7c57a 42
4b5c74 43 Das app-menu verwendet die JavaScript-Bibliotheken [jQuery](https://jquery.com) und [Mustache](https://github.com/janl/mustache.js). Sie werden einer Webanwendung hinzugefügt, indem ihre Skripte wie folgt eingebunden werden.
b7c57a 44
U 45 ```
46 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
47 <script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/2.3.0/mustache.min.js"></script>
48 ```
49 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.
50
67e0a8 51 ### Einbinden der Stylesheets
b7c57a 52
c08a3b 53 Zur Regelung des Erscheinungsbildes von Menüs sowie der Schaltfläche zum Ein- und Ausblenden des Menüs werden zwei Stylesheets eingebunden.
b7c57a 54
U 55 ```
67e0a8 56 <link rel="stylesheet" type="text/css" href="jslib/app-menu/nav-toggle.css">
U 57 <link rel="stylesheet" type="text/css" href="jslib/app-menu/app-menu.css">
b7c57a 58 ```
U 59
67e0a8 60 ### Hinzufügen einer Menüschaltfläche
b7c57a 61
c08a3b 62 Das app-menu wird über eine Schaltfläche Ein- und ausgeblendet, die vom app-menu selbst gesteuert wird. Sie wird in eine Webseite eingebaut, indem ein Element mit der ID `nav-toggle` hinzugefügt wird wie z.B. mit
67e0a8 63
b7c57a 64 ```
67e0a8 65 <a id="nav-toggle" href="#"></a>
b7c57a 66 ```
U 67
c08a3b 68 Das app-menu zeigt dann an dieser Stelle die Schaltfläche zum Ein- und Ausblenden des Menüs an.
67e0a8 69
U 70 ### Einbinden des Skripts
71
72 Die Funktionen des app-menu sind im Skript `app-menu.js` enthalten.
73
b7c57a 74 ```
67e0a8 75 <script src="jslib/app-menu/app-menu.js"></script>
b7c57a 76 ```
U 77
67e0a8 78 Mit dem obigen Eintrag werden die Funktionen des app-menu der Webanwendung zugänglich gemacht.
b7c57a 79
67e0a8 80 ### Herstellen der Menübeschreibungen
b7c57a 81
67e0a8 82 Menüs werden vom app-menu während der Ausführung der Webanwendung dynamisch aus JSON-Strukturen erstellt. Eine Beschreibung sieht wie folgt aus
b7c57a 83
U 84 ```
85 {
86   "menue": {
87     "menuetitel": "Hauptmenü",
88     "wurzel": true,
89     "vorgaenger": {
90       "vtitel": "",
91       "vverweis": ""
92     },
93     "inhalt":  [
94       {
95         "titel": "H Menüeintrag 1",
96         "umenue": false,
97         "funktion": "app_menu_test"
98       },
99       {
100         "titel": "H Menüeintrag 2",
101         "umenue": true,
102         "verweis": "untermenue-1.json"
103       },
104       {
105         "titel": "H Menüeintrag 3",
106         "umenue": false,
107         "funktion": "app_menu_test_2"
108       }
109     ]
110   }
111 }
112 ```
113
67e0a8 114 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. Der Schalter `umenue` legt fest, ob ein Menüeintrag auf ein Untermenü verweist. Ist `umenue=true` muss in `verweis` der Name der Menübeschreibung angegeben sein.
b7c57a 115
U 116 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.
67e0a8 117
671b55 118 Für jedes Menü, das in der Webanwendung gezeigt werden soll, muss eine Beschreibung im oben angegebenen Format existieren. Menübeschreibungen können beispielsweise in einem Unterordner `menu` abgelegt und der Webanwendung beigegeben werden, wie es weiter oben geschildert ist.
c08a3b 119
2ad4f1 120 Beispiele für Menübeschreibungen finden sich im [Code der Demo-Anwendung](/gitblit/tree/web!app-vorlage.git/master/menu).
67e0a8 121
U 122 ## Aufruf des Menüs
123
124 Zu Beginn der Ausführung einer Webanwendung muss das app-menu mit folgendem Funktionsaufruf initialisiert werden.
125
126 ```
127 app_menu_init("menu/", "hauptmenue.json", "jslib/app-menu/app-menu.tpl", ".west");
128 ```
129
c08a3b 130 Die Funktion zur Initialisierung bewirkt, dass eine Menüschaltfläche zum Ein- und Ausblenden von Menüs an der Stelle des Elements mit der ID `nav-toggle` erscheint. Beim Betätigen der Schaltfläche wird das Menü eingeblendet, das in der Beschreibung `hauptmenue.json` im Ordner `menu` beschrieben ist. Das Menü wird an der Stelle des Elements mit dem Klassennamen `west` dargestellt. NAchfolgend die Parameter der Funktion `app_menu_init` in der Übersicht.
67e0a8 131
U 132 1. Name des Unterverzeichnisses mit Menübeschreibungen
133 1. Name der Menübeschreibung, die zuerst angezeigt werden soll
134 1. Unterverzeichnis und Name der Vorlage für Mustache
135 1. Name des Selektors, der das Menü aufnehmen soll
136
5d18e5 137 Der dritte Parameter bezeichnet eine Vorlage, die mit Hilfe von Mustache während der Ausführung der Webanwendung Menübeschreibungen in JSON nach HTML umwandelt. Die so bezeichnete Vorlage kann genutzt werden, um das HTML, aus dem ein Menü besteht, zu verändern.