Ein universelles Menü für Webanwendungen
ulrich
2019-12-15 ddb505bbff64a1e1c187b9c9e89e43d24ab3f973
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`
ddb505 18 1. Einbinden von 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
ddb505 42 Das app-menu verwendet die JavaScript-Bibliothek [Mustache](https://github.com/janl/mustache.js). Sie wird einer Webanwendung hinzugefügt, indem ihr Skript wie folgt eingebunden wird.
b7c57a 43
U 44 ```
45 <script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/2.3.0/mustache.min.js"></script>
46 ```
ddb505 47 Das obige Beispiel bindet Mustache aus dem Content Delivery Network [cdnjs](https://cdnjs.com/) ein. Stattdessen kann die JavaScript-Komponente auch lokal ausgeliefert werden.
b7c57a 48
fb100c 49 ### Einbinden des Stylesheets
b7c57a 50
fb100c 51 Zur Regelung des Erscheinungsbildes von Menüs wird das Stylesheet eingebunden.
b7c57a 52
U 53 ```
67e0a8 54 <link rel="stylesheet" type="text/css" href="jslib/app-menu/app-menu.css">
b7c57a 55 ```
67e0a8 56
U 57 ### Einbinden des Skripts
58
59 Die Funktionen des app-menu sind im Skript `app-menu.js` enthalten.
60
b7c57a 61 ```
67e0a8 62 <script src="jslib/app-menu/app-menu.js"></script>
b7c57a 63 ```
U 64
67e0a8 65 Mit dem obigen Eintrag werden die Funktionen des app-menu der Webanwendung zugänglich gemacht.
b7c57a 66
67e0a8 67 ### Herstellen der Menübeschreibungen
b7c57a 68
67e0a8 69 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 70
U 71 ```
72 {
73   "menue": {
74     "menuetitel": "Hauptmenü",
75     "wurzel": true,
76     "vorgaenger": {
77       "vtitel": "",
78       "vverweis": ""
79     },
80     "inhalt":  [
81       {
82         "titel": "H Menüeintrag 1",
83         "umenue": false,
84         "funktion": "app_menu_test"
85       },
86       {
87         "titel": "H Menüeintrag 2",
88         "umenue": true,
89         "verweis": "untermenue-1.json"
90       },
91       {
92         "titel": "H Menüeintrag 3",
93         "umenue": false,
94         "funktion": "app_menu_test_2"
95       }
96     ]
97   }
98 }
99 ```
100
67e0a8 101 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 102
ddb505 103 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 und muss im Javascript existieren, das die betreffende Web-App begleitet.
67e0a8 104
671b55 105 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 106
ddb505 107 Beispiele für Menübeschreibungen finden sich im [Code der Demo-Anwendung](/gitblit/tree/web!app-vorlage.git/master).
67e0a8 108
U 109 ## Aufruf des Menüs
110
111 Zu Beginn der Ausführung einer Webanwendung muss das app-menu mit folgendem Funktionsaufruf initialisiert werden.
112
113 ```
fb100c 114 app_menu_init("menu/", "hauptmenue.json", "jslib/app-menu/app-menu.tpl", ".west", "5em");
67e0a8 115 ```
U 116
ddb505 117 Der Aufruf der Funktion `app_menu_init` bewirkt, dass die Vorlage `jslib/app-menu/app-menu.tpl` zur Darstellung
U 118 des Menüs geladen und das Menü gezeigt wird, das mit der JSON-Struktur `hauptmenue.json` 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
ddb505 123 1. Name des HTML-Elements, das das Menü aufnehmen soll
fb100c 124 1. Breite des Menüs
67e0a8 125
ddb505 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 fungiert als Bindung zwischen den Menübeschreibungen im JSON-Format und dem HTML, das aus den JSON-Beschreibungen entstehen soll. Die Vorlage kann genutzt werden, um das HTML, aus dem ein Menü bestehen soll, nach eigenen Wünschen zu verändern.