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