├── .gitignore ├── LICENSE ├── README.md ├── chapter-01 ├── .editorconfig ├── .gitignore ├── app.js ├── bin │ └── www ├── package.json ├── public │ └── stylesheets │ │ ├── style.css │ │ ├── style.css.map │ │ └── style.sass └── server │ ├── config │ ├── config.js │ └── passport.js │ ├── controllers │ └── comments.js │ ├── models │ ├── comments.js │ └── users.js │ ├── routes │ ├── comments.js │ ├── index.js │ └── users.js │ └── views │ ├── pages │ ├── comments.ejs │ ├── error.ejs │ ├── index.ejs │ ├── login.ejs │ ├── profile.ejs │ └── signup.ejs │ └── partials │ ├── footer.ejs │ ├── header.ejs │ ├── javascript.ejs │ └── stylesheet.ejs ├── chapter-02 ├── .gitignore ├── .sequelizerc ├── app.js ├── bin │ └── www ├── config │ ├── config.json │ └── migrations │ │ ├── 20160319100145-create-user.js │ │ └── 20160319101806-create-band.js ├── controllers │ ├── band.js │ ├── index.js │ └── user.js ├── models │ ├── band.js │ ├── index.js │ └── user.js ├── mvc_mysql_app.sql ├── package.json ├── public │ └── stylesheets │ │ └── style.css └── views │ ├── pages │ ├── band-list.html │ ├── error.html │ ├── index.html │ └── layout.html │ └── partials │ ├── footer.html │ └── head.html ├── chapter-03 ├── .editorconfig ├── .gitignore ├── app.js ├── package.json ├── public │ ├── images │ │ └── image-placeholder.jpg │ ├── javascripts │ │ ├── bootstrap.min.js │ │ └── jquery.min.js │ ├── stylesheets │ │ ├── bootstrap.min.css │ │ ├── style.css │ │ ├── style.css.map │ │ └── style.sass │ └── videos │ │ ├── sample.mp4 │ │ └── sample.webm └── server │ ├── config │ ├── config.js │ └── passport.js │ ├── controllers │ ├── auth.js │ ├── comments.js │ ├── images.js │ ├── index.js │ └── videos.js │ ├── models │ ├── comments.js │ ├── images.js │ ├── users.js │ └── videos.js │ └── views │ ├── pages │ ├── comments.ejs │ ├── error.ejs │ ├── images-gallery.ejs │ ├── index.ejs │ ├── login.ejs │ ├── profile.ejs │ ├── signup.ejs │ └── videos.ejs │ └── partials │ ├── footer.ejs │ ├── header.ejs │ ├── javascript.ejs │ └── stylesheet.ejs ├── chapter-04 ├── .bowerrc ├── .editorconfig ├── .env ├── .gitignore ├── app.js ├── app │ ├── controllers │ │ ├── books.js │ │ └── home.js │ ├── models │ │ ├── article.js │ │ └── book.js │ └── views │ │ ├── book │ │ ├── add-photo.swig │ │ ├── books.swig │ │ └── posted-photo.swig │ │ ├── error.swig │ │ ├── index.swig │ │ └── layout.swig ├── bower.json ├── config │ ├── config.js │ ├── env.js │ └── express.js ├── gulpfile.js ├── package.json └── public │ └── css │ └── style.css ├── chapter-05 ├── .bowerrc ├── .editorconfig ├── .gitignore ├── README.md ├── app.js ├── app │ ├── controllers │ │ ├── home.js │ │ └── locations.js │ ├── models │ │ ├── article.js │ │ ├── location.js │ │ └── store.js │ └── views │ │ ├── pages │ │ ├── add-location.html │ │ ├── error.html │ │ ├── index.html │ │ ├── layout.html │ │ └── locations.html │ │ └── partials │ │ ├── footer.html │ │ └── head.html ├── bower.json ├── config │ ├── config.js │ └── express.js ├── gulpfile.js ├── locations.json ├── package.json └── public │ ├── css │ └── style.css │ ├── images │ ├── pin-off.png │ └── pin.png │ └── js │ └── getCurrentPosition.js ├── chapter-06 ├── .editorconfig ├── .gitignore ├── .jshintignore ├── .jshintrc ├── .yo-rc.json ├── client │ ├── README.md │ ├── images │ │ ├── heritage.jpg │ │ └── knucklehead.jpg │ ├── index.html │ └── js │ │ ├── motorcycles.js │ │ └── reviews.js ├── common │ └── models │ │ ├── motorcycle.js │ │ ├── motorcycle.json │ │ ├── review.js │ │ └── review.json ├── package.json └── server │ ├── boot │ ├── _root.js │ └── create-sample-models.js │ ├── component-config.json │ ├── config.json │ ├── datasources.json │ ├── middleware.json │ ├── middleware.production.json │ ├── model-config.json │ └── server.js ├── chapter-07 ├── .bowerrc ├── .editorconfig ├── .gitignore ├── app.js ├── bower.json ├── gulpfile.js ├── package.json ├── public │ ├── css │ │ └── style.css │ └── js │ │ └── main.js ├── routes │ └── index.js └── views │ ├── error.ejs │ ├── footer.ejs │ ├── header.ejs │ └── index.ejs ├── chapter-08 ├── .editorconfig ├── .gitignore ├── Procfile ├── gulpfile.js ├── keystone.js ├── models │ ├── About.js │ ├── Enquiry.js │ ├── Gallery.js │ ├── Post.js │ ├── PostCategory.js │ └── UserAdmin.js ├── package.json ├── public │ ├── favicon.ico │ ├── fonts │ │ └── bootstrap │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ ├── images │ │ ├── header-bg-1920x1440.jpg │ │ ├── logo-email.gif │ │ └── logo.svg │ ├── js │ │ ├── bootstrap │ │ │ ├── affix.js │ │ │ ├── alert.js │ │ │ ├── bootstrap-3.3.5.js │ │ │ ├── bootstrap-3.3.5.min.js │ │ │ ├── button.js │ │ │ ├── carousel.js │ │ │ ├── collapse.js │ │ │ ├── dropdown.js │ │ │ ├── modal.js │ │ │ ├── npm.js │ │ │ ├── popover.js │ │ │ ├── scrollspy.js │ │ │ ├── tab.js │ │ │ ├── tooltip.js │ │ │ └── transition.js │ │ ├── jquery │ │ │ ├── jquery-1.11.3.js │ │ │ ├── jquery-1.11.3.min.js │ │ │ ├── jquery-2.1.4.js │ │ │ └── jquery-2.1.4.min.js │ │ └── scripts.js │ └── styles │ │ ├── bootstrap │ │ ├── _bootstrap-compass.scss │ │ ├── _bootstrap-mincer.scss │ │ ├── _bootstrap-sprockets.scss │ │ ├── _bootstrap.scss │ │ ├── _bootswatch.scss │ │ └── bootstrap │ │ │ ├── _alerts.scss │ │ │ ├── _badges.scss │ │ │ ├── _breadcrumbs.scss │ │ │ ├── _button-groups.scss │ │ │ ├── _buttons.scss │ │ │ ├── _carousel.scss │ │ │ ├── _close.scss │ │ │ ├── _code.scss │ │ │ ├── _component-animations.scss │ │ │ ├── _dropdowns.scss │ │ │ ├── _forms.scss │ │ │ ├── _glyphicons.scss │ │ │ ├── _grid.scss │ │ │ ├── _input-groups.scss │ │ │ ├── _jumbotron.scss │ │ │ ├── _labels.scss │ │ │ ├── _list-group.scss │ │ │ ├── _media.scss │ │ │ ├── _mixins.scss │ │ │ ├── _modals.scss │ │ │ ├── _navbar.scss │ │ │ ├── _navs.scss │ │ │ ├── _normalize.scss │ │ │ ├── _pager.scss │ │ │ ├── _pagination.scss │ │ │ ├── _panels.scss │ │ │ ├── _popovers.scss │ │ │ ├── _print.scss │ │ │ ├── _progress-bars.scss │ │ │ ├── _responsive-embed.scss │ │ │ ├── _responsive-utilities.scss │ │ │ ├── _scaffolding.scss │ │ │ ├── _tables.scss │ │ │ ├── _theme.scss │ │ │ ├── _theme_variables.scss │ │ │ ├── _thumbnails.scss │ │ │ ├── _tooltip.scss │ │ │ ├── _type.scss │ │ │ ├── _utilities.scss │ │ │ ├── _variables.scss │ │ │ ├── _wells.scss │ │ │ └── mixins │ │ │ ├── _alerts.scss │ │ │ ├── _background-variant.scss │ │ │ ├── _border-radius.scss │ │ │ ├── _buttons.scss │ │ │ ├── _center-block.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _forms.scss │ │ │ ├── _gradients.scss │ │ │ ├── _grid-framework.scss │ │ │ ├── _grid.scss │ │ │ ├── _hide-text.scss │ │ │ ├── _image.scss │ │ │ ├── _labels.scss │ │ │ ├── _list-group.scss │ │ │ ├── _nav-divider.scss │ │ │ ├── _nav-vertical-align.scss │ │ │ ├── _opacity.scss │ │ │ ├── _pagination.scss │ │ │ ├── _panels.scss │ │ │ ├── _progress-bar.scss │ │ │ ├── _reset-filter.scss │ │ │ ├── _reset-text.scss │ │ │ ├── _resize.scss │ │ │ ├── _responsive-visibility.scss │ │ │ ├── _size.scss │ │ │ ├── _tab-focus.scss │ │ │ ├── _table-row.scss │ │ │ ├── _text-emphasis.scss │ │ │ ├── _text-overflow.scss │ │ │ └── _vendor-prefixes.scss │ │ ├── site.css │ │ ├── site.scss │ │ └── site │ │ ├── _layout.scss │ │ ├── _mixins.scss │ │ └── _variables.scss ├── routes │ ├── emails.js │ ├── index.js │ ├── middleware.js │ └── views │ │ ├── about.js │ │ ├── blog.js │ │ ├── contact.js │ │ ├── gallery.js │ │ ├── index.js │ │ └── post.js ├── templates │ └── themes │ │ ├── default │ │ ├── emails │ │ │ └── enquiry-notification.swig │ │ ├── layouts │ │ │ └── default.swig │ │ ├── mixins │ │ │ └── flash-messages.swig │ │ └── views │ │ │ ├── blog.swig │ │ │ ├── contact.swig │ │ │ ├── errors │ │ │ ├── 404.swig │ │ │ └── 500.swig │ │ │ ├── gallery.swig │ │ │ ├── index.swig │ │ │ └── post.swig │ │ └── newBlog │ │ ├── emails │ │ └── enquiry-notification.swig │ │ ├── layouts │ │ └── default.swig │ │ ├── mixins │ │ └── flash-messages.swig │ │ └── views │ │ ├── about.swig │ │ ├── blog.swig │ │ ├── contact.swig │ │ ├── errors │ │ ├── 404.swig │ │ └── 500.swig │ │ ├── gallery.swig │ │ ├── index.swig │ │ └── post.swig └── updates │ └── 0.0.1-admins.js ├── chapter-09 ├── .bowerrc ├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .eslintrc.json ├── .gitignore ├── .yo-rc.json ├── Procfile ├── arc-manager.json ├── bin │ └── deploy.sh ├── bower.json ├── client │ ├── README.md │ ├── components │ │ ├── bootstrap │ │ │ ├── .bower.json │ │ │ ├── CHANGELOG.md │ │ │ ├── Gemfile │ │ │ ├── Gemfile.lock │ │ │ ├── Gruntfile.js │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bower.json │ │ │ ├── dist │ │ │ │ ├── css │ │ │ │ │ ├── bootstrap.css │ │ │ │ │ ├── bootstrap.css.map │ │ │ │ │ ├── bootstrap.min.css │ │ │ │ │ └── bootstrap.min.css.map │ │ │ │ └── js │ │ │ │ │ ├── bootstrap.js │ │ │ │ │ ├── bootstrap.min.js │ │ │ │ │ ├── npm.js │ │ │ │ │ └── umd │ │ │ │ │ ├── alert.js │ │ │ │ │ ├── button.js │ │ │ │ │ ├── carousel.js │ │ │ │ │ ├── collapse.js │ │ │ │ │ ├── dropdown.js │ │ │ │ │ ├── modal.js │ │ │ │ │ ├── popover.js │ │ │ │ │ ├── scrollspy.js │ │ │ │ │ ├── tab.js │ │ │ │ │ ├── tooltip.js │ │ │ │ │ └── util.js │ │ │ ├── grunt │ │ │ │ ├── .jshintrc │ │ │ │ ├── bs-commonjs-generator.js │ │ │ │ ├── bs-sass-compile │ │ │ │ │ ├── libsass.js │ │ │ │ │ └── sass.js │ │ │ │ ├── configBridge.json │ │ │ │ └── sauce_browsers.yml │ │ │ ├── js │ │ │ │ ├── .eslintrc │ │ │ │ ├── .jscsrc │ │ │ │ ├── dist │ │ │ │ │ ├── alert.js │ │ │ │ │ ├── alert.js.map │ │ │ │ │ ├── button.js │ │ │ │ │ ├── button.js.map │ │ │ │ │ ├── carousel.js │ │ │ │ │ ├── carousel.js.map │ │ │ │ │ ├── collapse.js │ │ │ │ │ ├── collapse.js.map │ │ │ │ │ ├── dropdown.js │ │ │ │ │ ├── dropdown.js.map │ │ │ │ │ ├── modal.js │ │ │ │ │ ├── modal.js.map │ │ │ │ │ ├── popover.js │ │ │ │ │ ├── popover.js.map │ │ │ │ │ ├── scrollspy.js │ │ │ │ │ ├── scrollspy.js.map │ │ │ │ │ ├── tab.js │ │ │ │ │ ├── tab.js.map │ │ │ │ │ ├── tooltip.js │ │ │ │ │ ├── tooltip.js.map │ │ │ │ │ ├── util.js │ │ │ │ │ └── util.js.map │ │ │ │ └── src │ │ │ │ │ ├── alert.js │ │ │ │ │ ├── button.js │ │ │ │ │ ├── carousel.js │ │ │ │ │ ├── collapse.js │ │ │ │ │ ├── dropdown.js │ │ │ │ │ ├── modal.js │ │ │ │ │ ├── popover.js │ │ │ │ │ ├── scrollspy.js │ │ │ │ │ ├── tab.js │ │ │ │ │ ├── tooltip.js │ │ │ │ │ └── util.js │ │ │ ├── package.js │ │ │ ├── package.json │ │ │ ├── sache.json │ │ │ └── scss │ │ │ │ ├── .csscomb.json │ │ │ │ ├── .scsslint.yml │ │ │ │ ├── _alert.scss │ │ │ │ ├── _animation.scss │ │ │ │ ├── _breadcrumb.scss │ │ │ │ ├── _button-group.scss │ │ │ │ ├── _buttons.scss │ │ │ │ ├── _card.scss │ │ │ │ ├── _carousel.scss │ │ │ │ ├── _close.scss │ │ │ │ ├── _code.scss │ │ │ │ ├── _custom-forms.scss │ │ │ │ ├── _dropdown.scss │ │ │ │ ├── _forms.scss │ │ │ │ ├── _grid.scss │ │ │ │ ├── _images.scss │ │ │ │ ├── _input-group.scss │ │ │ │ ├── _jumbotron.scss │ │ │ │ ├── _labels.scss │ │ │ │ ├── _list-group.scss │ │ │ │ ├── _media.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _modal.scss │ │ │ │ ├── _nav.scss │ │ │ │ ├── _navbar.scss │ │ │ │ ├── _normalize.scss │ │ │ │ ├── _pager.scss │ │ │ │ ├── _pagination.scss │ │ │ │ ├── _popover.scss │ │ │ │ ├── _print.scss │ │ │ │ ├── _progress.scss │ │ │ │ ├── _reboot.scss │ │ │ │ ├── _responsive-embed.scss │ │ │ │ ├── _tables.scss │ │ │ │ ├── _tooltip.scss │ │ │ │ ├── _type.scss │ │ │ │ ├── _utilities-responsive.scss │ │ │ │ ├── _utilities-spacing.scss │ │ │ │ ├── _utilities.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── bootstrap-flex.scss │ │ │ │ ├── bootstrap-grid.scss │ │ │ │ ├── bootstrap-reboot.scss │ │ │ │ ├── bootstrap.scss │ │ │ │ └── mixins │ │ │ │ ├── _alert.scss │ │ │ │ ├── _background-variant.scss │ │ │ │ ├── _border-radius.scss │ │ │ │ ├── _breakpoints.scss │ │ │ │ ├── _buttons.scss │ │ │ │ ├── _center-block.scss │ │ │ │ ├── _clearfix.scss │ │ │ │ ├── _forms.scss │ │ │ │ ├── _gradients.scss │ │ │ │ ├── _grid-framework.scss │ │ │ │ ├── _grid.scss │ │ │ │ ├── _hide-text.scss │ │ │ │ ├── _hover.scss │ │ │ │ ├── _image.scss │ │ │ │ ├── _label.scss │ │ │ │ ├── _list-group.scss │ │ │ │ ├── _nav-divider.scss │ │ │ │ ├── _navbar-align.scss │ │ │ │ ├── _pagination.scss │ │ │ │ ├── _progress.scss │ │ │ │ ├── _pulls.scss │ │ │ │ ├── _reset-filter.scss │ │ │ │ ├── _reset-text.scss │ │ │ │ ├── _resize.scss │ │ │ │ ├── _responsive-visibility.scss │ │ │ │ ├── _screen-reader.scss │ │ │ │ ├── _size.scss │ │ │ │ ├── _tab-focus.scss │ │ │ │ ├── _table-row.scss │ │ │ │ ├── _text-emphasis.scss │ │ │ │ └── _text-truncate.scss │ │ ├── fancybox │ │ │ ├── .bower.json │ │ │ ├── .gitattributes │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── demo │ │ │ │ ├── 1_b.jpg │ │ │ │ ├── 1_s.jpg │ │ │ │ ├── 2_b.jpg │ │ │ │ ├── 2_s.jpg │ │ │ │ ├── 3_b.jpg │ │ │ │ ├── 3_s.jpg │ │ │ │ ├── 4_b.jpg │ │ │ │ ├── 4_s.jpg │ │ │ │ ├── 5_b.jpg │ │ │ │ ├── 5_s.jpg │ │ │ │ ├── ajax.txt │ │ │ │ ├── iframe.html │ │ │ │ └── index.html │ │ │ ├── lib │ │ │ │ ├── jquery-1.10.1.min.js │ │ │ │ ├── jquery-1.9.0.min.js │ │ │ │ └── jquery.mousewheel-3.0.6.pack.js │ │ │ ├── source │ │ │ │ ├── blank.gif │ │ │ │ ├── fancybox_loading.gif │ │ │ │ ├── fancybox_loading@2x.gif │ │ │ │ ├── fancybox_overlay.png │ │ │ │ ├── fancybox_sprite.png │ │ │ │ ├── fancybox_sprite@2x.png │ │ │ │ ├── helpers │ │ │ │ │ ├── fancybox_buttons.png │ │ │ │ │ ├── jquery.fancybox-buttons.css │ │ │ │ │ ├── jquery.fancybox-buttons.js │ │ │ │ │ ├── jquery.fancybox-media.js │ │ │ │ │ ├── jquery.fancybox-thumbs.css │ │ │ │ │ └── jquery.fancybox-thumbs.js │ │ │ │ ├── jquery.fancybox.css │ │ │ │ ├── jquery.fancybox.js │ │ │ │ └── jquery.fancybox.pack.js │ │ │ └── sprite.psd │ │ ├── jquery │ │ │ ├── .bower.json │ │ │ ├── AUTHORS.txt │ │ │ ├── LICENSE.txt │ │ │ ├── README.md │ │ │ ├── bower.json │ │ │ ├── dist │ │ │ │ ├── jquery.js │ │ │ │ ├── jquery.min.js │ │ │ │ └── jquery.min.map │ │ │ ├── external │ │ │ │ └── sizzle │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ └── dist │ │ │ │ │ ├── sizzle.js │ │ │ │ │ ├── sizzle.min.js │ │ │ │ │ └── sizzle.min.map │ │ │ └── src │ │ │ │ ├── .jshintrc │ │ │ │ ├── ajax.js │ │ │ │ ├── ajax │ │ │ │ ├── jsonp.js │ │ │ │ ├── load.js │ │ │ │ ├── parseJSON.js │ │ │ │ ├── parseXML.js │ │ │ │ ├── script.js │ │ │ │ ├── var │ │ │ │ │ ├── location.js │ │ │ │ │ ├── nonce.js │ │ │ │ │ └── rquery.js │ │ │ │ └── xhr.js │ │ │ │ ├── attributes.js │ │ │ │ ├── attributes │ │ │ │ ├── attr.js │ │ │ │ ├── classes.js │ │ │ │ ├── prop.js │ │ │ │ ├── support.js │ │ │ │ └── val.js │ │ │ │ ├── callbacks.js │ │ │ │ ├── core.js │ │ │ │ ├── core │ │ │ │ ├── access.js │ │ │ │ ├── init.js │ │ │ │ ├── parseHTML.js │ │ │ │ ├── ready.js │ │ │ │ └── var │ │ │ │ │ └── rsingleTag.js │ │ │ │ ├── css.js │ │ │ │ ├── css │ │ │ │ ├── addGetHookIf.js │ │ │ │ ├── adjustCSS.js │ │ │ │ ├── curCSS.js │ │ │ │ ├── defaultDisplay.js │ │ │ │ ├── hiddenVisibleSelectors.js │ │ │ │ ├── showHide.js │ │ │ │ ├── support.js │ │ │ │ └── var │ │ │ │ │ ├── cssExpand.js │ │ │ │ │ ├── getStyles.js │ │ │ │ │ ├── isHidden.js │ │ │ │ │ ├── rmargin.js │ │ │ │ │ ├── rnumnonpx.js │ │ │ │ │ └── swap.js │ │ │ │ ├── data.js │ │ │ │ ├── data │ │ │ │ ├── Data.js │ │ │ │ └── var │ │ │ │ │ ├── acceptData.js │ │ │ │ │ ├── dataPriv.js │ │ │ │ │ └── dataUser.js │ │ │ │ ├── deferred.js │ │ │ │ ├── deprecated.js │ │ │ │ ├── dimensions.js │ │ │ │ ├── effects.js │ │ │ │ ├── effects │ │ │ │ ├── Tween.js │ │ │ │ └── animatedSelector.js │ │ │ │ ├── event.js │ │ │ │ ├── event │ │ │ │ ├── ajax.js │ │ │ │ ├── alias.js │ │ │ │ ├── focusin.js │ │ │ │ ├── support.js │ │ │ │ └── trigger.js │ │ │ │ ├── exports │ │ │ │ ├── amd.js │ │ │ │ └── global.js │ │ │ │ ├── intro.js │ │ │ │ ├── jquery.js │ │ │ │ ├── manipulation.js │ │ │ │ ├── manipulation │ │ │ │ ├── _evalUrl.js │ │ │ │ ├── buildFragment.js │ │ │ │ ├── getAll.js │ │ │ │ ├── setGlobalEval.js │ │ │ │ ├── support.js │ │ │ │ ├── var │ │ │ │ │ ├── rcheckableType.js │ │ │ │ │ ├── rscriptType.js │ │ │ │ │ └── rtagName.js │ │ │ │ └── wrapMap.js │ │ │ │ ├── offset.js │ │ │ │ ├── outro.js │ │ │ │ ├── queue.js │ │ │ │ ├── queue │ │ │ │ └── delay.js │ │ │ │ ├── selector-native.js │ │ │ │ ├── selector-sizzle.js │ │ │ │ ├── selector.js │ │ │ │ ├── serialize.js │ │ │ │ ├── traversing.js │ │ │ │ ├── traversing │ │ │ │ ├── findFilter.js │ │ │ │ └── var │ │ │ │ │ ├── dir.js │ │ │ │ │ ├── rneedsContext.js │ │ │ │ │ └── siblings.js │ │ │ │ ├── var │ │ │ │ ├── arr.js │ │ │ │ ├── class2type.js │ │ │ │ ├── concat.js │ │ │ │ ├── document.js │ │ │ │ ├── documentElement.js │ │ │ │ ├── hasOwn.js │ │ │ │ ├── indexOf.js │ │ │ │ ├── pnum.js │ │ │ │ ├── push.js │ │ │ │ ├── rcssNum.js │ │ │ │ ├── rnotwhite.js │ │ │ │ ├── slice.js │ │ │ │ ├── support.js │ │ │ │ └── toString.js │ │ │ │ └── wrap.js │ │ └── react │ │ │ ├── .bower.json │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ ├── bower.json │ │ │ ├── react-dom-server.js │ │ │ ├── react-dom-server.min.js │ │ │ ├── react-dom.js │ │ │ ├── react-dom.min.js │ │ │ ├── react-with-addons.js │ │ │ ├── react-with-addons.min.js │ │ │ ├── react.js │ │ │ └── react.min.js │ ├── css │ │ └── main.css │ ├── images │ │ └── gallery │ │ │ ├── sample-car-gallery.jpg │ │ │ ├── sample-car1.jpg │ │ │ ├── sample-car2.jpg │ │ │ ├── sample-car3.jpg │ │ │ ├── sample-moto-gallery.jpg │ │ │ ├── sample-moto1.jpg │ │ │ ├── sample-moto2.jpg │ │ │ ├── sample-moto3.jpg │ │ │ └── src │ │ │ ├── sample-car-gallery.jpg │ │ │ ├── sample-car1.jpg │ │ │ ├── sample-car2.jpg │ │ │ ├── sample-car3.jpg │ │ │ ├── sample-moto-gallery.jpg │ │ │ ├── sample-moto1.jpg │ │ │ ├── sample-moto2.jpg │ │ │ └── sample-moto3.jpg │ ├── index.html │ ├── js │ │ ├── app.config.js │ │ ├── app.js │ │ ├── app.routes.js │ │ ├── controllers.js │ │ ├── libs │ │ │ ├── angular-resource.js │ │ │ ├── angular-ui-router.js │ │ │ ├── angular.js │ │ │ ├── jquery.js │ │ │ └── libs.js │ │ ├── scripts │ │ │ └── scripts.js │ │ └── services.js │ └── views │ │ ├── galleries.html │ │ └── home.html ├── common │ └── models │ │ ├── bike.js │ │ ├── bike.json │ │ ├── gallery.js │ │ └── gallery.json ├── package.json ├── server │ ├── boot │ │ ├── _root.js │ │ └── create-sample-models.js │ ├── component-config.json │ ├── config.json │ ├── datasources.json │ ├── middleware.json │ ├── middleware.production.json │ ├── model-config.json │ └── server.js └── src │ ├── images │ └── gallery │ │ ├── sample-car-gallery.jpg │ │ ├── sample-car1.jpg │ │ ├── sample-car2.jpg │ │ ├── sample-car3.jpg │ │ ├── sample-moto-gallery.jpg │ │ ├── sample-moto1.jpg │ │ ├── sample-moto2.jpg │ │ └── sample-moto3.jpg │ ├── libs │ ├── bootstrap.js │ ├── jquery.fancybox.js │ └── jquery.fancybox.pack.js │ ├── scripts │ └── gallery.js │ └── scss │ ├── main.scss │ └── vendor │ ├── .csscomb.json │ ├── .scsslint.yml │ ├── _alert.scss │ ├── _animation.scss │ ├── _breadcrumb.scss │ ├── _button-group.scss │ ├── _buttons.scss │ ├── _card.scss │ ├── _carousel.scss │ ├── _close.scss │ ├── _code.scss │ ├── _custom-forms.scss │ ├── _dropdown.scss │ ├── _forms.scss │ ├── _grid.scss │ ├── _images.scss │ ├── _input-group.scss │ ├── _jumbotron.scss │ ├── _labels.scss │ ├── _list-group.scss │ ├── _media.scss │ ├── _mixins.scss │ ├── _modal.scss │ ├── _nav.scss │ ├── _navbar.scss │ ├── _normalize.scss │ ├── _pager.scss │ ├── _pagination.scss │ ├── _popover.scss │ ├── _print.scss │ ├── _progress.scss │ ├── _reboot.scss │ ├── _responsive-embed.scss │ ├── _tables.scss │ ├── _tooltip.scss │ ├── _type.scss │ ├── _utilities-responsive.scss │ ├── _utilities-spacing.scss │ ├── _utilities.scss │ ├── _variables.scss │ ├── bootstrap-flex.scss │ ├── bootstrap-grid.scss │ ├── bootstrap-reboot.scss │ ├── bootstrap.scss │ └── mixins │ ├── _alert.scss │ ├── _background-variant.scss │ ├── _border-radius.scss │ ├── _breakpoints.scss │ ├── _buttons.scss │ ├── _center-block.scss │ ├── _clearfix.scss │ ├── _forms.scss │ ├── _gradients.scss │ ├── _grid-framework.scss │ ├── _grid.scss │ ├── _hide-text.scss │ ├── _hover.scss │ ├── _image.scss │ ├── _label.scss │ ├── _list-group.scss │ ├── _nav-divider.scss │ ├── _navbar-align.scss │ ├── _pagination.scss │ ├── _progress.scss │ ├── _pulls.scss │ ├── _reset-filter.scss │ ├── _reset-text.scss │ ├── _resize.scss │ ├── _responsive-visibility.scss │ ├── _screen-reader.scss │ ├── _size.scss │ ├── _tab-focus.scss │ ├── _table-row.scss │ ├── _text-emphasis.scss │ └── _text-truncate.scss └── chapter-10 ├── .env ├── .gitignore ├── Dockerfile ├── Procfile ├── config └── passport.js ├── controllers ├── home.js └── user.js ├── docker-compose.yml ├── models └── User.js ├── package.json ├── public ├── css │ ├── main.css │ ├── main.scss │ └── vendor │ │ ├── _bootstrap.scss │ │ └── bootstrap │ │ ├── _alerts.scss │ │ ├── _badges.scss │ │ ├── _breadcrumbs.scss │ │ ├── _button-groups.scss │ │ ├── _buttons.scss │ │ ├── _carousel.scss │ │ ├── _close.scss │ │ ├── _code.scss │ │ ├── _component-animations.scss │ │ ├── _dropdowns.scss │ │ ├── _forms.scss │ │ ├── _glyphicons.scss │ │ ├── _grid.scss │ │ ├── _input-groups.scss │ │ ├── _jumbotron.scss │ │ ├── _labels.scss │ │ ├── _list-group.scss │ │ ├── _media.scss │ │ ├── _mixins.scss │ │ ├── _modals.scss │ │ ├── _navbar.scss │ │ ├── _navs.scss │ │ ├── _normalize.scss │ │ ├── _pager.scss │ │ ├── _pagination.scss │ │ ├── _panels.scss │ │ ├── _popovers.scss │ │ ├── _print.scss │ │ ├── _progress-bars.scss │ │ ├── _responsive-embed.scss │ │ ├── _responsive-utilities.scss │ │ ├── _scaffolding.scss │ │ ├── _tables.scss │ │ ├── _theme.scss │ │ ├── _thumbnails.scss │ │ ├── _tooltip.scss │ │ ├── _type.scss │ │ ├── _utilities.scss │ │ ├── _variables.scss │ │ ├── _wells.scss │ │ └── mixins │ │ ├── _alerts.scss │ │ ├── _background-variant.scss │ │ ├── _border-radius.scss │ │ ├── _buttons.scss │ │ ├── _center-block.scss │ │ ├── _clearfix.scss │ │ ├── _forms.scss │ │ ├── _gradients.scss │ │ ├── _grid-framework.scss │ │ ├── _grid.scss │ │ ├── _hide-text.scss │ │ ├── _image.scss │ │ ├── _labels.scss │ │ ├── _list-group.scss │ │ ├── _nav-divider.scss │ │ ├── _nav-vertical-align.scss │ │ ├── _opacity.scss │ │ ├── _pagination.scss │ │ ├── _panels.scss │ │ ├── _progress-bar.scss │ │ ├── _reset-filter.scss │ │ ├── _reset-text.scss │ │ ├── _resize.scss │ │ ├── _responsive-visibility.scss │ │ ├── _size.scss │ │ ├── _tab-focus.scss │ │ ├── _table-row.scss │ │ ├── _text-emphasis.scss │ │ ├── _text-overflow.scss │ │ └── _vendor-prefixes.scss ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 └── js │ ├── lib │ ├── bootstrap.js │ └── jquery.js │ └── main.js ├── server.js ├── test └── app.test.js └── views ├── layouts └── main.html ├── pages ├── home.html ├── login.html ├── profile.html └── signup.html └── partials ├── footer.html └── header.html /chapter-01/.editorconfig: -------------------------------------------------------------------------------- 1 | 2 | # http://editorconfig.org 3 | root = true 4 | 5 | [*] 6 | indent_style = tab 7 | indent_size = 4 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /chapter-01/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- 27 | node_modules 28 | 29 | # Debug log from npm 30 | npm-debug.log 31 | -------------------------------------------------------------------------------- /chapter-01/server/config/config.js: -------------------------------------------------------------------------------- 1 | // Database URL 2 | module.exports = { 3 | // Uncomment to connect with MongoDB on Cloud 4 | //'url' : 'mongodb://mvc-user-connect:opklnm@ds019028.mlab.com:19028/mvc-app' 5 | 'url' : 'mongodb://localhost/mvc-app' 6 | }; 7 | -------------------------------------------------------------------------------- /chapter-01/server/models/comments.js: -------------------------------------------------------------------------------- 1 | // load the things we need 2 | var mongoose = require('mongoose'); 3 | var Schema = mongoose.Schema; 4 | 5 | var commentSchema = mongoose.Schema({ 6 | created: { 7 | type: Date, 8 | default: Date.now 9 | }, 10 | title: { 11 | type: String, 12 | default: '', 13 | trim: true, 14 | required: 'Title cannot be blank' 15 | }, 16 | content: { 17 | type: String, 18 | default: '', 19 | trim: true 20 | }, 21 | user: { 22 | type: Schema.ObjectId, 23 | ref: 'User' 24 | } 25 | }); 26 | 27 | module.exports = mongoose.model('Comments', commentSchema); 28 | -------------------------------------------------------------------------------- /chapter-01/server/models/users.js: -------------------------------------------------------------------------------- 1 | // Import Mongoose and password Encrypt 2 | var mongoose = require('mongoose'); 3 | var bcrypt = require('bcrypt-nodejs'); 4 | 5 | // define the schema for User model 6 | var userSchema = mongoose.Schema({ 7 | // Using local for Local Strategy Passport 8 | local: { 9 | name: String, 10 | email: String, 11 | password: String, 12 | } 13 | 14 | }); 15 | 16 | // Encrypt Password 17 | userSchema.methods.generateHash = function(password) { 18 | return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null); 19 | }; 20 | 21 | // Verify if password is valid 22 | userSchema.methods.validPassword = function(password) { 23 | return bcrypt.compareSync(password, this.local.password); 24 | }; 25 | 26 | // create the model for users and expose it to our app 27 | module.exports = mongoose.model('User', userSchema); 28 | -------------------------------------------------------------------------------- /chapter-01/server/routes/users.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET users listing. */ 5 | router.get('/', function(req, res, next) { 6 | res.send('respond with a resource'); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /chapter-01/server/views/pages/error.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |<%= error.stack %>15 |
Welcome to <%= title %>
15 |