9 Commits
1.1 ... master

Author SHA1 Message Date
Sebastian Seedorf
997ee60d95 kleine orthographische Fixes 3 2016-03-30 19:47:50 +02:00
Sebastian Seedorf
10a8952fe0 kleine orthographische Fixes 2 2016-03-30 19:41:49 +02:00
Sebastian Seedorf
67d0792f02 kleine orthographische Fixes 2016-03-30 19:38:34 +02:00
Sebastian Seedorf
bbe1fb59df README.md login-Requests hinzugefügt 2016-03-30 15:31:36 +02:00
Sebastian Seedorf
486b7b6ae9 README.md auf den aktuellen Stand gebracht 2016-03-30 15:13:03 +02:00
Sebastian Seedorf
c00ad762ad reservierungen werden jetzt oben angefügt, Neue sind so leichter einsehbar 2016-03-30 12:56:56 +02:00
Sebastian Seedorf
ff0b1dcb7a Reservierungsformular unter Chrome und Safari gefixt 2016-03-30 12:29:27 +02:00
Sebastian Seedorf
411562c7ec Formulierungen ausgebessert und umgeschrieben (index/menu) 2016-03-30 11:40:35 +02:00
Sebastian Seedorf
c521f2670b AngularJS-Service implementiert; Reissorte des Tages wird per http über angular nachgeladen 2016-03-29 17:51:00 +02:00
11 changed files with 217 additions and 112 deletions

View File

@@ -8,6 +8,51 @@
- Relative und absolute Pfade erlaubt - Relative und absolute Pfade erlaubt
3. Aufrufen [der lokalen Node-Anwendung](http://localhost:3000) oder [dem gehosteten Service](http://restaurant.sebse.de) 3. Aufrufen [der lokalen Node-Anwendung](http://localhost:3000) oder [dem gehosteten Service](http://restaurant.sebse.de)
## Login
Anmeldedaten finden sich in der `data/users.json`, die, falls Änderungen vorgenommen werden sollen, manuell vor dem Start der nodejs-Anwendung durchgeführt werden müssen.
Standard-Login-Daten
```js
{
"Richard Reis": {
"pwd": "secret",
"rights": [
null,
true,
true,
true
]
},
"Ursula Ulstein": {
"pwd": "ultimativ",
"rights": [
null,
true,
true,
false
]
}
}
```
## Funktionen
- Unterschiedliche CRUD-Routinen für Reservierung und Speisekarte
- Verwendung von Bootstrap mit minimalistischem, eigenen CSS
- Einbindung einer eigenen Schriftart
- Implementierung einer eigenen, komplexen Angular-Direktive zur Anzeige einer Google Map
- Responsive Design für alle Bildschirmgrößen und nicht JS-Benutzer
- Serverseitige Implementierung mit Node.js
- Persistierung des Speiseplans und der Reservierungen nach Serverneustart
- Login/Speicherung der Nutzer in externer Datei
- Eigenen AngularJS-Service und Controller implementiert
- Verwendung des AngularJS-Service $http
- Name der Tagesreisempfehlung per Agular nachgeladen
- Persönliche Formulierungen
- Realitätsnahe Sprache
## Dateistruktur ## Dateistruktur
### data ### data
@@ -50,6 +95,9 @@
| Min. Vers. | Methode | URI | Parameter | Beschreibung | Benötige Rechte | | Min. Vers. | Methode | URI | Parameter | Beschreibung | Benötige Rechte |
|--------|--------|--------|--------|--------|--------| |--------|--------|--------|--------|--------|--------|
| 0.1 | GET | / | keine | Zeigt die Startseite an | keine | | 0.1 | GET | / | keine | Zeigt die Startseite an | keine |
| 0.1 | GET | /login | keine | Zeigt die Loginseite an | keine |
| 0.1 | POST | /login | username:<br> `[Benutzername]`<br>password:<br> `[Passwort des Benutzers]` | Loginversuch | keine |
| 0.1 | POST | /login | targetLogout:<br> `logout` | Logout | keine |
| 0.1 | GET | /speisekarte | keine | Zeigt die Speisekarte an | keine (Bearbeitungsfunktionen mit MENU) | | 0.1 | GET | /speisekarte | keine | Zeigt die Speisekarte an | keine (Bearbeitungsfunktionen mit MENU) |
| 0.1 | POST | /speisekarte | nametag:<br> `[f\|d]-[Index in der Liste "food"/"drinks"]-new`<br>name:<br> `[Name des Gerichts]`<br>desc:<br> `[Beschreibung des Menüeintrags]` | Hinzufügen eines Menüeintrags | MENU | | 0.1 | POST | /speisekarte | nametag:<br> `[f\|d]-[Index in der Liste "food"/"drinks"]-new`<br>name:<br> `[Name des Gerichts]`<br>desc:<br> `[Beschreibung des Menüeintrags]` | Hinzufügen eines Menüeintrags | MENU |
| 0.1 | POST | /speisekarte | nametag:<br> `[f\|d]-[Index in der Liste "food"/"drinks"]-[Index in der Liste "items"]`<br>name:<br> `[Name des Gerichts]`<br>desc:<br> `[Beschreibung des Menüeintrags]` | Aktualisieren der Informationen eines Eintrages | MENU | | 0.1 | POST | /speisekarte | nametag:<br> `[f\|d]-[Index in der Liste "food"/"drinks"]-[Index in der Liste "items"]`<br>name:<br> `[Name des Gerichts]`<br>desc:<br> `[Beschreibung des Menüeintrags]` | Aktualisieren der Informationen eines Eintrages | MENU |
@@ -59,3 +107,4 @@
| 1.0 | POST | /kontakt | nametag:<br> `new`<br>name:<br> `[Name des Reservierenden]`<br>desc:<br> `[Kommentarfeld]`<br>email:<br> `[gülige E-Mail-Adresse]`<br>person:<br> `[positive, natürliche Zahl]`<br>time:<br> `^(([01][0-9]\|2[0-4]):[0-5][0-9])$`<br>date:<br> `^(([0-2][0-9]\|3[01]).(0[0-9]\|1[012]).[0-9]{4})$` | Hinzufügen einer Reservierung | keine | | 1.0 | POST | /kontakt | nametag:<br> `new`<br>name:<br> `[Name des Reservierenden]`<br>desc:<br> `[Kommentarfeld]`<br>email:<br> `[gülige E-Mail-Adresse]`<br>person:<br> `[positive, natürliche Zahl]`<br>time:<br> `^(([01][0-9]\|2[0-4]):[0-5][0-9])$`<br>date:<br> `^(([0-2][0-9]\|3[01]).(0[0-9]\|1[012]).[0-9]{4})$` | Hinzufügen einer Reservierung | keine |
| 1.0 | POST | /kontakt | nametag:<br> `[Index der Reservierung]`<br>name:<br> `[Name des Reservierenden]`<br>desc:<br> `[Kommentarfeld]`<br>email:<br> `[gülige E-Mail-Adresse]`<br>person:<br> `[positive, natürliche Zahl]`<br>time:<br> `^(([01][0-9]\|2[0-4]):[0-5][0-9])$`<br>date:<br> `^(([0-2][0-9]\|3[01]).(0[0-9]\|1[012]).[0-9]{4})$` | Aktualisieren der Informationen einer Reservierung | RESERVATION | | 1.0 | POST | /kontakt | nametag:<br> `[Index der Reservierung]`<br>name:<br> `[Name des Reservierenden]`<br>desc:<br> `[Kommentarfeld]`<br>email:<br> `[gülige E-Mail-Adresse]`<br>person:<br> `[positive, natürliche Zahl]`<br>time:<br> `^(([01][0-9]\|2[0-4]):[0-5][0-9])$`<br>date:<br> `^(([0-2][0-9]\|3[01]).(0[0-9]\|1[012]).[0-9]{4})$` | Aktualisieren der Informationen einer Reservierung | RESERVATION |
| 1.0 | POST | /kontakt | nametag:<br> `[Index der Reservierung]-del` | Löschen einer Reservierung aus der Liste | RESERVATION | | 1.0 | POST | /kontakt | nametag:<br> `[Index der Reservierung]-del` | Löschen einer Reservierung aus der Liste | RESERVATION |
| 1.1.1 | GET | /api/specialOffer.json | keine | JSON, der aktuell gültigen Angebote | keine |

View File

@@ -12,22 +12,22 @@
{ {
"name": "Chinesisches Bauernfrühstück", "name": "Chinesisches Bauernfrühstück",
"price": 6.40, "price": 6.40,
"desc": "Feuriges Chili in gedämpftem, kaltem Reis mit heißem Gemüse" "desc": "Feuriges Chili in gedämpften, kalten Reis mit heißem Gemüse"
}, },
{ {
"name": "Thailändisches Arbeiterfrühstück", "name": "Thailändisches Arbeiterfrühstück",
"price": 7.40, "price": 7.40,
"desc": "Feuriges Chili in gedämpftem, kaltem Reis mit heißem Gemüse und Hähnchen" "desc": "Feuriges Chili in gedämpften, kalten Reis mit heißem Gemüse und Hähnchen"
}, },
{ {
"name": "Viatnamesisches Denkerfrühstück", "name": "Viatnamesisches Denkerfrühstück",
"price": 7.90, "price": 7.90,
"desc": "Feuriges Chili in gedämpftem, kaltem Reis mit heißem Gemüse und Ente" "desc": "Feuriges Chili in gedämpften, kalten Reis mit heißem Gemüse und Ente"
}, },
{ {
"name": "90er-Reis-Plattenscheibe", "name": "90er-Reis-Plattenscheibe",
"price": 51.90, "price": 51.90,
"desc": "Für Retrofreunde die seltene Platte \"Blue Eyes\" von \"Brooky Ryes\" bestückt mit 5 verschiedenen Reissorten dazu etwas Gemüse in Vinyl-Optik" "desc": "Die seltene Platte \"Blue Eyes\" von \"Brooky Ryes\" für Retrofreunde, bestückt mit 5 verschiedenen Reissorten, dazu etwas Gemüse in Vinyl-Optik"
} }
] ]
}, },
@@ -53,12 +53,12 @@
{ {
"name": "Henker's Mahlzeit", "name": "Henker's Mahlzeit",
"price": 6.80, "price": 6.80,
"desc": "Roter Reis mit scharfem Chili mit Tomaten und roter Paprika" "desc": "Roter Reis mit scharfen Chili mit Tomaten und roter Paprika"
}, },
{ {
"name": "Nudelsuppe", "name": "Nudelsuppe",
"price": 3.30, "price": 3.30,
"desc": "Leissuppe mit liesigel Poltion klingliger Knödel" "desc": "Leissuppe mit liesigel Poltion klingligel Knödel"
} }
] ]
}, },
@@ -69,7 +69,7 @@
{ {
"name": "Grillplatte \"China\"", "name": "Grillplatte \"China\"",
"price": 11.20, "price": 11.20,
"desc": "Ein großes, paniertes Schnitzel in Form des Landes china dazu Tibet-formender Reis, Ente im Pazifik und Hähnchen als Peking geformt" "desc": "Ein großes, paniertes Schnitzel in Form des Landes China dazu Tibet-formender Reis, im Pazifik ausgelegte Ente und ein als Peking geformtes Hähnchen"
}, },
{ {
"name": "Reis mit Reis", "name": "Reis mit Reis",
@@ -79,22 +79,22 @@
{ {
"name": "O'jeh-gerl-schnitzel", "name": "O'jeh-gerl-schnitzel",
"price": 13.50, "price": 13.50,
"desc": "Deutsches Jägerschnitzel nach Art des Hauses mit Reis als Beilage" "desc": "Deutsches Jägerschnitzel nach Art des Hauses mit Reisbeilage"
}, },
{ {
"name": "RisiBisi", "name": "RisiBisi",
"price": 17.30, "price": 17.30,
"desc": "Lila Reis aus kontrolliertem Bio-Anbau mit knallgrünen erbsen, orangene Paprika und gelber Mais als Beilage mit sauerstoffarmem, blauem Schweinefleisch von glücklichen Tieren" "desc": "Lila Reis aus kontrolliertem Bio-Anbau mit knallgrünen Erbsen, orangener Paprika und gelben Mais als Beilage mit sauerstoffarmen, blauen Schweinefleisch von glücklichen Tieren"
}, },
{ {
"name": "Burger Duck", "name": "Burger Duck",
"price": 14.20, "price": 14.20,
"desc": "Saftiger Burger mit aufregenden Gewürzen, Gewürzgurken, Gurken, Tomaten, BBQ-Sauce und knusprig überbackenem Entenfleisch, dazu Reis" "desc": "Saftiger Burger mit aufregenden Gewürzen, Gewürzgurken, Salatgurken, Tomaten, BBQ-Sauce und knusprig überbackenem Entenfleisch, dazu Reis"
}, },
{ {
"name": "Money Boy", "name": "Money Boy",
"price": 95.90, "price": 95.90,
"desc": "Goldfarbener Reis mit in Gold überzogener Hähnchenbrust in Champagner-Soße dazu goldfarbenes Brot aus Provìnce de uberteuereé" "desc": "Goldfarbener Reis, dazu goldüberzogene Hähnchenbrust in Champagner-Soße und als Beilage goldfarbenes Brot aus Provìnce de uberteuereé"
}, },
{ {
"name": "Reis-otto", "name": "Reis-otto",
@@ -110,7 +110,7 @@
{ {
"name": "\"Chinesischer Seeräuber\"-Teller", "name": "\"Chinesischer Seeräuber\"-Teller",
"price": 0, "price": 0,
"desc": "Ein Messer, eine Gabel, ein Teller und nur eine Aufgabe: Das Essen des Nachbars! (auf Wunsch mit Seeräuber-Hut)" "desc": "Ein Messer, eine Gabel, ein Teller und nur eine Aufgabe: Das Essen des Nachbarn! (auf Wunsch mit Seeräuber-Hut)"
}, },
{ {
"name": "Käpt'n Reisbart", "name": "Käpt'n Reisbart",
@@ -141,12 +141,12 @@
{ {
"name": "Eierreiskuchen", "name": "Eierreiskuchen",
"price": 5.00, "price": 5.00,
"desc": "2 köstliche Palatschinken (regional auch Eierkuchen genannt) mit im Teig eingearbeitetem Reis, dazu feinster Powidl (regional auch Pflaumenmuß) genannt" "desc": "2 köstliche Palatschinken (regional auch Eierkuchen genannt) mit eingearbeitetem Reis im Teig, dazu feinster Powidl (regional auch Pflaumenmuß) genannt"
}, },
{ {
"name": "Süßes Reisotto", "name": "Süßes Reisotto",
"price": 8.70, "price": 8.70,
"desc": "Reis mit bunten Früchten und viel Joghurt, angerichtet mit etweas Zimt und einem Schuss Honig" "desc": "Reis mit bunten Früchten und viel Joghurt, angerichtet mit etwas Zimt und einem Schuss Honig"
}, },
{ {
"name": "Reisstrudel", "name": "Reisstrudel",
@@ -158,7 +158,7 @@
], ],
"drinks": [ "drinks": [
{ {
"name": "Auf Art des Hauses", "name": "Nach Art des Hauses",
"anchor": "haus", "anchor": "haus",
"items": [ "items": [
{ {
@@ -169,7 +169,7 @@
{ {
"name": "Reisschnaps", "name": "Reisschnaps",
"price": 2.10, "price": 2.10,
"desc": "Starker Reisschnaps als Absacker geeignet mit feiner Süße im Abgang (Alkoholgehalt 69%)" "desc": "Starker Reisschnaps als Absacker geeignet, mit feiner Süße im Abgang (Alkoholgehalt 69%)"
}, },
{ {
"name": "Reisbier", "name": "Reisbier",
@@ -179,7 +179,7 @@
{ {
"name": "Reissud", "name": "Reissud",
"price": 1.20, "price": 1.20,
"desc": "Heißer beim Reis kochen entstandener Sud; alkoholfrei, warm und jedes Mal je nach Reissorte ein individueller, neuer Geschmack" "desc": "Heißer, beim Reiskochen entstandener Sud, jedes Mal, je nach Reissorte, ein individueller Geschmack, warm & alkoholfrei"
} }
] ]
}, },
@@ -195,7 +195,7 @@
{ {
"name": "Softdrinks (0,3l)", "name": "Softdrinks (0,3l)",
"price": 2.90, "price": 2.90,
"desc": "Verschidene Sorten nur diesen Framstag im Angebot!" "desc": "Verschiedene Sorten nur diesen Framstag im Angebot!"
}, },
{ {
"name": "Wasser (1l)", "name": "Wasser (1l)",

View File

@@ -12,22 +12,22 @@
{ {
"name": "Chinesisches Bauernfrühstück", "name": "Chinesisches Bauernfrühstück",
"price": 6.40, "price": 6.40,
"desc": "Feuriges Chili in gedämpftem, kaltem Reis mit heißem Gemüse" "desc": "Feuriges Chili in gedämpften, kalten Reis mit heißem Gemüse"
}, },
{ {
"name": "Thailändisches Arbeiterfrühstück", "name": "Thailändisches Arbeiterfrühstück",
"price": 7.40, "price": 7.40,
"desc": "Feuriges Chili in gedämpftem, kaltem Reis mit heißem Gemüse und Hähnchen" "desc": "Feuriges Chili in gedämpften, kalten Reis mit heißem Gemüse und Hähnchen"
}, },
{ {
"name": "Viatnamesisches Denkerfrühstück", "name": "Viatnamesisches Denkerfrühstück",
"price": 7.90, "price": 7.90,
"desc": "Feuriges Chili in gedämpftem, kaltem Reis mit heißem Gemüse und Ente" "desc": "Feuriges Chili in gedämpften, kalten Reis mit heißem Gemüse und Ente"
}, },
{ {
"name": "90er-Reis-Plattenscheibe", "name": "90er-Reis-Plattenscheibe",
"price": 51.90, "price": 51.90,
"desc": "Für Retrofreunde die seltene Platte \"Blue Eyes\" von \"Brooky Ryes\" bestückt mit 5 verschiedenen Reissorten dazu etwas Gemüse in Vinyl-Optik" "desc": "Die seltene Platte \"Blue Eyes\" von \"Brooky Ryes\" für Retrofreunde, bestückt mit 5 verschiedenen Reissorten, dazu etwas Gemüse in Vinyl-Optik"
} }
] ]
}, },
@@ -53,12 +53,12 @@
{ {
"name": "Henker's Mahlzeit", "name": "Henker's Mahlzeit",
"price": 6.80, "price": 6.80,
"desc": "Roter Reis mit scharfem Chili mit Tomaten und roter Paprika" "desc": "Roter Reis mit scharfen Chili mit Tomaten und roter Paprika"
}, },
{ {
"name": "Nudelsuppe", "name": "Nudelsuppe",
"price": 3.30, "price": 3.30,
"desc": "Leissuppe mit liesigel Poltion klingliger Knödel" "desc": "Leissuppe mit liesigel Poltion klingligel Knödel"
} }
] ]
}, },
@@ -69,7 +69,7 @@
{ {
"name": "Grillplatte \"China\"", "name": "Grillplatte \"China\"",
"price": 11.20, "price": 11.20,
"desc": "Ein großes, paniertes Schnitzel in Form des Landes china dazu Tibet-formender Reis, Ente im Pazifik und Hähnchen als Peking geformt" "desc": "Ein großes, paniertes Schnitzel in Form des Landes China dazu Tibet-formender Reis, im Pazifik ausgelegte Ente und ein als Peking geformtes Hähnchen"
}, },
{ {
"name": "Reis mit Reis", "name": "Reis mit Reis",
@@ -79,22 +79,22 @@
{ {
"name": "O'jeh-gerl-schnitzel", "name": "O'jeh-gerl-schnitzel",
"price": 13.50, "price": 13.50,
"desc": "Deutsches Jägerschnitzel nach Art des Hauses mit Reis als Beilage" "desc": "Deutsches Jägerschnitzel nach Art des Hauses mit Reisbeilage"
}, },
{ {
"name": "RisiBisi", "name": "RisiBisi",
"price": 17.30, "price": 17.30,
"desc": "Lila Reis aus kontrolliertem Bio-Anbau mit knallgrünen erbsen, orangene Paprika und gelber Mais als Beilage mit sauerstoffarmem, blauem Schweinefleisch von glücklichen Tieren" "desc": "Lila Reis aus kontrolliertem Bio-Anbau mit knallgrünen Erbsen, orangener Paprika und gelben Mais als Beilage mit sauerstoffarmen, blauen Schweinefleisch von glücklichen Tieren"
}, },
{ {
"name": "Burger Duck", "name": "Burger Duck",
"price": 14.20, "price": 14.20,
"desc": "Saftiger Burger mit aufregenden Gewürzen, Gewürzgurken, Gurken, Tomaten, BBQ-Sauce und knusprig überbackenem Entenfleisch, dazu Reis" "desc": "Saftiger Burger mit aufregenden Gewürzen, Gewürzgurken, Salatgurken, Tomaten, BBQ-Sauce und knusprig überbackenem Entenfleisch, dazu Reis"
}, },
{ {
"name": "Money Boy", "name": "Money Boy",
"price": 95.90, "price": 95.90,
"desc": "Goldfarbener Reis mit in Gold überzogener Hähnchenbrust in Champagner-Soße dazu goldfarbenes Brot aus Provìnce de uberteuereé" "desc": "Goldfarbener Reis, dazu goldüberzogene Hähnchenbrust in Champagner-Soße und als Beilage goldfarbenes Brot aus Provìnce de uberteuereé"
}, },
{ {
"name": "Reis-otto", "name": "Reis-otto",
@@ -110,7 +110,7 @@
{ {
"name": "\"Chinesischer Seeräuber\"-Teller", "name": "\"Chinesischer Seeräuber\"-Teller",
"price": 0, "price": 0,
"desc": "Ein Messer, eine Gabel, ein Teller und nur eine Aufgabe: Das Essen des Nachbars! (auf Wunsch mit Seeräuber-Hut)" "desc": "Ein Messer, eine Gabel, ein Teller und nur eine Aufgabe: Das Essen des Nachbarn! (auf Wunsch mit Seeräuber-Hut)"
}, },
{ {
"name": "Käpt'n Reisbart", "name": "Käpt'n Reisbart",
@@ -141,12 +141,12 @@
{ {
"name": "Eierreiskuchen", "name": "Eierreiskuchen",
"price": 5.00, "price": 5.00,
"desc": "2 köstliche Palatschinken (regional auch Eierkuchen genannt) mit im Teig eingearbeitetem Reis, dazu feinster Powidl (regional auch Pflaumenmuß) genannt" "desc": "2 köstliche Palatschinken (regional auch Eierkuchen genannt) mit eingearbeitetem Reis im Teig, dazu feinster Powidl (regional auch Pflaumenmuß) genannt"
}, },
{ {
"name": "Süßes Reisotto", "name": "Süßes Reisotto",
"price": 8.70, "price": 8.70,
"desc": "Reis mit bunten Früchten und viel Joghurt, angerichtet mit etweas Zimt und einem Schuss Honig" "desc": "Reis mit bunten Früchten und viel Joghurt, angerichtet mit etwas Zimt und einem Schuss Honig"
}, },
{ {
"name": "Reisstrudel", "name": "Reisstrudel",
@@ -158,7 +158,7 @@
], ],
"drinks": [ "drinks": [
{ {
"name": "Auf Art des Hauses", "name": "Nach Art des Hauses",
"anchor": "haus", "anchor": "haus",
"items": [ "items": [
{ {
@@ -169,7 +169,7 @@
{ {
"name": "Reisschnaps", "name": "Reisschnaps",
"price": 2.10, "price": 2.10,
"desc": "Starker Reisschnaps als Absacker geeignet mit feiner Süße im Abgang (Alkoholgehalt 69%)" "desc": "Starker Reisschnaps als Absacker geeignet, mit feiner Süße im Abgang (Alkoholgehalt 69%)"
}, },
{ {
"name": "Reisbier", "name": "Reisbier",
@@ -179,7 +179,7 @@
{ {
"name": "Reissud", "name": "Reissud",
"price": 1.20, "price": 1.20,
"desc": "Heißer beim Reis kochen entstandener Sud; alkoholfrei, warm und jedes Mal je nach Reissorte ein individueller, neuer Geschmack" "desc": "Heißer, beim Reiskochen entstandener Sud, jedes Mal, je nach Reissorte, ein individueller Geschmack, warm & alkoholfrei"
} }
] ]
}, },
@@ -195,7 +195,7 @@
{ {
"name": "Softdrinks (0,3l)", "name": "Softdrinks (0,3l)",
"price": 2.90, "price": 2.90,
"desc": "Verschidene Sorten nur diesen Framstag im Angebot!" "desc": "Verschiedene Sorten nur diesen Framstag im Angebot!"
}, },
{ {
"name": "Wasser (1l)", "name": "Wasser (1l)",

View File

@@ -1,31 +1,49 @@
{ {
"items": [ "items": [
{ {
"name": "Hans Bauer", "name": "Theresa Tarantel",
"desc": "Kleine Familienfeier zu meinem 80. Geburtstag", "desc": "Ich komme alleine, möchte aber 11 Plätze reservieren, um genug Abstand von allen zu haben! Ich hasse Menschen!",
"email": "hans@gmx.de", "email": "sweetmoon@web.de",
"person": 20, "person": 11,
"time": "20:15", "time": "22:00",
"date": "16.05.2016", "date": "2016-12-07",
"read": false "read": false
}, },
{ {
"name": "Micha Müller", "name": "Hans Bauer",
"desc": "Ich will meiner geliebten Ursula einen Heiratsantrag machen. Ich suche ein gemütliches Eckchen.", "desc": "Kleine Familienfeier zu meinem 80. Geburtstag",
"email": "micha@mueller.de", "email": "hans@gmx.de",
"person": 3, "person": 20,
"time": "21:00", "time": "20:15",
"date": "14.3.2016", "date": "2016-05-16",
"read": true "read": false
}, },
{ {
"name": "Spa Mer", "name": "Micha Müller",
"desc": "Das ist eine <b>versuchte</b> Injection\r\nmit mehreren Zeilen.", "desc": "Ich will meiner geliebten Ursula einen Heiratsantrag machen. Ich suche ein gemütliches Eckchen.",
"email": "ano.ny@mus.com", "email": "micha@mueller.de",
"person": 1337, "person": 3,
"time": "00:00", "time": "21:00",
"date": "01.01.2016", "date": "2016-03-14",
"read": true "read": true
} },
] {
"name": "Spa Mer",
"desc": "Das ist eine <b>versuchte</b> Injection\r\nmit mehreren Zeilen.",
"email": "ano.ny@mus.com",
"person": 1337,
"time": "00:00",
"date": "2016-01-01",
"read": true
},
{
"name": "Agathe Andolerian",
"desc": "keine",
"email": "agathe.ando123@t-online.de",
"person": 8,
"time": "20:15",
"date": "2016-06-17",
"read": false
}
]
} }

View File

@@ -1,31 +1,49 @@
{ {
"items": [ "items": [
{ {
"name": "Hans Bauer", "name": "Theresa Tarantel",
"desc": "Kleine Familienfeier zu meinem 80. Geburtstag", "desc": "Ich komme alleine, möchte aber 11 Plätze reservieren, um genug Abstand von allen zu haben! Ich hasse Menschen!",
"email": "hans@gmx.de", "email": "sweetmoon@web.de",
"person": 20, "person": 11,
"time": "20:15", "time": "22:00",
"date": "16.05.2016", "date": "2016-12-07",
"read": false "read": false
}, },
{ {
"name": "Micha Müller", "name": "Hans Bauer",
"desc": "Ich will meiner geliebten Ursula einen Heiratsantrag machen. Ich suche ein gemütliches Eckchen.", "desc": "Kleine Familienfeier zu meinem 80. Geburtstag",
"email": "micha@mueller.de", "email": "hans@gmx.de",
"person": 3, "person": 20,
"time": "21:00", "time": "20:15",
"date": "14.3.2016", "date": "2016-05-16",
"read": true "read": false
}, },
{ {
"name": "Spa Mer", "name": "Micha Müller",
"desc": "Das ist eine <b>versuchte</b> Injection\r\nmit mehreren Zeilen.", "desc": "Ich will meiner geliebten Ursula einen Heiratsantrag machen. Ich suche ein gemütliches Eckchen.",
"email": "ano.ny@mus.com", "email": "micha@mueller.de",
"person": 1337, "person": 3,
"time": "00:00", "time": "21:00",
"date": "01.01.2016", "date": "2016-03-14",
"read": true "read": true
} },
] {
"name": "Spa Mer",
"desc": "Das ist eine <b>versuchte</b> Injection\r\nmit mehreren Zeilen.",
"email": "ano.ny@mus.com",
"person": 1337,
"time": "00:00",
"date": "2016-01-01",
"read": true
},
{
"name": "Agathe Andolerian",
"desc": "keine",
"email": "agathe.ando123@t-online.de",
"person": 8,
"time": "20:15",
"date": "2016-06-17",
"read": false
}
]
} }

View File

@@ -214,6 +214,10 @@ app.post('/login', function(req, res) {
}); });
}); });
app.get('/api/specialOffer.json', function(req, res) {
res.json({ rice: "Neuer Waldreis" });
});
var server = app.listen(3000, function() { var server = app.listen(3000, function() {
var host = server.address().address; var host = server.address().address;
var port = server.address().port; var port = server.address().port;

View File

@@ -13,7 +13,7 @@ var REGEX_READ = /^[0-9]+-read$/;
var REGEX_INT = /^(\-|\+)?([0-9]+)$/; var REGEX_INT = /^(\-|\+)?([0-9]+)$/;
var REGEX_EMAIL = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; var REGEX_EMAIL = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
var REGEX_TIME = /^(([01][0-9]|2[0-4]):[0-5][0-9])$/; var REGEX_TIME = /^(([01][0-9]|2[0-4]):[0-5][0-9])$/;
var REGEX_DATE = /^(([0-2][0-9]|3[01]).(0[0-9]|1[012]).[0-9]{4})$/; var REGEX_DATE = /^([0-9]{4})-(0[0-9]|1[012])-([0-2][0-9]|3[01])$/;
var LANG = {}; var LANG = {};
LANG["ACTIONS"] = { LANG["ACTIONS"] = {
@@ -27,7 +27,7 @@ LANG["ERROR_MESSAGES"] = {
1: "Das Feld \"Name\" darf nicht leer sein.", 1: "Das Feld \"Name\" darf nicht leer sein.",
2: "Das Feld \"Kommentar\" darf nicht leer sein.", 2: "Das Feld \"Kommentar\" darf nicht leer sein.",
4: "Das Feld \"Anzahl der Personen\" darf nicht leer und muss eine ganze, positive Zahl sein.", 4: "Das Feld \"Anzahl der Personen\" darf nicht leer und muss eine ganze, positive Zahl sein.",
8: "Das Feld \"Datum\" darf nicht leer sein und muss einem gültigen Datum im Format TT.MM.JJJJ entsprechen.", 8: "Das Feld \"Datum\" darf nicht leer sein und muss einem gültigen Datum im Format JJJJ-MM-TT entsprechen.",
16: "Das Feld \"Uhrzeit\" darf nicht leer sein und muss einer gültigen Uhrzeit im Format HH:MM entsprechen.", 16: "Das Feld \"Uhrzeit\" darf nicht leer sein und muss einer gültigen Uhrzeit im Format HH:MM entsprechen.",
32: "Das Feld \"E-Mail\" darf nicht leer und muss eine gültige E-Mail-Adresse sein.", 32: "Das Feld \"E-Mail\" darf nicht leer und muss eine gültige E-Mail-Adresse sein.",
64: "Beim Verarbeiten der Anfrage ist ein interner Fehler aufgetreten." 64: "Beim Verarbeiten der Anfrage ist ein interner Fehler aufgetreten."
@@ -155,7 +155,7 @@ module.exports.addValue = function(name, desc, person, email, date, time, nameta
} }
if (!errorCode) { if (!errorCode) {
person = filterInt(person); person = filterInt(person);
reservationJSON["items"].push({ reservationJSON["items"].unshift({
name: name, name: name,
desc: desc, desc: desc,
email: email, email: email,

View File

@@ -88,6 +88,10 @@ textarea {
margin-right: auto; margin-right: auto;
} }
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
display: none !important;
}
/* Login menu */ /* Login menu */
#loginDropdown { #loginDropdown {

View File

@@ -1,4 +1,16 @@
var app = angular.module('myApp', []); var app = angular.module('myApp', []);
app.controller("indexController", function ($scope, specialService) {
$scope.rice = "Hello World";
specialService.success(function(data) {
$scope.rice = data.rice;
});
});
app.factory("specialService", function ($http) {
return $http.get('/api/specialOffer.json');
});
app.directive('rrMap', function() { app.directive('rrMap', function() {
return { return {
restrict: 'A', restrict: 'A',

View File

@@ -12,9 +12,9 @@ mixin reservation-form(id, name, desc, email, person, time, date, message)
.col-md-6.no-padding-md .col-md-6.no-padding-md
.row .row
.col-sm-6 .col-sm-6
+input-val("date","id-date","TT.MM.JJJJ","Datum:","date",date) +input-val("date","id-date","JJJJ-MM-TT","Datum:","date",date)
.col-sm-6 .col-sm-6
+input-val("datetime-local","id-time","HH:MM","Uhrzeit:","time",time) +input-val("time","id-time","HH:MM","Uhrzeit:","time",time)
.row .row
.col-md-12 .col-md-12
+input-val("email","id-mail","max.mustermann@mail.de","E-Mail-Adresse:","email",email) +input-val("email","id-mail","max.mustermann@mail.de","E-Mail-Adresse:","email",email)
@@ -157,16 +157,15 @@ block content
h4 Haftung für Inhalte h4 Haftung für Inhalte
| Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen. p Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte können wir jedoch keine Gewähr übernehmen. Als Dienstanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Dienstanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.
h4 Urheberrecht h4 Urheberrecht
| Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen. p Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.
h4 Datenschutz h4 Datenschutz
| Die Nutzung unserer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder eMail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben. p Die Nutzung unserer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder eMail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben.
| Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich. p Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.
| Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten durch Dritte zur Übersendung von nicht ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit ausdrücklich widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten Zusendung von Werbeinformationen, etwa durch Spam-Mails, vor. p Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten durch Dritte zur Übersendung von nicht ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit ausdrücklich widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten Zusendung von Werbeinformationen, etwa durch Spam-Mails, vor.
p Das Impressum dieser Homepage wurde mit dem Impressum Generator der Kanzlei Hasselbach erstellt.
| Das Impressum dieser Homepage wurde mit dem Impressum Generator der Kanzlei Hasselbach erstellt

View File

@@ -9,7 +9,7 @@ block content
{ {
image:"/bin/image/restaurant-1-chairs.jpg", image:"/bin/image/restaurant-1-chairs.jpg",
h1:"Romantisches Dinner", h1:"Romantisches Dinner",
p:"Wie wäre es mit einem Kerzenabend zu zweit?", p:"Wie wäre es mit einem Essen bei Kerzenschein zu zweit?",
button:{ button:{
caption:"Reservieren", caption:"Reservieren",
url:"/kontakt#reservieren" url:"/kontakt#reservieren"
@@ -27,7 +27,7 @@ block content
{ {
image:"/bin/image/restaurant-3-pillar.jpg", image:"/bin/image/restaurant-3-pillar.jpg",
h1:"Gemütliche Räumlichkeiten", h1:"Gemütliche Räumlichkeiten",
p:"Bei schlechten Wetter verträumt im fernen Osten", p:"Bei schlechtem Wetter verträumt im fernen Osten",
button:{ button:{
caption:"Anfahrt", caption:"Anfahrt",
url:"/kontakt#anfahrt" url:"/kontakt#anfahrt"
@@ -46,14 +46,15 @@ block content
.row .row
.col-md-6.graygray .col-md-6.graygray
+img-responsive-center("/bin/image/rice-world.png","Welt voller Reis") +img-responsive-center("/bin/image/rice-world.png","Welt voller Reis")
.col-md-6.orange Wir bieten Ihnen Reis aus aller Welt. Wählen Sie zwischen 52 verschiedenen Sorten oder lassen Sie sich durch die perfekte Wahl des Chefkochs überraschen. .col-md-6.orange Wir bieten Ihnen Reis aus aller Welt. Wählen Sie zwischen 52 verschiedenen Sorten oder lassen Sie sich von unserem Chefkochs überraschen.
p.ng-cloak(data-ng-controller="indexController") Die heutige Empfehlung unseres Chefkochs lautet "{{rice}}". Alle Gerichte, die mit dieser Reissorte bestellt werden, sind um 1€ vergünstigt!
.row .row
.col-md-6.graygray.hidden-md.hidden-lg .col-md-6.graygray.hidden-md.hidden-lg
+img-responsive-center("/bin/image/vegetables.png","Gemüse") +img-responsive-center("/bin/image/vegetables.png","Gemüse")
.col-md-6.orange Zur Zubereitung wird regional angebautes Gemüse verwendet, denn nur so schmeckt das Essen noch frischer und die Umwelt wird geschont. Der Reis stammt aus einem fairen Handel mit Kleinbauern in ganz Asien. Nur so kann der originale Geschmack des Reis gewährt werden und er schmeckt besonders kräftig und intensiv! .col-md-6.orange Wir nutzen ausschließlich regional angebautes Gemüse, denn nur so schmeckt das Essen noch frischer. Zugleich wird die Umwelt geschont. Unser Reis stammt aus einem fairen Handel mit Kleinbauern in ganz Asien. Nur so bekommen Sie den kräftigen und intensiven Originalgeschmack des Reis zu genießen!
.col-md-6.graygray.hidden-xs.hidden-sm .col-md-6.graygray.hidden-xs.hidden-sm
+img-responsive-center("/bin/image/vegetables.png","Gemüse") +img-responsive-center("/bin/image/vegetables.png","Gemüse")
.row .row
.col-md-6.graygray .col-md-6.graygray
+img-responsive-center("/bin/image/asia-chef-2.png","Asiatischer Koch") +img-responsive-center("/bin/image/asia-chef-2.png","Asiatischer Koch")
.col-md-6.orange Unser erfahrener Koch überzeugt mit einer Vielzahl an asiatischen Gerichten. Wie verwenden origrinale Rezepte und exquisite Gewürzmischungen für einen unverwechselbaren Geschmack! .col-md-6.orange Unser erfahrener Koch überzeugt mit einer Vielzahl an asiatischen Gerichten. Wir verwenden originale Rezepte und exquisite Gewürzmischungen für einen unverwechselbaren Geschmack!