Ein universelles Menü für Webanwendungen
ulrich
2017-12-30 5d18e544b8df951f72670f5b94258c04ad533c49
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
5d18e5 13 Mit der [Demo-Anwendung](/data/ulrich/demo/app-vorlage/) kann das app-menu direkt im Browser ausprobiert werden. 
U 14
67e0a8 15 ## Einbau des app-menu in eine Webanwendung
b7c57a 16
67e0a8 17 Das app-menu wird wie folgt in eine Webanwendung eingebaut.
b7c57a 18
67e0a8 19 1. Hinzufügen des Ordners `app-menu`
b7c57a 20 1. Einbinden der Abhängigkeiten (jQuery und Mustache)
67e0a8 21 1. Einbinden der Stylesheets
U 22 1. Hinzufügen einer Menüschaltfläche
23 1. Herstellen der Menübeschreibungen
24 1. Aufruf der Funktion `app_menu_init`
b7c57a 25
67e0a8 26 Die obigen Schritte sind nachfolgend im Detail beschrieben.
b7c57a 27
67e0a8 28 ### Hinzufügen des Ordners `app-menu`
b7c57a 29
67e0a8 30 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 31
67e0a8 32 ```
U 33 /webanwendung
34   /jslib
35     /app-menu
36   /menu
37   index.html
38   ..
39 ```
b7c57a 40
67e0a8 41 Die folgenden Schritte beschreiben die Ergänzungen in der Datei `index.html` für eine Verwendung des app-menu.
b7c57a 42
67e0a8 43 ### Einbinden der Abhängigkeiten
b7c57a 44
67e0a8 45 Das app-menu verwendet die JavaScript-Bibliotheken jQuery und Mustache. Sie werden einer Webanwendung hinzugefügt, indem ihre Skripte wie folgt eingebunden werden.
b7c57a 46
U 47 ```
48 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
49 <script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/2.3.0/mustache.min.js"></script>
50 ```
51 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.
52
67e0a8 53 ### Einbinden der Stylesheets
b7c57a 54
67e0a8 55 Zur Regelung des Erscheinungsbildes von Menüs sowie der Schaltfläche zum ein- und ausblenden des Menüs werden zwei Stylesheets eingebunden.
b7c57a 56
U 57 ```
67e0a8 58 <link rel="stylesheet" type="text/css" href="jslib/app-menu/nav-toggle.css">
U 59 <link rel="stylesheet" type="text/css" href="jslib/app-menu/app-menu.css">
b7c57a 60 ```
U 61
67e0a8 62 ### Hinzufügen einer Menüschaltfläche
b7c57a 63
67e0a8 64 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 65
b7c57a 66 ```
67e0a8 67 <a id="nav-toggle" href="#"></a>
b7c57a 68 ```
U 69
67e0a8 70 Das app-menu zeigt dann an dieser Stelle die Schaltfläche zum ein- und ausblenden des Menüs an.
U 71
72 ### Einbinden des Skripts
73
74 Die Funktionen des app-menu sind im Skript `app-menu.js` enthalten.
75
b7c57a 76 ```
67e0a8 77 <script src="jslib/app-menu/app-menu.js"></script>
b7c57a 78 ```
U 79
67e0a8 80 Mit dem obigen Eintrag werden die Funktionen des app-menu der Webanwendung zugänglich gemacht.
b7c57a 81
67e0a8 82 ### Herstellen der Menübeschreibungen
b7c57a 83
67e0a8 84 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 85
U 86 ```
87 {
88   "menue": {
89     "menuetitel": "Hauptmenü",
90     "wurzel": true,
91     "vorgaenger": {
92       "vtitel": "",
93       "vverweis": ""
94     },
95     "inhalt":  [
96       {
97         "titel": "H Menüeintrag 1",
98         "umenue": false,
99         "funktion": "app_menu_test"
100       },
101       {
102         "titel": "H Menüeintrag 2",
103         "umenue": true,
104         "verweis": "untermenue-1.json"
105       },
106       {
107         "titel": "H Menüeintrag 3",
108         "umenue": false,
109         "funktion": "app_menu_test_2"
110       }
111     ]
112   }
113 }
114 ```
115
67e0a8 116 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 117
U 118 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 119
U 120 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.
121
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
130 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.
131
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.