From c4c121cd5460da02db1563ad1118cd0db09ceb69 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Wed, 18 Sep 2019 17:29:27 +0200 Subject: lijst: Voting --- modules/lijst/lijst.html | 48 ++++++++++++++++++++++++++---------------------- modules/lijst/lijst.js | 42 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 60 insertions(+), 30 deletions(-) diff --git a/modules/lijst/lijst.html b/modules/lijst/lijst.html index b849720..66c33a8 100644 --- a/modules/lijst/lijst.html +++ b/modules/lijst/lijst.html @@ -4,48 +4,52 @@ Lijst -
    + - +
    +

    diff --git a/modules/lijst/lijst.js b/modules/lijst/lijst.js index 028e6ce..ce81bb5 100644 --- a/modules/lijst/lijst.js +++ b/modules/lijst/lijst.js @@ -18,14 +18,30 @@ if(!lijst||Array.isArray(lijst)){ var moddir; -function render(res){ - var html=fs.readFileSync(moddir+"/lijst.html")+""; +function repeatstring(n,s){ + return Array(n+1).join(s); +} + +function renderFragment(){ var s=""; for(var i=0;ix\n"; + var id=lijst.lijst[i].id; + var votes=lijst.lijst[i].votes||0; + s+=""; + s+=""+text+""; + s+=""; + s+=""; + s+="x"; + s+=""+(votes>0?repeatstring(votes,"↑"):repeatstring(-votes,"↓"))+""; + s+="\n"; } - html=html.replace("",s); + return s; +} + +function render(res){ + var html=fs.readFileSync(moddir+"/lijst.html")+""; + html=html.replace("",renderFragment()); res.send(html); } @@ -35,17 +51,27 @@ module.exports=function(app,io,_moddir){ render(res); }); app.post("/lijst/add",function(req,res){ - lijst.lijst.push({text:req.body.trim(),id:lijst.nextid++}); + lijst.lijst.push({text:req.body.trim(),id:lijst.nextid++,votes:0}); persist.setItemSync("lijst",lijst); - res.status(200).end(); + res.status(200).end(renderFragment()); }); app.post("/lijst/remove/:id",function(req,res){ var idx=lijst.lijst.findIndex(function(o){return o.id==+req.params.id;}); if(idx!=-1){ - console.log("Removed item: "+lijst.lijst[idx].text); lijst.lijst.splice(idx,1); persist.setItemSync("lijst",lijst); - res.status(200).end(); + res.status(200).end(renderFragment()); + } else { + res.status(404).end("ID not found"); + } + }); + app.post("/lijst/vote/:id/:num",function(req,res){ + var delta=req.params.num>0?1:req.params.num<0?-1:0; + var idx=lijst.lijst.findIndex(function(o){return o.id==+req.params.id;}); + if(idx!=-1){ + lijst.lijst[idx].votes+=delta; + persist.setItemSync("lijst",lijst); + res.status(200).end(renderFragment()); } else { res.status(404).end("ID not found"); } -- cgit v1.2.3-70-g09d2