diff --git a/src/routes/r/view.mjs b/src/routes/r/view.mjs index 4fa9430..8666448 100644 --- a/src/routes/r/view.mjs +++ b/src/routes/r/view.mjs @@ -4,10 +4,11 @@ import highlight from "highlight.js"; import db from "../../lib/sql"; const queries = { - all: "select p.id, p.uuid, p.stamp, p.desc, p.paste, p.hidden, l.name as language, r.uuid as reply from `pastes` as p " + all: filter => "select p.id, p.uuid, p.stamp, p.desc, p.paste, p.hidden, l.name as language, r.uuid as reply from `pastes` as p " + "left join `languages` as l on l.id = p.lang " + "left join `pastes` as r on r.id = p.reply " + "where p.hidden = 0 " + + (filter || "") + "order by p.id desc limit 5", single: "select p.id, p.uuid, p.stamp, p.desc, p.paste, l.name as language, r.uuid as reply from `pastes` as p " + "left join `languages` as l on l.id = p.lang " @@ -17,7 +18,7 @@ const queries = { export default express.Router() .get("/", (req, res) => { - db.exec(queries.all) + db.exec(queries.all()) .then(rows => { res.render("view", { pastes: rows.map(r => { const paste = new Buffer(r.paste, "base64").toString("ascii"); @@ -48,4 +49,35 @@ export default express.Router() rows: paste.split(/\r?\n/).length }}); }).catch(err => res.send("paste not found")); - }); \ No newline at end of file + }) + .get("/:filter(lang|desc)/:fvalue", (req, res) => { + const condition = { + desc: "and p.desc like ? ", + lang: "and l.name = ? " + }; + let value = req.params.fvalue; + if(req.params.filter == "desc") + value = "%" + value + "%"; + db.exec(queries.all(condition[req.params.filter]), value) + .then(rows => { + res.render("view", { pastes: rows.map(r => { + const paste = new Buffer(r.paste, "base64").toString("ascii"); + return { + uuid: r.uuid, + paste: highlight.highlightAuto(paste).value, + language: r.language, + stamp: r.stamp, + desc: r.reply ? `Reply to /${r.reply}/` : r.desc || "No desciption.", + rows: paste.split(/\r?\n/).length + }; + })}); + }).catch(err => res.render("view")); + }) + .post("/", (req, res) => { + const desc = /^"(.*)"$/; + let match; + if(match = desc.exec(req.body.filter)) + res.redirect("/v/desc/" + encodeURIComponent(match[1])); + else + res.redirect("/v/lang/" + encodeURIComponent(req.body.filter)); + });