Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bbe1fb59df | ||
|
|
486b7b6ae9 | ||
|
|
c00ad762ad | ||
|
|
ff0b1dcb7a | ||
|
|
411562c7ec | ||
|
|
c521f2670b |
49
README.md
49
README.md
@@ -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 |
|
||||||
@@ -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,7 +53,7 @@
|
|||||||
{
|
{
|
||||||
"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",
|
||||||
@@ -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 mit in Gold überzogener Hähnchenbrust in Champagner-Soße, dazu goldfarbenes Brot aus Provìnce de uberteuereé"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Reis-otto",
|
"name": "Reis-otto",
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
{
|
{
|
||||||
"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",
|
||||||
@@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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,7 +53,7 @@
|
|||||||
{
|
{
|
||||||
"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",
|
||||||
@@ -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 mit in Gold überzogener Hähnchenbrust in Champagner-Soße, dazu goldfarbenes Brot aus Provìnce de uberteuereé"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Reis-otto",
|
"name": "Reis-otto",
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
{
|
{
|
||||||
"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",
|
||||||
@@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
4
main.js
4
main.js
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
12
public/js/angular-init.js
vendored
12
public/js/angular-init.js
vendored
@@ -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',
|
||||||
|
|||||||
@@ -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,7 +157,7 @@ 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.
|
| 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
|
||||||
|
|
||||||
@@ -169,4 +169,5 @@ block content
|
|||||||
| 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.
|
| 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.
|
| 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.
|
||||||
|
|
||||||
| 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.
|
||||||
|
| Das Impressum dieser Homepage wurde mit dem Impressum Generator der Kanzlei Hasselbach erstellt.
|
||||||
|
|||||||
@@ -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 wird 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!
|
||||||
Reference in New Issue
Block a user