From 37a7774ef551f0b6166c6afca86b68bf0ecacc9c Mon Sep 17 00:00:00 2001 From: mcpower Date: Sat, 20 Dec 2014 19:04:22 +1100 Subject: [PATCH 1/9] todo.jsm: save todos after delete --- todo.jsm | 1 + 1 file changed, 1 insertion(+) diff --git a/todo.jsm b/todo.jsm index fb3e9b9..ae8932a 100644 --- a/todo.jsm +++ b/todo.jsm @@ -57,6 +57,7 @@ module.cmd_tododel = function cmd_tododel(e) { e.reply("You only have {0} things in your todo list.".format(list.length)); } else { list.splice(index, 1); + this.saveUsers(); e.notice("Ok."); } From 9e8b2743ae9638eb390bdc4fd7ced364abb91dee Mon Sep 17 00:00:00 2001 From: mcpower Date: Sun, 21 Dec 2014 14:32:26 +1100 Subject: [PATCH 2/9] todo.jsm: display todo indices when getting todos --- todo.jsm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/todo.jsm b/todo.jsm index ae8932a..d4caa1e 100644 --- a/todo.jsm +++ b/todo.jsm @@ -4,7 +4,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /*global module: false */ -module.version = 0.5; +module.version = 0.6; module.users = {}; module.DB_FILENAME = "todo.json"; @@ -37,7 +37,10 @@ module.cmd_todo = function cmd_todo(e) { } else if (!list.length) { e.reply("Nothing on your todo list."); } else { - e.reply(list.join("; ")); + var i = 0; + e.reply(list.map(function addIndex(todo) { + return "[{0}] {1}".format(i++, todo); + }).join("; ")); } return true; From 99e35bdb35beffc24ca408e11a32daef285d8462 Mon Sep 17 00:00:00 2001 From: mcpower Date: Sun, 21 Dec 2014 14:42:56 +1100 Subject: [PATCH 3/9] todo.jsm: allow deletion of multiple todos --- todo.jsm | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/todo.jsm b/todo.jsm index d4caa1e..cd3058b 100644 --- a/todo.jsm +++ b/todo.jsm @@ -4,7 +4,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /*global module: false */ -module.version = 0.6; +module.version = 0.7; module.users = {}; module.DB_FILENAME = "todo.json"; @@ -52,17 +52,27 @@ module.cmd_tododel = function cmd_tododel(e) { e.reply(this.cmd_tododel.help); return true; } - var index = e.args >>> 0; var list = this.getList(e.nick); - if (index >= list.length) { - e.reply("You only have {0} things in your todo list.".format(list.length)); - } else { - list.splice(index, 1); + var indexes = e.args.split(",").map(Number); + + var notdeleted = 0; + for (var i = 0; i < indexes.length; i++) { + if (indexes[i] >= list.length) + notdeleted++; + else + list.splice(indexes[i], 1); + } + + var deleted = indexes.length - notdeleted; + if (deleted != 0) { this.saveUsers(); - e.notice("Ok."); + e.notice("Ok, deleted {0} todo{1}.".format(deleted, deleted == 1 ? "" : "s")); } + if (notdeleted > 0) + e.reply("{0} todo{1}n't deleted. You only have {2} todo{3} on your todo list.".format( + notdeleted, notdeleted == 1 ? " was" : "s were", list.length, list.length == 1 ? "" : "s")); return true; }; From a34c051cb36345c055b2fed0db470195a365ef79 Mon Sep 17 00:00:00 2001 From: mcpower Date: Sun, 21 Dec 2014 14:46:26 +1100 Subject: [PATCH 4/9] todo.jsm: allow deletion of todos by name --- todo.jsm | 60 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/todo.jsm b/todo.jsm index cd3058b..a2621e6 100644 --- a/todo.jsm +++ b/todo.jsm @@ -4,7 +4,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /*global module: false */ -module.version = 0.7; +module.version = 0.8; module.users = {}; module.DB_FILENAME = "todo.json"; @@ -55,25 +55,51 @@ module.cmd_tododel = function cmd_tododel(e) { var list = this.getList(e.nick); - var indexes = e.args.split(",").map(Number); + if (/^[0-9,]+$/.test(e.args)) { + var indexes = e.args.split(",").map(Number); - var notdeleted = 0; - for (var i = 0; i < indexes.length; i++) { - if (indexes[i] >= list.length) - notdeleted++; - else - list.splice(indexes[i], 1); - } + var notdeleted = 0; + for (var i = 0; i < indexes.length; i++) { + if (indexes[i] >= list.length) + notdeleted++; + else + list.splice(indexes[i], 1); + } - var deleted = indexes.length - notdeleted; - if (deleted != 0) { - this.saveUsers(); - e.notice("Ok, deleted {0} todo{1}.".format(deleted, deleted == 1 ? "" : "s")); - } - if (notdeleted > 0) - e.reply("{0} todo{1}n't deleted. You only have {2} todo{3} on your todo list.".format( - notdeleted, notdeleted == 1 ? " was" : "s were", list.length, list.length == 1 ? "" : "s")); + var deleted = indexes.length - notdeleted; + if (deleted != 0) { + this.saveUsers(); + e.notice("Ok, deleted {0} todo{1}.".format(deleted, deleted == 1 ? "" : "s")); + } + if (notdeleted > 0) + e.reply("{0} todo{1}n't deleted. You only have {2} todo{3} on your todo list.".format( + notdeleted, notdeleted == 1 ? " was" : "s were", list.length, list.length == 1 ? "" : "s")); + } else { + var filteredlist = list.filter(function startsWith(s) { + return s.slice(0, e.args.length) == e.args; + }); + switch (filteredlist.length) { + case 0: + e.reply("No todos found starting with \"{0}\".".format(e.args)); + break; + case 1: + list.splice(list.indexOf(filteredlist[0]), 1); + this.saveUsers(); + e.notice("Ok, deleted \"{0}\".".format(filteredlist[0])); + break; + default: + var formattedlist = [], currentindex = 0; + // O(list.length) way of finding these. No indexOf found here. + for (var i = 0; i < list.length; i++) { + if (list[i] == filteredlist[currentindex]) { + formattedlist[currentindex] = "[{0}] {1}".format(i, filteredlist[currentindex]); + currentindex++; + } + } + e.reply("Did you mean: {0}".format(formattedlist.join("; "))); + } + } return true; }; module.cmd_tododel.help = "Delete an item from your todo list. Usage: tododel "; From 90cbdaeac28dde45dba3ab85f18acca685b9ab49 Mon Sep 17 00:00:00 2001 From: mcpower Date: Sun, 21 Dec 2014 14:51:34 +1100 Subject: [PATCH 5/9] updated tododel help string --- todo.jsm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/todo.jsm b/todo.jsm index a2621e6..d0c6bd1 100644 --- a/todo.jsm +++ b/todo.jsm @@ -102,7 +102,7 @@ module.cmd_tododel = function cmd_tododel(e) { } return true; }; -module.cmd_tododel.help = "Delete an item from your todo list. Usage: tododel "; +module.cmd_tododel.help = "Delete an item from your todo list. Usage: tododel [ | ]"; try { module.loadUsers(); } catch (ex) { println("Error while loading todo lists from disk: ", ex); From ba0b1241f44df86677e9f85edf28f90c9c7c092c Mon Sep 17 00:00:00 2001 From: mcpower Date: Sun, 21 Dec 2014 17:28:02 +1100 Subject: [PATCH 6/9] todo.jsm: implemented todoins --- todo.jsm | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/todo.jsm b/todo.jsm index d0c6bd1..5d91a99 100644 --- a/todo.jsm +++ b/todo.jsm @@ -4,7 +4,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /*global module: false */ -module.version = 0.8; +module.version = 0.9; module.users = {}; module.DB_FILENAME = "todo.json"; @@ -104,6 +104,28 @@ module.cmd_tododel = function cmd_tododel(e) { }; module.cmd_tododel.help = "Delete an item from your todo list. Usage: tododel [ | ]"; +module.cmd_todoins = function cmd_todoins(e) { + var regex = /^([0-9]+) (.+)$/; + if (!e.args || ! regex.test(e.args)) { + e.reply(this.cmd_todoins.help); + return true; + } + var match = regex.exec(e.args); + var list = this.getList(e.nick); + var index = Number(match[1]), todo = match[2]; + + if (index >= list.length) + e.reply("You only have {0} todo{1} on your todo list.".format(list.length, list.length == 1 ? "" : "s")); + else { + list.splice(index, 0, todo); + this.saveUsers(); + e.notice("Ok."); + } + return true; +} + +module.cmd_todoins.help = "Inserts a todo before the specified index. Usage: todoins "; + try { module.loadUsers(); } catch (ex) { println("Error while loading todo lists from disk: ", ex); } From 511da4a95b71702011977a4590d9f32a2102ed63 Mon Sep 17 00:00:00 2001 From: mcpower Date: Wed, 24 Dec 2014 15:36:50 +1100 Subject: [PATCH 7/9] todo.jsm: more concise, doesn't notice people --- todo.jsm | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/todo.jsm b/todo.jsm index 5d91a99..8243042 100644 --- a/todo.jsm +++ b/todo.jsm @@ -4,7 +4,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /*global module: false */ -module.version = 0.9; +module.version = 0.91; module.users = {}; module.DB_FILENAME = "todo.json"; @@ -33,14 +33,14 @@ module.cmd_todo = function cmd_todo(e) { if (e.args) { list.push(e.args); this.saveUsers(); - e.notice("Ok."); + // e.notice("Ok."); } else if (!list.length) { e.reply("Nothing on your todo list."); } else { var i = 0; e.reply(list.map(function addIndex(todo) { return "[{0}] {1}".format(i++, todo); - }).join("; ")); + }).join(" ")); } return true; @@ -69,11 +69,10 @@ module.cmd_tododel = function cmd_tododel(e) { var deleted = indexes.length - notdeleted; if (deleted != 0) { this.saveUsers(); - e.notice("Ok, deleted {0} todo{1}.".format(deleted, deleted == 1 ? "" : "s")); + // e.notice("Ok, deleted {0} todo{1}.".format(deleted, deleted == 1 ? "" : "s")); } if (notdeleted > 0) - e.reply("{0} todo{1}n't deleted. You only have {2} todo{3} on your todo list.".format( - notdeleted, notdeleted == 1 ? " was" : "s were", list.length, list.length == 1 ? "" : "s")); + e.reply("You only have {0} todo{1}.".format(list.length, list.length == 1 ? "" : "s")); } else { var filteredlist = list.filter(function startsWith(s) { return s.slice(0, e.args.length) == e.args; @@ -81,12 +80,12 @@ module.cmd_tododel = function cmd_tododel(e) { switch (filteredlist.length) { case 0: - e.reply("No todos found starting with \"{0}\".".format(e.args)); + e.reply("No todos starting with \"{0}\".".format(e.args)); break; case 1: list.splice(list.indexOf(filteredlist[0]), 1); this.saveUsers(); - e.notice("Ok, deleted \"{0}\".".format(filteredlist[0])); + // e.notice("Ok, deleted \"{0}\".".format(filteredlist[0])); break; default: var formattedlist = [], currentindex = 0; @@ -115,11 +114,11 @@ module.cmd_todoins = function cmd_todoins(e) { var index = Number(match[1]), todo = match[2]; if (index >= list.length) - e.reply("You only have {0} todo{1} on your todo list.".format(list.length, list.length == 1 ? "" : "s")); + e.reply("You only have {0} todo{1}.".format(list.length, list.length == 1 ? "" : "s")); else { list.splice(index, 0, todo); this.saveUsers(); - e.notice("Ok."); + // e.notice("Ok."); } return true; } From d6d59f74fe1c9221a094c57d7489295acaebf80c Mon Sep 17 00:00:00 2001 From: mcpower Date: Thu, 25 Dec 2014 22:28:21 +1100 Subject: [PATCH 8/9] todo.jsm: various fixes --- todo.jsm | 60 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/todo.jsm b/todo.jsm index 8243042..0d2e035 100644 --- a/todo.jsm +++ b/todo.jsm @@ -4,7 +4,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /*global module: false */ -module.version = 0.91; +module.version = 0.92; module.users = {}; module.DB_FILENAME = "todo.json"; @@ -37,9 +37,8 @@ module.cmd_todo = function cmd_todo(e) { } else if (!list.length) { e.reply("Nothing on your todo list."); } else { - var i = 0; - e.reply(list.map(function addIndex(todo) { - return "[{0}] {1}".format(i++, todo); + e.reply(list.map(function addIndex(todo, index) { + return "[{0}] {1}".format(index, todo); }).join(" ")); } @@ -58,60 +57,61 @@ module.cmd_tododel = function cmd_tododel(e) { if (/^[0-9,]+$/.test(e.args)) { var indexes = e.args.split(",").map(Number); - var notdeleted = 0; + var notDeleted = 0; for (var i = 0; i < indexes.length; i++) { - if (indexes[i] >= list.length) - notdeleted++; - else + if (indexes[i] >= list.length) { + notDeleted++; + } + else { list.splice(indexes[i], 1); + } } - var deleted = indexes.length - notdeleted; + var deleted = indexes.length - notDeleted; if (deleted != 0) { this.saveUsers(); // e.notice("Ok, deleted {0} todo{1}.".format(deleted, deleted == 1 ? "" : "s")); } - if (notdeleted > 0) + if (notDeleted > 0) { e.reply("You only have {0} todo{1}.".format(list.length, list.length == 1 ? "" : "s")); + } } else { - var filteredlist = list.filter(function startsWith(s) { - return s.slice(0, e.args.length) == e.args; + var filteredList = list.map(function (s, i) { + return { + elem: s, + index: i + }; + }).filter(function (todo) { + return todo.elem.startsWith(e.args); }); - switch (filteredlist.length) { + switch (filteredList.length) { case 0: - e.reply("No todos starting with \"{0}\".".format(e.args)); + e.reply('No todos starting with "{0}".'.format(e.args)); break; case 1: - list.splice(list.indexOf(filteredlist[0]), 1); + list.splice(list.indexOf(filteredList[0].elem), 1); this.saveUsers(); - // e.notice("Ok, deleted \"{0}\".".format(filteredlist[0])); + // e.notice("Ok, deleted \"{0}\".".format(filteredList[0].elem)); break; default: - var formattedlist = [], currentindex = 0; - // O(list.length) way of finding these. No indexOf found here. - for (var i = 0; i < list.length; i++) { - if (list[i] == filteredlist[currentindex]) { - formattedlist[currentindex] = "[{0}] {1}".format(i, filteredlist[currentindex]); - currentindex++; - } - } - e.reply("Did you mean: {0}".format(formattedlist.join("; "))); + e.reply("Did you mean: {0}".format(filteredList.map(function (todo) { + return "[{0}] {1}".format(todo.index, todo.elem); + }).join(" "))); } } return true; }; -module.cmd_tododel.help = "Delete an item from your todo list. Usage: tododel [ | ]"; +module.cmd_tododel.help = "Delete an item from your todo list. Usage: tododel "; module.cmd_todoins = function cmd_todoins(e) { - var regex = /^([0-9]+) (.+)$/; - if (!e.args || ! regex.test(e.args)) { + var match = /^([0-9]+) (.+)$/.exec(e.args); + if (match === null) { e.reply(this.cmd_todoins.help); return true; } - var match = regex.exec(e.args); var list = this.getList(e.nick); - var index = Number(match[1]), todo = match[2]; + var index = match[1] >>> 0, todo = match[2]; if (index >= list.length) e.reply("You only have {0} todo{1}.".format(list.length, list.length == 1 ? "" : "s")); From bb98703572893e6f7ffb48d760370b0524a10a1a Mon Sep 17 00:00:00 2001 From: mcpower Date: Fri, 26 Dec 2014 21:57:19 +1100 Subject: [PATCH 9/9] todo.jsm: even more various fixes NOTE: has been barely tested. --- todo.jsm | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/todo.jsm b/todo.jsm index 0d2e035..d80f12c 100644 --- a/todo.jsm +++ b/todo.jsm @@ -61,8 +61,7 @@ module.cmd_tododel = function cmd_tododel(e) { for (var i = 0; i < indexes.length; i++) { if (indexes[i] >= list.length) { notDeleted++; - } - else { + } else { list.splice(indexes[i], 1); } } @@ -90,7 +89,7 @@ module.cmd_tododel = function cmd_tododel(e) { e.reply('No todos starting with "{0}".'.format(e.args)); break; case 1: - list.splice(list.indexOf(filteredList[0].elem), 1); + list.splice(list.indexOf(filteredList[0].index), 1); this.saveUsers(); // e.notice("Ok, deleted \"{0}\".".format(filteredList[0].elem)); break; @@ -106,16 +105,16 @@ module.cmd_tododel.help = "Delete an item from your todo list. Usage: tododel >> 0, todo = match[2]; - if (index >= list.length) + if (index >= list.length) { e.reply("You only have {0} todo{1}.".format(list.length, list.length == 1 ? "" : "s")); - else { + } else { list.splice(index, 0, todo); this.saveUsers(); // e.notice("Ok.");