Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "NodeJs Launch Program",
"program": "${file}",
"request": "launch",
"skipFiles": [
"<node_internals>/**"
],
"type": "pwa-node"
},
{
"type": "pwa-msedge",
"request": "launch",
"name": "Launch Edge against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}
26 changes: 26 additions & 0 deletions controllers/controllerTA03.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const Product = require('../models/product.js');

exports.getProducts = (req, res, next) => {
Product.fetchall((prodsObj) => {
res.render('pages/ta03', {
title: 'Team Activity 03',
path: '/ta03', // For pug, EJS
activeTA03: true, // For HBS
contentCSS: true, // For HBS
prodsObj: prodsObj
});
});
};

exports.searchProducts = (req, res, next) => {
const query = req.body.query;
Product.search(query, (results) => {
res.render('pages/ta03', {
title: 'Team Activity 03',
path: '/ta03', // For pug, EJS
activeTA03: true, // For HBS
contentCSS: true, // For HBS
prodsObj: results
});
})
}
37 changes: 37 additions & 0 deletions controllers/controllerTA04.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
exports.getIndex = (req, res, next) => {
if (req.session.style == undefined) {
req.session.style = true;
}

if (req.session.counter == undefined) {
req.session.counter = 0;
}

res.render("pages/ta04", {
title: "Team Activity 04",
path: "/ta04", // For pug, EJS
lightMode: req.session.style,
counter: req.session.counter,
});
};

exports.changeStyle = (req, res, next) => {
req.session.style = !req.session.style
res.redirect("/ta04");
};

exports.incCounter = (req, res, next) => {
req.session.counter += 1;
res.redirect("/ta04");
}

exports.decCounter = (req, res, next) => {
req.session.counter -= 1;
res.redirect("/ta04");
}

exports.resetSession = (req, res, next) => {
req.session.destroy(() => {
res.redirect("/ta04");
});
}
51 changes: 27 additions & 24 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,42 +11,45 @@
* IMPORTANT: Make sure to run "npm install" in your root before "npm start"
*******************************************************************************/
// Our initial setup (package requires, port number setup)
const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const express = require("express");
const bodyParser = require("body-parser");
const path = require("path");
const PORT = process.env.PORT || 5000; // So we can run on heroku || (OR) localhost:5000
const session = require("express-session");

const app = express();

// Route setup. You can implement more in the future!
const ta01Routes = require('./routes/ta01');
const ta02Routes = require('./routes/ta02');
const ta03Routes = require('./routes/ta03');
const ta04Routes = require('./routes/ta04');
const ta01Routes = require("./routes/ta01");
const ta02Routes = require("./routes/ta02");
const ta03Routes = require("./routes/ta03");
const ta04Routes = require("./routes/ta04");

app
.use(express.static(path.join(__dirname, 'public')))
.set('views', path.join(__dirname, 'views'))
.set('view engine', 'ejs')
// For view engine as Pug
//.set('view engine', 'pug') // For view engine as PUG.
// For view engine as hbs (Handlebars)
//.engine('hbs', expressHbs({layoutsDir: 'views/layouts/', defaultLayout: 'main-layout', extname: 'hbs'})) // For handlebars
//.set('view engine', 'hbs')
.use(express.static(path.join(__dirname, "public")))
.set("views", path.join(__dirname, "views"))
.set("view engine", "ejs")
.use(
session({
secret: "my secret",
resave: false,
saveUninitialized: false,
})
)
.use(bodyParser({ extended: false })) // For parsing the body of a POST
.use('/ta01', ta01Routes)
.use('/ta02', ta02Routes)
.use('/ta03', ta03Routes)
.use('/ta04', ta04Routes)
.get('/', (req, res, next) => {
.use("/ta01", ta01Routes)
.use("/ta02", ta02Routes)
.use("/ta03", ta03Routes)
.use("/ta04", ta04Routes)
.get("/", (req, res, next) => {
// This is the primary index, always handled last.
res.render('pages/index', {
title: 'Welcome to my CSE341 repo',
path: '/',
res.render("pages/index", {
title: "Welcome to my CSE341 repo",
path: "/",
});
})
.use((req, res, next) => {
// 404 page
res.render('pages/404', { title: '404 - Page Not Found', path: req.url });
res.render("pages/404", { title: "404 - Page Not Found", path: req.url });
})
.listen(PORT, () => console.log(`Listening on ${PORT}`));
42 changes: 42 additions & 0 deletions models/product.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const fetch = require('node-fetch');

module.exports = class Product {
constructor(tags, imageUrl, price, name, desc) {
this.tags = tags;
this.imageUrl = imageUrl;
this.price = price;
this.name = name;
this.desc = desc;
}

static fetchall(cb) {
fetch("https://byui-cse.github.io/cse341-course/lesson03/items.json")
.then(response => response.json())
.then(jsonObj => {
// console.log(jsonObj);
cb(jsonObj);
});
};

static search(query, cb) {
query = query.toLowerCase();

this.fetchall((products) => {
const filteredProducts = products.filter((prod) => {
const inName = prod.name.toLowerCase().includes(query);
const inDesc = prod.description.toLowerCase().includes(query);

let inTags = false;
for (let tag of prod.tags) {
if (tag.toLowerCase().includes(query)) {
inTags = true;
};
};

return (inName || inTags || inDesc);
});

cb(filteredProducts);
});
};
};
Loading