Erste Funktionalität der Menükarte per GET/POST, keine API; Umstrukturierung der Tabelle als Bootstrap-div; HTML/CSS-Cleanup

This commit is contained in:
Sebastian Seedorf
2016-03-25 13:33:42 +01:00
parent 92a5ff8eda
commit f99271ee01
202 changed files with 25173 additions and 853 deletions

View File

@@ -5,6 +5,93 @@ block content
.center-page
a(name="reservierung")
h1 Reservierung
.col-md-10.col-md-offset-1.orange
label(for="name") Name:
input(name="name")
.container
.row
.col-md-10.col-md-offset-1.orange
.row
.col-md-6
+input("name","id-name","Max Mustermann","Name:")
+input("number","id-person","2","Anzahl der Personen:")
.col-md-6
+input("datetime-local","id-date","TT.MM.JJJJ HH:MM","Datum und Uhrzeit des Besuchs:")
+input("email","id-mail","max.mustermann@mail.de","E-Mail-Adresse:")
.row
.col-md-12
.form-group
label(for="id-desc") Kommentare:
textarea(id="id-desc",class="form-control",type="datetime-local",placeholder="Weitere Kontaktdaten, Spezielle Essens-, Platzwünsche, ...",rows="7")
.row
.col-md-2.col-md-offset-4
button(type="submit",class="btn btn-success") Submit
.col-md-2
button(type="reset",class="btn btn-danger") Submit
a(name="anfahrt")
h1 Anfahrt
.container
.row
.col-md-10.col-md-offset-1.orange
.row
.col-md-6(data-rr-map="53.177747, 13.228851")
.col-md-6
p
| Restaurant Reiskorn
br
| Reisstraße 69
br
| 12345 Reisstätten
br
|
p
| Vertreten durch Richard Reis
p
| 030 110 112 1337
br
a(href='reis@korn.de') reis@korn.de
a(name="impressum")
h1 Impressum
.container
.row
.col-md-10.col-md-offset-1.orange
| Angaben gemäß § 5 TMG
br
| Richard Reis
br
| Reisstraße 69
br
| 12345 Reisstätten
h3 Vertreten durch
| Richard Reis
h4 Kontakt
| Telefon: 030-110 112 1337
br
| Fax: 030-110 112 1338
br
| E-Mail: reis@korn.de
h4 Umsatzsteuer-ID
| Gemäß §27a Umsatzsteuergesetz
br
| DE123456789
h4 Aufsichtsbehörde
| Reis-Zulassung
h3 Haftungsausschluss
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.
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.
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.
| 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.
| Das Impressum dieser Homepage wurde mit dem Impressum Generator der Kanzlei Hasselbach erstellt

View File

@@ -40,15 +40,16 @@ block content
}
}
])
.row
.col-md-6.graygray
+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.
.row
.col-md-6.orange Zur Zubereitung wird regional angebautes Gemüse verwendet. Somit 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.graygray
+img-responsive-center("/bin/image/vegetables.png","Gemüse")
.row
.col-md-6.graygray
+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!
.container
.row
.col-md-6.graygray
+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.
.row
.col-md-6.orange Zur Zubereitung wird regional angebautes Gemüse verwendet. Somit 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.graygray
+img-responsive-center("/bin/image/vegetables.png","Gemüse")
.row
.col-md-6.graygray
+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!

22
views/login.jade Normal file
View File

@@ -0,0 +1,22 @@
extends ./wrapper
block vars
- var pageTitle = 'Login'
block content
.center-page
h1 Login
.container
.row
.col-md-10.col-md-offset-1.orange
case loginAction
when 'login-success': +alert-success("Login erfolgreich! Willkommen "+loginName)
when 'login-fail': +alert-danger("Login fehlgeschlagen! Bitte überprüfen Sie Name und Passwort!")
when 'logout': +alert-info("Erfolgreich ausgeloggt!")
default: p= loginAction
+loginBox
if loginName
a(name="admin")
h1 Admin-Panel
.container
.row
.col-md-10.col-md-offset-1.orange
p Sie sind als Admin eingeloggt.

View File

@@ -1,188 +1,62 @@
extends ./wrapper
mixin menu-item-adm(name, desc, price, prefix, newItem)
.row
.col-md-1
if newItem
button.btn.btn-sm.btn-success(type="submit",form="#{prefix}")
+icon("ok")
else
form(style="display:inline",method="post",action="")
input(type='hidden',name='del',value='#{prefix}')
button.btn.btn-sm.btn-danger(type="submit")
+icon("remove")
button.btn.btn-sm.btn-primary(type="submit",form="#{prefix}")
+icon("edit")
form.col-md-11(id="#{prefix}",method="post",action="")
.col-md-9
input(type='hidden',name='nametag',value='#{prefix}')
+input-val-simple("text",prefix + "-name","Name","name","name",name)
+input-val-simple("text",prefix + "-desc","Beschreibung","desc","desc",desc)
.col-md-3.text-right
+input-group("","€")
input.form-control(type="number",id="#{prefix + '-price'}",name="price",value="#{price}").text-right
mixin menu-item(name, desc, price)
.row
.col-md-9
span.lead= name
br
span.small= desc
.col-md-3(style="display: flex;flex-direction: column;justify-content: center;")
p.text-right #{price.toFixed(2).replace(/(\d)(?=(\d{3})+\,)/g, '$1,').replace(/^(.*)\.(.*)$/g, '$1,$2€')}
mixin menu-cat(name, anchor, content, adm, prefix)
a(name= anchor)
h2= name
.container
.row
.col-md-10.col-md-offset-1.stripe
if adm
each val, index in content
+menu-item-adm(val.name, val.desc, val.price, prefix + "-" + index, "")
+menu-item-adm("", "", "", prefix + "-new", "x")
else
each val, index in content
+menu-item(val.name, val.desc, val.price)
mixin menu-part(part, adm, prefix)
each val, index in part
+menu-cat(val.name, val.anchor, val.items, adm, prefix + "-" + index)
block vars
- var pageTitle = 'Speisekarte'
block content
.center-page
h1 Speisen
a(name="vorspeise")
h2 Vorspeisen
table#menu-1
tbody
tr
td Suppe Süß-Sauer
p Beschreibung
td 3,50€
tr
td Rei-s-uppe
p Beschreibung
td 4,90€
tr
td Rei-s-alat
p Beschreibung
td 5,50€
tr
td Beste Freundschaft
p Beschreibung
td 5,50€
a(name="suppe")
h2 Suppen
table#menu-1
tbody
tr
td Suppe Süß-Sauer
p Beschreibung
td 3,50€
tr
td Rei-s-uppe
p Beschreibung
td 4,90€
tr
td Rei-s-alat
p Beschreibung
td 5,50€
tr
td Beste Freundschaft
p Beschreibung
td 5,50€
a(name="hauptspeise")
h2 Hauptspeisen
table#menu-1
tbody
tr
td Suppe Süß-Sauer
p Beschreibung
td 3,50€
tr
td Rei-s-uppe
p Beschreibung
td 4,90€
tr
td Rei-s-alat
p Beschreibung
td 5,50€
tr
td Beste Freundschaft
p Beschreibung
td 5,50€
a(name="junior")
h2 Für Junior-Reisesser
table#menu-1
tbody
tr
td Suppe Süß-Sauer
p Beschreibung
td 3,50€
tr
td Rei-s-uppe
p Beschreibung
td 4,90€
tr
td Rei-s-alat
p Beschreibung
td 5,50€
tr
td Beste Freundschaft
p Beschreibung
td 5,50€
a(name="dessert")
h2 Desserts
table#menu-1
tbody
tr
td Suppe Süß-Sauer
p Beschreibung
td 3,50€
tr
td Rei-s-uppe
p Beschreibung
td 4,90€
tr
td Rei-s-alat
p Beschreibung
td 5,50€
tr
td Beste Freundschaft
p Beschreibung
td 5,50€
+menu-part(menuJSON.food, isAdmin, "f")
h1 Getränke
a(name="haus")
h2 Auf Art des Hauses
table#menu-1
tbody
tr
td Suppe Süß-Sauer
p Beschreibung
td 3,50€
tr
td Rei-s-uppe
p Beschreibung
td 4,90€
tr
td Rei-s-alat
p Beschreibung
td 5,50€
tr
td Beste Freundschaft
p Beschreibung
td 5,50€
a(name="alkoholfrei")
h2 Alkoholfrei
table#menu-1
tbody
tr
td Suppe Süß-Sauer
p Beschreibung
td 3,50€
tr
td Rei-s-uppe
p Beschreibung
td 4,90€
tr
td Rei-s-alat
p Beschreibung
td 5,50€
tr
td Beste Freundschaft
p Beschreibung
td 5,50€
a(name="alkohol")
h2 Mit Alkohol
table#menu-1
tbody
tr
td Suppe Süß-Sauer
p Beschreibung
td 3,50€
tr
td Rei-s-uppe
p Beschreibung
td 4,90€
tr
td Rei-s-alat
p Beschreibung
td 5,50€
tr
td Beste Freundschaft
p Beschreibung
td 5,50€
a(name="spirituose")
h2 Spriritus
table#menu-1
tbody
tr
td Suppe Süß-Sauer
p Beschreibung
td 3,50€
tr
td Rei-s-uppe
p Beschreibung
td 4,90€
tr
td Rei-s-alat
p Beschreibung
td 5,50€
tr
td Beste Freundschaft
p Beschreibung
td 5,50€
+menu-part(menuJSON.drinks, isAdmin, "d")

View File

@@ -1,25 +1,78 @@
// https://color.adobe.com/de/create/color-wheel/?base=2&rule=Analogous&selected=3&name=Mein%20Color-Thema&mode=rgb&rgbvalues=0.3333333333333333,0.4666666666666667,0.1450980392156863,0.89,0.8199770812980544,0.5651209725440018,1,0.4508887128558591,0.10106228707217113,0.46,0.14302521008403368,0.24734712946944964,0.06274509803921569,0.06274509803921569,0.06274509803921569&swatchOrder=0,1,2,3,4
doctype html
extends ../node_modules/jade-bootstrap/_bootstrap
mixin input-val(type,id,placeholder,label,name,value)
.form-group
label(for="#{id}") #{label}
input.form-control(type="#{type}",id="#{id}",placeholder="#{placeholder}",name="#{name}",value="#{value}")
mixin input-val-simple(type,id,placeholder,label,name,value)
input.form-control(type="#{type}",id="#{id}",placeholder="#{placeholder}",name="#{name}",value="#{value}")
mixin navbar-main(style)
- var style = (typeof style === 'undefined') ? "default" : style
nav( role="navigation", class=["navbar", "navbar-" + style] )
block
mixin navbar-header(name, id)
.navbar-header
button.navbar-toggle.collapsed( type="button", data-toggle="collapse", data-target="#" + id, aria-expanded="false", aria-controls="navbar")
span.sr-only Toggle navigation
span.icon-bar
span.icon-bar
span.icon-bar
a.navbar-brand(href="/")= name
block
mixin navbar-collapse(id)
.collapse.navbar-collapse( id=id )
block
mixin loginBox
if !loginName
form.form#formLogin(action="/login",method="post")
+input("name","id-username","name","Username:","username")
+input("password","id-password","******","Password:","password")
button.btn.btn-default(type="submit") Login
else
p Du bist eingeloggt.
form.form#formLogin(action="/login",method="post")
input(type='hidden',name='targetLogout',value='logout')
.row
.col-sm-5.text-center
button.btn.btn-default(type="submit") Logout
.col-sm-7.text-center
a.btn.btn-default(href="/login#admin") Admin-Panel
block styles
//link(rel="stylesheet",type="text/css",href="/bin/bootstrap/css/bootstrap.min.css")
link(rel="stylesheet",type="text/css",href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css")
link(rel="stylesheet",type="text/css",href="https://fonts.googleapis.com/css?family=Bitter")
link(rel="stylesheet",type="text/css",href="/bin/css/style.css")
block page-styles
block scripts
script(src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js")
script(src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js")
script(type="text/javascript",src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js")
script(type="text/javascript",src="http://maps.google.com/maps/api/js?sensor=false")
script(type="text/javascript",src="/bin/js/angular-directives.js")
script(type="text/javascript",src="/bin/js/angular-init.js")
block speisekarte-drop
+nav_header Speisen
+nav_item("/speisekarte#vorspeise") Vorspeisen
+nav_item("/speisekarte#suppe") Suppen
+nav_item("/speisekarte#hauptspeise") Hauptspeisen
+nav_item("/speisekarte#junior") Für Junior-Reisesser
+nav_item("/speisekarte#dessert") Desserts
each val in menuJSON.food
+nav_item("/speisekarte#"+val.anchor)= val.name
+nav_divider
+nav_header Getränke
+nav_item("/speisekarte#haus") Auf Art des Hauses
+nav_item("/speisekarte#alkoholfrei") Alkoholfrei
+nav_item("/speisekarte#alkohol") Mit Alkohol
+nav_item("/speisekarte#spirituose") Spiritus
each val in menuJSON.drinks
+nav_item("/speisekarte#"+val.anchor)= val.name
block kontakt-drop
+nav_item("/kontakt#reservieren") Reservierung
@@ -28,30 +81,43 @@ block kontakt-drop
block body
block vars
+navbar("Restaurant Reiskorn","dropdown_menu","inverse")
a.navbar-brand(style="padding: 3px;",rel="home",href="#",title="Restaurant Reiskorn")
img(style="height: 100%;width: auto;",src="/bin/image/logo.png")
if (pageTitle=='Home')
+nav_item("/","active") Home
else
+nav_item("/", "") Home
if (pageTitle=='Speisekarte')
+nav_item_dropdown("/speisekarte", "active")(label="Speisekarte")
block speisekarte-drop
else
+nav_item_dropdown("/speisekarte")(label="Speisekarte")
block speisekarte-drop
if (pageTitle=='Kontakt')
+nav_item_dropdown("/kontakt", "active")(label="Kontakt")
block kontakt-drop
else
+nav_item_dropdown("/kontakt")(label="Kontakt")
block kontakt-drop
+navbar-main("default navbar-inverse")
+navbar-header("Restaurant Reiskorn","dropdown_menu")
a.navbar-brand(style="padding: 3px;",rel="home",href="/",title="Restaurant Reiskorn")
img(style="height: 100%;width: auto;",src="/bin/image/logo.png")
+navbar-collapse("dropdown_menu")
ul.nav.navbar-nav
if (pageTitle=='Home')
+nav_item("/","active") Home
else
+nav_item("/", "") Home
if (pageTitle=='Speisekarte')
+nav_item_dropdown("/speisekarte", "active")(label="Speisekarte")
block speisekarte-drop
else
+nav_item_dropdown("/speisekarte")(label="Speisekarte")
block speisekarte-drop
if (true)
+nav_item("/kontakt#impressum") Impressum
block content
if (pageTitle=='Kontakt')
+nav_item_dropdown("/kontakt", "active")(label="Kontakt")
block kontakt-drop
else
+nav_item_dropdown("/kontakt")(label="Kontakt")
block kontakt-drop
if (true)
+nav_item("/kontakt#impressum") Impressum
ul.nav.navbar-nav.pull-right
li.dropdown#menuLogin
if !loginName
a.dropdown-toggle#navLogin(href="/login",data-toggle="dropdown") Login
.dropdown-menu#loginDropdown(style="padding:17px")
+loginBox
else
a.dropdown-toggle#navLogin(href="/login",data-toggle="dropdown") Hallo #{loginName}
.dropdown-menu#loginDropdown(style="padding:17px")
+loginBox
main(data-ng-app="myApp")
block content
// block scripts