Skip to content

Commit ed438a1

Browse files
committed
Merge branch 'mcpower-master' into nodejs
Conflicts: todo.jsm
2 parents f7cc5d1 + 0e460aa commit ed438a1

File tree

1 file changed

+71
-9
lines changed

1 file changed

+71
-9
lines changed

todo.jsm

Lines changed: 71 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
55
/*global module.exports: false */
66
var fs = require("fs");
7-
module.exports.version = 0.5;
7+
module.exports.version = 0.9;
88
module.exports.users = {};
99
module.exports.DB_FILENAME = "todo.json";
1010

@@ -35,7 +35,10 @@ module.exports.cmd_todo = function cmd_todo(e) {
3535
} else if (!list.length) {
3636
e.reply("Nothing on your todo list.");
3737
} else {
38-
e.reply(list.join("; "));
38+
var i = 0;
39+
e.reply(list.map(function addIndex(todo) {
40+
return "[{0}] {1}".format(i++, todo);
41+
}).join("; "));
3942
}
4043

4144
return true;
@@ -47,20 +50,79 @@ module.exports.cmd_tododel = function cmd_tododel(e) {
4750
e.reply(this.cmd_tododel.help);
4851
return true;
4952
}
50-
var index = e.args >>> 0;
5153

5254
var list = this.getList(e.nick);
5355

54-
if (index >= list.length) {
55-
e.reply("You only have {0} things in your todo list.".format(list.length));
56+
if (/^[0-9,]+$/.test(e.args)) {
57+
var indexes = e.args.split(",").map(Number);
58+
59+
var notdeleted = 0;
60+
for (var i = 0; i < indexes.length; i++) {
61+
if (indexes[i] >= list.length)
62+
notdeleted++;
63+
else
64+
list.splice(indexes[i], 1);
65+
}
66+
67+
var deleted = indexes.length - notdeleted;
68+
if (deleted != 0) {
69+
this.saveUsers();
70+
e.notice("Ok, deleted {0} todo{1}.".format(deleted, deleted == 1 ? "" : "s"));
71+
}
72+
if (notdeleted > 0)
73+
e.reply("{0} todo{1}n't deleted. You only have {2} todo{3} on your todo list.".format(
74+
notdeleted, notdeleted == 1 ? " was" : "s were", list.length, list.length == 1 ? "" : "s"));
5675
} else {
57-
list.splice(index, 1);
58-
e.notice("Ok.");
59-
}
76+
var filteredlist = list.filter(function startsWith(s) {
77+
return s.slice(0, e.args.length) == e.args;
78+
});
6079

80+
switch (filteredlist.length) {
81+
case 0:
82+
e.reply("No todos found starting with \"{0}\".".format(e.args));
83+
break;
84+
case 1:
85+
list.splice(list.indexOf(filteredlist[0]), 1);
86+
this.saveUsers();
87+
e.notice("Ok, deleted \"{0}\".".format(filteredlist[0]));
88+
break;
89+
default:
90+
var formattedlist = [], currentindex = 0;
91+
// O(list.length) way of finding these. No indexOf found here.
92+
for (var i = 0; i < list.length; i++) {
93+
if (list[i] == filteredlist[currentindex]) {
94+
formattedlist[currentindex] = "[{0}] {1}".format(i, filteredlist[currentindex]);
95+
currentindex++;
96+
}
97+
}
98+
e.reply("Did you mean: {0}".format(formattedlist.join("; ")));
99+
}
100+
}
61101
return true;
62102
};
63-
module.exports.cmd_tododel.help = "Delete an item from your todo list. Usage: tododel <index>";
103+
module.exports.cmd_tododel.help = "Delete an item from your todo list. Usage: tododel [<index> | <startswith>]";
104+
105+
module.exports.cmd_todoins = function cmd_todoins(e) {
106+
var regex = /^([0-9]+) (.+)$/;
107+
if (!e.args || ! regex.test(e.args)) {
108+
e.reply(this.cmd_todoins.help);
109+
return true;
110+
}
111+
var match = regex.exec(e.args);
112+
var list = this.getList(e.nick);
113+
var index = Number(match[1]), todo = match[2];
114+
115+
if (index >= list.length)
116+
e.reply("You only have {0} todo{1} on your todo list.".format(list.length, list.length == 1 ? "" : "s"));
117+
else {
118+
list.splice(index, 0, todo);
119+
this.saveUsers();
120+
e.notice("Ok.");
121+
}
122+
return true;
123+
}
124+
125+
module.exports.cmd_todoins.help = "Inserts a todo before the specified index. Usage: todoins <index> <todo>";
64126

65127
try { module.exports.loadUsers(); } catch (ex) {
66128
println("Error while loading todo lists from disk: ", ex);

0 commit comments

Comments
 (0)