mirror of
https://github.com/microsoft/TypeScript-Node-Starter.git
synced 2026-02-04 05:43:02 +00:00
initial commit
This commit is contained in:
15
views/account/forgot.pug
Normal file
15
views/account/forgot.pug
Normal file
@@ -0,0 +1,15 @@
|
||||
extends ../layout
|
||||
|
||||
block content
|
||||
.col-sm-8.col-sm-offset-2
|
||||
form(method='POST')
|
||||
legend Forgot Password
|
||||
input(type='hidden', name='_csrf', value=_csrf)
|
||||
.form-group
|
||||
p Enter your email address below and we will send you password reset instructions.
|
||||
label.control-label(for='email') Email
|
||||
input.form-control(type='email', name='email', id='email', placeholder='Email', autofocus, required)
|
||||
.form-group
|
||||
button.btn.btn-primary(type='submit')
|
||||
i.fa.fa-key
|
||||
| Reset Password
|
||||
29
views/account/login.pug
Normal file
29
views/account/login.pug
Normal file
@@ -0,0 +1,29 @@
|
||||
extends ../layout
|
||||
|
||||
block content
|
||||
.page-header
|
||||
h3 Sign in
|
||||
form.form-horizontal(method='POST')
|
||||
input(type='hidden', name='_csrf', value=_csrf)
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='email') Email
|
||||
.col-sm-7
|
||||
input.form-control(type='email', name='email', id='email', placeholder='Email', autofocus, required)
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='password') Password
|
||||
.col-sm-7
|
||||
input.form-control(type='password', name='password', id='password', placeholder='Password', required)
|
||||
.form-group
|
||||
.col-sm-offset-3.col-sm-7
|
||||
button.col-sm-3.btn.btn-primary(type='submit')
|
||||
i.fa.fa-user
|
||||
| Login
|
||||
a.btn.btn-link(href='/forgot') Forgot your password?
|
||||
.form-group
|
||||
.col-sm-offset-3.col-sm-7
|
||||
hr
|
||||
.form-group
|
||||
.col-sm-offset-3.col-sm-7
|
||||
a.btn.btn-block.btn-facebook.btn-social(href='/auth/facebook')
|
||||
i.fa.fa-facebook
|
||||
| Sign in with Facebook
|
||||
87
views/account/profile.pug
Normal file
87
views/account/profile.pug
Normal file
@@ -0,0 +1,87 @@
|
||||
extends ../layout
|
||||
|
||||
block content
|
||||
.page-header
|
||||
h3 Profile Information
|
||||
|
||||
form.form-horizontal(action='/account/profile', method='POST')
|
||||
input(type='hidden', name='_csrf', value=_csrf)
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='email') Email
|
||||
.col-sm-7
|
||||
input.form-control(type='email', name='email', id='email', value=user.email)
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='name') Name
|
||||
.col-sm-7
|
||||
input.form-control(type='text', name='name', id='name', value=user.profile.name)
|
||||
.form-group
|
||||
label.col-sm-3.control-label Gender
|
||||
.col-sm-6
|
||||
label.radio.col-sm-3
|
||||
input(type='radio', checked=user.profile.gender=='male', name='gender', value='male', data-toggle='radio')
|
||||
span Male
|
||||
label.radio.col-sm-3
|
||||
input(type='radio', checked=user.profile.gender=='female', name='gender', value='female', data-toggle='radio')
|
||||
span Female
|
||||
label.radio.col-sm-3
|
||||
input(type='radio', checked=user.profile.gender=='other', name='gender', value='other', data-toggle='radio')
|
||||
span Other
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='location') Location
|
||||
.col-sm-7
|
||||
input.form-control(type='text', name='location', id='location', value=user.profile.location)
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='website') Website
|
||||
.col-sm-7
|
||||
input.form-control(type='text', name='website', id='website', value=user.profile.website)
|
||||
.form-group
|
||||
label.col-sm-3.control-label Gravatar
|
||||
.col-sm-4
|
||||
img(src=user.gravatar(), class='profile', width='100', height='100')
|
||||
.form-group
|
||||
.col-sm-offset-3.col-sm-4
|
||||
button.btn.btn.btn-primary(type='submit')
|
||||
i.fa.fa-pencil
|
||||
| Update Profile
|
||||
|
||||
.page-header
|
||||
h3 Change Password
|
||||
|
||||
form.form-horizontal(action='/account/password', method='POST')
|
||||
input(type='hidden', name='_csrf', value=_csrf)
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='password') New Password
|
||||
.col-sm-7
|
||||
input.form-control(type='password', name='password', id='password')
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='confirmPassword') Confirm Password
|
||||
.col-sm-7
|
||||
input.form-control(type='password', name='confirmPassword', id='confirmPassword')
|
||||
.form-group
|
||||
.col-sm-offset-3.col-sm-4
|
||||
button.btn.btn-primary(type='submit')
|
||||
i.fa.fa-lock
|
||||
| Change Password
|
||||
|
||||
.page-header
|
||||
h3 Delete Account
|
||||
|
||||
form.form-horizontal(action='/account/delete', method='POST')
|
||||
.form-group
|
||||
p.col-sm-offset-3.col-sm-4 You can delete your account, but keep in mind this action is irreversible.
|
||||
input(type='hidden', name='_csrf', value=_csrf)
|
||||
.col-sm-offset-3.col-sm-4
|
||||
button.btn.btn-danger(type='submit')
|
||||
i.fa.fa-trash
|
||||
| Delete my account
|
||||
|
||||
.page-header
|
||||
h3 Linked Accounts
|
||||
.form-horizontal
|
||||
.form-group
|
||||
.col-sm-offset-3.col-sm-4
|
||||
if user.facebook
|
||||
p: a.text-danger(href='/account/unlink/facebook') Unlink your Facebook account
|
||||
else
|
||||
p: a(href='/auth/facebook') Link your Facebook account
|
||||
|
||||
17
views/account/reset.pug
Normal file
17
views/account/reset.pug
Normal file
@@ -0,0 +1,17 @@
|
||||
extends ../layout
|
||||
|
||||
block content
|
||||
.col-sm-8.col-sm-offset-2
|
||||
form(method='POST')
|
||||
legend Reset Password
|
||||
input(type='hidden', name='_csrf', value=_csrf)
|
||||
.form-group
|
||||
label(for='password') New Password
|
||||
input.form-control(type='password', name='password', id='password', placeholder='New password', autofocus, required)
|
||||
.form-group
|
||||
label(for='confirm') Confirm Password
|
||||
input.form-control(type='password', name='confirm', id='confirm', placeholder='Confirm password', required)
|
||||
.form-group
|
||||
button.btn.btn-primary.btn-reset(type='submit')
|
||||
i.fa.fa-keyboard-o
|
||||
| Change Password
|
||||
24
views/account/signup.pug
Normal file
24
views/account/signup.pug
Normal file
@@ -0,0 +1,24 @@
|
||||
extends ../layout
|
||||
|
||||
block content
|
||||
.page-header
|
||||
h3 Sign up
|
||||
form.form-horizontal(id='signup-form', method='POST')
|
||||
input(type='hidden', name='_csrf', value=_csrf)
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='email') Email
|
||||
.col-sm-7
|
||||
input.form-control(type='email', name='email', id='email', placeholder='Email', autofocus, required)
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='password') Password
|
||||
.col-sm-7
|
||||
input.form-control(type='password', name='password', id='password', placeholder='Password', required)
|
||||
.form-group
|
||||
label.col-sm-3.control-label(for='confirmPassword') Confirm Password
|
||||
.col-sm-7
|
||||
input.form-control(type='password', name='confirmPassword', id='confirmPassword', placeholder='Confirm Password', required)
|
||||
.form-group
|
||||
.col-sm-offset-3.col-sm-7
|
||||
button.btn.btn-success(type='submit')
|
||||
i.fa.fa-user-plus
|
||||
| Signup
|
||||
31
views/api/facebook.pug
Normal file
31
views/api/facebook.pug
Normal file
@@ -0,0 +1,31 @@
|
||||
extends ../layout
|
||||
|
||||
block content
|
||||
.page-header
|
||||
h2
|
||||
i.fa.fa-facebook-square(style='color: #335397')
|
||||
| Facebook API
|
||||
.btn-group.btn-group-justified
|
||||
a.btn.btn-primary(href='https://developers.facebook.com/docs/graph-api/quickstart/', target='_blank')
|
||||
i.fa.fa-check-square-o
|
||||
| Quickstart
|
||||
a.btn.btn-primary(href='https://developers.facebook.com/tools/explorer', target='_blank')
|
||||
i.fa.fa-facebook
|
||||
| Graph API Explorer
|
||||
a.btn.btn-primary(href='https://developers.facebook.com/docs/graph-api/reference/', target='_blank')
|
||||
i.fa.fa-code-fork
|
||||
| API Reference
|
||||
|
||||
h3
|
||||
i.fa.fa-user
|
||||
| My Profile
|
||||
img.thumbnail(src=`https://graph.facebook.com/${profile.id}/picture?type=large`, width='90', height='90')
|
||||
h4= profile.name
|
||||
h6 First Name: #{profile.first_name}
|
||||
h6 Last Name: #{profile.last_name}
|
||||
h6 Gender: #{profile.gender}
|
||||
h6 Username: #{profile.username}
|
||||
h6 Link: #{profile.link}
|
||||
h6 Email: #{profile.email}
|
||||
h6 Locale: #{profile.locale}
|
||||
h6 Timezone: #{profile.timezone}
|
||||
13
views/api/index.pug
Normal file
13
views/api/index.pug
Normal file
@@ -0,0 +1,13 @@
|
||||
extends ../layout
|
||||
|
||||
block content
|
||||
h2 API Examples
|
||||
hr
|
||||
|
||||
.row
|
||||
.col-sm-4
|
||||
a(href='/api/facebook', style='color: #fff')
|
||||
.panel.panel-default(style='background-color: #3b5998')
|
||||
.panel-body
|
||||
img(src='http://i.imgur.com/jiztYCH.png', height=40)
|
||||
| Facebook
|
||||
25
views/contact.pug
Normal file
25
views/contact.pug
Normal file
@@ -0,0 +1,25 @@
|
||||
extends layout
|
||||
|
||||
block content
|
||||
.page-header
|
||||
h3 Contact Form
|
||||
|
||||
form.form-horizontal(method='POST')
|
||||
input(type='hidden', name='_csrf', value=_csrf)
|
||||
.form-group
|
||||
label(class='col-sm-2 control-label', for='name') Name
|
||||
.col-sm-8
|
||||
input.form-control(type='text', name='name', id='name', autofocus=true)
|
||||
.form-group
|
||||
label(class='col-sm-2 control-label', for='email') Email
|
||||
.col-sm-8
|
||||
input.form-control(type='text', name='email', id='email')
|
||||
.form-group
|
||||
label(class='col-sm-2 control-label', for='message') Body
|
||||
.col-sm-8
|
||||
textarea.form-control(name='message', id='message', rows='7')
|
||||
.form-group
|
||||
.col-sm-offset-2.col-sm-8
|
||||
button.btn.btn-primary(type='submit')
|
||||
i.fa.fa-envelope
|
||||
| Send
|
||||
27
views/home.pug
Normal file
27
views/home.pug
Normal file
@@ -0,0 +1,27 @@
|
||||
extends layout
|
||||
|
||||
block content
|
||||
h1 Hackathon Starter
|
||||
p.lead A boilerplate for Node.js web applications.
|
||||
hr
|
||||
.row
|
||||
.col-sm-6
|
||||
h2 Heading
|
||||
p Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.
|
||||
p
|
||||
a.btn.btn-default(href='#', role='button') View details »
|
||||
.col-sm-6
|
||||
h2 Heading
|
||||
p Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.
|
||||
p
|
||||
a.btn.btn-default(href='#', role='button') View details »
|
||||
.col-sm-6
|
||||
h2 Heading
|
||||
p Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.
|
||||
p
|
||||
a.btn.btn-default(href='#', role='button') View details »
|
||||
.col-sm-6
|
||||
h2 Heading
|
||||
p Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.
|
||||
p
|
||||
a.btn.btn-default(href='#', role='button') View details »
|
||||
33
views/layout.pug
Normal file
33
views/layout.pug
Normal file
@@ -0,0 +1,33 @@
|
||||
doctype html
|
||||
html
|
||||
head
|
||||
meta(charset='utf-8')
|
||||
meta(http-equiv='X-UA-Compatible', content='IE=edge')
|
||||
meta(name='viewport', content='width=device-width, initial-scale=1.0')
|
||||
meta(name='theme-color' content='#4DA5F4')
|
||||
meta(name='csrf-token', content=_csrf)
|
||||
title #{title} - Hackathon Starter
|
||||
link(rel='shortcut icon', href='/images/favicon.png')
|
||||
link(rel='stylesheet', href='/css/main.css')
|
||||
|
||||
body
|
||||
include partials/header
|
||||
|
||||
.container
|
||||
include partials/flash
|
||||
block content
|
||||
|
||||
include partials/footer
|
||||
|
||||
script(src='/js/lib/jquery-3.1.1.min.js')
|
||||
script(src='/js/lib/bootstrap.min.js')
|
||||
script(src='/js/main.js')
|
||||
|
||||
// Google Analytics: change UA-XXXXX-X to be your site's ID
|
||||
script.
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-XXXXX-X', 'auto');
|
||||
ga('send', 'pageview');
|
||||
18
views/partials/flash.pug
Normal file
18
views/partials/flash.pug
Normal file
@@ -0,0 +1,18 @@
|
||||
if messages.errors
|
||||
.alert.alert-danger.fade.in
|
||||
button.close(type='button', data-dismiss='alert')
|
||||
i.fa.fa-times-circle-o
|
||||
for error in messages.errors
|
||||
div= error.msg
|
||||
if messages.info
|
||||
.alert.alert-info.fade.in
|
||||
button.close(type='button', data-dismiss='alert')
|
||||
i.fa.fa-times-circle-o
|
||||
for info in messages.info
|
||||
div= info.msg
|
||||
if messages.success
|
||||
.alert.alert-success.fade.in
|
||||
button.close(type='button', data-dismiss='alert')
|
||||
i.fa.fa-times-circle-o
|
||||
for success in messages.success
|
||||
div= success.msg
|
||||
5
views/partials/footer.pug
Normal file
5
views/partials/footer.pug
Normal file
@@ -0,0 +1,5 @@
|
||||
footer
|
||||
.container.text-center
|
||||
p.pull-left © 2016 Company, Inc. All Rights Reserved
|
||||
iframe.pull-right(src="https://ghbtns.com/github-btn.html?user=bowdenk7&repo=express-typescript-starter&type=star&count=true" frameborder="0" scrolling="0" width="90px" height="20px" style="margin-top:15px")
|
||||
|
||||
40
views/partials/header.pug
Normal file
40
views/partials/header.pug
Normal file
@@ -0,0 +1,40 @@
|
||||
.navbar.navbar-default.navbar-fixed-top
|
||||
.container
|
||||
.navbar-header
|
||||
button.navbar-toggle(type='button', data-toggle='collapse', data-target='.navbar-collapse')
|
||||
span.sr-only Toggle navigation
|
||||
span.icon-bar
|
||||
span.icon-bar
|
||||
span.icon-bar
|
||||
a.navbar-brand(href='/')
|
||||
i.fa.fa-cube
|
||||
| Project name
|
||||
.collapse.navbar-collapse
|
||||
ul.nav.navbar-nav
|
||||
li(class=(title == 'Home') ? 'active' : undefined)
|
||||
a(href='/') Home
|
||||
li(class=(title == 'API Examples') ? 'active' : undefined)
|
||||
a(href='/api') API Examples
|
||||
li(class=(title == 'Contact') ? 'active' : undefined)
|
||||
a(href='/contact') Contact
|
||||
ul.nav.navbar-nav.navbar-right
|
||||
if !user
|
||||
li(class=(title == 'Login') ? 'active' : undefined)
|
||||
a(href='/login') Login
|
||||
li(class=(title == 'Create Account') ? 'active' : undefined)
|
||||
a(href='/signup') Create Account
|
||||
else
|
||||
li.dropdown(class=(title == 'Account Management') ? 'active' : undefined)
|
||||
a.dropdown-toggle(href='#', data-toggle='dropdown')
|
||||
if user.profile.picture
|
||||
img(src=user.profile.picture)
|
||||
else
|
||||
img(src=user.gravatar(60))
|
||||
span= user.profile.name || user.email || user.id
|
||||
i.caret
|
||||
ul.dropdown-menu
|
||||
li
|
||||
a(href='/account') My Account
|
||||
li.divider
|
||||
li
|
||||
a(href='/logout') Logout
|
||||
Reference in New Issue
Block a user