diff --git a/package.json b/package.json index c412603..6f4e6c6 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "start": "node server.js" }, "dependencies": { - "express": "^4.17.1" + "express": "^4.17.1", + "express-handlebars": "^4.0.3" }, "engines": { "node": "12.x" diff --git a/public/script.js b/public/script.js index 9790ab6..e69de29 100644 --- a/public/script.js +++ b/public/script.js @@ -1,41 +0,0 @@ -// client-side js, loaded by index.html -// run by the browser each time the page is loaded - -console.log("hello world :o"); - -// define variables that reference elements on our page -const dreamsList = document.getElementById("dreams"); -const dreamsForm = document.querySelector("form"); - -// a helper function that creates a list item for a given dream -function appendNewDream(dream) { - const newListItem = document.createElement("li"); - newListItem.innerText = dream; - dreamsList.appendChild(newListItem); -} - -// fetch the initial list of dreams -fetch("/dreams") - .then(response => response.json()) // parse the JSON from the server - .then(dreams => { - // remove the loading text - dreamsList.firstElementChild.remove(); - - // iterate through every dream and add it to our page - dreams.forEach(appendNewDream); - - // listen for the form to be submitted and add a new dream when it is - dreamsForm.addEventListener("submit", event => { - // stop our form submission from refreshing the page - event.preventDefault(); - - // get dream value and add it to the list - let newDream = dreamsForm.elements.dream.value; - dreams.push(newDream); - appendNewDream(newDream); - - // reset form - dreamsForm.reset(); - dreamsForm.elements.dream.focus(); - }); - }); diff --git a/server.js b/server.js index 6bbf6df..5914ec4 100644 --- a/server.js +++ b/server.js @@ -1,10 +1,18 @@ const express = require("express"); +var exphbs = require('express-handlebars'); const app = express(); +app.engine('handlebars', exphbs()); +app.set('view engine', 'handlebars'); + app.use(express.static("public")); app.get("/:roomId/join", (request, response) => { - response.sendFile(__dirname + "/views/index.html"); + response.render('join', {layout: false, room: request.params.roomId}); +}); + +app.post("/:roomId/join", (request, response) => { + response.render('room', {layout: false, room: request.params.roomId}); }); const listener = app.listen(process.env.PORT, () => { diff --git a/shrinkwrap.yaml b/shrinkwrap.yaml index 64625d4..50e8e26 100644 --- a/shrinkwrap.yaml +++ b/shrinkwrap.yaml @@ -1,5 +1,6 @@ dependencies: express: 4.17.1 + express-handlebars: 4.0.3 packages: /accepts/1.3.7: dependencies: @@ -14,6 +15,14 @@ packages: dev: false resolution: integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + /asap/2.0.6: + dev: false + resolution: + integrity: sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + /balanced-match/1.0.0: + dev: false + resolution: + integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= /body-parser/1.19.0: dependencies: bytes: 3.1.0 @@ -31,12 +40,28 @@ packages: node: '>= 0.8' resolution: integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + /brace-expansion/1.1.11: + dependencies: + balanced-match: 1.0.0 + concat-map: 0.0.1 + dev: false + resolution: + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== /bytes/3.1.0: dev: false engines: node: '>= 0.8' resolution: integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + /commander/2.20.3: + dev: false + optional: true + resolution: + integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + /concat-map/0.0.1: + dev: false + resolution: + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= /content-disposition/0.5.3: dependencies: safe-buffer: 5.1.2 @@ -67,6 +92,14 @@ packages: dev: false resolution: integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /define-properties/1.1.3: + dependencies: + object-keys: 1.1.1 + dev: false + engines: + node: '>= 0.4' + resolution: + integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== /depd/1.1.2: dev: false engines: @@ -97,6 +130,18 @@ packages: node: '>= 0.6' resolution: integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + /express-handlebars/4.0.3: + dependencies: + glob: 7.1.6 + graceful-fs: 4.2.3 + handlebars: 4.7.6 + object.assign: 4.1.0 + promise: 8.1.0 + dev: false + engines: + node: '>=0.10' + resolution: + integrity: sha512-XSAQRreb0LzzSAQG7DRCaidqWYdtfOjgHF6VTaN7p6FaUVfFZq4Ki2d5q8WO3cdsEqbYBV69XzG+FRHzNukwiQ== /express/4.17.1: dependencies: accepts: 1.3.7 @@ -160,6 +205,49 @@ packages: node: '>= 0.6' resolution: integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + /fs.realpath/1.0.0: + dev: false + resolution: + integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /function-bind/1.1.1: + dev: false + resolution: + integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + /glob/7.1.6: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + resolution: + integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + /graceful-fs/4.2.3: + dev: false + resolution: + integrity: sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + /handlebars/4.7.6: + dependencies: + minimist: 1.2.5 + neo-async: 2.6.1 + source-map: 0.6.1 + wordwrap: 1.0.0 + dev: false + engines: + node: '>=0.4.7' + hasBin: true + optionalDependencies: + uglify-js: 3.8.1 + resolution: + integrity: sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== + /has-symbols/1.0.1: + dev: false + engines: + node: '>= 0.4' + resolution: + integrity: sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== /http-errors/1.7.2: dependencies: depd: 1.1.2 @@ -192,6 +280,13 @@ packages: node: '>=0.10.0' resolution: integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: false + resolution: + integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= /inherits/2.0.3: dev: false resolution: @@ -243,6 +338,16 @@ packages: hasBin: true resolution: integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + /minimatch/3.0.4: + dependencies: + brace-expansion: 1.1.11 + dev: false + resolution: + integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /minimist/1.2.5: + dev: false + resolution: + integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== /ms/2.0.0: dev: false resolution: @@ -257,6 +362,27 @@ packages: node: '>= 0.6' resolution: integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + /neo-async/2.6.1: + dev: false + resolution: + integrity: sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + /object-keys/1.1.1: + dev: false + engines: + node: '>= 0.4' + resolution: + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + /object.assign/4.1.0: + dependencies: + define-properties: 1.1.3 + function-bind: 1.1.1 + has-symbols: 1.0.1 + object-keys: 1.1.1 + dev: false + engines: + node: '>= 0.4' + resolution: + integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== /on-finished/2.3.0: dependencies: ee-first: 1.1.1 @@ -265,16 +391,34 @@ packages: node: '>= 0.8' resolution: integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + dev: false + resolution: + integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= /parseurl/1.3.3: dev: false engines: node: '>= 0.8' resolution: integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + /path-is-absolute/1.0.1: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= /path-to-regexp/0.1.7: dev: false resolution: integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + /promise/8.1.0: + dependencies: + asap: 2.0.6 + dev: false + resolution: + integrity: sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== /proxy-addr/2.0.5: dependencies: forwarded: 0.1.2 @@ -350,6 +494,12 @@ packages: dev: false resolution: integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + /source-map/0.6.1: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== /statuses/1.5.0: dev: false engines: @@ -371,6 +521,17 @@ packages: node: '>= 0.6' resolution: integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + /uglify-js/3.8.1: + dependencies: + commander: 2.20.3 + source-map: 0.6.1 + dev: false + engines: + node: '>=0.8.0' + hasBin: true + optional: true + resolution: + integrity: sha512-W7KxyzeaQmZvUFbGj4+YFshhVrMBGSg2IbcYAjGWGvx8DHvJMclbTDMpffdxFUGPBHjIytk7KJUR/KUXstUGDw== /unpipe/1.0.0: dev: false engines: @@ -389,8 +550,17 @@ packages: node: '>= 0.8' resolution: integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + /wordwrap/1.0.0: + dev: false + resolution: + integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + /wrappy/1.0.2: + dev: false + resolution: + integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= registry: 'https://registry.npmjs.org/' shrinkwrapMinorVersion: 9 shrinkwrapVersion: 3 specifiers: express: ^4.17.1 + express-handlebars: ^4.0.3 diff --git a/views/index.html b/views/index.html deleted file mode 100644 index 0353ef0..0000000 --- a/views/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - Welcome to Glitch! - - - - - - - - - - - - -
-

A Dream of the Future

-
- -
-

Oh hi,

- -

Tell me your hopes and dreams:

- -
- - -
- -
- -
-
- - - - -
- - - diff --git a/views/join.handlebars b/views/join.handlebars new file mode 100644 index 0000000..af277c4 --- /dev/null +++ b/views/join.handlebars @@ -0,0 +1,32 @@ + + + + + Buzzer + + + + + + + + +
+

Join {{room}}

+
+ +
+

Oh hi,

+ +

Tell me your (team) name:

+ +
+ + +
+
+ + diff --git a/views/room.handlebars b/views/room.handlebars new file mode 100644 index 0000000..af277c4 --- /dev/null +++ b/views/room.handlebars @@ -0,0 +1,32 @@ + + + + + Buzzer + + + + + + + + +
+

Join {{room}}

+
+ +
+

Oh hi,

+ +

Tell me your (team) name:

+ +
+ + +
+
+ +