| | |
| | | |
| | | Neben dem praktischen Nutzen veranschaulicht das radio-ui verschiedene Aspekte des Baus von Webanwendungen: |
| | | |
| | | + app-layout |
| | | + Vorlagen |
| | | + app-menu |
| | | + CRUD-Muster (Create, Read, Update, Delete) |
| | | |
| | | Wie in der Anwendung radio-ui die obigen Themen umgesetzt sind, ist nachfolgend kurz betrachtet. |
| | | |
| | | ### app-layout |
| | | |
| | | Das radio-ui verwendet das [app-layout](/gitblit/docs/web!app-layout.git), das mit Hilfe von HTML und CSS die Grundlage einer für Webanwendungen geeigneten Bedienoberfläche schafft. Der nachfolgende Vergleich von Webseiten mit Webanwendungen will das verdeutlichen. |
| | | |
| | | #### Webseiten |
| | | |
| | | Charakteristisch für eine Webseite ist ihr Seitencharakter, bei dem der Webbrowser Inhalte von links nach rechts und von oben nach unten darstellt. |
| | | |
| | | Inhalte, die über den Raum auf dem Bildschirm hinausgehen, setzen sich jenseits des unteren Bildrands fort und werden durch Rollen nach unten sichtbar. Dabei verschwinden am oberen Bildrand untergebrachte Kontrollelemente mit den dort befindlichen Inhalten. |
| | | |
| | | Eine Webseite kann viele dynamische Funktionen enthalten und in diesem Punkt einer Webanwendung gleichen. Charakteristisch für Webseiten ist aber die Darstellung von Inhalten und nicht so sehr die Ausführung von Funktionen. |
| | | |
| | | #### Webanwendungen |
| | | |
| | | Charakteristisch für Webanwendungen ist der Schwerpunkt auf Funktionen und ihre Bedienung. Eine Webanwendung nutzt die Mittel von HTML, CSS und Javascript u.a. zur Herstellung einer Bedienoberfläche. |
| | | |
| | | Die Bedienelemente der Anwendung bleiben stets erreichbar, auch, wenn Inhalte den verfügbaren Raum auf dem Bildschirm überschreiten. Bereiche zur Darstellung von Inhalten und deren Bearbeitung sind gemischt mit Kontroll- und Bedienelementen. Die Anordnung dieser Elemente folgt im Verlauf der Nutzung individuell den Erfordernissen des jeweiligen Anwendungsfalls. |
| | | |
| | | Das Layout der Bedienoberfläche bleibt insgesamt stets gleich, zu keiner Zeit führt ein Wechsel von Teilen des Bildschirminhalts zu einer Veränderung des Layouts oder zum vollständigen Verschwinden von Bedien- und Kontrollelementen. |
| | | |
| | | Die Webanwendung ist auf verschiedenen Geräten verwendbar und funktioniert mit unterschiedlichen Bildschirmen (Größe, Auflösung) und Eingabegeräten (Maus, Tastatur, berührungsempfindlicher Bildschirm) gleichartig. |
| | | |
| | | Die hier beschriebenen Eigenschaften einer Webanwendung werden mit dem Einsatz des app-layout hergestellt. |
| | | |
| | | ### Nutzung von Vorlagen |
| | | |
| | |
| | | |
| | | Inhalte werden dabei mit Hilfe von [Mustache](https://github.com/janl/mustache.js) aus einer Vorlage und einer Inhaltsbeschreibung in [JSON](https://de.wikipedia.org/wiki/JavaScript_Object_Notation) zu [HTML](https://de.wikipedia.org/wiki/Hypertext_Markup_Language) zusammengesetzt. |
| | | |
| | | Durch die Nutzung von Vorlagen lassen sich dynamische und statische Inhalte sowie deren Gestaltung und Struktur optimal und frei von Redundanzen zusammenführen. |
| | | |
| | | ### app-menu |
| | | |
| | | Das [app-menu](/gitblit/docs/web!app-menu.git) setzt auf die Nutzung von Vorlagen auf und fügt dem radio-ui ein Menü zur Bedienung der Anwendung hinzu. Es ist zudem eingebettet in die Funktion des app-layout. Das radio-ui zeigt so den Einsatz des app-menu und mithin das Zusammenspiel von Vorlagen, app-layout und Menü am praktischen Beispiel. |
| | | |
| | | ### CRUD-Muster |
| | | |
| | | CRUD (Create, Read, Update, Delete) ist ein häufig vorkommendes Nutzungsmuster von Anwendungen, Daten werden erzeugt, gelesen, bearbeitet und gelöscht. Bei Webanwendungen zerfällt es in einen Teil, der auf dem Server ausgeführt wird und einen, der im Browser abläuft (Bedienoberfläche). |
| | | |
| | | Allein bezogen auf den Umgang mit den Daten auf der Serverseite ist das CRUD-Muster schnell umgesetzt. Eine Datenstruktur wird erzeugt, gelesen, gespeichert und gelöscht. Eine Bedienoberfläche zur Ausführung dieser Operationen erfordert allerdings mehr als nur den Anstoß der jeweiligen Operation. Beim radio-ui wird beispielsweise mit den Daten der Radiosender auf diese Weise umgegangen. Die folgende Tabelle veranschaulicht die benötigten Funktionen. |
| | | Allein bezogen auf den Umgang mit den Daten auf der Serverseite ist das CRUD-Muster schnell umgesetzt. Eine Datenstruktur wird erzeugt, gelesen, gespeichert und gelöscht. Eine Bedienoberfläche zur Ausführung dieser Operationen erfordert allerdings mehr als nur den Anstoß der jeweiligen Operation. |
| | | |
| | | Beim radio-ui wird beispielsweise mit den Daten der Radiosender auf diese Weise umgegangen. Die folgende Tabelle veranschaulicht die benötigten Funktionen. |
| | | |
| | | | Operation | Bedienoberfläche (radio-ui) | Server | |
| | | | ------------- |-------------| -----| |
| | | | Create | Funktion zum Auslösen der Erstellung eines neuen Senders, Dialog zur Eingabe der Daten, Funktion zum Senden der neuen Daten | Speichern eines neuen Senders | |
| | | | Read | Funktion zum Abruf der Senderliste, Lesen der Senderliste, Darstellen der Liste | Ausgeben einer Liste von Sendern | |
| | | | Read | Funktion zum Abruf der Senderliste, Lesen der Senderliste, Darstellen der Liste als Kacheln | Ausgeben einer Liste von Sendern | |
| | | | Update | Funktion zum Auslösen der Änderung an einem Sender, Funktion zur Auswahl eines Senders aus einer Liste, Darstellen der Daten des gewählten Senders in einem Dialog zum Bearbeiten, Funktion zum Senden der Änderungen | Speichern von Änderungen an einem bestehenden Sender | |
| | | | Delete | Funktion zum Auslösen der Löschfunktion, Funktion zur Auswahl eines Senders oder mehrerer Sender aus einer Liste, Funktion zum Senden einer Liste zu löschender Sender, Funktion zur Absicherung gegenüber versehentlichem Löschen | Löschen eines Senders oder mehrerer Sender | |
| | | |
| | | Die Tabelle läßt ahnen, dass der größere Aufwand zur Herstellung eines CRUD-Musters auf die Bedienoberfläche entfällt. |
| | | |
| | | Mit seinen Menüfunktionen und der Art, wie mit Daten als Liste und als einzelnem Datensatz umgegangen wird, zeigt das radio-ui einen generischen Lösungsansatz, der sich für die Wiederverwendung in anderen Anwendungen eignet und dabei wenige Abhängigkeiten erfordert. |
| | | Mit seinen Menüfunktionen und der Art, wie mit Daten als Liste und als einzelnem Datensatz umgegangen wird sowie der Kombination dieser Funktionen mit der Verwendung von Vorlagen zeigt das radio-ui einen generischen Lösungsansatz, der sich für die Wiederverwendung in anderen Anwendungen eignet und dabei wenige Abhängigkeiten erfordert. |
| | | |
| | | ## Abhängigkeiten |
| | | |
| | |
| | | Diese sind in der Datei `index.html` über die folgenden Einträge eingebunden. |
| | | |
| | | ```` |
| | | <link rel="stylesheet" type="text/css" href="../jslib/app-menu/nav-toggle.css"> |
| | | <link rel="stylesheet" type="text/css" href="../jslib/app-menu/app-menu.css"> |
| | | <script src="../jslib/jquery-1.11.1/jquery-1.11.1.min.js"></script> |
| | | <script src="../jslib/mustache/mustache.min.js"></script> |
| | |
| | | 128kbps http://mp3.ffh.de/radioffh/hqlivestream.mp3 |
| | | |
| | | 48kbps http://mp3.ffh.de/radioffh/livestream.aac |
| | | |
| | | ## Noch zu erledigen |
| | | |
| | | ### Templates für Mustache dynamisch laden |
| | | |
| | | Spart Ladezeit zu Beginn. Lösungsansatz: Eine Funktion, die als Parameter das Element erhält, dessen html mit dem gerenderten Template ersetzt werden soll und den zu rendernden Inhalt. Die dynamische Ladefunktion |
| | | |
| | | 1. prüft, ob das Template schon im cache ist |
| | | 1. Lädt das Template, wenn nicht |
| | | 1. wartet, bis das Template geladen ist |
| | | 1. rendert das Template mit dem übergebenen Inhalt |
| | | 1. schreibt das Ergebnis ins html des übergebenen Elements |
| | | |
| | | Der letzte Teil des Ablaufs muss asynchron gefasst sein, damit auf das Laden gewartet werden kann. |
| | | |
| | | ## Schnittstellenbeschreibung |
| | | |
| | | Für den Prototyp des radio-ui können verschiedene Arten des Umgangs mit Sendern und Abspielern hergestellt werden. Die folgenden Angaben zeigen die Punkte auf, an denen eine konkrete Implementierung ansetzen kann. |
| | | |
| | | ### Sender |
| | | |
| | | #### Senderliste lesen |
| | | |
| | | Aufruf |
| | | |
| | | ```` |
| | | data/sender.json |
| | | ```` |
| | | |
| | | Antwort |
| | | |
| | | ```` |
| | | { |
| | | "senderliste": { |
| | | "titel": "Senderliste", |
| | | "inhalt": [ |
| | | { |
| | | "senderid": 1, |
| | | "sendername": "hr info", |
| | | "senderurl": "http://hr-hrinfo-live.cast.addradio.de/hr/hrinfo/live/mp3/128/stream.mp3", |
| | | "senderlogo": "../bilder/hr-info.png" |
| | | }, |
| | | { |
| | | "senderid": 2, |
| | | "sendername": "radiobob", |
| | | "senderurl": "http://bob.hoerradar.de/radiobob-live-mp3-hq", |
| | | "senderlogo": "../bilder/radio-bob-logo-80.png" |
| | | }, |
| | | usw. |
| | | ] |
| | | } |
| | | } |
| | | ```` |
| | | |
| | | #### Neuen Sender speichern |
| | | |
| | | Noch nicht realisiert. |
| | | |
| | | #### Änderungen an einem Sender speichern |
| | | |
| | | Noch nicht realisiert. |
| | | |
| | | #### Sender löschen |
| | | |
| | | Noch nicht realisiert. |
| | | |
| | | ### Abspieler |
| | | |
| | | #### Abspielerliste lesen |
| | | |
| | | Aufruf |
| | | |
| | | ```` |
| | | data/abspieler.json |
| | | ```` |
| | | |
| | | Antwort |
| | | |
| | | ```` |
| | | { |
| | | "abspielerliste": { |
| | | "titel": "Abspielerliste", |
| | | "inhalt": [ |
| | | { |
| | | "abspielerid": 1, |
| | | "abspielername": "dieses Gerät", |
| | | "abspielerurl": "", |
| | | "abspielertyp":"lokal", |
| | | "abspielerbild": "", |
| | | "abspielerzustand":"" |
| | | }, |
| | | { |
| | | "abspielerid": 2, |
| | | "abspielername": "Raspberry Pi Wohnzimmer", |
| | | "abspielerurl": "", |
| | | "abspielertyp":"pirc", |
| | | "abspielerbild": "", |
| | | "abspielerzustand":"selected" |
| | | }, |
| | | usw. |
| | | ] |
| | | } |
| | | } |
| | | ```` |
| | | |
| | | #### Neuen Abspieler speichern |
| | | |
| | | Noch nicht realisiert. |
| | | |
| | | #### Änderungen an einem Abspieler speichern |
| | | |
| | | Noch nicht realisiert. |
| | | |
| | | #### Abspieler löschen |
| | | |
| | | Noch nicht realisiert. |