├── 02_Basic_Express_Website └── express-website │ ├── app.js │ ├── bin │ └── www │ ├── package.json │ ├── public │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── images │ │ ├── background.jpg │ │ ├── bg.jpg │ │ └── noimage.png │ ├── javascripts │ │ └── bootstrap.js │ └── stylesheets │ │ ├── bootstrap.css │ │ └── style.css │ ├── routes │ ├── about.js │ ├── contact.js │ └── index.js │ └── views │ ├── about.jade │ ├── contact.jade │ ├── error.jade │ ├── index.jade │ └── layout.jade ├── 03_User_Login_System └── nodeauth │ ├── app.js │ ├── bin │ └── www │ ├── models │ └── user.js │ ├── package.json │ ├── public │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── javascripts │ │ └── bootstrap.js │ └── stylesheets │ │ ├── bootstrap.css │ │ └── style.css │ ├── routes │ ├── index.js │ └── users.js │ └── views │ ├── error.jade │ ├── index.jade │ ├── layout.jade │ ├── login.jade │ └── register.jade ├── 04_Node_Blog_System └── nodeblog │ ├── app.js │ ├── bin │ └── www │ ├── package.json │ ├── public │ ├── ckeditor │ │ ├── CHANGES.md │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── adapters │ │ │ └── jquery.js │ │ ├── build-config.js │ │ ├── ckeditor.js │ │ ├── config.js │ │ ├── contents.css │ │ ├── lang │ │ │ ├── af.js │ │ │ ├── ar.js │ │ │ ├── bg.js │ │ │ ├── bn.js │ │ │ ├── bs.js │ │ │ ├── ca.js │ │ │ ├── cs.js │ │ │ ├── cy.js │ │ │ ├── da.js │ │ │ ├── de.js │ │ │ ├── el.js │ │ │ ├── en-au.js │ │ │ ├── en-ca.js │ │ │ ├── en-gb.js │ │ │ ├── en.js │ │ │ ├── eo.js │ │ │ ├── es.js │ │ │ ├── et.js │ │ │ ├── eu.js │ │ │ ├── fa.js │ │ │ ├── fi.js │ │ │ ├── fo.js │ │ │ ├── fr-ca.js │ │ │ ├── fr.js │ │ │ ├── gl.js │ │ │ ├── gu.js │ │ │ ├── he.js │ │ │ ├── hi.js │ │ │ ├── hr.js │ │ │ ├── hu.js │ │ │ ├── id.js │ │ │ ├── is.js │ │ │ ├── it.js │ │ │ ├── ja.js │ │ │ ├── ka.js │ │ │ ├── km.js │ │ │ ├── ko.js │ │ │ ├── ku.js │ │ │ ├── lt.js │ │ │ ├── lv.js │ │ │ ├── mk.js │ │ │ ├── mn.js │ │ │ ├── ms.js │ │ │ ├── nb.js │ │ │ ├── nl.js │ │ │ ├── no.js │ │ │ ├── pl.js │ │ │ ├── pt-br.js │ │ │ ├── pt.js │ │ │ ├── ro.js │ │ │ ├── ru.js │ │ │ ├── si.js │ │ │ ├── sk.js │ │ │ ├── sl.js │ │ │ ├── sq.js │ │ │ ├── sr-latn.js │ │ │ ├── sr.js │ │ │ ├── sv.js │ │ │ ├── th.js │ │ │ ├── tr.js │ │ │ ├── tt.js │ │ │ ├── ug.js │ │ │ ├── uk.js │ │ │ ├── vi.js │ │ │ ├── zh-cn.js │ │ │ └── zh.js │ │ ├── plugins │ │ │ ├── a11yhelp │ │ │ │ └── dialogs │ │ │ │ │ ├── a11yhelp.js │ │ │ │ │ └── lang │ │ │ │ │ ├── _translationstatus.txt │ │ │ │ │ ├── af.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── cy.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en-gb.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── eo.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fo.js │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── gu.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hi.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── ku.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── mk.js │ │ │ │ │ ├── mn.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── no.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── pt-br.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── si.js │ │ │ │ │ ├── sk.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── sq.js │ │ │ │ │ ├── sr-latn.js │ │ │ │ │ ├── sr.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── tt.js │ │ │ │ │ ├── ug.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ └── zh.js │ │ │ ├── about │ │ │ │ └── dialogs │ │ │ │ │ ├── about.js │ │ │ │ │ ├── hidpi │ │ │ │ │ └── logo_ckeditor.png │ │ │ │ │ └── logo_ckeditor.png │ │ │ ├── clipboard │ │ │ │ └── dialogs │ │ │ │ │ └── paste.js │ │ │ ├── dialog │ │ │ │ └── dialogDefinition.js │ │ │ ├── icons.png │ │ │ ├── icons_hidpi.png │ │ │ ├── image │ │ │ │ ├── dialogs │ │ │ │ │ └── image.js │ │ │ │ └── images │ │ │ │ │ └── noimage.png │ │ │ ├── link │ │ │ │ ├── dialogs │ │ │ │ │ ├── anchor.js │ │ │ │ │ └── link.js │ │ │ │ └── images │ │ │ │ │ ├── anchor.png │ │ │ │ │ └── hidpi │ │ │ │ │ └── anchor.png │ │ │ ├── magicline │ │ │ │ └── images │ │ │ │ │ ├── hidpi │ │ │ │ │ ├── icon-rtl.png │ │ │ │ │ └── icon.png │ │ │ │ │ ├── icon-rtl.png │ │ │ │ │ └── icon.png │ │ │ ├── pastefromword │ │ │ │ └── filter │ │ │ │ │ └── default.js │ │ │ ├── scayt │ │ │ │ ├── LICENSE.md │ │ │ │ ├── README.md │ │ │ │ └── dialogs │ │ │ │ │ ├── options.js │ │ │ │ │ └── toolbar.css │ │ │ ├── specialchar │ │ │ │ └── dialogs │ │ │ │ │ ├── lang │ │ │ │ │ ├── _translationstatus.txt │ │ │ │ │ ├── af.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── cy.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en-gb.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── eo.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── ku.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── no.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── pt-br.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── si.js │ │ │ │ │ ├── sk.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── sq.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── tt.js │ │ │ │ │ ├── ug.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ └── zh.js │ │ │ │ │ └── specialchar.js │ │ │ ├── table │ │ │ │ └── dialogs │ │ │ │ │ └── table.js │ │ │ ├── tabletools │ │ │ │ └── dialogs │ │ │ │ │ └── tableCell.js │ │ │ └── wsc │ │ │ │ ├── LICENSE.md │ │ │ │ ├── README.md │ │ │ │ └── dialogs │ │ │ │ ├── ciframe.html │ │ │ │ ├── tmpFrameset.html │ │ │ │ ├── wsc.css │ │ │ │ ├── wsc.js │ │ │ │ └── wsc_ie.js │ │ ├── samples │ │ │ ├── css │ │ │ │ └── samples.css │ │ │ ├── img │ │ │ │ ├── github-top.png │ │ │ │ ├── header-bg.png │ │ │ │ ├── header-separator.png │ │ │ │ ├── logo.png │ │ │ │ └── navigation-tip.png │ │ │ ├── index.html │ │ │ ├── js │ │ │ │ ├── sample.js │ │ │ │ └── sf.js │ │ │ ├── old │ │ │ │ ├── ajax.html │ │ │ │ ├── api.html │ │ │ │ ├── appendto.html │ │ │ │ ├── assets │ │ │ │ │ ├── inlineall │ │ │ │ │ │ └── logo.png │ │ │ │ │ ├── outputxhtml │ │ │ │ │ │ └── outputxhtml.css │ │ │ │ │ ├── posteddata.php │ │ │ │ │ ├── sample.jpg │ │ │ │ │ └── uilanguages │ │ │ │ │ │ └── languages.js │ │ │ │ ├── datafiltering.html │ │ │ │ ├── dialog │ │ │ │ │ ├── assets │ │ │ │ │ │ └── my_dialog.js │ │ │ │ │ └── dialog.html │ │ │ │ ├── divreplace.html │ │ │ │ ├── enterkey │ │ │ │ │ └── enterkey.html │ │ │ │ ├── htmlwriter │ │ │ │ │ ├── assets │ │ │ │ │ │ └── outputforflash │ │ │ │ │ │ │ ├── outputforflash.fla │ │ │ │ │ │ │ ├── outputforflash.swf │ │ │ │ │ │ │ └── swfobject.js │ │ │ │ │ ├── outputforflash.html │ │ │ │ │ └── outputhtml.html │ │ │ │ ├── index.html │ │ │ │ ├── inlineall.html │ │ │ │ ├── inlinebycode.html │ │ │ │ ├── inlinetextarea.html │ │ │ │ ├── jquery.html │ │ │ │ ├── magicline │ │ │ │ │ └── magicline.html │ │ │ │ ├── readonly.html │ │ │ │ ├── replacebyclass.html │ │ │ │ ├── replacebycode.html │ │ │ │ ├── sample.css │ │ │ │ ├── sample.js │ │ │ │ ├── sample_posteddata.php │ │ │ │ ├── tabindex.html │ │ │ │ ├── toolbar │ │ │ │ │ └── toolbar.html │ │ │ │ ├── uicolor.html │ │ │ │ ├── uilanguages.html │ │ │ │ ├── wysiwygarea │ │ │ │ │ └── fullpage.html │ │ │ │ └── xhtmlstyle.html │ │ │ └── toolbarconfigurator │ │ │ │ ├── css │ │ │ │ └── fontello.css │ │ │ │ ├── font │ │ │ │ ├── LICENSE.txt │ │ │ │ ├── config.json │ │ │ │ ├── fontello.eot │ │ │ │ ├── fontello.svg │ │ │ │ ├── fontello.ttf │ │ │ │ └── fontello.woff │ │ │ │ ├── index.html │ │ │ │ ├── js │ │ │ │ ├── abstracttoolbarmodifier.js │ │ │ │ ├── fulltoolbareditor.js │ │ │ │ ├── toolbarmodifier.js │ │ │ │ └── toolbartextmodifier.js │ │ │ │ └── lib │ │ │ │ └── codemirror │ │ │ │ ├── LICENSE │ │ │ │ ├── codemirror.css │ │ │ │ ├── codemirror.js │ │ │ │ ├── javascript.js │ │ │ │ ├── neo.css │ │ │ │ ├── show-hint.css │ │ │ │ └── show-hint.js │ │ ├── skins │ │ │ └── moono │ │ │ │ ├── dialog.css │ │ │ │ ├── dialog_ie.css │ │ │ │ ├── dialog_ie7.css │ │ │ │ ├── dialog_ie8.css │ │ │ │ ├── dialog_iequirks.css │ │ │ │ ├── editor.css │ │ │ │ ├── editor_gecko.css │ │ │ │ ├── editor_ie.css │ │ │ │ ├── editor_ie7.css │ │ │ │ ├── editor_ie8.css │ │ │ │ ├── editor_iequirks.css │ │ │ │ ├── icons.png │ │ │ │ ├── icons_hidpi.png │ │ │ │ ├── images │ │ │ │ ├── arrow.png │ │ │ │ ├── close.png │ │ │ │ ├── hidpi │ │ │ │ │ ├── close.png │ │ │ │ │ ├── lock-open.png │ │ │ │ │ ├── lock.png │ │ │ │ │ └── refresh.png │ │ │ │ ├── lock-open.png │ │ │ │ ├── lock.png │ │ │ │ ├── refresh.png │ │ │ │ └── spinner.gif │ │ │ │ └── readme.md │ │ └── styles.js │ ├── images │ │ ├── node-blog-logo.png │ │ ├── nodeblog.png │ │ └── uploads │ │ │ └── noimage.png │ └── stylesheets │ │ └── style.css │ ├── routes │ ├── categories.js │ ├── index.js │ └── posts.js │ └── views │ ├── addcategory.jade │ ├── addpost.jade │ ├── error.jade │ ├── index.jade │ ├── layout.jade │ └── show.jade ├── 05_Community_Events └── comevents │ ├── .gitignore │ ├── .jshintrc-client │ ├── .jshintrc-server │ ├── Gruntfile.js │ ├── LICENSE │ ├── README.md │ ├── app.js │ ├── config.example.js │ ├── config.js │ ├── layouts │ ├── account.jade │ ├── admin.jade │ └── default.jade │ ├── models.js │ ├── package.json │ ├── passport.js │ ├── public │ ├── favicon.ico │ ├── layouts │ │ ├── admin.js │ │ ├── admin.less │ │ ├── core.js │ │ ├── core.less │ │ ├── ie-sucks.js │ │ ├── main.js │ │ └── style.css │ ├── less │ │ ├── bootstrap-build.less │ │ ├── bootstrap-theme.less │ │ ├── bootstrap-vars.less │ │ ├── font-awesome-build.less │ │ └── font-awesome-vars.less │ ├── media │ │ ├── ajax-pulse.gif │ │ ├── logo-symbol-32x32.png │ │ └── logo-symbol-64x64.png │ └── views │ │ ├── about │ │ └── index.less │ │ ├── account │ │ ├── index.js │ │ ├── index.less │ │ ├── settings │ │ │ └── index.js │ │ └── verification │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── admin │ │ ├── accounts │ │ │ ├── details.js │ │ │ ├── details.less │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── admin-groups │ │ │ ├── details.js │ │ │ ├── details.less │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── administrators │ │ │ ├── details.js │ │ │ ├── details.less │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── categories │ │ │ ├── details.js │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── index.less │ │ ├── statuses │ │ │ ├── details.js │ │ │ ├── index.js │ │ │ └── index.less │ │ └── users │ │ │ ├── details.js │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── contact │ │ ├── index.js │ │ └── index.less │ │ ├── index.less │ │ ├── login │ │ ├── forgot │ │ │ └── index.js │ │ ├── index.js │ │ └── reset │ │ │ └── index.js │ │ └── signup │ │ ├── index.js │ │ ├── index.less │ │ └── social.js │ ├── routes.js │ ├── schema │ ├── Account.js │ ├── Admin.js │ ├── AdminGroup.js │ ├── Category.js │ ├── Event.js │ ├── LoginAttempt.js │ ├── Note.js │ ├── Status.js │ ├── StatusLog.js │ ├── User.js │ └── plugins │ │ └── pagedFind.js │ ├── util │ ├── sendmail │ │ └── index.js │ ├── slugify │ │ └── index.js │ └── workflow │ │ └── index.js │ └── views │ ├── about │ ├── index.jade │ └── index.js │ ├── account │ ├── index.jade │ ├── index.js │ ├── settings │ │ ├── index.jade │ │ └── index.js │ └── verification │ │ ├── email-html.jade │ │ ├── email-text.jade │ │ ├── index.jade │ │ └── index.js │ ├── admin │ ├── accounts │ │ ├── details.jade │ │ ├── index.jade │ │ └── index.js │ ├── admin-groups │ │ ├── details.jade │ │ ├── index.jade │ │ └── index.js │ ├── administrators │ │ ├── details.jade │ │ ├── index.jade │ │ └── index.js │ ├── categories │ │ ├── details.jade │ │ ├── index.jade │ │ └── index.js │ ├── index.jade │ ├── index.js │ ├── search │ │ └── index.js │ ├── statuses │ │ ├── details.jade │ │ ├── index.jade │ │ └── index.js │ └── users │ │ ├── details.jade │ │ ├── index.jade │ │ └── index.js │ ├── contact │ ├── email-html.jade │ ├── email-text.jade │ ├── index.jade │ └── index.js │ ├── events │ ├── add.jade │ ├── details.jade │ ├── edit.jade │ ├── index.jade │ └── index.js │ ├── http │ ├── 404.jade │ ├── 500.jade │ └── index.js │ ├── index.jade │ ├── index.js │ ├── login │ ├── forgot │ │ ├── email-html.jade │ │ ├── email-text.jade │ │ ├── index.jade │ │ └── index.js │ ├── index.jade │ ├── index.js │ └── reset │ │ ├── index.jade │ │ └── index.js │ ├── logout │ └── index.js │ ├── myevents │ ├── index.jade │ └── index.js │ └── signup │ ├── email-html.jade │ ├── email-text.jade │ ├── index.jade │ ├── index.js │ └── social.jade ├── 06_Bookstore └── TekBooks │ ├── .bowerrc │ ├── .build │ ├── components │ │ └── requirejs │ │ │ └── require.js │ ├── css │ │ ├── app.css │ │ ├── foundation.css │ │ └── style.css │ ├── favicon.ico │ ├── img │ │ ├── node1.jpg │ │ ├── node10.jpg │ │ ├── node2.jpg │ │ ├── node3.jpg │ │ ├── node4.jpg │ │ └── node8.jpg │ └── js │ │ ├── app.js │ │ ├── foundation.min.js │ │ ├── main.js │ │ └── vendor │ │ └── jquery.js │ ├── .editorconfig │ ├── .jshintignore │ ├── .jshintrc │ ├── .nodemonignore │ ├── .npmignore │ ├── .yo-rc.json │ ├── Gruntfile.js │ ├── README.md │ ├── config │ ├── config.json │ └── development.json │ ├── controllers │ ├── books.js │ ├── cart.js │ ├── index.js │ ├── manage.js │ └── pages.js │ ├── index.js │ ├── lib │ └── db.js │ ├── locales │ └── US │ │ └── en │ │ ├── books │ │ └── details.properties │ │ ├── cart │ │ └── index.properties │ │ ├── errors │ │ ├── 404.properties │ │ ├── 500.properties │ │ └── 503.properties │ │ ├── index.properties │ │ ├── layouts │ │ ├── manage.properties │ │ └── master.properties │ │ ├── manage │ │ ├── books │ │ │ ├── add.properties │ │ │ ├── edit.properties │ │ │ └── index.properties │ │ ├── categories │ │ │ ├── add.properties │ │ │ ├── edit.properties │ │ │ └── index.properties │ │ └── index.properties │ │ └── pages │ │ └── about.properties │ ├── models │ ├── bookModel.js │ ├── categoryModel.js │ └── index.js │ ├── package.json │ ├── public │ ├── components │ │ └── requirejs │ │ │ ├── .bower.json │ │ │ ├── README.md │ │ │ ├── bower.json │ │ │ └── require.js │ ├── css │ │ ├── app.less │ │ ├── foundation.css │ │ ├── normalize.css │ │ └── style.css │ ├── favicon.ico │ ├── img │ │ ├── mongo1.jpg │ │ ├── mongo2.jpg │ │ ├── mongo3.jpg │ │ ├── mongo4.jpg │ │ ├── node1.jpg │ │ ├── node2.jpg │ │ ├── node3.jpg │ │ ├── node4.jpg │ │ ├── php1.jpg │ │ ├── php2.jpg │ │ ├── php3.jpg │ │ └── php4.jpg │ ├── js │ │ ├── app.js │ │ ├── foundation.min.js │ │ ├── foundation │ │ │ ├── foundation.abide.js │ │ │ ├── foundation.accordion.js │ │ │ ├── foundation.alert.js │ │ │ ├── foundation.clearing.js │ │ │ ├── foundation.dropdown.js │ │ │ ├── foundation.equalizer.js │ │ │ ├── foundation.interchange.js │ │ │ ├── foundation.joyride.js │ │ │ ├── foundation.js │ │ │ ├── foundation.magellan.js │ │ │ ├── foundation.offcanvas.js │ │ │ ├── foundation.orbit.js │ │ │ ├── foundation.reveal.js │ │ │ ├── foundation.slider.js │ │ │ ├── foundation.tab.js │ │ │ ├── foundation.tooltip.js │ │ │ └── foundation.topbar.js │ │ ├── main.js │ │ └── vendor │ │ │ ├── fastclick.js │ │ │ ├── jquery.cookie.js │ │ │ ├── jquery.js │ │ │ ├── modernizr.js │ │ │ └── placeholder.js │ └── templates │ │ ├── books │ │ └── details.dust │ │ ├── cart │ │ └── index.dust │ │ ├── errors │ │ ├── 404.dust │ │ ├── 500.dust │ │ └── 503.dust │ │ ├── index.dust │ │ ├── layouts │ │ ├── manage.dust │ │ └── master.dust │ │ ├── manage │ │ ├── books │ │ │ ├── add.dust │ │ │ ├── edit.dust │ │ │ └── index.dust │ │ ├── categories │ │ │ ├── add.dust │ │ │ ├── edit.dust │ │ │ └── index.dust │ │ └── index.dust │ │ └── pages │ │ └── about.dust │ ├── server.js │ ├── tasks │ ├── clean.js │ ├── copyto.js │ ├── dustjs.js │ ├── jshint.js │ ├── less.js │ ├── mochacli.js │ └── requirejs.js │ └── test │ └── index.js ├── 07_ChatIO ├── app.js ├── index.html └── package.json ├── 08_FindaDoc_Directory ├── app.js ├── bin │ └── www ├── htmldev │ ├── add-category.html │ ├── add-doctor.html │ ├── details.html │ ├── doctors.html │ ├── images │ │ ├── footer.jpg │ │ ├── menu.jpg │ │ └── pic.jpg │ ├── index.html │ └── style.css ├── package.json ├── public │ └── stylesheets │ │ └── style.css ├── routes │ ├── categories.js │ ├── doctors.js │ └── index.js └── views │ ├── addcategory.jade │ ├── adddoctor.jade │ ├── details.jade │ ├── doctors.jade │ ├── error.jade │ ├── includes │ └── categories.jade │ ├── index.jade │ └── layout.jade ├── 09_Portfolio_App ├── app.js ├── bin │ └── www ├── package.json ├── public │ ├── font-awesome │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ └── fontawesome-webfont.woff │ │ ├── less │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── spinning.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ └── scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _spinning.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── img │ │ ├── portfolio │ │ │ ├── 458455aa7aad2a2315786978eaf05340.png │ │ │ ├── 4fe524ea82b02400ac6027a332c3752c.jpg │ │ │ ├── 6308f50944ff71ca1a2585648c697b0c.png │ │ │ ├── 9151a978819c81e7dca62acb705f282f.png │ │ │ ├── ca0e0d15accaa57718b50acd3accfe98.png │ │ │ ├── cabin.png │ │ │ ├── cake.png │ │ │ ├── circus.png │ │ │ ├── d11d3ad2373ce19fc4f5f332a9b4f2a9.png │ │ │ ├── game.png │ │ │ ├── safe.png │ │ │ └── submarine.png │ │ └── profile.png │ ├── javascripts │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ ├── cbpAnimatedHeader.js │ │ ├── cbpAnimatedHeader.min.js │ │ ├── classie.js │ │ ├── contact_me.js │ │ ├── dashboard.js │ │ ├── freelancer.js │ │ ├── jqBootstrapValidation.js │ │ └── jquery.js │ ├── less │ │ ├── freelancer.less │ │ ├── mixins.less │ │ └── variables.less │ ├── mail │ │ └── contact_me.php │ └── stylesheets │ │ ├── bootstrap.css │ │ ├── bootstrap.min.css │ │ ├── dashboard.css │ │ ├── freelancer.css │ │ └── style.css ├── routes │ ├── admin.js │ └── index.js └── views │ ├── dashboard.jade │ ├── edit.jade │ ├── error.jade │ ├── index.jade │ ├── layout.jade │ ├── layout2.jade │ └── new.jade ├── 10_eLearning_System ├── app.js ├── bin │ └── www ├── models │ ├── class.js │ ├── instructor.js │ ├── student.js │ └── user.js ├── package.json ├── public │ ├── javascripts │ │ └── kickstart.js │ └── stylesheets │ │ ├── fonts │ │ └── font-awesome-4.2.0 │ │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ └── fontawesome-webfont.woff │ │ │ ├── less │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── spinning.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ │ └── scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _spinning.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ │ ├── img │ │ ├── breadcrumbs-bg.gif │ │ ├── bx_loader.gif │ │ ├── controls.png │ │ ├── fancybox │ │ │ ├── blank.gif │ │ │ ├── fancy_close.png │ │ │ ├── fancy_loading.png │ │ │ ├── fancy_nav_left.png │ │ │ ├── fancy_nav_right.png │ │ │ ├── fancy_shadow_e.png │ │ │ ├── fancy_shadow_n.png │ │ │ ├── fancy_shadow_ne.png │ │ │ ├── fancy_shadow_nw.png │ │ │ ├── fancy_shadow_s.png │ │ │ ├── fancy_shadow_se.png │ │ │ ├── fancy_shadow_sw.png │ │ │ ├── fancy_shadow_w.png │ │ │ ├── fancy_title_left.png │ │ │ ├── fancy_title_main.png │ │ │ ├── fancy_title_over.png │ │ │ ├── fancy_title_right.png │ │ │ ├── fancybox-x.png │ │ │ ├── fancybox-y.png │ │ │ ├── fancybox.png │ │ │ ├── jquery.easing-1.3.pack.js │ │ │ ├── jquery.fancybox-1.3.4.js │ │ │ ├── jquery.fancybox-1.3.4.pack.js │ │ │ └── jquery.mousewheel-3.0.4.pack.js │ │ ├── gray_jean.png │ │ └── icon-arrow-right.png │ │ ├── jquery.fancybox-1.3.4.css │ │ ├── kickstart-buttons.css │ │ ├── kickstart-forms.css │ │ ├── kickstart-grid.css │ │ ├── kickstart-menus.css │ │ ├── kickstart-slideshow.css │ │ ├── kickstart.css │ │ ├── prettify.css │ │ ├── style.css │ │ └── tiptip.css ├── routes │ ├── classes.js │ ├── index.js │ ├── instructors.js │ ├── students.js │ └── users.js └── views │ ├── classes │ ├── details.handlebars │ ├── index.handlebars │ ├── lesson.handlebars │ └── lessons.handlebars │ ├── error.handlebars │ ├── index.handlebars │ ├── instructors │ ├── classes.handlebars │ └── newlesson.handlebars │ ├── layouts │ └── layout.handlebars │ ├── partials │ ├── classes.handlebars │ └── login.handlebars │ ├── students │ └── classes.handlebars │ └── users │ └── signup.handlebars ├── README.md └── img ├── 02.png ├── 03.png ├── 04.png ├── 05.png ├── 06.png ├── 07.png ├── 08.png ├── 09.png ├── 10-1.png ├── 10-2.png └── node.png /02_Basic_Express_Website/express-website/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express-website", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "body-parser": "~1.13.2", 10 | "cookie-parser": "~1.3.5", 11 | "debug": "~2.2.0", 12 | "express": "~4.13.1", 13 | "jade": "~1.11.0", 14 | "morgan": "~1.6.1", 15 | "nodemailer": "^1.4.0", 16 | "serve-favicon": "~2.3.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/public/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/02_Basic_Express_Website/express-website/public/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/public/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/02_Basic_Express_Website/express-website/public/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/public/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/02_Basic_Express_Website/express-website/public/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/public/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/02_Basic_Express_Website/express-website/public/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/public/images/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/02_Basic_Express_Website/express-website/public/images/background.jpg -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/public/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/02_Basic_Express_Website/express-website/public/images/bg.jpg -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/public/images/noimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/02_Basic_Express_Website/express-website/public/images/noimage.png -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 50px; 3 | 4 | } 5 | 6 | .jumbotron{ 7 | background:url(../images/bg.jpg) no-repeat; 8 | } 9 | 10 | footer{ 11 | background:#f4f4f4; 12 | height: 40px; 13 | text-align: center; 14 | margin-top: 30px; 15 | overflow:auto; 16 | } 17 | -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/routes/about.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET home page. */ 5 | router.get('/', function(req, res, next) { 6 | res.render('about', { title: 'About' }); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/routes/contact.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var nodemailer = require('nodemailer'); 4 | 5 | 6 | /* GET home page. */ 7 | router.get('/', function(req, res, next) { 8 | res.render('contact', { title: 'Contact' }); 9 | }); 10 | 11 | router.post('/send', function(req, res, next) { 12 | var transporter = nodemailer.createTransport({ 13 | service: 'Gmail', 14 | auth: { 15 | user: 'your_login@gmail.com', 16 | pass: 'your_password' 17 | } 18 | }); 19 | 20 | var mailOptions = { 21 | from: 'John Doe ', 22 | to: 'techgyuinfo@gmail.com', 23 | subject: 'Website Submission', 24 | text: 'You have a new submission with the following details...Name ' + req.body.name + ' Email ' + req.body.email + ' Message ' + req.body.message, 25 | html: '

You got a new submission whth the following details

' 26 | }; 27 | 28 | transporter.sendMail(mailOptions, function(error, info){ 29 | if(error){ 30 | console.log(error); 31 | res.redirect('/'); 32 | } else { 33 | console.log('message Sent: ' + info.response); 34 | res.redirect('/'); 35 | } 36 | }); 37 | 38 | }); 39 | 40 | module.exports = router; 41 | -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET home page. */ 5 | router.get('/', function(req, res, next) { 6 | res.render('index', { title: 'Home' }); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/views/about.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | .jumbotron 5 | .container 6 | h1 About Page 7 | p Some Text 8 | a.btn.btn-primary.btn-lg(href='#') Learn more » 9 | .container 10 | .row 11 | .col-md-4 12 | h2 About Us 13 | p Some Text 14 | a.btn.btn-default(href='#') view Details 15 | .col-md-4 16 | h2 Services 17 | p Some Text 18 | a.btn.btn-default(href='#') view Details 19 | .col-md-4 20 | h2 Del In Touch 21 | p Some Text 22 | a.btn.btn-default(href='#') view Details 23 | -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/views/contact.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | .container 5 | form(method='post', action='contact/send') 6 | h1 Contact 7 | .form-group 8 | label Name 9 | input.form-control(type='text', name='name', placeholder='Enter Name') 10 | .form-group 11 | label Email 12 | input.form-control(type='email', name='email', placeholder='Enter Email') 13 | .form-group 14 | label Message 15 | textarea.form-control(name='message', placeholder='Enter Message...') 16 | button.btn.btn-default(type='submit') Submit 17 | -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/views/error.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /02_Basic_Express_Website/express-website/views/index.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | .jumbotron 5 | .container 6 | h1 How May I Help You? 7 | p Some Text 8 | a.btn.btn-primary.btn-lg(href='#') Learn more » 9 | .container 10 | .row 11 | .col-md-4 12 | h2 About Us 13 | p Some Text 14 | a.btn.btn-default(href='#') view Details 15 | .col-md-4 16 | h2 Services 17 | p Some Text 18 | a.btn.btn-default(href='#') view Details 19 | .col-md-4 20 | h2 Del In Touch 21 | p Some Text 22 | a.btn.btn-default(href='#') view Details 23 | -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodeauth", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "bcrypt": "^0.8.5", 10 | "body-parser": "~1.13.2", 11 | "connect-flash": "^0.1.1", 12 | "cookie-parser": "~1.3.5", 13 | "debug": "~2.2.0", 14 | "express": "~4.13.1", 15 | "express-messages": "^1.0.0", 16 | "express-session": "^1.11.3", 17 | "express-validator": "^2.17.1", 18 | "jade": "~1.11.0", 19 | "mongodb": "^2.0.43", 20 | "mongoose": "^4.1.8", 21 | "morgan": "~1.6.1", 22 | "multer": "^0.1.8", 23 | "node-gyp": "^3.0.3", 24 | "passport": "^0.3.0", 25 | "passport-http": "^0.3.0", 26 | "passport-local": "^1.0.0", 27 | "serve-favicon": "~2.3.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/public/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/03_User_Login_System/nodeauth/public/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/public/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/03_User_Login_System/nodeauth/public/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/public/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/03_User_Login_System/nodeauth/public/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/public/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/03_User_Login_System/nodeauth/public/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font-family:arial; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | 10 | ul.success li, ul.info li, ul.error li{ 11 | margin: 20px 0 20px 0; 12 | padding:15px; 13 | border: 1px solid transparent; 14 | border-radius:5px; 15 | list-style: none; 16 | } 17 | 18 | ul.success li{ 19 | color:#3c763d; 20 | background:#dff0d8; 21 | border-color:#d6e9c6; 22 | } 23 | 24 | ul.error li{ 25 | color:#31708f; 26 | background:#FF8080; 27 | border-color:#bce8f1; 28 | } 29 | -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | // Members Page 5 | router.get('/', ensureAuthenticated, function(req, res, next) { 6 | res.render('index', { title: 'Members' }); 7 | }); 8 | 9 | function ensureAuthenticated(req, res, next){ 10 | if(req.isAuthenticated()){ 11 | return next(); 12 | } 13 | res.redirect('/users/login'); 14 | 15 | } 16 | 17 | module.exports = router; 18 | -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/views/error.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/views/index.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1 Members Area 5 | p Welcome to members Area 6 | -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/views/login.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1 Login 5 | p Please login below 6 | form(method='post', action='/users/login',enctype='multipart/form-data') 7 | .form-group 8 | label Username 9 | input.form-control(name='username', type='text') 10 | .form-group 11 | label Password 12 | input.form-control(name='password', type='password') 13 | input.btn.btn-default(name='submit', type='submit', values='Login') 14 | -------------------------------------------------------------------------------- /03_User_Login_System/nodeauth/views/register.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1 Register 5 | p Please register using the form below 6 | ul.errors 7 | if errors 8 | each error, i in errors 9 | li.alert.alert-danger #{error.msg} 10 | form(method='post', action='/users/register',enctype='multipart/form-data') 11 | .form-group 12 | label Name 13 | input.form-control(name='name', type='text', placeholder='Enter Name') 14 | .form-group 15 | label Email 16 | input.form-control(name='email', type='email', placeholder='Enter Email') 17 | .form-group 18 | label Username 19 | input.form-control(name='username', type='text', placeholder='Usernamee') 20 | .form-group 21 | label Password 22 | input.form-control(name='password', type='password', placeholder='Enter Password') 23 | .form-group 24 | label Password 25 | input.form-control(name='password2', type='password', placeholder='Confirm Password') 26 | .form-group 27 | label Profile Image 28 | input.form-control(name='profileimage', type='file') 29 | input.btn.btn-default(name='submit', type='submit', values='Register') 30 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodeblog", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "body-parser": "~1.13.2", 10 | "connect-flash": "^0.1.1", 11 | "cookie-parser": "~1.3.5", 12 | "debug": "~2.2.0", 13 | "express": "~4.13.1", 14 | "express-messages": "^1.0.0", 15 | "express-session": "^1.11.3", 16 | "express-validator": "^2.17.1", 17 | "jade": "~1.11.0", 18 | "moment": "^2.10.6", 19 | "mongodb": "^2.0.45", 20 | "monk": "^1.0.1", 21 | "morgan": "~1.6.1", 22 | "multer": "^0.1.8", 23 | "serve-favicon": "~2.3.0" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. 2 | For licensing, see LICENSE.md or http://ckeditor.com/license 3 | 4 | cs.js Found: 30 Missing: 0 5 | cy.js Found: 30 Missing: 0 6 | da.js Found: 12 Missing: 18 7 | de.js Found: 30 Missing: 0 8 | el.js Found: 25 Missing: 5 9 | eo.js Found: 30 Missing: 0 10 | fa.js Found: 30 Missing: 0 11 | fi.js Found: 30 Missing: 0 12 | fr.js Found: 30 Missing: 0 13 | gu.js Found: 12 Missing: 18 14 | he.js Found: 30 Missing: 0 15 | it.js Found: 30 Missing: 0 16 | mk.js Found: 5 Missing: 25 17 | nb.js Found: 30 Missing: 0 18 | nl.js Found: 30 Missing: 0 19 | no.js Found: 30 Missing: 0 20 | pt-br.js Found: 30 Missing: 0 21 | ro.js Found: 6 Missing: 24 22 | tr.js Found: 30 Missing: 0 23 | ug.js Found: 27 Missing: 3 24 | vi.js Found: 6 Missing: 24 25 | zh-cn.js Found: 30 Missing: 0 26 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/about/dialogs/logo_ckeditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/about/dialogs/logo_ckeditor.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/dialog/dialogDefinition.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/icons.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/icons_hidpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/icons_hidpi.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/image/images/noimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/image/images/noimage.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/link/images/anchor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/link/images/anchor.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/link/images/hidpi/anchor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/link/images/hidpi/anchor.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/magicline/images/hidpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/magicline/images/hidpi/icon.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/magicline/images/icon-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/magicline/images/icon-rtl.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/magicline/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/plugins/magicline/images/icon.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/scayt/README.md: -------------------------------------------------------------------------------- 1 | CKEditor SCAYT Plugin 2 | ===================== 3 | 4 | This plugin brings Spell Check As You Type (SCAYT) into up to CKEditor 4+. 5 | 6 | SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. 7 | 8 | Installation 9 | ------------ 10 | 11 | 1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. 12 | 2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): 13 | 14 | config.extraPlugins = 'scayt'; 15 | 16 | That's all. SCAYT will appear on the editor toolbar and will be ready to use. 17 | 18 | License 19 | ------- 20 | 21 | Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). 22 | 23 | See LICENSE.md for more information. 24 | 25 | Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). 26 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. 2 | For licensing, see LICENSE.md or http://ckeditor.com/license 3 | 4 | cs.js Found: 118 Missing: 0 5 | cy.js Found: 118 Missing: 0 6 | de.js Found: 118 Missing: 0 7 | el.js Found: 16 Missing: 102 8 | eo.js Found: 118 Missing: 0 9 | et.js Found: 31 Missing: 87 10 | fa.js Found: 24 Missing: 94 11 | fi.js Found: 23 Missing: 95 12 | fr.js Found: 118 Missing: 0 13 | hr.js Found: 23 Missing: 95 14 | it.js Found: 118 Missing: 0 15 | nb.js Found: 118 Missing: 0 16 | nl.js Found: 118 Missing: 0 17 | no.js Found: 118 Missing: 0 18 | tr.js Found: 118 Missing: 0 19 | ug.js Found: 39 Missing: 79 20 | zh-cn.js Found: 118 Missing: 0 21 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/plugins/wsc/README.md: -------------------------------------------------------------------------------- 1 | CKEditor WebSpellChecker Plugin 2 | =============================== 3 | 4 | This plugin brings Web Spell Checker (WSC) into CKEditor. 5 | 6 | WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. 7 | 8 | Installation 9 | ------------ 10 | 11 | 1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. 12 | 2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): 13 | 14 | config.extraPlugins = 'wsc'; 15 | 16 | That's all. WSC will appear on the editor toolbar and will be ready to use. 17 | 18 | License 19 | ------- 20 | 21 | Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). 22 | 23 | See LICENSE.md for more information. 24 | 25 | Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). 26 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/img/github-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/samples/img/github-top.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/img/header-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/samples/img/header-bg.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/img/header-separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/samples/img/header-separator.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/samples/img/logo.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/img/navigation-tip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/samples/img/navigation-tip.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/old/assets/inlineall/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/samples/old/assets/inlineall/logo.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/old/assets/sample.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/samples/old/assets/sample.jpg -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/old/assets/uilanguages/languages.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | var CKEDITOR_LANGS=function(){var c={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",id:"Indonesian", 6 | is:"Icelandic",it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",si:"Sinhala",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",tt:"Tatar",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese", 7 | zh:"Chinese Traditional","zh-cn":"Chinese Simplified"},b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name
 2 | 
 3 | -------------------------------------------------------------------------------------------
 4 |   CKEditor - Posted Data
 5 | 
 6 |   We are sorry, but your Web server does not support the PHP language used in this script.
 7 | 
 8 |   Please note that CKEditor can be used with any other server-side language than just PHP.
 9 |   To save the content created with CKEditor you need to read the POST data on the server
10 |   side and write it to a file or the database.
11 | 
12 |   Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
13 |   For licensing, see LICENSE.md or http://ckeditor.com/license
14 | -------------------------------------------------------------------------------------------
15 | 
16 | 
*/ include "assets/posteddata.php"; ?> 17 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/font/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Font license info 2 | 3 | 4 | ## Font Awesome 5 | 6 | Copyright (C) 2012 by Dave Gandy 7 | 8 | Author: Dave Gandy 9 | License: SIL () 10 | Homepage: http://fortawesome.github.com/Font-Awesome/ 11 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/font/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "css_prefix_text": "icon-", 4 | "css_use_suffix": false, 5 | "hinting": true, 6 | "units_per_em": 1000, 7 | "ascent": 850, 8 | "glyphs": [ 9 | { 10 | "uid": "f48ae54adfb27d8ada53d0fd9e34ee10", 11 | "css": "trash-empty", 12 | "code": 59392, 13 | "src": "fontawesome" 14 | }, 15 | { 16 | "uid": "1c4068ed75209e21af36017df8871802", 17 | "css": "down-big", 18 | "code": 59393, 19 | "src": "fontawesome" 20 | }, 21 | { 22 | "uid": "95376bf082bfec6ce06ea1cda7bd7ead", 23 | "css": "up-big", 24 | "code": 59394, 25 | "src": "fontawesome" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/font/fontello.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/font/fontello.eot -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/font/fontello.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/font/fontello.ttf -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/font/fontello.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/font/fontello.woff -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/lib/codemirror/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2014 by Marijn Haverbeke and others 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/lib/codemirror/neo.css: -------------------------------------------------------------------------------- 1 | /* neo theme for codemirror */ 2 | 3 | /* Color scheme */ 4 | 5 | .cm-s-neo.CodeMirror { 6 | background-color:#ffffff; 7 | color:#2e383c; 8 | line-height:1.4375; 9 | } 10 | .cm-s-neo .cm-comment {color:#75787b} 11 | .cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3} 12 | .cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a} 13 | .cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328} 14 | .cm-s-neo .cm-string {color:#b35e14} 15 | .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65} 16 | 17 | 18 | /* Editor styling */ 19 | 20 | .cm-s-neo pre { 21 | padding:0; 22 | } 23 | 24 | .cm-s-neo .CodeMirror-gutters { 25 | border:none; 26 | border-right:10px solid transparent; 27 | background-color:transparent; 28 | } 29 | 30 | .cm-s-neo .CodeMirror-linenumber { 31 | padding:0; 32 | color:#e0e2e5; 33 | } 34 | 35 | .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } 36 | .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } 37 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/samples/toolbarconfigurator/lib/codemirror/show-hint.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 2px; 9 | 10 | -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 11 | -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 12 | box-shadow: 2px 3px 5px rgba(0,0,0,.2); 13 | border-radius: 3px; 14 | border: 1px solid silver; 15 | 16 | background: white; 17 | font-size: 90%; 18 | font-family: monospace; 19 | 20 | max-height: 20em; 21 | overflow-y: auto; 22 | } 23 | 24 | .CodeMirror-hint { 25 | margin: 0; 26 | padding: 0 4px; 27 | border-radius: 2px; 28 | max-width: 19em; 29 | overflow: hidden; 30 | white-space: pre; 31 | color: black; 32 | cursor: pointer; 33 | } 34 | 35 | li.CodeMirror-hint-active { 36 | background: #08f; 37 | color: white; 38 | } 39 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/icons.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/icons_hidpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/icons_hidpi.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/arrow.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/close.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/hidpi/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/hidpi/close.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/hidpi/lock-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/hidpi/lock-open.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/hidpi/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/hidpi/lock.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/hidpi/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/hidpi/refresh.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/lock-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/lock-open.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/lock.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/refresh.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/ckeditor/skins/moono/images/spinner.gif -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/images/node-blog-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/images/node-blog-logo.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/images/nodeblog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/images/nodeblog.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/public/images/uploads/noimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/04_Node_Blog_System/nodeblog/public/images/uploads/noimage.png -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var mongo = require('mongodb'); 4 | var db = require('monk')('localhost/nodeblog'); 5 | 6 | /* Homepage Blog Post */ 7 | router.get('/', function(req, res, next) { 8 | var db = req.db; 9 | var posts = db.get('posts'); 10 | posts.find({},{},function(err, posts){ 11 | res.render('index', { 12 | "posts": posts 13 | }); 14 | }); 15 | }); 16 | 17 | module.exports = router; 18 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/views/addcategory.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1=title 5 | ul.errors 6 | if errors 7 | each error, i in errors 8 | li.alert.alert-danger #{error.msg} 9 | form(method='post', action='/categories/add', enctype="multipart/form-data") 10 | .form-group 11 | label Title: 12 | input.form-control(name='title', type='text') 13 | input.btn.btn-default(name='submit', type='submit', value='Save') 14 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/views/addpost.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1=title 5 | ul.errors 6 | if errors 7 | each error, i in errors 8 | li.alert.alert-danger #{error.msg} 9 | form(method='post', action='/posts/add', enctype="multipart/form-data") 10 | .form-group 11 | label Title: 12 | input.form-control(name='title', type='text') 13 | .form-group 14 | label Category: 15 | select.form-control(name='category') 16 | each category, i in categories 17 | option(value='#{category.title}') #{category.title} 18 | .form-group 19 | label Body: 20 | textarea.form-control(name='body', id='body') 21 | .form-group 22 | label Main Image: 23 | input.form-control(name='mainimage', type='file') 24 | .form-group 25 | label Author: 26 | select.form-control(name='author') 27 | option(value='Brad Traversy') Brad Travers 28 | option(value='John Doe') John Doe 29 | input.btn.btn-default(name='submit', type='submit', value='Save') 30 | script(src='/ckeditor/ckeditor.js') 31 | script 32 | | CKEDITOR.replace('body'); 33 | 34 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/views/error.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/views/index.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | if posts 5 | each post, i in posts 6 | .post 7 | h1 8 | a(href='/posts/show/#{post._id}') 9 | =post.title 10 | p.meta Posted in 11 | a(href='/categories/show/#{post.category}') #{post.category} by #{post.author} on #{moment(post.date).format("MM-DD-YYYY")} 12 | img(src='/images/uploads/#{post.image}') 13 | !=truncateText(post.body, 400) 14 | a.more(href='/posts/show/#{post._id}') Read more 15 | else 16 | p.noposts There are no postes to display 17 | -------------------------------------------------------------------------------- /04_Node_Blog_System/nodeblog/views/layout.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title NodeBlog 5 | link(rel='stylesheet', href='/stylesheets/style.css') 6 | body 7 | .container 8 | img.logo(src='/images/node-blog-logo.png') 9 | nav 10 | ul 11 | li 12 | a(href='/') Home 13 | li 14 | a(href='/posts/add') Add Post 15 | li 16 | a(href='/categories/add') Add Category 17 | != messages() 18 | block content 19 | footer 20 | p NodeBlog © 2015 21 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/.gitignore: -------------------------------------------------------------------------------- 1 | public/vendor/* 2 | node_modules/* 3 | *.min.js 4 | *.min.js.map 5 | *.min.css 6 | .nodemonignore 7 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2012 Reza Akhavan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/models.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports = module.exports = function(app, mongoose) { 4 | //embeddable docs first 5 | require('./schema/Note')(app, mongoose); 6 | require('./schema/Status')(app, mongoose); 7 | require('./schema/StatusLog')(app, mongoose); 8 | require('./schema/Category')(app, mongoose); 9 | 10 | //then regular docs 11 | require('./schema/User')(app, mongoose); 12 | require('./schema/Event')(app, mongoose); 13 | require('./schema/Admin')(app, mongoose); 14 | require('./schema/AdminGroup')(app, mongoose); 15 | require('./schema/Account')(app, mongoose); 16 | require('./schema/LoginAttempt')(app, mongoose); 17 | }; 18 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/05_Community_Events/comevents/public/favicon.ico -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/layouts/admin.less: -------------------------------------------------------------------------------- 1 | .navbar { 2 | .navbar-brand { 3 | color: #eee; 4 | } 5 | 6 | .navbar-form .dropdown { 7 | position: relative; 8 | } 9 | } 10 | 11 | .navbar .nav > li > a { 12 | text-transform: uppercase; 13 | font-weight: bold; 14 | } 15 | 16 | .filters { 17 | margin-bottom: 20px; 18 | } 19 | 20 | .stretch { 21 | width: 100%; 22 | } 23 | 24 | .nowrap { 25 | white-space: nowrap; 26 | } 27 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/layouts/core.js: -------------------------------------------------------------------------------- 1 | /* global app:true */ 2 | /* exported app */ 3 | 4 | var app; //the main declaration 5 | 6 | (function() { 7 | 'use strict'; 8 | 9 | $(document).ready(function() { 10 | //active (selected) navigation elements 11 | $('.nav [href="'+ window.location.pathname +'"]').closest('li').toggleClass('active'); 12 | 13 | //register global ajax handlers 14 | $(document).ajaxStart(function(){ $('.ajax-spinner').show(); }); 15 | $(document).ajaxStop(function(){ $('.ajax-spinner').hide(); }); 16 | $.ajaxSetup({ 17 | beforeSend: function (xhr) { 18 | xhr.setRequestHeader('x-csrf-token', $.cookie('_csrfToken')); 19 | } 20 | }); 21 | 22 | //ajax spinner follows mouse 23 | $(document).bind('mousemove', function(e) { 24 | $('.ajax-spinner').css({ 25 | left: e.pageX + 15, 26 | top: e.pageY 27 | }); 28 | }); 29 | }); 30 | }()); 31 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/layouts/ie-sucks.js: -------------------------------------------------------------------------------- 1 | //damn you ie! 2 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/layouts/main.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){ 2 | $('#deleteEvent').on('click', function(e){ 3 | deleteId = $('#deleteEvent').data('delete'); 4 | $.ajax({ 5 | url: '/events/delete/'+deleteId, 6 | type: 'DELETE', 7 | success: function(result){ 8 | 9 | } 10 | }); 11 | window.location = '/events'; 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/layouts/style.css: -------------------------------------------------------------------------------- 1 | .events li{ 2 | list-style: none; 3 | margin:20px 0; 4 | line-height: 1.9em; 5 | } 6 | 7 | ul.error li, ul.info li, ul.success li{ 8 | margin:20px 0 20px 0; 9 | padding: 15px; 10 | border: 1px solid transparent; 11 | border-radius: 4px; 12 | list-style: none; 13 | } 14 | ul.error li{ 15 | color: #a94442; 16 | background-color: #f2dede; 17 | border-color: #ebccd1; 18 | } 19 | 20 | ul.info li{ 21 | color: #31708f; 22 | background-color: #d9edf7; 23 | border-color: #bce8f1; 24 | } 25 | 26 | ul.success li{ 27 | color: #3c763d; 28 | background-color: #dff0d8; 29 | border-color: #d6e8c6; 30 | } 31 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/less/font-awesome-build.less: -------------------------------------------------------------------------------- 1 | @import "../vendor/font-awesome/less/variables.less"; 2 | @import "font-awesome-vars.less"; 3 | @import "../vendor/font-awesome/less/mixins.less"; 4 | @import "../vendor/font-awesome/less/path.less"; 5 | @import "../vendor/font-awesome/less/core.less"; 6 | @import "../vendor/font-awesome/less/larger.less"; 7 | @import "../vendor/font-awesome/less/fixed-width.less"; 8 | @import "../vendor/font-awesome/less/list.less"; 9 | @import "../vendor/font-awesome/less/bordered-pulled.less"; 10 | @import "../vendor/font-awesome/less/animated.less"; 11 | @import "../vendor/font-awesome/less/rotated-flipped.less"; 12 | @import "../vendor/font-awesome/less/stacked.less"; 13 | @import "../vendor/font-awesome/less/icons.less"; 14 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/less/font-awesome-vars.less: -------------------------------------------------------------------------------- 1 | @fa-font-path: "/vendor/font-awesome/fonts"; 2 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/media/ajax-pulse.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/05_Community_Events/comevents/public/media/ajax-pulse.gif -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/media/logo-symbol-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/05_Community_Events/comevents/public/media/logo-symbol-32x32.png -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/media/logo-symbol-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/05_Community_Events/comevents/public/media/logo-symbol-64x64.png -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/about/index.less: -------------------------------------------------------------------------------- 1 | .special { 2 | text-align: center; 3 | } 4 | .super-awesome { 5 | display: block; 6 | margin-top: -15px; 7 | color: #7f7f7f; 8 | font-size: 20em; 9 | } 10 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/account/index.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | $('.day-of-year').text(moment().format('DDD')); 5 | $('.day-of-month').text(moment().format('D')); 6 | $('.week-of-year').text(moment().format('w')); 7 | $('.day-of-week').text(moment().format('d')); 8 | $('.week-year').text(moment().format('gg')); 9 | $('.hour-of-day').text(moment().format('H')); 10 | }()); 11 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/account/index.less: -------------------------------------------------------------------------------- 1 | .special { 2 | text-align: center; 3 | } 4 | .super-awesome { 5 | display: block; 6 | margin-top: -15px; 7 | color: #7f7f7f; 8 | font-size: 20em; 9 | } 10 | 11 | .stat { 12 | text-align: center; 13 | } 14 | .stat-value { 15 | color: #555; 16 | font-size: 2.2em; 17 | font-weight: bold; 18 | letter-spacing: -1px; 19 | } 20 | .stat-label { 21 | color: #999; 22 | font-weight: bold; 23 | } 24 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/account/verification/index.less: -------------------------------------------------------------------------------- 1 | .special { 2 | text-align: center; 3 | } 4 | .super-awesome { 5 | display: block; 6 | margin-top: -15px; 7 | color: #7f7f7f; 8 | font-size: 20em; 9 | } 10 | .not-received-hidden { 11 | display: none; 12 | } 13 | .verify-form-hidden { 14 | display: none; 15 | } 16 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/admin/accounts/details.less: -------------------------------------------------------------------------------- 1 | @import "../../../vendor/bootstrap/less/mixins.less"; 2 | 3 | .status-items { 4 | overflow: scroll; 5 | 6 | .status { 7 | padding: 10px 5px; 8 | font-size: 12px; 9 | border-bottom: 1px solid #ccc; 10 | 11 | .author { 12 | font-weight: normal; 13 | color: #999; 14 | text-shadow: none; 15 | background-color: transparent; 16 | border: 1px solid #ccc; 17 | } 18 | } 19 | .status:nth-child(even) { 20 | background-color: #f5f5f5; 21 | } 22 | } 23 | 24 | .notes-new { 25 | textarea { 26 | margin-bottom: 0; 27 | border-bottom: none; 28 | .border-bottom-radius(0); 29 | } 30 | .btn { 31 | .border-top-radius(0); 32 | } 33 | } 34 | 35 | .notes-items { 36 | .note { 37 | padding: 10px 5px; 38 | font-size: 12px; 39 | border-bottom: 1px solid #ccc; 40 | 41 | .author { 42 | font-weight: normal; 43 | color: #999; 44 | text-shadow: none; 45 | background-color: transparent; 46 | border: 1px solid #ccc; 47 | } 48 | } 49 | .note:nth-child(even) { 50 | background-color: #f5f5f5; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/admin/accounts/index.less: -------------------------------------------------------------------------------- 1 | @import "../../../vendor/bootstrap/less/mixins.less"; 2 | 3 | .input-group { 4 | margin-bottom: 20px; 5 | 6 | input { 7 | width: 200px !important; 8 | } 9 | 10 | .btn { 11 | .border-left-radius(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/admin/admin-groups/details.less: -------------------------------------------------------------------------------- 1 | .permissions .input-group input[disabled] { 2 | border-radius: 0; 3 | border-bottom: none; 4 | } 5 | .permissions .input-group .btn { 6 | border-radius: 0; 7 | } 8 | .permissions .input-group:first-of-type input[disabled] { 9 | border-top-left-radius: 4px; 10 | } 11 | .permissions .input-group:first-of-type .btn-delete { 12 | border-top-right-radius: 4px; 13 | } 14 | .permissions .input-group:last-of-type input[disabled] { 15 | border-bottom-left-radius: 4px; 16 | border-bottom: 1px solid #ccc; 17 | } 18 | .permissions .input-group:last-of-type .btn-delete { 19 | border-bottom-right-radius: 4px; 20 | } 21 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/admin/admin-groups/index.less: -------------------------------------------------------------------------------- 1 | @import "../../../vendor/bootstrap/less/mixins.less"; 2 | 3 | .input-group { 4 | margin-bottom: 20px; 5 | 6 | input { 7 | width: 200px !important; 8 | } 9 | 10 | .btn { 11 | .border-left-radius(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/admin/administrators/details.less: -------------------------------------------------------------------------------- 1 | .groups .input-group input[disabled], 2 | .permissions .input-group input[disabled] { 3 | border-radius: 0; 4 | border-bottom: none; 5 | } 6 | .groups .input-group .btn, 7 | .permissions .input-group .btn { 8 | border-radius: 0; 9 | } 10 | .groups .input-group:first-of-type input[disabled], 11 | .permissions .input-group:first-of-type input[disabled] { 12 | border-top-left-radius: 4px; 13 | } 14 | .groups .input-group:first-of-type .btn-delete, 15 | .permissions .input-group:first-of-type .btn-delete { 16 | border-top-right-radius: 4px; 17 | } 18 | .groups .input-group:last-of-type input[disabled], 19 | .permissions .input-group:last-of-type input[disabled] { 20 | border-bottom-left-radius: 4px; 21 | border-bottom: 1px solid #ccc; 22 | } 23 | .groups .input-group:last-of-type .btn-delete, 24 | .permissions .input-group:last-of-type .btn-delete { 25 | border-bottom-right-radius: 4px; 26 | } 27 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/admin/administrators/index.less: -------------------------------------------------------------------------------- 1 | @import "../../../vendor/bootstrap/less/mixins.less"; 2 | 3 | .input-group { 4 | margin-bottom: 20px; 5 | 6 | input { 7 | width: 200px !important; 8 | } 9 | 10 | .btn { 11 | .border-left-radius(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/admin/categories/index.less: -------------------------------------------------------------------------------- 1 | @import "../../../vendor/bootstrap/less/mixins.less"; 2 | @import "../../../less/bootstrap-vars.less"; 3 | 4 | .input-group { 5 | margin-bottom: 20px; 6 | 7 | input { 8 | width: 100px !important; 9 | 10 | @media screen and (min-width: @grid-float-breakpoint) { 11 | width: 160px !important; 12 | } 13 | } 14 | 15 | input:nth-child(2) { 16 | border-left: none; 17 | } 18 | 19 | .btn { 20 | .border-left-radius(0) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/admin/index.less: -------------------------------------------------------------------------------- 1 | @import "../../vendor/bootstrap/less/mixins.less"; 2 | 3 | .special { 4 | text-align: center; 5 | } 6 | .super-awesome { 7 | display: block; 8 | margin-top: -15px; 9 | color: #7f7f7f; 10 | font-size: 20em; 11 | } 12 | 13 | .stat { 14 | text-align: center; 15 | #gradient > .vertical(@start-color: #555; @end-color: darken(#555, 12%)); 16 | background-color: #555; 17 | padding-left: 0; 18 | padding-right: 0; 19 | } 20 | .stat-value { 21 | color: #fff; 22 | font-size: 2.2em; 23 | font-weight: bold; 24 | letter-spacing: -1px; 25 | } 26 | .stat-label { 27 | color: #ccc; 28 | font-weight: bold; 29 | } 30 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/admin/statuses/index.less: -------------------------------------------------------------------------------- 1 | @import "../../../vendor/bootstrap/less/mixins.less"; 2 | @import "../../../less/bootstrap-vars.less"; 3 | 4 | .input-group { 5 | margin-bottom: 20px; 6 | 7 | input { 8 | width: 100px !important; 9 | 10 | @media screen and (min-width: @grid-float-breakpoint) { 11 | width: 160px !important; 12 | } 13 | } 14 | 15 | input:nth-child(2) { 16 | border-left: none; 17 | } 18 | 19 | .btn { 20 | .border-left-radius(0) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/admin/users/index.less: -------------------------------------------------------------------------------- 1 | @import "../../../vendor/bootstrap/less/mixins.less"; 2 | 3 | .input-group { 4 | margin-bottom: 20px; 5 | 6 | input { 7 | width: 200px !important; 8 | } 9 | 10 | .btn { 11 | .border-left-radius(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/contact/index.less: -------------------------------------------------------------------------------- 1 | .special { 2 | text-align: center; 3 | } 4 | .super-awesome { 5 | display: block; 6 | margin-top: -15px; 7 | color: #7f7f7f; 8 | font-size: 20em; 9 | } 10 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/index.less: -------------------------------------------------------------------------------- 1 | @import '../less/bootstrap-vars.less'; 2 | 3 | .jumbotron { 4 | background-color: transparent; 5 | text-align: center; 6 | padding: 30px 60px; 7 | 8 | h1 { 9 | font-weight: bold; 10 | } 11 | 12 | @media (max-width: @screen-tablet) { 13 | h1 { 14 | font-size: (@font-size-base * 3.5); 15 | } 16 | } 17 | @media (min-width: @screen-tablet) { 18 | h1 { 19 | font-size: (@font-size-base * 7.5); 20 | } 21 | } 22 | } 23 | 24 | .panel h3 { 25 | margin-top: 0; 26 | } 27 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/public/views/signup/index.less: -------------------------------------------------------------------------------- 1 | .marketing { 2 | text-align: center; 3 | } 4 | .super-awesome { 5 | display: block; 6 | margin-top: 50px; 7 | color: #7f7f7f; 8 | font-size: 20em; 9 | } 10 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/schema/AdminGroup.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports = module.exports = function(app, mongoose) { 4 | var adminGroupSchema = new mongoose.Schema({ 5 | _id: { type: String }, 6 | name: { type: String, default: '' }, 7 | permissions: [{ name: String, permit: Boolean }] 8 | }); 9 | adminGroupSchema.plugin(require('./plugins/pagedFind')); 10 | adminGroupSchema.index({ name: 1 }, { unique: true }); 11 | adminGroupSchema.set('autoIndex', (app.get('env') === 'development')); 12 | app.db.model('AdminGroup', adminGroupSchema); 13 | }; 14 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/schema/Category.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports = module.exports = function(app, mongoose) { 4 | var categorySchema = new mongoose.Schema({ 5 | _id: { type: String }, 6 | pivot: { type: String, default: '' }, 7 | name: { type: String, default: '' } 8 | }); 9 | categorySchema.plugin(require('./plugins/pagedFind')); 10 | categorySchema.index({ pivot: 1 }); 11 | categorySchema.index({ name: 1 }); 12 | categorySchema.set('autoIndex', (app.get('env') === 'development')); 13 | app.db.model('Category', categorySchema); 14 | }; 15 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/schema/Event.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports = module.exports = function(app, mongoose) { 4 | var eventSchema = new mongoose.Schema({ 5 | name: { type: String, required: true}, 6 | description: { type: String}, 7 | venu: { type: String}, 8 | date: { type: Date}, 9 | startTime: { type: String}, 10 | endTime: { type: String}, 11 | username: { type: String, required: true}, 12 | search: [String], 13 | }); 14 | eventSchema.plugin(require('./plugins/pagedFind')); 15 | eventSchema.index({ name: 1 }); 16 | eventSchema.index({ username: 1 }); 17 | eventSchema.index({ date: 1 }); 18 | eventSchema.index({ venu: 1 }); 19 | eventSchema.index({ startTime: 1 }); 20 | eventSchema.index({ endTime: 1 }); 21 | eventSchema.index({ search: 1 }); 22 | 23 | eventSchema.index({ name: 1 }); 24 | eventSchema.set('autoIndex', (app.get('env') === 'development')); 25 | app.db.model('Event', eventSchema); 26 | }; 27 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/schema/LoginAttempt.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports = module.exports = function(app, mongoose) { 4 | var attemptSchema = new mongoose.Schema({ 5 | ip: { type: String, default: '' }, 6 | user: { type: String, default: '' }, 7 | time: { type: Date, default: Date.now, expires: app.config.loginAttempts.logExpiration } 8 | }); 9 | attemptSchema.index({ ip: 1 }); 10 | attemptSchema.index({ user: 1 }); 11 | attemptSchema.set('autoIndex', (app.get('env') === 'development')); 12 | app.db.model('LoginAttempt', attemptSchema); 13 | }; 14 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/schema/Note.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports = module.exports = function(app, mongoose) { 4 | var noteSchema = new mongoose.Schema({ 5 | data: { type: String, default: '' }, 6 | userCreated: { 7 | id: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, 8 | name: { type: String, default: '' }, 9 | time: { type: Date, default: Date.now } 10 | } 11 | }); 12 | app.db.model('Note', noteSchema); 13 | }; 14 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/schema/Status.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports = module.exports = function(app, mongoose) { 4 | var statusSchema = new mongoose.Schema({ 5 | _id: { type: String }, 6 | pivot: { type: String, default: '' }, 7 | name: { type: String, default: '' } 8 | }); 9 | statusSchema.plugin(require('./plugins/pagedFind')); 10 | statusSchema.index({ pivot: 1 }); 11 | statusSchema.index({ name: 1 }); 12 | statusSchema.set('autoIndex', (app.get('env') === 'development')); 13 | app.db.model('Status', statusSchema); 14 | }; 15 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/schema/StatusLog.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports = module.exports = function(app, mongoose) { 4 | var statusLogSchema = new mongoose.Schema({ 5 | id: { type: String, ref: 'Status' }, 6 | name: { type: String, default: '' }, 7 | userCreated: { 8 | id: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, 9 | name: { type: String, default: '' }, 10 | time: { type: Date, default: Date.now } 11 | } 12 | }); 13 | app.db.model('StatusLog', statusLogSchema); 14 | }; 15 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/util/slugify/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports = module.exports = function(text) { 4 | return text.toLowerCase().replace(/[^\w ]+/g, '').replace(/ +/g, '-'); 5 | }; 6 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/util/workflow/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports = module.exports = function(req, res) { 4 | var workflow = new (require('events').EventEmitter)(); 5 | 6 | workflow.outcome = { 7 | success: false, 8 | errors: [], 9 | errfor: {} 10 | }; 11 | 12 | workflow.hasErrors = function() { 13 | return Object.keys(workflow.outcome.errfor).length !== 0 || workflow.outcome.errors.length !== 0; 14 | }; 15 | 16 | workflow.on('exception', function(err) { 17 | workflow.outcome.errors.push('Exception: '+ err); 18 | return workflow.emit('response'); 19 | }); 20 | 21 | workflow.on('response', function() { 22 | workflow.outcome.success = !workflow.hasErrors(); 23 | res.send(workflow.outcome); 24 | }); 25 | 26 | return workflow; 27 | }; 28 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/about/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.init = function(req, res){ 4 | res.render('about/index'); 5 | }; 6 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/account/index.jade: -------------------------------------------------------------------------------- 1 | extends ../../layouts/account 2 | 3 | block head 4 | title Account Area 5 | 6 | block neck 7 | link(rel='stylesheet', href='/views/account/index.min.css?#{cacheBreaker}') 8 | 9 | block feet 10 | script(src='/views/account/index.min.js?#{cacheBreaker}') 11 | 12 | block body 13 | div.row 14 | div.col-sm-6 15 | div.page-header 16 | h1 My Account 17 | div.row 18 | div.col-sm-4 19 | div.well.stat 20 | div.stat-value.day-of-year -- 21 | div.stat-label Day of Year 22 | div.col-sm-4 23 | div.well.stat 24 | div.stat-value.day-of-month -- 25 | div.stat-label Day of Month 26 | div.col-sm-4 27 | div.well.stat 28 | div.stat-value.week-of-year -- 29 | div.stat-label Week of Year 30 | div.row 31 | div.col-sm-4 32 | div.well.stat 33 | div.stat-value.day-of-week -- 34 | div.stat-label Day of Week 35 | div.col-sm-4 36 | div.well.stat 37 | div.stat-value.week-year -- 38 | div.stat-label Week Year 39 | div.col-sm-4 40 | div.well.stat 41 | div.stat-value.hour-of-day -- 42 | div.stat-label Hour of Day 43 | div.col-sm-6.special 44 | div.page-header 45 | h1 Go Faster Everyday 46 | i.fa.fa-dashboard.super-awesome 47 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/account/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.init = function(req, res){ 4 | res.render('account/index'); 5 | }; 6 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/account/verification/email-html.jade: -------------------------------------------------------------------------------- 1 | h3 #{projectName} Email Verification 2 | p Your #{projectName} account is nearly ready. Please visit the link below to confirm your email address. 3 | a(href='#{verifyURL}') #{verifyURL} 4 | p Note: If you did not sign for a #{projectName} account, don't worry. You can ignore this email. 5 | p 6 | | Thanks, 7 | br 8 | | #{projectName} 9 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/account/verification/email-text.jade: -------------------------------------------------------------------------------- 1 | | #{projectName} Email Verification 2 | = '\n' 3 | = '\n' 4 | | Your #{projectName} account is nearly ready. Please visit the link below to confirm your email address. 5 | = '\n' 6 | = '\n' 7 | | #{verifyURL} 8 | = '\n' 9 | = '\n' 10 | | Note: If you did not sign for a #{projectName} account, don't worry. You can ignore this email. 11 | = '\n' 12 | = '\n' 13 | | Thanks, 14 | | #{projectName} 15 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/admin/index.jade: -------------------------------------------------------------------------------- 1 | extends ../../layouts/admin 2 | 3 | block head 4 | title Admin Area 5 | 6 | block neck 7 | link(rel='stylesheet', href='/views/admin/index.min.css?#{cacheBreaker}') 8 | 9 | block body 10 | div.row 11 | div.col-sm-6 12 | div.page-header 13 | h1 Admin Area 14 | div.row 15 | div.col-sm-4 16 | div.well.stat 17 | div.stat-value #{countUser} 18 | div.stat-label Users 19 | div.col-sm-4 20 | div.well.stat 21 | div.stat-value #{countAccount} 22 | div.stat-label Accounts 23 | div.col-sm-4 24 | div.well.stat 25 | div.stat-value #{countAdmin} 26 | div.stat-label Admins 27 | div.row 28 | div.col-sm-4 29 | div.well.stat 30 | div.stat-value #{countAdminGroup} 31 | div.stat-label Groups 32 | div.col-sm-4 33 | div.well.stat 34 | div.stat-value #{countCategory} 35 | div.stat-label Categories 36 | div.col-sm-4 37 | div.well.stat 38 | div.stat-value #{countStatus} 39 | div.stat-label Statuses 40 | div.col-sm-6.special 41 | div.page-header 42 | h1 Super Dashboard 43 | i.fa.fa-gears.super-awesome 44 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/admin/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.init = function(req, res, next){ 4 | var sigma = {}; 5 | var collections = ['User', 'Account', 'Admin', 'AdminGroup', 'Category', 'Status']; 6 | var queries = []; 7 | 8 | collections.forEach(function(el, i, arr) { 9 | queries.push(function(done) { 10 | req.app.db.models[el].count({}, function(err, count) { 11 | if (err) { 12 | return done(err, null); 13 | } 14 | 15 | sigma['count'+ el] = count; 16 | done(null, el); 17 | }); 18 | }); 19 | }); 20 | 21 | var asyncFinally = function(err, results) { 22 | if (err) { 23 | return next(err); 24 | } 25 | 26 | res.render('admin/index', sigma); 27 | }; 28 | 29 | require('async').parallel(queries, asyncFinally); 30 | }; 31 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/contact/email-html.jade: -------------------------------------------------------------------------------- 1 | h3 #{projectName} Contact Form 2 | table(border='1', cellpadding='5', cellspacing='0') 3 | tr 4 | td Name: 5 | td #{name} 6 | tr 7 | td Email: 8 | td #{email} 9 | tr 10 | td Message: 11 | td #{message} 12 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/contact/email-text.jade: -------------------------------------------------------------------------------- 1 | | #{projectName} Contact Form 2 | = '\n' 3 | = '\n' 4 | | Name: #{name} 5 | | Email: #{email} 6 | | Message: 7 | | #{message} 8 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/events/details.jade: -------------------------------------------------------------------------------- 1 | extends ../../layouts/default 2 | 3 | block head 4 | title #{event.name} 5 | 6 | block body 7 | div.row 8 | div.col-sm-8 9 | div.page-header 10 | h1 #{event.name} 11 | small   Posted by #{event.username} 12 | ul.event-list 13 | li 14 | strong Venu: 15 | | #{event.venu} 16 | li 17 | strong Date: 18 | | #{event.date} 19 | li 20 | strong Start Time: 21 | | #{event.startTime} 22 | li 23 | strong End Time: 24 | | #{event.endTime} 25 | p #{event.description} 26 | p 27 | i.fa.fa-arrow-circle-left 28 | a(href='/events') Go Back 29 | 30 | div.col-sm-4 31 | div.page-header 32 | h1 Sidebar 33 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/events/index.jade: -------------------------------------------------------------------------------- 1 | extends ../../layouts/default 2 | 3 | block head 4 | title View Events 5 | 6 | block body 7 | div.row 8 | div.col-sm-8 9 | div.page-header 10 | h1 View Events 11 | ul.events 12 | each event, i in data 13 | li 14 | strong #{event.name} - 15 | | Posted By #{event.username} 16 | p #{event.description} 17 | a(href='/events/show/#{event._id}', class='btn btn-default') Read More 18 | div.col-sm-4 19 | div.page-header 20 | h1 Sidebar 21 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/http/404.jade: -------------------------------------------------------------------------------- 1 | extends ../../layouts/default 2 | 3 | block head 4 | title Page Not Found 5 | 6 | block body 7 | h1 Page Not Found 8 | p.lead 9 | | The resource you requested doesn't exist. 10 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/http/500.jade: -------------------------------------------------------------------------------- 1 | extends ../../layouts/default 2 | 3 | block head 4 | title Server Error 5 | 6 | block body 7 | h1 Server Error 8 | p.lead 9 | | Sorry something went wrong. 10 | if err.stack 11 | pre #{err.stack} 12 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/http/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.http404 = function(req, res){ 4 | res.status(404); 5 | if (req.xhr) { 6 | res.send({ error: 'Resource not found.' }); 7 | } 8 | else { 9 | res.render('http/404'); 10 | } 11 | }; 12 | 13 | exports.http500 = function(err, req, res, next){ 14 | res.status(500); 15 | 16 | var data = { err: {} }; 17 | if (req.app.get('env') === 'development') { 18 | data.err = err; 19 | console.log(err.stack); 20 | } 21 | 22 | if (req.xhr) { 23 | res.send({ error: 'Something went wrong.', details: data }); 24 | } 25 | else { 26 | res.render('http/500', data); 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.init = function(req, res){ 4 | res.render('index'); 5 | }; 6 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/login/forgot/email-html.jade: -------------------------------------------------------------------------------- 1 | h3 Forgot your password? 2 | p 3 | | We received a request to reset the password for your account (#{username}). 4 | p 5 | | To reset your password, click on the link below (or copy and paste the URL into your browser): 6 | p 7 | a(href='#{resetLink}') #{resetLink} 8 | p 9 | | Thanks, 10 | br 11 | | #{projectName} 12 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/login/forgot/email-text.jade: -------------------------------------------------------------------------------- 1 | | Forgot your password? 2 | = '\n' 3 | = '\n' 4 | | We received a request to reset the password for your account (#{username}). 5 | = '\n' 6 | = '\n' 7 | | To reset your password, click on the link below (or copy and paste the URL into your browser): 8 | | #{resetLink} 9 | = '\n' 10 | = '\n' 11 | | Thanks, 12 | | #{projectName} 13 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/login/forgot/index.jade: -------------------------------------------------------------------------------- 1 | extends ../../../layouts/default 2 | 3 | block head 4 | title Forgot Your Password? 5 | 6 | block feet 7 | script(src='/views/login/forgot/index.min.js?#{cacheBreaker}') 8 | 9 | block body 10 | div.row 11 | div.col-sm-6 12 | div.page-header 13 | h1 Forgot Your Password? 14 | div#forgot 15 | 16 | script(type='text/template', id='tmpl-forgot') 17 | form 18 | div.alerts 19 | |<% _.each(errors, function(err) { %> 20 | div.alert.alert-danger 21 | button.close(type='button', data-dismiss='alert') × 22 | |<%- err %> 23 | |<% }); %> 24 | |<% if (success) { %> 25 | div.alert.alert-info 26 | button.close(type='button', data-dismiss='alert') × 27 | | If an account matched that address, an email will be sent with instructions. 28 | |<% } %> 29 | |<% if (!success) { %> 30 | div.form-group(class!='<%- errfor.email ? "has-error" : "" %>') 31 | label Enter Your Email: 32 | input.form-control(type='text', name='email', value!='<%= email %>') 33 | span.help-block <%- errfor.email %> 34 | |<% } %> 35 | div.form-group 36 | |<% if (!success) { %> 37 | button.btn.btn-primary.btn-forgot(type='button') Send Reset 38 | |<% } %> 39 | |  40 | a.btn.btn-link(href='/login/') Back to Login 41 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/logout/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.init = function(req, res){ 4 | req.logout(); 5 | res.redirect('/'); 6 | }; 7 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/myevents/index.jade: -------------------------------------------------------------------------------- 1 | extends ../../layouts/default 2 | 3 | block head 4 | title My Events 5 | 6 | block body 7 | div.row 8 | div.col-sm-8 9 | div.page-header 10 | h1 My Events 11 | if data 12 | ul.events 13 | each event, i in data 14 | li 15 | strong #{event.name} 16 |    17 | i.fa.fa-pencil 18 | a(href='/events/edit/#{event._id}') Edit 19 |    20 | i.fa.fa-trash 21 | a(id='deleteEvent', data-delete='#{event._id}', href='#') Delete 22 | else 23 |

You have no events

24 | div.col-sm-4 25 | div.page-header 26 | h1 Sidebar 27 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/myevents/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | exports.find = function(req, res, next){ 4 | req.query.name = req.query.name ? req.query.name : ''; 5 | req.query.limit = req.query.limit ? parseInt(req.query.limit, null) : 20; 6 | req.query.page = req.query.page ? parseInt(req.query.page, null) : 1; 7 | req.query.sort = req.query.sort ? req.query.sort : '_id'; 8 | 9 | var filters = {username:req.user.username}; 10 | if (req.query.username) { 11 | filters.username = new RegExp('^.*?'+ req.query.username +'.*$', 'i'); 12 | } 13 | 14 | req.app.db.models.Event.pagedFind({ 15 | filters: filters, 16 | keys: 'name username description', 17 | limit: req.query.limit, 18 | page: req.query.page, 19 | sort: req.query.sort 20 | }, function(err, results) { 21 | if (err) { 22 | return next(err); 23 | } 24 | 25 | if (req.xhr) { 26 | res.header("Cache-Control", "no-cache, no-store, must-revalidate"); 27 | results.filters = req.query; 28 | res.send(results); 29 | } 30 | else { 31 | results.filters = req.query; 32 | res.render('myevents/index', { data: results.data }); 33 | } 34 | }); 35 | }; 36 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/signup/email-html.jade: -------------------------------------------------------------------------------- 1 | h3 Welcome to #{projectName} 2 | p Thanks for signing up. As requested, your account has been created. Here are your login credentials: 3 | table(border='1', cellpadding='5', cellspacing='0') 4 | tr 5 | td Username: 6 | td #{username} 7 | tr 8 | td Email: 9 | td #{email} 10 | tr 11 | td Login Here: 12 | td #{loginURL} 13 | p 14 | | Thanks, 15 | br 16 | | #{projectName} 17 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/signup/email-text.jade: -------------------------------------------------------------------------------- 1 | | Welcome to #{projectName} 2 | = '\n' 3 | = '\n' 4 | | Thanks for signing up. As requested, your account has been created. Here are your login credentials: 5 | = '\n' 6 | = '\n' 7 | | Username: #{username} 8 | | Email: #{email} 9 | = '\n' 10 | = '\n' 11 | | Login Here: #{loginURL} 12 | = '\n' 13 | = '\n' 14 | | Thanks, 15 | | #{projectName} 16 | -------------------------------------------------------------------------------- /05_Community_Events/comevents/views/signup/social.jade: -------------------------------------------------------------------------------- 1 | extends ../../layouts/default 2 | 3 | block head 4 | title Sign Up 5 | 6 | block feet 7 | script(src='/views/signup/social.min.js?#{cacheBreaker}') 8 | 9 | block body 10 | div.row 11 | div.col-sm-6 12 | div.page-header 13 | h1 Complete Sign Up 14 | div#signup 15 | 16 | script(type='text/template', id='tmpl-signup') 17 | form 18 | div.alerts 19 | |<% _.each(errors, function(err) { %> 20 | div.alert.alert-danger.alert-dismissable 21 | button.close(type='button', data-dismiss='alert') × 22 | |<%- err %> 23 | |<% }); %> 24 | div.form-group(class!='<%- errfor.email ? "has-error" : "" %>') 25 | label Enter Your Email: 26 | input.form-control(type='text', name='email', value!='<%= email %>') 27 | span.help-block <%- errfor.email %> 28 | div.form-group 29 | button.btn.btn-primary.btn-signup(type='button') Create My Account 30 | 31 | script(type='text/template', id='data-email') !{email} 32 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "public/components", 3 | "json": "bower.json" 4 | } -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.build/css/app.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/.build/css/app.css -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.build/css/style.css: -------------------------------------------------------------------------------- 1 | .top-bar{ 2 | margin-bottom:20px; 3 | } 4 | 5 | ul{ 6 | list-style: none; 7 | margin:0; 8 | } 9 | 10 | .book{ 11 | text-align:center; 12 | } 13 | 14 | .book h4{ 15 | margin-top: 15px; 16 | } 17 | 18 | .price{ 19 | margin:5px; 20 | font-size:18px; 21 | } 22 | 23 | .price span{ 24 | color:green; 25 | background:#f4f4f4; 26 | padding:10px; 27 | border:1px #ccc solid; 28 | border-radius:50%; 29 | } 30 | 31 | footer{ 32 | margin-top:40px; 33 | padding:10px; 34 | text-align:center; 35 | } 36 | 37 | [class*="column"] + [class*="column"]:last-child{ 38 | float:left; 39 | } 40 | 41 | ul.error li, ul.info li, ul.success li{ 42 | margin:20px, 0, 20px 0; 43 | padding: 15px; 44 | border: 1px solid transparent; 45 | border-radius: 4px; 46 | list-style: none; 47 | } 48 | 49 | ul.error li{ 50 | color: #a94442; 51 | background-color: #f2dede; 52 | border-color: #ebccd1; 53 | } 54 | 55 | ul.info li{ 56 | color: #31708f; 57 | background-color: #d9edf7; 58 | border-color: #bce8f1; 59 | } 60 | 61 | ul.success li{ 62 | color: #3c763d; 63 | background-color: #dff0d8; 64 | border-color: #d6e9c6; 65 | } 66 | 67 | h2 span{font-size:18px;} 68 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.build/img/node1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/.build/img/node1.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.build/img/node10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/.build/img/node10.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.build/img/node2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/.build/img/node2.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.build/img/node3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/.build/img/node3.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.build/img/node4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/.build/img/node4.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.build/img/node8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/.build/img/node8.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.build/js/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | requirejs.config({ 5 | paths: {} 6 | }); 7 | 8 | 9 | require([/* Dependencies */], function () { 10 | 11 | var app = { 12 | initialize: function () { 13 | // Your code here 14 | } 15 | }; 16 | 17 | app.initialize(); 18 | 19 | }); 20 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.build/js/main.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){ 2 | $('.removeBook').click(function(e){ 3 | deleteId = $(this).data('id'); 4 | $.ajax({ 5 | url:'/manage/books/delete/'+deleteId, 6 | type: 'DELETE', 7 | success: function(){ 8 | 9 | } 10 | }); 11 | window.location = '/manage/books'; 12 | }); 13 | 14 | 15 | $('.removeCategory').click(function(e){ 16 | deleteId = $(this).data('id'); 17 | $.ajax({ 18 | url:'/manage/categories/delete/'+deleteId, 19 | type: 'DELETE', 20 | success: function(){ 21 | 22 | } 23 | }); 24 | window.location = '/manage/categories'; 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 4 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.jshintignore: -------------------------------------------------------------------------------- 1 | .build 2 | node_modules 3 | public/js 4 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.nodemonignore: -------------------------------------------------------------------------------- 1 | /.build/* # Build folder 2 | /public/* # ignore all public resources 3 | /.* # any hidden (dot) files 4 | *.md # Markdown files 5 | *.css # CSS files 6 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.npmignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | .build/ 4 | node_modules/ 5 | *.iml 6 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/.yo-rc.json: -------------------------------------------------------------------------------- 1 | { 2 | "generator-kraken": { 3 | "taskModule": "grunt", 4 | "description": "Simple shopping cart", 5 | "author": "Brad Traversy", 6 | "templateModule": "makara", 7 | "i18n": "i18n", 8 | "componentPackager": "bower", 9 | "cssModule": "less", 10 | "jsModule": "requirejs", 11 | "useJson": null 12 | } 13 | } -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/Gruntfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | module.exports = function (grunt) { 5 | 6 | // Load the project's grunt tasks from a directory 7 | require('grunt-config-dir')(grunt, { 8 | configDir: require('path').resolve('tasks') 9 | }); 10 | 11 | 12 | grunt.loadNpmTasks('grunt-makara-amdify'); 13 | 14 | // Register group tasks 15 | grunt.registerTask('build', ['jshint', 'dustjs', 'makara-amdify', 'less', 'requirejs', 'copyto']); 16 | grunt.registerTask('test', [ 'jshint', 'mochacli' ]); 17 | 18 | }; 19 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/README.md: -------------------------------------------------------------------------------- 1 | TekBooks 2 | =========== 3 | 4 | Simple shopping cart 5 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/controllers/books.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var Book = require('../models/bookModel'); 3 | var Category = require('../models/categoryModel'); 4 | 5 | module.exports = function (router) { 6 | router.get('/', function (req, res) { 7 | res.render('index'); 8 | }); 9 | 10 | router.get('/details/:id', function (req, res) { 11 | Book.findOne({ 12 | _id:req.params.id 13 | }, function(err, book){ 14 | if(err){ 15 | console.log(err); 16 | } 17 | 18 | var model = { 19 | book: book 20 | }; 21 | 22 | res.render('books/details', model); 23 | }); 24 | }); 25 | }; 26 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/controllers/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var Book = require('../models/bookModel'); 4 | 5 | 6 | module.exports = function (router) { 7 | router.get('/', function (req, res) { 8 | Book.find({}, function(err, books){ 9 | if(err){ 10 | console.log(err); 11 | } 12 | 13 | books.forEach(function(book){ 14 | book.truncText = book.truncText(50); 15 | }); 16 | 17 | var model = { 18 | books: books 19 | }; 20 | 21 | res.render('index', model); 22 | }); 23 | }); 24 | }; 25 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/controllers/pages.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function (router) { 4 | router.get('/about', function (req, res) { 5 | res.render('pages/about'); 6 | }); 7 | }; 8 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var express = require('express'); 4 | var kraken = require('kraken-js'); 5 | var flash = require('connect-flash'); 6 | var db = require('./lib/db'); 7 | 8 | 9 | var options, app; 10 | 11 | /* 12 | * Create and configure application. Also exports application instance for use by tests. 13 | * See https://github.com/krakenjs/kraken-js#options for additional configuration options. 14 | */ 15 | options = { 16 | onconfig: function (config, next) { 17 | /* 18 | * Add any additional config setup or overrides here. `config` is an initialized 19 | * `confit` (https://github.com/krakenjs/confit/) configuration object. 20 | */ 21 | db.config(config.get('databaseConfig')); 22 | next(null, config); 23 | } 24 | }; 25 | 26 | app = module.exports = express(); 27 | app.use(kraken(options)); 28 | 29 | // Connect Flash 30 | app.use(flash()); 31 | app.use(function(req, res, next){ 32 | res.locals.messages = require('express-messages')(req, res); 33 | next(); 34 | }); 35 | 36 | app.on('start', function () { 37 | console.log('Application ready to serve requests.'); 38 | console.log('Environment: %s', app.kraken.get('env:env')); 39 | }); 40 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/lib/db.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var mongoose = require('mongoose'); 3 | 4 | var db = function(){ 5 | return { 6 | config: function(conf){ 7 | mongoose.connect('mongodb://localhost/tekbooks'); 8 | var db = mongoose.connection; 9 | db.on('error', console.error.bind(console, 'Connection error')); 10 | db.once('open', function(){ 11 | console.log('db connection open'); 12 | }); 13 | } 14 | }; 15 | }; 16 | 17 | module.exports = db(); 18 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/books/details.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/cart/index.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/errors/404.properties: -------------------------------------------------------------------------------- 1 | header=File not found 2 | description=The URL {url} did not resolve to a route. -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/errors/500.properties: -------------------------------------------------------------------------------- 1 | header=Internal server error 2 | description=The URL {url} had the following error {err}. -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/errors/503.properties: -------------------------------------------------------------------------------- 1 | header=Service unavailable 2 | description=The service is unavailable. Please try back shortly. 3 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/index.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/layouts/manage.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/layouts/master.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/manage/books/add.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/manage/books/edit.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/manage/books/index.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/manage/categories/add.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/manage/categories/edit.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/manage/categories/index.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/manage/index.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/locales/US/en/pages/about.properties: -------------------------------------------------------------------------------- 1 | greeting=Hello, {name}! 2 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/models/bookModel.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var mongoose = require('mongoose'); 4 | var bookModel = function(){ 5 | var bookSchema = mongoose.Schema({ 6 | title: String, 7 | category: String, 8 | description: String, 9 | author: String, 10 | publisher: String, 11 | price: Number, 12 | cover: String 13 | }); 14 | 15 | // Shorten text 16 | bookSchema.methods.truncText = function(length){ 17 | return this.description.substring(0,length); 18 | }; 19 | 20 | return mongoose.model('Book', bookSchema); 21 | }; 22 | 23 | module.exports = new bookModel(); 24 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/models/categoryModel.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var mongoose = require('mongoose'); 4 | var categoryModel = function(){ 5 | var categorySchema = mongoose.Schema({ 6 | name: String 7 | }); 8 | 9 | return mongoose.model('Category', categorySchema); 10 | }; 11 | 12 | module.exports = new categoryModel(); 13 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/models/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function IndexModel() { 4 | return { 5 | name: 'index' 6 | }; 7 | }; 8 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tekbooks", 3 | "version": "0.1.0", 4 | "description": "Simple shopping cart", 5 | "author": "Brad Traversy", 6 | "main": "index.js", 7 | "scripts": { 8 | "test": "grunt test", 9 | "build": "grunt build", 10 | "all": "npm run build && npm run test" 11 | }, 12 | "dependencies": { 13 | "connect-flash": "^0.1.1", 14 | "construx": "^1.0.0", 15 | "construx-copier": "^1.0.0", 16 | "construx-dustjs": "^1.1.0", 17 | "construx-less": "^1.0.0", 18 | "dust-makara-helpers": "^4.1.2", 19 | "express": "^4.12.2", 20 | "express-messages": "^1.0.0", 21 | "kraken-js": "^1.0.3", 22 | "makara": "^2.0.3", 23 | "mongodb": "^2.0.45", 24 | "mongoose": "^4.1.10", 25 | "requirejs": "^2.1.20" 26 | }, 27 | "devDependencies": { 28 | "grunt": "^0.4.5", 29 | "grunt-cli": "^0.1.13", 30 | "grunt-config-dir": "^0.3.2", 31 | "grunt-contrib-clean": "^0.6.0", 32 | "grunt-contrib-jshint": "^0.10.0", 33 | "grunt-contrib-less": "^1.0.1", 34 | "grunt-contrib-requirejs": "^0.4.4", 35 | "grunt-copy-to": "0.0.10", 36 | "grunt-dustjs": "^1.2.1", 37 | "grunt-makara-amdify": "^1.0.1", 38 | "grunt-mocha-cli": "^1.14.0", 39 | "mocha": "^1.18.0", 40 | "supertest": "^0.9.0" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/components/requirejs/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "requirejs", 3 | "version": "2.1.20", 4 | "ignore": [], 5 | "homepage": "http://requirejs.org", 6 | "authors": [ 7 | "jrburke.com" 8 | ], 9 | "description": "A file and module loader for JavaScript", 10 | "main": "require.js", 11 | "keywords": [ 12 | "AMD" 13 | ], 14 | "license": [ 15 | "BSD-3-Clause", 16 | "MIT" 17 | ], 18 | "_release": "2.1.20", 19 | "_resolution": { 20 | "type": "version", 21 | "tag": "2.1.20", 22 | "commit": "ad0230c737a1289c3ffe3d76ce0f86366955239a" 23 | }, 24 | "_source": "git://github.com/jrburke/requirejs-bower.git", 25 | "_target": "^2.1.16", 26 | "_originalSource": "requirejs", 27 | "_direct": true 28 | } -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/components/requirejs/README.md: -------------------------------------------------------------------------------- 1 | # requirejs-bower 2 | 3 | Bower packaging for [RequireJS](http://requirejs.org). 4 | 5 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/components/requirejs/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "requirejs", 3 | "version": "2.1.20", 4 | "ignore": [], 5 | "homepage": "http://requirejs.org", 6 | "authors": [ 7 | "jrburke.com" 8 | ], 9 | "description": "A file and module loader for JavaScript", 10 | "main": "require.js", 11 | "keywords": [ 12 | "AMD" 13 | ], 14 | "license": [ 15 | "BSD-3-Clause", 16 | "MIT" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/css/app.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/css/app.less -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/css/style.css: -------------------------------------------------------------------------------- 1 | .top-bar{ 2 | margin-bottom:20px; 3 | } 4 | 5 | ul{ 6 | list-style: none; 7 | margin:0; 8 | } 9 | 10 | .book{ 11 | text-align:center; 12 | } 13 | 14 | .book h4{ 15 | margin-top: 15px; 16 | } 17 | 18 | .price{ 19 | margin:5px; 20 | font-size:18px; 21 | } 22 | 23 | .price span{ 24 | color:green; 25 | background:#f4f4f4; 26 | padding:10px; 27 | border:1px #ccc solid; 28 | border-radius:50%; 29 | } 30 | 31 | footer{ 32 | margin-top:40px; 33 | padding:10px; 34 | text-align:center; 35 | } 36 | 37 | [class*="column"] + [class*="column"]:last-child{ 38 | float:left; 39 | } 40 | 41 | ul.error li, ul.info li, ul.success li{ 42 | margin:20px, 0, 20px 0; 43 | padding: 15px; 44 | border: 1px solid transparent; 45 | border-radius: 4px; 46 | list-style: none; 47 | } 48 | 49 | ul.error li{ 50 | color: #a94442; 51 | background-color: #f2dede; 52 | border-color: #ebccd1; 53 | } 54 | 55 | ul.info li{ 56 | color: #31708f; 57 | background-color: #d9edf7; 58 | border-color: #bce8f1; 59 | } 60 | 61 | ul.success li{ 62 | color: #3c763d; 63 | background-color: #dff0d8; 64 | border-color: #d6e9c6; 65 | } 66 | 67 | h2 span{font-size:18px;} 68 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/mongo1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/mongo1.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/mongo2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/mongo2.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/mongo3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/mongo3.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/mongo4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/mongo4.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/node1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/node1.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/node2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/node2.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/node3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/node3.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/node4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/node4.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/php1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/php1.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/php2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/php2.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/php3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/php3.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/img/php4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/06_Bookstore/TekBooks/public/img/php4.jpg -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/js/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | requirejs.config({ 5 | paths: {} 6 | }); 7 | 8 | 9 | require([/* Dependencies */], function () { 10 | 11 | var app = { 12 | initialize: function () { 13 | // Your code here 14 | } 15 | }; 16 | 17 | app.initialize(); 18 | 19 | }); 20 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/js/foundation/foundation.alert.js: -------------------------------------------------------------------------------- 1 | ;(function ($, window, document, undefined) { 2 | 'use strict'; 3 | 4 | Foundation.libs.alert = { 5 | name : 'alert', 6 | 7 | version : '5.5.2', 8 | 9 | settings : { 10 | callback : function () {} 11 | }, 12 | 13 | init : function (scope, method, options) { 14 | this.bindings(method, options); 15 | }, 16 | 17 | events : function () { 18 | var self = this, 19 | S = this.S; 20 | 21 | $(this.scope).off('.alert').on('click.fndtn.alert', '[' + this.attr_name() + '] .close', function (e) { 22 | var alertBox = S(this).closest('[' + self.attr_name() + ']'), 23 | settings = alertBox.data(self.attr_name(true) + '-init') || self.settings; 24 | 25 | e.preventDefault(); 26 | if (Modernizr.csstransitions) { 27 | alertBox.addClass('alert-close'); 28 | alertBox.on('transitionend webkitTransitionEnd oTransitionEnd', function (e) { 29 | S(this).trigger('close.fndtn.alert').remove(); 30 | settings.callback(); 31 | }); 32 | } else { 33 | alertBox.fadeOut(300, function () { 34 | S(this).trigger('close.fndtn.alert').remove(); 35 | settings.callback(); 36 | }); 37 | } 38 | }); 39 | }, 40 | 41 | reflow : function () {} 42 | }; 43 | }(jQuery, window, window.document)); 44 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/js/main.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){ 2 | $('.removeBook').click(function(e){ 3 | deleteId = $(this).data('id'); 4 | $.ajax({ 5 | url:'/manage/books/delete/'+deleteId, 6 | type: 'DELETE', 7 | success: function(){ 8 | 9 | } 10 | }); 11 | window.location = '/manage/books'; 12 | }); 13 | 14 | 15 | $('.removeCategory').click(function(e){ 16 | deleteId = $(this).data('id'); 17 | $.ajax({ 18 | url:'/manage/categories/delete/'+deleteId, 19 | type: 'DELETE', 20 | success: function(){ 21 | 22 | } 23 | }); 24 | window.location = '/manage/categories'; 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/js/vendor/jquery.cookie.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery Cookie Plugin v1.4.1 3 | * https://github.com/carhartl/jquery-cookie 4 | * 5 | * Copyright 2013 Klaus Hartl 6 | * Released under the MIT license 7 | */ 8 | !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}}); 9 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/books/details.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/master" /} 2 | 3 | { 5 | 6 |
7 | 8 |
9 | 10 |
11 |

{book.title}

12 |
    13 |
  • Category: {book.category}
  • 14 |
  • Author: {book.author}
  • 15 |
  • Publisher: {book.publisher}
  • 16 |
17 |
18 |
${book.price}
19 |
20 |

{book.description}

21 |
22 | 23 | 24 |
25 |
26 | {/body} 27 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/errors/404.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/master" /} 2 | 3 | {{@pre type="content" key="header"/} 5 |

{@pre type="content" key="description"/}

6 | {/body} 7 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/errors/500.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/master" /} 2 | 3 | {{@pre type="content" key="header"/} 5 |

{@pre type="content" key="description"/}

6 | {/body} 7 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/errors/503.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/master" /} 2 | 3 | {{@pre type="content" key="header"/} 5 |

{@pre type="content" key="description"/}

6 | {/body} 7 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/index.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/master" /} 2 | 3 | { 7 | 8 |

{.title}

9 |

10 | {.truncText} 11 |

12 |
Buy it for ${.price}
13 |
14 | Book Details 15 |
16 | {/books} 17 | {/body} 18 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/manage/books/index.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/manage" /} 2 | 3 | {Books 5 |

Add Books

6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {#books} 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | {/books} 27 | 28 |
IDBook TitleCategory
{._id}{.title}{.category}EditDelete
29 | {/body} 30 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/manage/categories/add.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/manage" /} 2 | 3 | { 5 |
6 |

Add Category

7 | 8 |
9 |
10 | 13 |
14 |
15 | 16 |
17 | 18 |
19 |
20 | 21 | 22 | {/body} 23 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/manage/categories/edit.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/manage" /} 2 | 3 | { 5 |
6 |

Edit Category

7 | 8 |
9 |
10 | 13 |
14 |
15 | 16 |
17 | 18 |
19 |
20 | 21 | 22 | {/body} 23 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/manage/categories/index.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/manage" /} 2 | 3 | {Categories 5 |

Add Category

6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {#categories} 19 | 20 | 21 | 22 | 23 | 24 | 25 | {/categories} 26 | 27 |
IDCategory name
{._id}{.name}EditDelete
28 | {/body} 29 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/manage/index.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/manage" /} 2 | 3 | {Manager 5 |

This is the manager area

6 | {/body} 7 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/public/templates/pages/about.dust: -------------------------------------------------------------------------------- 1 | {>"layouts/master" /} 2 | 3 | { 9 |
10 |

About US

11 |

Some Text

12 |

Some Text 2

13 |
14 | 15 | {/body} 16 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/server.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var app = require('./index'); 4 | var http = require('http'); 5 | 6 | 7 | var server; 8 | 9 | /* 10 | * Create and start HTTP server. 11 | */ 12 | 13 | server = http.createServer(app); 14 | server.listen(process.env.PORT || 8000); 15 | server.on('listening', function () { 16 | console.log('Server listening on http://localhost:%d', this.address().port); 17 | }); 18 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/tasks/clean.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | module.exports = function clean(grunt) { 5 | // Load task 6 | grunt.loadNpmTasks('grunt-contrib-clean'); 7 | 8 | // Options 9 | return { 10 | tmp: 'tmp', 11 | build: '.build/templates' 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/tasks/copyto.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | module.exports = function copyto(grunt) { 5 | // Load task 6 | grunt.loadNpmTasks('grunt-copy-to'); 7 | 8 | // Options 9 | return { 10 | build: { 11 | files: [{ 12 | cwd: 'public', 13 | src: ['**/*'], 14 | dest: '.build/' 15 | }], 16 | options: { 17 | ignore: [ 18 | 'public/css/**/*', 19 | 'public/js/**/*', 20 | 'public/templates/**/*' 21 | ] 22 | } 23 | } 24 | }; 25 | }; 26 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/tasks/dustjs.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var path = require('path'); 4 | 5 | module.exports = function dustjs(grunt) { 6 | // Load task 7 | grunt.loadNpmTasks('grunt-dustjs'); 8 | 9 | // Options 10 | return { 11 | build: { 12 | files: [ 13 | { 14 | expand: true, 15 | 16 | cwd: 'public/templates/', 17 | 18 | src: '**/*.dust', 19 | dest: '.build/templates', 20 | ext: '.js' 21 | } 22 | ], 23 | options: { 24 | 25 | fullname: function (filepath) { 26 | return path.relative('public/templates/', filepath).replace(/[.]dust$/, ''); 27 | } 28 | 29 | } 30 | } 31 | }; 32 | }; 33 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/tasks/jshint.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | module.exports = function jshint(grunt) { 5 | // Load task 6 | grunt.loadNpmTasks('grunt-contrib-jshint'); 7 | 8 | // Options 9 | return { 10 | files: [ 11 | 'controllers/**/*.js', 12 | 'lib/**/*.js', 13 | 'models/**/*.js' 14 | ], 15 | options: { 16 | jshintrc: '.jshintrc' 17 | } 18 | }; 19 | }; 20 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/tasks/less.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | module.exports = function less(grunt) { 5 | // Load task 6 | grunt.loadNpmTasks('grunt-contrib-less'); 7 | 8 | // Options 9 | return { 10 | build: { 11 | options: { 12 | cleancss: false 13 | }, 14 | files: [{ 15 | expand: true, 16 | cwd: 'public/css', 17 | src: ['**/*.less'], 18 | dest: '.build/css/', 19 | ext: '.css' 20 | }] 21 | } 22 | }; 23 | }; 24 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/tasks/mochacli.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | module.exports = function mochacli(grunt) { 5 | // Load task 6 | grunt.loadNpmTasks('grunt-mocha-cli'); 7 | 8 | // Options 9 | return { 10 | src: ['test/**/*.js'], 11 | options: { 12 | timeout: 6000, 13 | 'check-leaks': true, 14 | ui: 'bdd', 15 | reporter: 'spec' 16 | } 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/tasks/requirejs.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | 4 | module.exports = function requirejs(grunt) { 5 | // Load task 6 | grunt.loadNpmTasks('grunt-contrib-requirejs'); 7 | 8 | // Options 9 | return { 10 | build: { 11 | options: { 12 | baseUrl: 'public/js', 13 | dir: '.build/js', 14 | optimize: 'uglify', 15 | modules: [ 16 | { name: 'app' } 17 | ] 18 | } 19 | } 20 | }; 21 | }; 22 | -------------------------------------------------------------------------------- /06_Bookstore/TekBooks/test/index.js: -------------------------------------------------------------------------------- 1 | /*global describe:false, it:false, beforeEach:false, afterEach:false*/ 2 | 3 | 'use strict'; 4 | 5 | 6 | var kraken = require('kraken-js'), 7 | express = require('express'), 8 | path = require('path'), 9 | request = require('supertest'); 10 | 11 | 12 | describe('index', function () { 13 | 14 | var app, mock; 15 | 16 | 17 | beforeEach(function (done) { 18 | app = express(); 19 | app.on('start', done); 20 | app.use(kraken({ 21 | basedir: path.resolve(__dirname, '..') 22 | })); 23 | 24 | mock = app.listen(1337); 25 | 26 | }); 27 | 28 | 29 | afterEach(function (done) { 30 | mock.close(done); 31 | }); 32 | 33 | 34 | it('should say "hello"', function (done) { 35 | request(mock) 36 | .get('/') 37 | .expect(200) 38 | .expect('Content-Type', /html/) 39 | 40 | .expect(/Hello, /) 41 | 42 | .end(function (err, res) { 43 | done(err); 44 | }); 45 | }); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /07_ChatIO/app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | 3 | app = express(); 4 | server = require('http').createServer(app); 5 | 6 | io = require('socket.io').listen(server); 7 | 8 | usernames = []; 9 | 10 | server.listen(process.env.PORT || 3000); 11 | 12 | app.get('/', function(req, res){ 13 | res.sendFile(__dirname + '/index.html'); 14 | }); 15 | 16 | io.sockets.on('connection', function(socket){ 17 | 18 | socket.on('new user', function(data, callback){ 19 | if(usernames.indexOf(data) != -1){ 20 | callback(false); 21 | } else { 22 | callback(true); 23 | socket.username = data; 24 | usernames.push(socket.username); 25 | updateUsernames(); 26 | } 27 | }); 28 | 29 | // update usernames 30 | function updateUsernames(){ 31 | io.sockets.emit('usernames', usernames); 32 | } 33 | 34 | // Send Message 35 | socket.on('send message', function(data){ 36 | io.sockets.emit('new message', {msg: data, user: socket.username}); 37 | }); 38 | 39 | // Disconnect 40 | socket.on('disconnect', function(data){ 41 | if(!socket.username) return; 42 | usernames.splice(usernames.indexOf(socket.username), 1); 43 | updateUsernames(); 44 | }); 45 | }); 46 | -------------------------------------------------------------------------------- /07_ChatIO/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chatIO", 3 | "version": "0.0.1", 4 | "private": "true", 5 | "dependencies":{ 6 | "socket.io": "*", 7 | "express": "*" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /08_FindaDoc_Directory/htmldev/images/footer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/08_FindaDoc_Directory/htmldev/images/footer.jpg -------------------------------------------------------------------------------- /08_FindaDoc_Directory/htmldev/images/menu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/08_FindaDoc_Directory/htmldev/images/menu.jpg -------------------------------------------------------------------------------- /08_FindaDoc_Directory/htmldev/images/pic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/08_FindaDoc_Directory/htmldev/images/pic.jpg -------------------------------------------------------------------------------- /08_FindaDoc_Directory/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "09_FindaDoc_Directory", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "body-parser": "~1.13.2", 10 | "cassandra-driver": "^2.2.1", 11 | "connect-flash": "^0.1.1", 12 | "cookie-parser": "~1.3.5", 13 | "debug": "~2.2.0", 14 | "express": "~4.13.1", 15 | "express-messages": "^1.0.0", 16 | "express-session": "^1.11.3", 17 | "jade": "~1.11.0", 18 | "morgan": "~1.6.1", 19 | "serve-favicon": "~2.3.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /08_FindaDoc_Directory/routes/categories.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var cassandra = require('cassandra-driver'); 4 | 5 | var client = new cassandra.Client({ 6 | contactPoints:['127.0.0.1'] 7 | }); 8 | 9 | client.connect(function(err, result){ 10 | console.log('Cassandra Connected'); 11 | }); 12 | 13 | 14 | router.get('/add', function(req, res, next) { 15 | res.render('addcategory'); 16 | }); 17 | 18 | router.post('/add', function(req, res, next) { 19 | 20 | console.log("WE ARE HERE"); 21 | 22 | var cat_id = cassandra.types.uuid(); 23 | var query = "INSERT INTO findadoc.categories(cat_id, name) VALUES(?,?)"; 24 | 25 | client.execute(query, [cat_id, req.body.name], {prepare: true}, 26 | function(err, result){ 27 | if(err){ 28 | res.status(404).send({msg:err}); 29 | } else { 30 | req.flash('success', "Category Added"); 31 | res.location('/doctors'); 32 | res.redirect('/doctors'); 33 | } 34 | }); 35 | }); 36 | 37 | module.exports = router; 38 | -------------------------------------------------------------------------------- /08_FindaDoc_Directory/routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET home page. */ 5 | router.get('/', function(req, res, next) { 6 | res.render('index'); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /08_FindaDoc_Directory/views/addcategory.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | form(method='post' action='/categories/add' class='addForm') 5 | h3 Add Category 6 | br 7 | div 8 | label Category Name: 9 | input(type='text', name='name') 10 | br 11 | div 12 | input(type='submit' value='Add Category') 13 | 14 | -------------------------------------------------------------------------------- /08_FindaDoc_Directory/views/details.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | a(href='/doctors') < Go Back 5 | br 6 | br 7 | .details 8 | h2 #{doctor.full_name} 9 | | 10 | br 11 | h4 Physican Information 12 | | 13 | ul.doc-info 14 | li Full Name: #{doctor.full_name} 15 | | 16 | li Accepting New Patiencts: #{doctor.new_patients} 17 | | 18 | li Speciality/Category: #{doctor.category} 19 | | 20 | li Graduation Year: #{doctor.graduation_year} 21 | | 22 | br 23 | h4 Practice Information 24 | | 25 | ul.practice-info 26 | li Name: #{doctor.practice_name} 27 | | 28 | li Address: #{doctor.street_address} #{doctor.city} #{doctor.state}, #{doctor.zip} 29 | | 30 | br 31 | br 32 | a(class='editDoctor' href='/edit/#{doctor.doc_id}') Edit 33 | | | 34 | a(class='deleteDoctor' href='' data-id='#{doctor.doc_id}') Delete 35 | 36 | -------------------------------------------------------------------------------- /08_FindaDoc_Directory/views/doctors.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h2 Browse doctors 5 | br 6 | ul.docs 7 | if doctors != false 8 | each doctor, i in doctors 9 | li 10 | h3 #{doctor.full_name} 11 | p Speciality: #{doctor.category} 12 | p Location: #{doctor.city} #{doctor.state}, #{doctor.zip} 13 | p 14 | a(href='/doctors/details/#{doctor.doc_id}') > Details 15 | else 16 | p Sorry no doctors listed 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /08_FindaDoc_Directory/views/error.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /08_FindaDoc_Directory/views/includes/categories.jade: -------------------------------------------------------------------------------- 1 | h2 Categories: 2 | ul 3 | each category, i in cats 4 | li 5 | a(href='/doctors/category/#{category.name}') #{category.name} 6 | -------------------------------------------------------------------------------- /08_FindaDoc_Directory/views/layout.jade: -------------------------------------------------------------------------------- 1 | doctype strict 2 | html(xmlns='http://www.w3.org/1999/xhtml') 3 | head 4 | title= title 5 | meta(http-equiv='Content-Language', content='English') 6 | meta(http-equiv='Content-Type', content='text/html', charset=UTF-8) 7 | link(rel='stylesheet', type='text/css', href='/stylesheets/style.css', media='screen') 8 | script(src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js") 9 | body 10 | #wrap 11 | #header 12 | h1 13 | a(href='#') Find a Doctor 14 | h2 Search for local doctors 15 | 16 | #menu 17 | ul 18 | li 19 | a(href='/') Home 20 | li 21 | a(href='/doctors') Browse Doctors 22 | li 23 | a(href='/doctors/add') Add Doctor 24 | li 25 | a(href='/categories/add') Add Category 26 | #content 27 | .left 28 | !=messages() 29 | block content 30 | 31 | .right 32 | include ./includes/categories.jade 33 | div(style='clear: both;') 34 | 35 | #footer 36 | | Designed by 37 | a(href='#') Free CSS Templates 38 | | , Thansk to 39 | a(href='#') Custom Web Design 40 | -------------------------------------------------------------------------------- /09_Portfolio_App/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "10_Portfolio_App", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "body-parser": "~1.13.2", 10 | "connect-flash": "^0.1.1", 11 | "cookie-parser": "~1.3.5", 12 | "debug": "~2.2.0", 13 | "express": "~4.13.1", 14 | "express-messages": "^1.0.0", 15 | "express-session": "^1.11.3", 16 | "express-validator": "^2.17.1", 17 | "jade": "~1.11.0", 18 | "moment": "^2.10.6", 19 | "morgan": "~1.6.1", 20 | "multer": "^0.1.8", 21 | "mysql": "^2.9.0", 22 | "serve-favicon": "~2.3.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .@{fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "spinning.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | 13 | .fa-icon-rotate(@degrees, @rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 15 | -webkit-transform: rotate(@degrees); 16 | -ms-transform: rotate(@degrees); 17 | transform: rotate(@degrees); 18 | } 19 | 20 | .fa-icon-flip(@horiz, @vert, @rotation) { 21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 22 | -webkit-transform: scale(@horiz, @vert); 23 | -ms-transform: scale(@horiz, @vert); 24 | transform: scale(@horiz, @vert); 25 | } 26 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/spinning.less: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | @-webkit-keyframes fa-spin { 10 | 0% { 11 | -webkit-transform: rotate(0deg); 12 | transform: rotate(0deg); 13 | } 14 | 100% { 15 | -webkit-transform: rotate(359deg); 16 | transform: rotate(359deg); 17 | } 18 | } 19 | 20 | @keyframes fa-spin { 21 | 0% { 22 | -webkit-transform: rotate(0deg); 23 | transform: rotate(0deg); 24 | } 25 | 100% { 26 | -webkit-transform: rotate(359deg); 27 | transform: rotate(359deg); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | 13 | @mixin fa-icon-rotate($degrees, $rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 15 | -webkit-transform: rotate($degrees); 16 | -ms-transform: rotate($degrees); 17 | transform: rotate($degrees); 18 | } 19 | 20 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 22 | -webkit-transform: scale($horiz, $vert); 23 | -ms-transform: scale($horiz, $vert); 24 | transform: scale($horiz, $vert); 25 | } 26 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/_spinning.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | @-webkit-keyframes fa-spin { 10 | 0% { 11 | -webkit-transform: rotate(0deg); 12 | transform: rotate(0deg); 13 | } 14 | 100% { 15 | -webkit-transform: rotate(359deg); 16 | transform: rotate(359deg); 17 | } 18 | } 19 | 20 | @keyframes fa-spin { 21 | 0% { 22 | -webkit-transform: rotate(0deg); 23 | transform: rotate(0deg); 24 | } 25 | 100% { 26 | -webkit-transform: rotate(359deg); 27 | transform: rotate(359deg); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /09_Portfolio_App/public/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /09_Portfolio_App/public/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /09_Portfolio_App/public/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/458455aa7aad2a2315786978eaf05340.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/458455aa7aad2a2315786978eaf05340.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/4fe524ea82b02400ac6027a332c3752c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/4fe524ea82b02400ac6027a332c3752c.jpg -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/6308f50944ff71ca1a2585648c697b0c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/6308f50944ff71ca1a2585648c697b0c.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/9151a978819c81e7dca62acb705f282f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/9151a978819c81e7dca62acb705f282f.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/ca0e0d15accaa57718b50acd3accfe98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/ca0e0d15accaa57718b50acd3accfe98.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/cabin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/cabin.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/cake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/cake.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/circus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/circus.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/d11d3ad2373ce19fc4f5f332a9b4f2a9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/d11d3ad2373ce19fc4f5f332a9b4f2a9.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/game.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/safe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/safe.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/portfolio/submarine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/portfolio/submarine.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/img/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/img/profile.png -------------------------------------------------------------------------------- /09_Portfolio_App/public/javascripts/cbpAnimatedHeader.js: -------------------------------------------------------------------------------- 1 | /** 2 | * cbpAnimatedHeader.js v1.0.0 3 | * http://www.codrops.com 4 | * 5 | * Licensed under the MIT license. 6 | * http://www.opensource.org/licenses/mit-license.php 7 | * 8 | * Copyright 2013, Codrops 9 | * http://www.codrops.com 10 | */ 11 | var cbpAnimatedHeader = (function() { 12 | 13 | var docElem = document.documentElement, 14 | header = document.querySelector( '.navbar-fixed-top' ), 15 | didScroll = false, 16 | changeHeaderOn = 300; 17 | 18 | function init() { 19 | window.addEventListener( 'scroll', function( event ) { 20 | if( !didScroll ) { 21 | didScroll = true; 22 | setTimeout( scrollPage, 250 ); 23 | } 24 | }, false ); 25 | } 26 | 27 | function scrollPage() { 28 | var sy = scrollY(); 29 | if ( sy >= changeHeaderOn ) { 30 | classie.add( header, 'navbar-shrink' ); 31 | } 32 | else { 33 | classie.remove( header, 'navbar-shrink' ); 34 | } 35 | didScroll = false; 36 | } 37 | 38 | function scrollY() { 39 | return window.pageYOffset || docElem.scrollTop; 40 | } 41 | 42 | init(); 43 | 44 | })(); -------------------------------------------------------------------------------- /09_Portfolio_App/public/javascripts/cbpAnimatedHeader.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * cbpAnimatedHeader.min.js v1.0.0 3 | * http://www.codrops.com 4 | * 5 | * Licensed under the MIT license. 6 | * http://www.opensource.org/licenses/mit-license.php 7 | * 8 | * Copyright 2013, Codrops 9 | * http://www.codrops.com 10 | */ 11 | var cbpAnimatedHeader=(function(){var b=document.documentElement,g=document.querySelector(".cbp-af-header"),e=false,a=300;function f(){window.addEventListener("scroll",function(h){if(!e){e=true;setTimeout(d,250)}},false)}function d(){var h=c();if(h>=a){classie.add(g,"cbp-af-header-shrink")}else{classie.remove(g,"cbp-af-header-shrink")}e=false}function c(){return window.pageYOffset||b.scrollTop}f()})(); -------------------------------------------------------------------------------- /09_Portfolio_App/public/javascripts/dashboard.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){ 2 | $('.deleteProject').on('click', deleteProject); 3 | }); 4 | 5 | function deleteProject(){ 6 | deleteId = $(this).data('id'); 7 | var confirmation = confirm('Are You Sure?'); 8 | 9 | if(confirmation){ 10 | $.ajax({ 11 | type: 'DELETE', 12 | url: '/admin/delete/'+deleteId 13 | }).done(function(response){ 14 | 15 | }); 16 | 17 | window.location = '/admin'; 18 | } else { 19 | return false; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/less/mixins.less: -------------------------------------------------------------------------------- 1 | .button-variant(@color; @background; @border) { 2 | color: @color; 3 | background-color: @background; 4 | border-color: @border; 5 | 6 | &:hover, 7 | &:focus, 8 | &:active, 9 | &.active, 10 | .open .dropdown-toggle& { 11 | color: @color; 12 | background-color: darken(@background, 10%); 13 | border-color: darken(@border, 12%); 14 | } 15 | &:active, 16 | &.active, 17 | .open .dropdown-toggle& { 18 | background-image: none; 19 | } 20 | &.disabled, 21 | &[disabled], 22 | fieldset[disabled] & { 23 | &, 24 | &:hover, 25 | &:focus, 26 | &:active, 27 | &.active { 28 | background-color: @background; 29 | border-color: @border; 30 | } 31 | } 32 | 33 | .badge { 34 | color: @background; 35 | background-color: @color; 36 | } 37 | } -------------------------------------------------------------------------------- /09_Portfolio_App/public/less/variables.less: -------------------------------------------------------------------------------- 1 | // Variables 2 | 3 | @brand-primary: #2C3E50; 4 | @brand-success: #18BC9C; 5 | @gray-lighter: lighten(#000, 93.5%); -------------------------------------------------------------------------------- /09_Portfolio_App/public/mail/contact_me.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /09_Portfolio_App/public/stylesheets/dashboard.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/09_Portfolio_App/public/stylesheets/dashboard.css -------------------------------------------------------------------------------- /09_Portfolio_App/public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | -------------------------------------------------------------------------------- /09_Portfolio_App/routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var mysql = require('mysql'); 4 | 5 | var connection = mysql.createConnection({ 6 | host: '172.17.0.2', 7 | user: 'root', 8 | password: 'root', 9 | database: 'portfolio' 10 | }); 11 | 12 | connection.connect(); 13 | 14 | /* GET home page. */ 15 | router.get('/', function(req, res, next) { 16 | connection.query('SELECT * FROM projects', function(err, rows, fields){ 17 | if(err) throw err; 18 | res.render('index', { 19 | "rows": rows 20 | }); 21 | }); 22 | }); 23 | 24 | module.exports = router; 25 | -------------------------------------------------------------------------------- /09_Portfolio_App/views/dashboard.jade: -------------------------------------------------------------------------------- 1 | extends layout2 2 | 3 | block content 4 | h2 Dashboard 5 | br 6 | br 7 | table.table.table-stiped 8 | tr 9 | th ID 10 | th Project Name 11 | th Service 12 | th 13 | th 14 | each row, i in rows 15 | tr 16 | td #{row.id} 17 | td #{row.title} 18 | td #{row.service} 19 | td 20 | a.btn.btn-primary(href='/admin/edit/#{row.id}') Edit 21 | td 22 | a.btn.btn-danger(href='#' class='deleteProject' data-id='#{row.id}') Delete 23 | -------------------------------------------------------------------------------- /09_Portfolio_App/views/edit.jade: -------------------------------------------------------------------------------- 1 | extends layout2 2 | 3 | block content 4 | h2 Edit Project 5 | form(method='post', action='/admin/edit/#{row.id}' enctype='multipart/form-data') 6 | .form-group 7 | label Title 8 | input.form-control(type='text', name='title', value='#{row.title}') 9 | .form-group 10 | label Description 11 | textarea.form-control(name='description') 12 | | #{row.description} 13 | .form-group 14 | label Service 15 | input.form-control(type='text', name='service' , value='#{row.service}') 16 | .form-group 17 | label Client 18 | input.form-control(type='text', name='client', value='#{row.client}') 19 | .form-group 20 | label Project Image 21 | input.form-control(type='file', name='projectimage', value='#{row.image}') 22 | .form-group 23 | label Date 24 | input.form-control(type='date', name='projectdate') 25 | button.btn.btn-default(type='submit') Submit 26 | -------------------------------------------------------------------------------- /09_Portfolio_App/views/error.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /09_Portfolio_App/views/new.jade: -------------------------------------------------------------------------------- 1 | extends layout2 2 | 3 | block content 4 | h2 New Project 5 | form(method='post', action='/admin/new' enctype='multipart/form-data') 6 | .form-group 7 | label Title 8 | input.form-control(type='text', name='title') 9 | .form-group 10 | label Description 11 | textarea.form-control(name='description') 12 | .form-group 13 | label Service 14 | input.form-control(type='text', name='service') 15 | .form-group 16 | label Client 17 | input.form-control(type='text', name='client') 18 | .form-group 19 | label Project Image 20 | input.form-control(type='file', name='projectimage') 21 | .form-group 22 | label Date 23 | input.form-control(type='date', name='projectdate') 24 | button.btn.btn-default(type='submit') Submit 25 | -------------------------------------------------------------------------------- /10_eLearning_System/models/class.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | // Class Schema 4 | 5 | var classSchema = mongoose.Schema({ 6 | title: { 7 | type: String 8 | }, 9 | description: { 10 | type: String 11 | }, 12 | instructor:{ 13 | type: String 14 | }, 15 | lessons:[{ 16 | lesson_number: {type: Number}, 17 | lesson_title: {type: String}, 18 | lesson_body:{type: String} 19 | }] 20 | }); 21 | 22 | var Class = module.exports = mongoose.model('Class', classSchema); 23 | 24 | 25 | // Fetch All Classes 26 | module.exports.getClasses = function(callback, limit){ 27 | Class.find(callback).limit(limit); 28 | }; 29 | 30 | // Fetch Single Class 31 | module.exports.getClassById = function(id, callback){ 32 | Class.findById(id, callback); 33 | }; 34 | 35 | module.exports.addLesson = function(info, callback){ 36 | 37 | class_id = info['class_id']; 38 | lesson_number = info['lesson_number']; 39 | lesson_title = info['lesson_title']; 40 | lesson_body = info['lesson_body']; 41 | 42 | Class.findByIdAndUpdate(class_id,{ 43 | $push:{"lessons": { 44 | lesson_number: lesson_number, 45 | lesson_title: lesson_title, 46 | lesson_body: lesson_body 47 | }} 48 | }, { 49 | safe: true, 50 | upsert:true 51 | }, callback); 52 | }; 53 | -------------------------------------------------------------------------------- /10_eLearning_System/models/student.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | // Student Schema 4 | 5 | var studentSchema = mongoose.Schema({ 6 | first_name: { 7 | type: String 8 | }, 9 | last_name: { 10 | type: String 11 | }, 12 | address: [{ 13 | street_address:{type: String}, 14 | city:{type: String}, 15 | state:{type: String}, 16 | zip:{type: String} 17 | }], 18 | username: { 19 | type: String 20 | }, 21 | email: { 22 | type: String 23 | }, 24 | classes:[{ 25 | class_id:{type: [mongoose.Schema.Types.ObjectId]}, 26 | class_title:{type: String}, 27 | }] 28 | }); 29 | 30 | var Student = module.exports = mongoose.model('Student', studentSchema); 31 | 32 | 33 | // Fetch Single Class 34 | module.exports.getStudentByUsername = function(username, callback){ 35 | var query = {username: username}; 36 | Student.findOne(query, callback); 37 | }; 38 | 39 | // Register Student for Class 40 | module.exports.register = function(info, callback){ 41 | 42 | student_username = info['student_username']; 43 | class_id = info['class_id']; 44 | class_title = info['class_title']; 45 | 46 | var query = {username: student_username}; 47 | 48 | Student.findOneAndUpdate( 49 | query, 50 | {$push: {"classes": 51 | { 52 | class_id: class_id, 53 | class_title: class_title 54 | }}}, 55 | {save: true, upsert: true}, 56 | callback 57 | ); 58 | }; 59 | -------------------------------------------------------------------------------- /10_eLearning_System/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "11_eLearning_System", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "async": "^1.4.2", 10 | "bcryptjs": "^2.3.0", 11 | "body-parser": "~1.13.2", 12 | "connect-flash": "^0.1.1", 13 | "cookie-parser": "~1.3.5", 14 | "debug": "~2.2.0", 15 | "express": "~4.13.1", 16 | "express-handlebars": "^2.0.1", 17 | "express-messages": "^1.0.0", 18 | "express-session": "^1.11.3", 19 | "express-validator": "^2.17.1", 20 | "handlebars": "^4.0.3", 21 | "jade": "~1.11.0", 22 | "mongodb": "^2.0.45", 23 | "mongoose": "^4.1.10", 24 | "morgan": "~1.6.1", 25 | "passport": "^0.3.0", 26 | "passport-http": "^0.3.0", 27 | "passport-local": "^1.0.0", 28 | "serve-favicon": "~2.3.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .@{fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "spinning.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | 13 | .fa-icon-rotate(@degrees, @rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 15 | -webkit-transform: rotate(@degrees); 16 | -ms-transform: rotate(@degrees); 17 | transform: rotate(@degrees); 18 | } 19 | 20 | .fa-icon-flip(@horiz, @vert, @rotation) { 21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 22 | -webkit-transform: scale(@horiz, @vert); 23 | -ms-transform: scale(@horiz, @vert); 24 | transform: scale(@horiz, @vert); 25 | } 26 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/spinning.less: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | @-webkit-keyframes fa-spin { 10 | 0% { 11 | -webkit-transform: rotate(0deg); 12 | transform: rotate(0deg); 13 | } 14 | 100% { 15 | -webkit-transform: rotate(359deg); 16 | transform: rotate(359deg); 17 | } 18 | } 19 | 20 | @keyframes fa-spin { 21 | 0% { 22 | -webkit-transform: rotate(0deg); 23 | transform: rotate(0deg); 24 | } 25 | 100% { 26 | -webkit-transform: rotate(359deg); 27 | transform: rotate(359deg); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | } 12 | 13 | @mixin fa-icon-rotate($degrees, $rotation) { 14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 15 | -webkit-transform: rotate($degrees); 16 | -ms-transform: rotate($degrees); 17 | transform: rotate($degrees); 18 | } 19 | 20 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 22 | -webkit-transform: scale($horiz, $vert); 23 | -ms-transform: scale($horiz, $vert); 24 | transform: scale($horiz, $vert); 25 | } 26 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/_spinning.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | @-webkit-keyframes fa-spin { 10 | 0% { 11 | -webkit-transform: rotate(0deg); 12 | transform: rotate(0deg); 13 | } 14 | 100% { 15 | -webkit-transform: rotate(359deg); 16 | transform: rotate(359deg); 17 | } 18 | } 19 | 20 | @keyframes fa-spin { 21 | 0% { 22 | -webkit-transform: rotate(0deg); 23 | transform: rotate(0deg); 24 | } 25 | 100% { 26 | -webkit-transform: rotate(359deg); 27 | transform: rotate(359deg); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/fonts/font-awesome-4.2.0/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "spinning"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/breadcrumbs-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/breadcrumbs-bg.gif -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/bx_loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/bx_loader.gif -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/controls.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/blank.gif -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_close.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_loading.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_nav_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_nav_left.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_nav_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_nav_right.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_e.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_n.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_ne.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_nw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_nw.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_s.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_se.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_sw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_sw.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_shadow_w.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_title_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_title_left.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_title_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_title_main.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_title_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_title_over.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancy_title_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancy_title_right.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancybox-x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancybox-x.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancybox-y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancybox-y.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/fancybox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/fancybox/fancybox.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/fancybox/jquery.mousewheel-3.0.4.pack.js: -------------------------------------------------------------------------------- 1 | /*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) 2 | * Licensed under the MIT License (LICENSE.txt). 3 | * 4 | * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. 5 | * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. 6 | * Thanks to: Seamus Leahy for adding deltaX and deltaY 7 | * 8 | * Version: 3.0.4 9 | * 10 | * Requires: 1.2.2+ 11 | */ 12 | 13 | (function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a= 14 | f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery); -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/gray_jean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/gray_jean.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/img/icon-arrow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/10_eLearning_System/public/stylesheets/img/icon-arrow-right.png -------------------------------------------------------------------------------- /10_eLearning_System/public/stylesheets/prettify.css: -------------------------------------------------------------------------------- 1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} -------------------------------------------------------------------------------- /10_eLearning_System/routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | Class = require('../models/class'); 5 | 6 | 7 | router.get('/', function(req, res, next) { 8 | Class.getClasses(function(err, classes){ 9 | if(err){ 10 | console.log(err); 11 | res.send(err); 12 | } else { 13 | res.render('index', { "classes": classes}); 14 | } 15 | },3); 16 | 17 | }); 18 | 19 | module.exports = router; 20 | -------------------------------------------------------------------------------- /10_eLearning_System/routes/students.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | Class = require('../models/class'); 5 | Student = require('../models/student'); 6 | User = require('../models/user'); 7 | 8 | 9 | router.get('/classes', ensureAuthenticated, function(req, res, next) { 10 | Student.getStudentByUsername(req.user.username, function(err, student){ 11 | if(err){ 12 | console.log(err); 13 | res.send(err); 14 | } else { 15 | res.render('students/classes', { "student": student}); 16 | } 17 | }); 18 | }); 19 | 20 | router.post('/classes/register', function(req, res){ 21 | info = []; 22 | info['student_username'] = req.user.username; 23 | info['class_id'] = req.body.class_id; 24 | info['class_title'] = req.body.class_title; 25 | 26 | Student.register(info, function(err, student){ 27 | if(err) throw err; 28 | console.log(student); 29 | }); 30 | 31 | req.flash('succes', 'You are now registered'); 32 | res.redirect('/students/classes'); 33 | 34 | }); 35 | 36 | function ensureAuthenticated(req, res, next){ 37 | if (req.isAuthenticated()){ 38 | return next(); 39 | } 40 | res.redirect('/'); 41 | } 42 | 43 | module.exports = router; 44 | -------------------------------------------------------------------------------- /10_eLearning_System/views/classes/details.handlebars: -------------------------------------------------------------------------------- 1 |

{{class.title}}

2 |

Instructor: {{class.instructor}}

3 |

{{class.description}}

4 |
    5 | {{#each class.lessons}} 6 |
  • {{lesson_title}}
  • 7 | {{/each}} 8 |
9 | 10 | {{#if user}} 11 |
12 | 13 | 14 | 15 | 16 |
17 | {{else}} 18 |

You must be logged in to register for this class

19 | {{/if}} 20 | -------------------------------------------------------------------------------- /10_eLearning_System/views/classes/index.handlebars: -------------------------------------------------------------------------------- 1 |

Classes

2 | {{#each classes}} 3 |
4 |

{{title}}

5 |

{{description}}

6 |

Instructor: {{instructor}}

7 | Class Details 8 |
9 | {{/each}} 10 | -------------------------------------------------------------------------------- /10_eLearning_System/views/classes/lesson.handlebars: -------------------------------------------------------------------------------- 1 | Back to lessons 2 |

{{lesson.lesson_title}}

3 | {{lesson.lesson_body}} 4 | -------------------------------------------------------------------------------- /10_eLearning_System/views/classes/lessons.handlebars: -------------------------------------------------------------------------------- 1 |

{{class.title}}'s Lessons

2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {{#each class.lessons}} 13 | 14 | 15 | 16 | 17 | 18 | {{/each}} 19 | 20 |
Lesson NumberLesson Title
{{lesson_number}}{{lesson_title}}View Lesson
21 | -------------------------------------------------------------------------------- /10_eLearning_System/views/error.handlebars: -------------------------------------------------------------------------------- 1 |

Error

2 |

You are in the wrong place

3 | -------------------------------------------------------------------------------- /10_eLearning_System/views/index.handlebars: -------------------------------------------------------------------------------- 1 |

Welcome to eLearn

2 |

eLearn is a simple and free online learning platform. Instructors can create courses and students can register for courses which include assignments, guizes and support forums. 3 |

4 | Sing Up Free 5 |

You need to singup to register for free clases

6 | -------------------------------------------------------------------------------- /10_eLearning_System/views/instructors/classes.handlebars: -------------------------------------------------------------------------------- 1 |

{{instructor.first_name}}'s Clasees

2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{#each instructor.classes}} 14 | 15 | 16 | 17 | 18 | 19 | 20 | {{/each}} 21 | 22 |
Class IDClass Name
{{class_id}}{{class_title}}View LessonsAdd Lesson
23 | -------------------------------------------------------------------------------- /10_eLearning_System/views/instructors/newlesson.handlebars: -------------------------------------------------------------------------------- 1 |

Add Lesson

2 | 3 |
4 |
5 | 6 | 7 | 8 |
9 |
10 | 11 | 12 |
13 |
14 | 15 | 16 |
17 |
18 | 19 |
20 |
21 | -------------------------------------------------------------------------------- /10_eLearning_System/views/partials/classes.handlebars: -------------------------------------------------------------------------------- 1 |

Latest Classes

2 | {{#each classes}} 3 |
4 |

{{title}}

5 |

{{description}}

6 | Class Details 7 |
8 | {{/each}} 9 | -------------------------------------------------------------------------------- /10_eLearning_System/views/partials/login.handlebars: -------------------------------------------------------------------------------- 1 | {{#if user}} 2 |
Welcome Back {{user.username}}
3 | 7 | {{else}} 8 | 9 |

Student & Instruction Login

10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | {{/if}} 21 | -------------------------------------------------------------------------------- /10_eLearning_System/views/students/classes.handlebars: -------------------------------------------------------------------------------- 1 |

{{student.first_name}}'s Clasees

2 | {{#if student.classes}} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {{#each student.classes}} 13 | 14 | 15 | 16 | 17 | 18 | {{/each}} 19 | 20 |
Class IDClass Name
{{class_id}}{{class_title}}View Lessons
21 | {{else}} 22 |

You are not registered for any classes!

23 | {{/if}} 24 | -------------------------------------------------------------------------------- /img/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/02.png -------------------------------------------------------------------------------- /img/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/03.png -------------------------------------------------------------------------------- /img/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/04.png -------------------------------------------------------------------------------- /img/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/05.png -------------------------------------------------------------------------------- /img/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/06.png -------------------------------------------------------------------------------- /img/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/07.png -------------------------------------------------------------------------------- /img/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/08.png -------------------------------------------------------------------------------- /img/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/09.png -------------------------------------------------------------------------------- /img/10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/10-1.png -------------------------------------------------------------------------------- /img/10-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/10-2.png -------------------------------------------------------------------------------- /img/node.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrDataScientist/Nodejs-10-projects-examples/3027f2600479c83c9461b8025034a56a2d0f78fb/img/node.png --------------------------------------------------------------------------------