mirror of
https://github.com/kevin-DL/complete-node-bootcamp.git
synced 2026-01-15 12:44:49 +00:00
Initial commit 🚀
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
main.main
|
||||
.user-view
|
||||
nav.user-view__menu
|
||||
ul.side-nav
|
||||
li.side-nav--active
|
||||
a(href='#')
|
||||
svg
|
||||
use(xlink:href='img/icons.svg#icon-settings')
|
||||
| Settings
|
||||
li
|
||||
a(href='#')
|
||||
svg
|
||||
use(xlink:href='img/icons.svg#icon-briefcase')
|
||||
| My bookings
|
||||
li
|
||||
a(href='#')
|
||||
svg
|
||||
use(xlink:href='img/icons.svg#icon-star')
|
||||
| My reviews
|
||||
li
|
||||
a(href='#')
|
||||
svg
|
||||
use(xlink:href='img/icons.svg#icon-credit-card')
|
||||
| Billing
|
||||
.admin-nav
|
||||
h5.admin-nav__heading Admin
|
||||
ul.side-nav
|
||||
li
|
||||
a(href='#')
|
||||
svg
|
||||
use(xlink:href='img/icons.svg#icon-map')
|
||||
| Manage tours
|
||||
li
|
||||
a(href='#')
|
||||
svg
|
||||
use(xlink:href='img/icons.svg#icon-users')
|
||||
| Manage users
|
||||
li
|
||||
a(href='#')
|
||||
svg
|
||||
use(xlink:href='img/icons.svg#icon-star')
|
||||
| Manage reviews
|
||||
li
|
||||
a(href='#')
|
||||
svg
|
||||
use(xlink:href='img/icons.svg#icon-briefcase')
|
||||
|
||||
.user-view__content
|
||||
.user-view__form-container
|
||||
h2.heading-secondary.ma-bt-md Your account settings
|
||||
form.form.form-user-data
|
||||
.form__group
|
||||
label.form__label(for='name') Name
|
||||
input#name.form__input(type='text', value='Jonas Schmedtmann', required)
|
||||
.form__group.ma-bt-md
|
||||
label.form__label(for='email') Email address
|
||||
input#email.form__input(type='email', value='admin@natours.io', required)
|
||||
.form__group.form__photo-upload
|
||||
img.form__user-photo(src='img/user.jpg', alt='User photo')
|
||||
a.btn-text(href='') Choose new photo
|
||||
.form__group.right
|
||||
button.btn.btn--small.btn--green Save settings
|
||||
.line
|
||||
.user-view__form-container
|
||||
h2.heading-secondary.ma-bt-md Password change
|
||||
form.form.form-user-settings
|
||||
.form__group
|
||||
label.form__label(for='password-current') Current password
|
||||
input#password-current.form__input(type='password', placeholder='••••••••', required, minlength='8')
|
||||
.form__group
|
||||
label.form__label(for='password') New password
|
||||
input#password.form__input(type='password', placeholder='••••••••', required, minlength='8')
|
||||
.form__group.ma-bt-lg
|
||||
label.form__label(for='password-confirm') Confirm password
|
||||
input#password-confirm.form__input(type='password', placeholder='••••••••', required, minlength='8')
|
||||
.form__group.right
|
||||
button.btn.btn--small.btn--green Save password
|
||||
314
4-natours/after-section-13/dev-data/templates/emailTemplate.pug
Normal file
314
4-natours/after-section-13/dev-data/templates/emailTemplate.pug
Normal file
@@ -0,0 +1,314 @@
|
||||
//- Email template adapted from https://github.com/leemunroe/responsive-html-email-template
|
||||
//- Converted from HTML using https://html2pug.now.sh/
|
||||
|
||||
doctype html
|
||||
html
|
||||
head
|
||||
meta(name='viewport', content='width=device-width')
|
||||
meta(http-equiv='Content-Type', content='text/html; charset=UTF-8')
|
||||
title= subject
|
||||
|
||||
style.
|
||||
img {
|
||||
border: none;
|
||||
-ms-interpolation-mode: bicubic;
|
||||
max-width: 100%;
|
||||
}
|
||||
body {
|
||||
background-color: #f6f6f6;
|
||||
font-family: sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
font-size: 14px;
|
||||
line-height: 1.4;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-ms-text-size-adjust: 100%;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
table {
|
||||
border-collapse: separate;
|
||||
mso-table-lspace: 0pt;
|
||||
mso-table-rspace: 0pt;
|
||||
width: 100%; }
|
||||
table td {
|
||||
font-family: sans-serif;
|
||||
font-size: 14px;
|
||||
vertical-align: top;
|
||||
}
|
||||
.body {
|
||||
background-color: #f6f6f6;
|
||||
width: 100%;
|
||||
}
|
||||
.container {
|
||||
display: block;
|
||||
margin: 0 auto !important;
|
||||
/* makes it centered */
|
||||
max-width: 580px;
|
||||
padding: 10px;
|
||||
width: 580px;
|
||||
}
|
||||
.content {
|
||||
box-sizing: border-box;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
max-width: 580px;
|
||||
padding: 10px;
|
||||
}
|
||||
.main {
|
||||
background: #ffffff;
|
||||
border-radius: 3px;
|
||||
width: 100%;
|
||||
}
|
||||
.wrapper {
|
||||
box-sizing: border-box;
|
||||
padding: 20px;
|
||||
}
|
||||
.content-block {
|
||||
padding-bottom: 10px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
.footer {
|
||||
clear: both;
|
||||
margin-top: 10px;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
.footer td,
|
||||
.footer p,
|
||||
.footer span,
|
||||
.footer a {
|
||||
color: #999999;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
}
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4 {
|
||||
color: #000000;
|
||||
font-family: sans-serif;
|
||||
font-weight: 400;
|
||||
line-height: 1.4;
|
||||
margin: 0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
h1 {
|
||||
font-size: 35px;
|
||||
font-weight: 300;
|
||||
text-align: center;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
p,
|
||||
ul,
|
||||
ol {
|
||||
font-family: sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
p li,
|
||||
ul li,
|
||||
ol li {
|
||||
list-style-position: inside;
|
||||
margin-left: 5px;
|
||||
}
|
||||
a {
|
||||
color: #55c57a;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.btn {
|
||||
box-sizing: border-box;
|
||||
width: 100%; }
|
||||
.btn > tbody > tr > td {
|
||||
padding-bottom: 15px; }
|
||||
.btn table {
|
||||
width: auto;
|
||||
}
|
||||
.btn table td {
|
||||
background-color: #ffffff;
|
||||
border-radius: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
.btn a {
|
||||
background-color: #ffffff;
|
||||
border: solid 1px #55c57a;
|
||||
border-radius: 5px;
|
||||
box-sizing: border-box;
|
||||
color: #55c57a;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
padding: 12px 25px;
|
||||
text-decoration: none;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
.btn-primary table td {
|
||||
background-color: #55c57a;
|
||||
}
|
||||
.btn-primary a {
|
||||
background-color: #55c57a;
|
||||
border-color: #55c57a;
|
||||
color: #ffffff;
|
||||
}
|
||||
.last {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.first {
|
||||
margin-top: 0;
|
||||
}
|
||||
.align-center {
|
||||
text-align: center;
|
||||
}
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
.mt0 {
|
||||
margin-top: 0;
|
||||
}
|
||||
.mb0 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.preheader {
|
||||
color: transparent;
|
||||
display: none;
|
||||
height: 0;
|
||||
max-height: 0;
|
||||
max-width: 0;
|
||||
opacity: 0;
|
||||
overflow: hidden;
|
||||
mso-hide: all;
|
||||
visibility: hidden;
|
||||
width: 0;
|
||||
}
|
||||
.powered-by a {
|
||||
text-decoration: none;
|
||||
}
|
||||
hr {
|
||||
border: 0;
|
||||
border-bottom: 1px solid #f6f6f6;
|
||||
margin: 20px 0;
|
||||
}
|
||||
@media only screen and (max-width: 620px) {
|
||||
table[class=body] h1 {
|
||||
font-size: 28px !important;
|
||||
margin-bottom: 10px !important;
|
||||
}
|
||||
table[class=body] p,
|
||||
table[class=body] ul,
|
||||
table[class=body] ol,
|
||||
table[class=body] td,
|
||||
table[class=body] span,
|
||||
table[class=body] a {
|
||||
font-size: 16px !important;
|
||||
}
|
||||
table[class=body] .wrapper,
|
||||
table[class=body] .article {
|
||||
padding: 10px !important;
|
||||
}
|
||||
table[class=body] .content {
|
||||
padding: 0 !important;
|
||||
}
|
||||
table[class=body] .container {
|
||||
padding: 0 !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
table[class=body] .main {
|
||||
border-left-width: 0 !important;
|
||||
border-radius: 0 !important;
|
||||
border-right-width: 0 !important;
|
||||
}
|
||||
table[class=body] .btn table {
|
||||
width: 100% !important;
|
||||
}
|
||||
table[class=body] .btn a {
|
||||
width: 100% !important;
|
||||
}
|
||||
table[class=body] .img-responsive {
|
||||
height: auto !important;
|
||||
max-width: 100% !important;
|
||||
width: auto !important;
|
||||
}
|
||||
}
|
||||
@media all {
|
||||
.ExternalClass {
|
||||
width: 100%;
|
||||
}
|
||||
.ExternalClass,
|
||||
.ExternalClass p,
|
||||
.ExternalClass span,
|
||||
.ExternalClass font,
|
||||
.ExternalClass td,
|
||||
.ExternalClass div {
|
||||
line-height: 100%;
|
||||
}
|
||||
.apple-link a {
|
||||
color: inherit !important;
|
||||
font-family: inherit !important;
|
||||
font-size: inherit !important;
|
||||
font-weight: inherit !important;
|
||||
line-height: inherit !important;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
.btn-primary table td:hover {
|
||||
background-color: #2e864b !important;
|
||||
}
|
||||
.btn-primary a:hover {
|
||||
background-color: #2e864b !important;
|
||||
border-color: #2e864b !important;
|
||||
}
|
||||
}
|
||||
|
||||
body
|
||||
table.body(role='presentation', border='0', cellpadding='0', cellspacing='0')
|
||||
tbody
|
||||
tr
|
||||
td
|
||||
td.container
|
||||
.content
|
||||
// START CENTERED WHITE CONTAINER
|
||||
table.main(role='presentation')
|
||||
|
||||
// START MAIN AREA
|
||||
tbody
|
||||
tr
|
||||
td.wrapper
|
||||
table(role='presentation', border='0', cellpadding='0', cellspacing='0')
|
||||
tbody
|
||||
tr
|
||||
td
|
||||
// CONTENT
|
||||
p Hi NAME,
|
||||
p Welcome to Natours, we're glad to have you 🎉🙏
|
||||
p We're all a big familiy here, so make sure to upload your user photo so we get to know you a bit better!
|
||||
table.btn.btn-primary(role='presentation', border='0', cellpadding='0', cellspacing='0')
|
||||
tbody
|
||||
tr
|
||||
td(align='left')
|
||||
table(role='presentation', border='0', cellpadding='0', cellspacing='0')
|
||||
tbody
|
||||
tr
|
||||
td
|
||||
a(href='#', target='_blank') Upload user photo
|
||||
p If you need any help with booking your next tour, please don't hesitate to contact me!
|
||||
p - Jonas Schmedtmann, CEO
|
||||
|
||||
// START FOOTER
|
||||
.footer
|
||||
table(role='presentation', border='0', cellpadding='0', cellspacing='0')
|
||||
tbody
|
||||
tr
|
||||
td.content-block
|
||||
span.apple-link Natours Inc, 123 Nowhere Road, San Francisco CA 99999
|
||||
br
|
||||
| Don't like these emails?
|
||||
a(href='#') Unsubscribe
|
||||
//- td
|
||||
@@ -0,0 +1,6 @@
|
||||
main.main
|
||||
.error
|
||||
.error__title
|
||||
h2.heading-secondary.heading-secondary--error Uh oh! Something went wrong!
|
||||
h2.error__emoji 😢 🤯
|
||||
.error__msg Page not found!
|
||||
@@ -0,0 +1,12 @@
|
||||
main.main
|
||||
.login-form
|
||||
h2.heading-secondary.ma-bt-lg Log into your account
|
||||
form.form
|
||||
.form__group
|
||||
label.form__label(for='email') Email address
|
||||
input#email.form__input(type='email', placeholder='you@example.com', required)
|
||||
.form__group.ma-bt-md
|
||||
label.form__label(for='password') Password
|
||||
input#password.form__input(type='password', placeholder='••••••••', required, minlength='8')
|
||||
.form__group
|
||||
button.btn.btn--green Login
|
||||
@@ -0,0 +1,36 @@
|
||||
.card
|
||||
.card__header
|
||||
.card__picture
|
||||
.card__picture-overlay
|
||||
img.card__picture-img(src='img/tour-1-cover.jpg', alt='Tour 1')
|
||||
h3.heading-tertirary
|
||||
span The Forest Hiker
|
||||
|
||||
.card__details
|
||||
h4.card__sub-heading Easy 5-day tour
|
||||
p.card__text Breathtaking hike through the Canadian Banff National Park
|
||||
.card__data
|
||||
svg.card__icon
|
||||
use(xlink:href='img/icons.svg#icon-map-pin')
|
||||
span Banff, Canada
|
||||
.card__data
|
||||
svg.card__icon
|
||||
use(xlink:href='img/icons.svg#icon-calendar')
|
||||
span April 2021
|
||||
.card__data
|
||||
svg.card__icon
|
||||
use(xlink:href='img/icons.svg#icon-flag')
|
||||
span 3 stops
|
||||
.card__data
|
||||
svg.card__icon
|
||||
use(xlink:href='img/icons.svg#icon-user')
|
||||
span 25 people
|
||||
|
||||
.card__footer
|
||||
p
|
||||
span.card__footer-value $297
|
||||
span.card__footer-text per person
|
||||
p.card__ratings
|
||||
span.card__footer-value 4.9
|
||||
span.card__footer-text rating (21)
|
||||
a.btn.btn--green.btn--small(href='#') Details
|
||||
109
4-natours/after-section-13/dev-data/templates/tourTemplate.pug
Normal file
109
4-natours/after-section-13/dev-data/templates/tourTemplate.pug
Normal file
@@ -0,0 +1,109 @@
|
||||
section.section-header
|
||||
.header__hero
|
||||
.header__hero-overlay
|
||||
img.header__hero-img(src='/img/tour-5-cover.jpg', alt='Tour 5')
|
||||
|
||||
.heading-box
|
||||
h1.heading-primary
|
||||
span The Park Camper Tour
|
||||
.heading-box__group
|
||||
.heading-box__detail
|
||||
svg.heading-box__icon
|
||||
use(xlink:href='/img/icons.svg#icon-clock')
|
||||
span.heading-box__text 10 days
|
||||
.heading-box__detail
|
||||
svg.heading-box__icon
|
||||
use(xlink:href='/img/icons.svg#icon-map-pin')
|
||||
span.heading-box__text Las Vegas, USA
|
||||
|
||||
section.section-description
|
||||
.overview-box
|
||||
div
|
||||
.overview-box__group
|
||||
h2.heading-secondary.ma-bt-lg Quick facts
|
||||
.overview-box__detail
|
||||
svg.overview-box__icon
|
||||
use(xlink:href='/img/icons.svg#icon-calendar')
|
||||
span.overview-box__label Next date
|
||||
span.overview-box__text August 2021
|
||||
.overview-box__detail
|
||||
svg.overview-box__icon
|
||||
use(xlink:href='/img/icons.svg#icon-trending-up')
|
||||
span.overview-box__label Difficulty
|
||||
span.overview-box__text Medium
|
||||
.overview-box__detail
|
||||
svg.overview-box__icon
|
||||
use(xlink:href='/img/icons.svg#icon-user')
|
||||
span.overview-box__label Participants
|
||||
span.overview-box__text 10 people
|
||||
.overview-box__detail
|
||||
svg.overview-box__icon
|
||||
use(xlink:href='/img/icons.svg#icon-star')
|
||||
span.overview-box__label Rating
|
||||
span.overview-box__text 4.9 / 5
|
||||
|
||||
.overview-box__group
|
||||
h2.heading-secondary.ma-bt-lg Your tour guides
|
||||
.overview-box__detail
|
||||
img.overview-box__img(src='/img/users/user-19.jpg', alt='Lead guide')
|
||||
span.overview-box__label Lead guide
|
||||
span.overview-box__text Steven Miller
|
||||
.overview-box__detail
|
||||
img.overview-box__img(src='/img/users/user-18.jpg', alt='Tour guide')
|
||||
span.overview-box__label Tour guide
|
||||
span.overview-box__text Lisa Brown
|
||||
.overview-box__detail
|
||||
img.overview-box__img(src='/img/users/user-17.jpg', alt='Intern')
|
||||
span.overview-box__label Intern
|
||||
span.overview-box__text Max Smith
|
||||
|
||||
.description-box
|
||||
h2.heading-secondary.ma-bt-lg About the park camper tour
|
||||
p.description__text Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
|
||||
p.description__text Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum!
|
||||
|
||||
section.section-pictures
|
||||
.picture-box
|
||||
img.picture-box__img.picture-box__img--1(src='/img/tour-5-1.jpg', alt='The Park Camper Tour 1')
|
||||
.picture-box
|
||||
img.picture-box__img.picture-box__img--2(src='/img/tour-5-2.jpg', alt='The Park Camper Tour 1')
|
||||
.picture-box
|
||||
img.picture-box__img.picture-box__img--3(src='/img/tour-5-3.jpg', alt='The Park Camper Tour 1')
|
||||
|
||||
section.section-map
|
||||
#map
|
||||
|
||||
section.section-reviews
|
||||
.reviews
|
||||
|
||||
.reviews__card
|
||||
.reviews__avatar
|
||||
img.reviews__avatar-img(src='/img/users/user-7.jpg', alt='Jim Brown')
|
||||
h6.reviews__user Jim Brown
|
||||
p.reviews__text Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque dignissimos sint quo commodi corrupti accusantium veniam saepe numquam.
|
||||
.reviews__rating
|
||||
svg.reviews__star.reviews__star--active
|
||||
use(xlink:href='/img/icons.svg#icon-star')
|
||||
svg.reviews__star.reviews__star--active
|
||||
use(xlink:href='/img/icons.svg#icon-star')
|
||||
svg.reviews__star.reviews__star--active
|
||||
use(xlink:href='/img/icons.svg#icon-star')
|
||||
svg.reviews__star.reviews__star--active
|
||||
use(xlink:href='/img/icons.svg#icon-star')
|
||||
svg.reviews__star.reviews__star--active
|
||||
use(xlink:href='/img/icons.svg#icon-star')
|
||||
|
||||
section.section-cta
|
||||
.cta
|
||||
.cta__img.cta__img--logo
|
||||
img(src='/img/logo-white.png', alt='Natours logo')
|
||||
img.cta__img.cta__img--1(src='/img/tour-5-2.jpg', alt='')
|
||||
img.cta__img.cta__img--2(src='/img/tour-5-1.jpg', alt='')
|
||||
.cta__content
|
||||
h2.heading-secondary What are you waiting for?
|
||||
p.cta__text 10 days. 1 adventure. Infinite memories. Make it yours today!
|
||||
|
||||
if user
|
||||
button.btn.btn--green.span-all-rows Book tour now!
|
||||
else
|
||||
a.btn.btn--green.span-all-rows(href="/login") Login to book tour
|
||||
Reference in New Issue
Block a user