44 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
55/*global module.exports: false */
66var fs = require ( "fs" ) ;
7- module . exports . version = 0.5 ;
7+ module . exports . version = 0.9 ;
88module . exports . users = { } ;
99module . 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
65127try { module . exports . loadUsers ( ) ; } catch ( ex ) {
66128 println ( "Error while loading todo lists from disk: " , ex ) ;
0 commit comments