Ein universelles Menü für Webanwendungen
ulrich
2018-01-07 fb100c08f428b92b7844010cedafc5061fb13d37
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)
fb100c 19 1. Einbinden des Stylesheets
67e0a8 20 1. Herstellen der Menübeschreibungen
U 21 1. Aufruf der Funktion `app_menu_init`
b7c57a 22
67e0a8 23 Die obigen Schritte sind nachfolgend im Detail beschrieben.
b7c57a 24
c08a3b 25 ### <a name="add-folder"></a>Hinzufügen des Ordners `app-menu`
b7c57a 26
c08a3b 27 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 28
67e0a8 29 ```
U 30 /webanwendung
31   /jslib
32     /app-menu
33   /menu
34   index.html
35   ..
36 ```
b7c57a 37
67e0a8 38 Die folgenden Schritte beschreiben die Ergänzungen in der Datei `index.html` für eine Verwendung des app-menu.
b7c57a 39
67e0a8 40 ### Einbinden der Abhängigkeiten
b7c57a 41
4b5c74 42 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 43
U 44 ```
45 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
46 <script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/2.3.0/mustache.min.js"></script>
47 ```
48 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.
49
fb100c 50 ### Einbinden des Stylesheets
b7c57a 51
fb100c 52 Zur Regelung des Erscheinungsbildes von Menüs wird das Stylesheet eingebunden.
b7c57a 53
U 54 ```
67e0a8 55 <link rel="stylesheet" type="text/css" href="jslib/app-menu/app-menu.css">
b7c57a 56 ```
67e0a8 57
U 58 ### Einbinden des Skripts
59
60 Die Funktionen des app-menu sind im Skript `app-menu.js` enthalten.
61
b7c57a 62 ```
67e0a8 63 <script src="jslib/app-menu/app-menu.js"></script>
b7c57a 64 ```
U 65
67e0a8 66 Mit dem obigen Eintrag werden die Funktionen des app-menu der Webanwendung zugänglich gemacht.
b7c57a 67
67e0a8 68 ### Herstellen der Menübeschreibungen
b7c57a 69
67e0a8 70 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 71
U 72 ```
73 {
74   "menue": {
75     "menuetitel": "Hauptmenü",
76     "wurzel": true,
77     "vorgaenger": {
78       "vtitel": "",
79       "vverweis": ""
80     },
81     "inhalt":  [
82       {
83         "titel": "H Menüeintrag 1",
84         "umenue": false,
85         "funktion": "app_menu_test"
86       },
87       {
88         "titel": "H Menüeintrag 2",
89         "umenue": true,
90         "verweis": "untermenue-1.json"
91       },
92       {
93         "titel": "H Menüeintrag 3",
94         "umenue": false,
95         "funktion": "app_menu_test_2"
96       }
97     ]
98   }
99 }
100 ```
101
67e0a8 102 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 103
U 104 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 105
671b55 106 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 107
2ad4f1 108 Beispiele für Menübeschreibungen finden sich im [Code der Demo-Anwendung](/gitblit/tree/web!app-vorlage.git/master/menu).
67e0a8 109
U 110 ## Aufruf des Menüs
111
112 Zu Beginn der Ausführung einer Webanwendung muss das app-menu mit folgendem Funktionsaufruf initialisiert werden.
113
114 ```
fb100c 115 app_menu_init("menu/", "hauptmenue.json", "jslib/app-menu/app-menu.tpl", ".west", "5em");
67e0a8 116 ```
U 117
fb100c 118 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 119
U 120 1. Name des Unterverzeichnisses mit Menübeschreibungen
121 1. Name der Menübeschreibung, die zuerst angezeigt werden soll
122 1. Unterverzeichnis und Name der Vorlage für Mustache
123 1. Name des Selektors, der das Menü aufnehmen soll
fb100c 124 1. Breite des Menüs
67e0a8 125
5d18e5 126 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.