diff options
author | Mark Powers <markppowers0@gmail.com> | 2020-08-13 12:19:23 -0500 |
---|---|---|
committer | Mark Powers <markppowers0@gmail.com> | 2020-08-13 12:19:23 -0500 |
commit | 69d905dad713253b63da55fb044e68f8a6ed5a55 (patch) | |
tree | 9c92639e934f69d869c2ec7a0364b3f93fe0282d /src | |
parent | 0ea3736521aca1160a9c927b6a8e6a04724f67ee (diff) |
Remove client JS requirement from tag view
Diffstat (limited to 'src')
-rw-r--r-- | src/html/tags.html | 39 | ||||
-rw-r--r-- | src/server.js | 51 |
2 files changed, 23 insertions, 67 deletions
diff --git a/src/html/tags.html b/src/html/tags.html deleted file mode 100644 index 9302993..0000000 --- a/src/html/tags.html +++ /dev/null @@ -1,39 +0,0 @@ -<!doctype html> -<html lang="en"> - -<head> - <title>Mark's Kitchen - Blog</title> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> - <link rel="stylesheet" type="text/css" href="/css/styles.css"> - <script src="/js/feed.js"></script> - <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> - <script> - window.onload = window.onhashchange = function () { - loadFeed(function () { - var feed = new Vue({ - el: '#view', - data: { - posts: [], - tag: window.location.hash - }, - created() { - console.log(this.tag); - var tag = window.location.hash.substring(1); - fetch(new Request(`/tags/${tag}`)).then(response => response.json()) - .then(response => this.posts = response); - } - }); - }) - } - </script> -</head> - -<body> - <div id="view"> - <h1><a class="navigation" href="/" title="marks.kitchen"><</a>{{tag}}</h1> - <div id="feed"></div> - </div> -</body> - -</html>
\ No newline at end of file diff --git a/src/server.js b/src/server.js index 397cf9f..e62094b 100644 --- a/src/server.js +++ b/src/server.js @@ -67,7 +67,7 @@ function constructFeed(posts){ <a href="/post/${post.type}/${post.id}">${post.createdAt.toString().substring(0,10)}</a>`) post.tags.forEach(tag => { html.push(`<span> - <a class="tag" href="/tags#${tag}">${tag}</a> + <a class="tag" href="/tags/${tag}">${tag}</a> </span>`) }) html.push(`</p> @@ -178,11 +178,32 @@ function setUpRoutes(models, jwtFunctions, database) { res.status(200).send(html.join("")) }) + server.get('/tags/:name', async (req, res) => { + const { name } = req.params; + const postsWithTag = await models.tags.findAll({ attributes: ["postId"], where: { text: name } }) + .map(function (x) { + return { id: x.postId } + }); + var posts = await models.posts.findAll({ + where: { [Op.or]: postsWithTag }, order: [['createdAt', 'DESC']] + }); + posts = posts.map(x => x.get({ plain: true })); + await addImagesAndTagsToPosts(models, posts) + + var html = [] + html.push(templates["blog"]["pre"]) + html.push(`<h1>#${name}</h1>`) + html.push(await constructFeed(posts)) + html.push(templates["footer"]) + html.push(templates["blog"]["post"]) + + res.status(200).send(html.join("")) + }) server.get('/admin', (req, res) => res.sendFile(__dirname + "/html/admin.html")); server.get('/login', (req, res) => res.sendFile(__dirname + "/html/login.html")) server.get('/email', (req, res) => res.sendFile(__dirname + "/html/email.html")) - server.get('/tags', (req, res) => res.sendFile(__dirname + "/html/tags.html")); + // server.get('/tags', (req, res) => res.sendFile(__dirname + "/html/tags.html")); server.get('/feed', (req, res) => res.sendFile(__dirname + "/html/feed.html")); server.get('/essay', (req, res) => res.sendFile(__dirname + "/html/essay.html")); server.get('/misc', (req, res) => res.sendFile(__dirname + "/html/misc.html")); @@ -203,19 +224,12 @@ function setUpRoutes(models, jwtFunctions, database) { turn: { [Op.ne]: {$col: 'userside'} } - - // database.where( - // database.col('userside'), - // database.col('turn') - // ) }}) - // var game = await database.query("select * from chessgames where userside != turn", { type: database.QueryTypes.SELECT }) res.status(200).send({game:game}); }) server.get('/chess/:name', async (req, res, next) => { const { name } = req.params; var game = await models.chessgames.findOne({where: {name: name}}) - //var game = await database.query("select * from chessgames where name = '"+name+"'", { type: database.QueryTypes.SELECT }) res.status(200).send({game:game}); }) server.get('/admin/emails', async (req, res, next) => { @@ -234,25 +248,6 @@ function setUpRoutes(models, jwtFunctions, database) { res.status(400).send(e.message); } }) - server.get('/tags/:name', async (req, res, next) => { - try { - const { name } = req.params; - const postsWithTag = await models.tags.findAll({ attributes: ["postId"], where: { text: name } }) - .map(function (x) { - return { id: x.postId } - }); - var posts = await models.posts.findAll({ - where: { [Op.or]: postsWithTag }, order: [['createdAt', 'DESC']] - }); - posts = posts.map(x => x.get({ plain: true })); - await addImagesAndTagsToPosts(models, posts) - res.status(200).send(posts); - next(); - } catch (e) { - console.error(e); - res.status(400).send(e.message); - } - }) server.get('/posts/:type', async (req, res, next) => { try { const { type } = req.params; |