From b03ba883f0a11dfead4663cdab92e4326580fcf8 Mon Sep 17 00:00:00 2001 From: Matthew Oslan Date: Sun, 17 Nov 2019 15:22:09 -0500 Subject: [PATCH] Setup Handlebars --- app/package-lock.json | 141 ++++++++++++++++++ app/package.json | 2 + app/public/cool.html | 7 - app/public/index.html | 7 - app/scrapers/redditScraper.js | 2 +- app/server.js | 27 ++++ .../connectAccounts.handlebars} | 13 +- app/views/cool.handlebars | 6 + app/views/index.handlebars | 6 + app/views/layout.handlebars | 9 ++ 10 files changed, 198 insertions(+), 22 deletions(-) delete mode 100644 app/public/cool.html delete mode 100644 app/public/index.html rename app/{public/connectAccounts.html => views/connectAccounts.handlebars} (77%) create mode 100644 app/views/cool.handlebars create mode 100644 app/views/index.handlebars create mode 100644 app/views/layout.handlebars diff --git a/app/package-lock.json b/app/package-lock.json index 8d56ad4..2a90685 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -29,6 +29,11 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -62,6 +67,11 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -92,6 +102,15 @@ "type-is": "~1.6.17" } }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "bson": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.3.tgz", @@ -121,6 +140,11 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "optional": true }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, "content-disposition": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", @@ -165,6 +189,14 @@ "ms": "2.0.0" } }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -246,6 +278,18 @@ "vary": "~1.1.2" } }, + "express-handlebars": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-3.1.0.tgz", + "integrity": "sha512-7QlaXnSREMmN5P2o4gmpUZDfJlLtfBka9d6r7/ccXaU7rPp76odw9YYtwZYdIiha2JqwiaG6o2Wu6NZJQ0u7Fg==", + "requires": { + "glob": "^7.1.3", + "graceful-fs": "^4.1.2", + "handlebars": "^4.1.2", + "object.assign": "^4.1.0", + "promise": "^8.0.2" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -305,6 +349,16 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -313,6 +367,24 @@ "assert-plus": "^1.0.0" } }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + }, "handlebars": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.2.tgz", @@ -324,6 +396,11 @@ "uglify-js": "^3.1.4" } }, + "handlebars-layouts": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/handlebars-layouts/-/handlebars-layouts-3.1.4.tgz", + "integrity": "sha1-JrO+uTG0uHffv35v6vQFjuYiiwI=" + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -343,6 +420,11 @@ "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==" }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -373,6 +455,15 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -473,6 +564,14 @@ "mime-db": "1.42.0" } }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", @@ -566,6 +665,22 @@ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -574,6 +689,14 @@ "ee-first": "1.1.1" } }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -588,6 +711,11 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -598,6 +726,14 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "promise": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.3.tgz", + "integrity": "sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==", + "requires": { + "asap": "~2.0.6" + } + }, "promise-chains": { "version": "0.3.12", "resolved": "https://registry.npmjs.org/promise-chains/-/promise-chains-0.3.12.tgz", @@ -956,6 +1092,11 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, "ws": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", diff --git a/app/package.json b/app/package.json index 1e42bc1..c4e096d 100644 --- a/app/package.json +++ b/app/package.json @@ -10,7 +10,9 @@ "license": "ISC", "dependencies": { "express": "^4.17.1", + "express-handlebars": "^3.1.0", "handlebars": "^4.5.2", + "handlebars-layouts": "^3.1.4", "mongoose": "^5.7.11", "snoowrap": "^1.20.1" } diff --git a/app/public/cool.html b/app/public/cool.html deleted file mode 100644 index c026eb8..0000000 --- a/app/public/cool.html +++ /dev/null @@ -1,7 +0,0 @@ - - Digital Mirror - -

Cool cool cool

- home - - \ No newline at end of file diff --git a/app/public/index.html b/app/public/index.html deleted file mode 100644 index bf5eb97..0000000 --- a/app/public/index.html +++ /dev/null @@ -1,7 +0,0 @@ - - Digital Mirror - -

Hello, big guy!

- C O O L - - \ No newline at end of file diff --git a/app/scrapers/redditScraper.js b/app/scrapers/redditScraper.js index 7fed18e..5bd33a6 100644 --- a/app/scrapers/redditScraper.js +++ b/app/scrapers/redditScraper.js @@ -11,7 +11,7 @@ async function scrapeUser(authorizationCode) { clientId: CLIENT_ID, clientSecret: CLIENT_SECRET, // TODO set this (it must mach the URL provided for the app on the Reddit developer portal) - redirectUri: "http://localhost:3000/connectAccounts.html", + redirectUri: "http://localhost:3000/connectAccounts", }); const user = wrapper.getMe(); diff --git a/app/server.js b/app/server.js index d92f23b..bbdf878 100644 --- a/app/server.js +++ b/app/server.js @@ -1,5 +1,9 @@ +const fs = require("fs"); const express = require("express"); const mongoose = require("mongoose"); +const handlebars = require("handlebars"); +const expressHandlebars = require("express-handlebars"); +const layouts = require("handlebars-layouts"); const redditScraper = require("./scrapers/redditScraper"); //url param indicates machine mongodb is running on /nameOfDatabase @@ -21,6 +25,16 @@ const User = mongoose.model("User", userSchema); const app = express(); +// Setup Handlebars and addons. +layouts.register(handlebars); +const viewsPath = __dirname + "/views"; +app.engine("handlebars", expressHandlebars({ + defaultLayout: null +})); +app.set("view engine", "handlebars"); +app.set("views", viewsPath); +handlebars.registerPartial("layout", fs.readFileSync(viewsPath + "/layout.handlebars", "utf8")); + app.get("/create", (req,res) => { //for testing let's create a user instance let testUser = new User({ @@ -39,6 +53,19 @@ app.get("/analyzeData", async (req, res) => { res.status(200).send(scrapedData); }); +app.get("/", (req, res) => { + res.status(200).render("index", {}); +}); + +// TODO remove this test page. +app.get("/cool", (req, res) => { + res.status(200).render("cool", {}); +}); + +app.get("/connectAccounts", (req, res) => { + res.status(200).render("connectAccounts", {}); +}); + //serve static files from public dir app.use(express.static("public")); app.listen(3000); diff --git a/app/public/connectAccounts.html b/app/views/connectAccounts.handlebars similarity index 77% rename from app/public/connectAccounts.html rename to app/views/connectAccounts.handlebars index 44d860a..eb887a3 100644 --- a/app/public/connectAccounts.html +++ b/app/views/connectAccounts.handlebars @@ -1,9 +1,8 @@ - - Digital Mirror - Link Accounts - +{{#extend "layout"}} + {{#content "head"}} - - + {{/content}} + {{#content "body"}}

Connect Reddit account

@@ -13,5 +12,5 @@

Connect Reddit account

Analyze my data
- - + {{/content}} +{{/extend}} diff --git a/app/views/cool.handlebars b/app/views/cool.handlebars new file mode 100644 index 0000000..83f3a86 --- /dev/null +++ b/app/views/cool.handlebars @@ -0,0 +1,6 @@ +{{#extend "layout"}} + {{#content "body"}} +

Cool cool cool

+ home + {{/content}} +{{/extend}} diff --git a/app/views/index.handlebars b/app/views/index.handlebars new file mode 100644 index 0000000..a03f156 --- /dev/null +++ b/app/views/index.handlebars @@ -0,0 +1,6 @@ +{{#extend "layout"}} + {{#content "body"}} +

Hello, big guy!

+ C O O L + {{/content}} +{{/extend}} diff --git a/app/views/layout.handlebars b/app/views/layout.handlebars new file mode 100644 index 0000000..dd627ba --- /dev/null +++ b/app/views/layout.handlebars @@ -0,0 +1,9 @@ + + Digital Mirror + + {{{block "head"}}} + + + {{{block "body"}}} + +