var TODO = function () { var base_url = '/~andrew/user-bin/todo.cgi', editors = {}, makeEntryEditor = function(list, entry) { var url = base_url + '/' + list + '/entry/' + entry.line, id = entry.id; if (!id) { id = 'entry_' + entry.line; } if (editors[id]) { editors[id].dispose(); delete editors[id]; } editors[id] = new Ajax.InPlaceEditor( id, url + '.json', { cols: 80, rows: 1, callback: function(form, value) { entry.oldText = entry.text; entry.text = value; return entry; }, onComplete: function (transport, element) { if (transport && transport.responseJSON) { updateEntry( list, transport.responseJSON, element); } } } ); }, updateEntry = function(list, entry, element) { if (!entry.id) { entry.id = 'entry_' + entry.line; } var liId = 'li_' + entry.id; if (parseInt(entry.line) !== $(liId).value) { for (k in editors) { if (editors.hasOwnProperty(k)) { editors[k].dispose(); delete editors[k]; } } return getList(list); } $(liId).update( new Element('span', { id: entry.id }). update(entry.text) ).insert({ top: new Element('input', { type: 'checkbox' , id: 'do_' + entry.line, checked: entry.done, disabled: true, }) }); makeEntryEditor(list, entry); }, updateList = function (list, transport) { var i, todo = transport.responseJSON, element = new Element('ol'), entryElement; $("list").update( element ); for (i=0; i <= todo.length; i++) { todo[i].id = 'entry_' + todo[i].line; entryElement = new Element('li', { id: 'li_' + todo[i].id, value: todo[i].line }); element.insert(entryElement); updateEntry(list, todo[i], entryElement); } }, getFiles = function () { $('files').update("Getting Files . . ."); new Ajax.Updater('files', base_url, { method: 'get', }); }, getTags = function (list) { $('tags').update("Getting Tags. . ."); var url = base_url + '/' + list + '/tags'; new Ajax.Request(url + '.json', { method: 'get', onSuccess: function (transport) { var k, data = transport.responseJSON, element = new Element('ul'); $("tags").update(element); for (k in data) { if (data.hasOwnProperty(k)) { element.insert( new Element('li', { id: 'tag_' + k, }).update( k + ": " + data[k] ) ); getTag(list, k); } } }, }); }, getTag = function( list, tag ) { new Ajax.Request(base_url + '/' + list + '/tags/' + tag + '.json', { method: 'get', onSuccess: function (transport) { if (transport && transport.responseJSON) { var i, myTags = transport.responseJSON, element = new Element('ul'); if (myTags.length) { $('tag_' + tag).insert(element); for (i=0; i