Ein universelles Menü für Webanwendungen
ulrich
2017-12-30 67e0a88c3fc3b08447c112faefebf8d513dd674a
commit | author | age
b7c57a 1 # app-menu
U 2
3 Ein universelles Menü für Webanwendungen.
4
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
67e0a8 9 Menüinhalte werden während der Ausführung der Webanwendung aus Beschreibungen geformt, die in der JavaScript Object Notation (JSON) hinterlegt sind.
39d472 10
U 11 Die Gestaltung des Menüs wird über ein Cascading Stylesheet (CSS) bestimmt.
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
67e0a8 26 ### Hinzufügen des Ordners `app-menu`
b7c57a 27
67e0a8 28 Damit eine Webanwendung das app-menu verwenden kann, muss der gesamte Ordner `app-menu` der Webanwendung mitgegeben werden. 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
67e0a8 43 Das app-menu verwendet die JavaScript-Bibliotheken jQuery und Mustache. 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
67e0a8 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
67e0a8 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
U 63
b7c57a 64 ```
67e0a8 65 <a id="nav-toggle" href="#"></a>
b7c57a 66 ```
U 67
67e0a8 68 Das app-menu zeigt dann an dieser Stelle die Schaltfläche zum ein- und ausblenden des Menüs an.
U 69
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
U 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 im Abschnitt Hinzufügen des Ordners app-menu weiter oben geschildert ist.
119
120 ## Aufruf des Menüs
121
122 Zu Beginn der Ausführung einer Webanwendung muss das app-menu mit folgendem Funktionsaufruf initialisiert werden.
123
124 ```
125 app_menu_init("menu/", "hauptmenue.json", "jslib/app-menu/app-menu.tpl", ".west");
126 ```
127
128 Die Funktion zur Initialisierung bewirkt, dass eine Menüschaltfläche zum Ein- und Ausblenden von Menüs an der Stelle des Elements `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.
129
130 1. Name des Unterverzeichnisses mit Menübeschreibungen
131 1. Name der Menübeschreibung, die zuerst angezeigt werden soll
132 1. Unterverzeichnis und Name der Vorlage für Mustache
133 1. Name des Selektors, der das Menü aufnehmen soll
134
135 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.