-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
128 lines (111 loc) · 3.66 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
console.log('start0');
var express = require('express');
var session = require('cookie-session'); // Charge le middleware de sessions
var bodyParser = require('body-parser'); // Charge le middleware de gestion des paramètres
var urlencodedParser = bodyParser.urlencoded({ extended: false });
var app = express();
app.set('view engine', 'ejs');
app.use(express.static('public')); // for css for example
function undo(type, id, content) {
this.id=id;
this.type=type;
this.content=content;
}
function retrieve(){
}
undo.prototype.retrieve=retrieve;
var isUndo=false;
/* On utilise les sessions */
app.use(session({secret: 'todotopsecret'}))
.use(function(req, res, next){
if (typeof(req.session.todolist) == 'undefined') {
req.session.todolist = [];
}
if (typeof(req.session.todolistUndo) == 'undefined') {
req.session.todolistUndo = [];
}
next();
})
/* Gestion des routes en-dessous
.... */
.get('/todo', function(req, res) {
res.render('tasks',{todolist: req.session.todolist});
console.log(req.session.todolistUndo);
})
// ...
.post('/todo/add', urlencodedParser, function(req, res) {
if (req.body.newtodo != '') {
req.session.todolist.push(req.body.newtodo);
}
res.redirect('/todo');
})
.get('/todo/remove/:taskId', function(req, res) {
taskId=req.params.taskId;
if (taskId != '') {
//gestion de l'undo
myundo=new undo("delete",taskId,req.session.todolist[taskId]);
req.session.todolistUndo.push(myundo);
//
req.session.todolist.splice(taskId,1);
}
res.redirect('/todo');
})
.get('/todo/undo', function (req, res) {
if (req.session.todolistUndo.length>0) {
var lastEl=req.session.todolistUndo.length-1;
var type=req.session.todolistUndo[lastEl].type;
var content=req.session.todolistUndo[lastEl].content;
var id=req.session.todolistUndo[lastEl].id;
switch(type){
case "delete":
//restore as last El
req.session.todolist.push(req.session.todolistUndo.splice(lastEl,1)[0].content);
//use rearrange !
isUndo=true;
res.redirect('/todo/rearrange/'+(req.session.todolist.length-1)+'/'+id);
break;
case "edit":
req.session.todolist[id]=content;
req.session.todolistUndo.splice(lastEl,1);
res.redirect('/todo');
break;
case "rearrange":
//store and delete
var newOne=req.session.todolistUndo[lastEl].content.two;
var newTwo=req.session.todolistUndo[lastEl].content.one;
req.session.todolistUndo.splice(lastEl,1);
console.log('appel, isUndo='+isUndo);
isUndo=true;
res.redirect('/todo/rearrange/'+newOne+'/'+newTwo);
break;
default:
break;
}
}
})
.post('/todo/modify/', urlencodedParser, function(req, res) {
taskId=req.body.taskId;
savedContent=req.session.todolist[taskId];
taskContent=req.body.taskContent;
if (taskId != '' && taskContent != '') {
//gestion de l'undo
myundo=new undo("edit",taskId,savedContent);
req.session.todolistUndo.push(myundo);
//
req.session.todolist[taskId]=taskContent;
}
res.redirect('/todo');
})
.get('/todo/rearrange/:one/:two', function (req, res) {
v=req.session.todolist.splice(req.params.one,1);
req.session.todolist.splice(req.params.two,0,v[0]);
console.log("rearrange _ _");
if (!isUndo) {
console.log("ne provient pas d un undo");
myundo=new undo("rearrange","",{one: req.params.one, two: req.params.two});
req.session.todolistUndo.push(myundo);
}
isUndo=false;
res.redirect('/todo');
});
app.listen(8080);