version 1.10, 2010/02/17 02:16:28 |
version 1.11, 2010/02/18 05:35:04 |
|
|
<html><head> |
<html><head> |
<!-- $AFresh1: index.html,v 1.9 2010/02/16 03:45:17 andrew Exp $ --> |
<!-- $AFresh1: index.html,v 1.10 2010/02/17 02:16:28 andrew Exp $ --> |
<title>todo.txt - ajax client</title> |
<title>todo.txt - ajax client</title> |
<link rel="stylesheet" href="todo.css"> |
<link rel="stylesheet" href="todo.css"> |
|
|
|
|
|
|
var TODO = function () { |
var TODO = function () { |
var base_url = '/~andrew/user-bin/todo.cgi', |
var base_url = '/~andrew/user-bin/todo.cgi', |
editors = {}, |
editors = {}, |
|
|
makeEntryEditor = function(id, list_url) { |
makeEntryEditor = function(list, entry) { |
var url = list_url + '/entry/' + id; |
var url = base_url + '/' + list + '/entry/' + entry.line, |
|
id = entry.id; |
|
|
if (!editors[id]) { |
if (editors[id]) { |
editors[id] = { |
editors[id].editor.dispose(); |
list_url: list_url, |
delete editors[id]; |
editor: new Ajax.InPlaceEditor( |
} |
id, url + '.json', { |
|
cols: 80, |
editors[id] = { |
rows: 1, |
list: list, |
onComplete: updateEntry, |
editor: 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(transport.responseJSON, element); |
|
} |
} |
} |
), |
} |
}; |
), |
} |
}; |
}, |
}, |
|
|
updateEntry = function(transport, element) { |
updateEntry = function(entry, element) { |
var list_url = editors[element.id].list_url, |
var list = editors[element.id].list; |
entry; |
|
|
|
if (transport && transport.responseJSON) { |
element.update(entry.text); |
entry = transport.responseJSON; |
|
|
|
element.update(entry.text); |
if (parseInt(entry.line) !== element.value) { |
|
for (k in editors) { |
if (element.id !== entry.md5) { |
if (editors.hasOwnProperty(k)) { |
if (editors[element.id]) { |
editors[k].editor.dispose(); |
editors[element.id].editor.dispose(); |
delete editors[k]; |
delete editors[element.id]; |
|
} |
} |
|
|
element.id = entry.md5; |
|
|
|
makeEntryEditor(element.id, list_url); |
|
} |
} |
|
return getList(list); |
} |
} |
}, |
}, |
|
|
updateList = function (list_url, transport) { |
updateList = function (list, transport) { |
var i, |
var i, |
todo = transport.responseJSON, |
todo = transport.responseJSON, |
url = ''; |
element = new Element('ol'); |
|
|
$("list").update(); |
$("list").update( element ); |
|
|
for (i=0; i <= todo.length; i++) { |
for (i=0; i <= todo.length; i++) { |
$('list').insert({ |
todo[i].id = 'entry_' + todo[i].line; |
bottom: new Element('div', |
|
{ id: todo[i].md5 } |
element.insert( new Element('li', { |
).update(todo[i].text) |
id: 'entry_' + todo[i].line, |
} |
value: todo[i].line |
|
}).update(todo[i].text) |
); |
); |
|
|
makeEntryEditor(todo[i].md5, list_url); |
makeEntryEditor(list, todo[i]); |
} |
} |
}; |
}, |
|
|
return { |
getFiles = function () { |
getFiles: function () { |
$('files').update("Getting Files . . ."); |
$('files').update("Getting Files . . ."); |
|
|
|
new Ajax.Updater('files', base_url, { |
new Ajax.Updater('files', base_url, { |
method: 'get', |
method: 'get', |
}); |
}); |
}, |
}, |
|
|
getTags: function (list) { |
getTags = function (list) { |
var url = base_url + '/' + list + '/tags'; |
$('tags').update("Getting Tags. . ."); |
$('tags').update("Getting Tags. . ."); |
|
|
|
new Ajax.Request(url + '.json', { |
var url = base_url + '/' + list + '/tags'; |
method: 'get', |
|
onSuccess: function (transport) { |
new Ajax.Request(url + '.json', { |
var data = transport.responseJSON, |
method: 'get', |
k, |
onSuccess: function (transport) { |
html = ''; |
var k, |
for (k in data) { |
data = transport.responseJSON, |
if (data.hasOwnProperty(k)) { |
element = new Element('ul'); |
html += k + ": " + data[k] + "<br/>\n"; |
|
|
$("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<myTags.length; i++) { |
|
element.insert( new Element('li'). |
|
update( myTags[i] )); |
} |
} |
} |
} |
$("tags").innerHTML = html; |
} |
}, |
} |
}); |
}); |
}, |
}, |
|
|
getList: function (list) { |
getList = function (list) { |
var url = base_url + '/' + list; |
$('list').update("Getting List . . ."); |
$('list').update("Getting List . . ."); |
|
|
|
new Ajax.Request(url + '.json', { |
new Ajax.Request(base_url + '/' + list + '.json', { |
method: 'get', |
method: 'get', |
onSuccess: function (transport) { updateList(url, transport) }, |
onSuccess: function (transport) { updateList(list, transport) }, |
}); |
}); |
|
|
}, |
|
}; |
}; |
|
|
|
return { |
|
getList: getList, |
|
getFiles: getFiles, |
|
getTags: getTags, |
|
}; |
}(); |
}(); |
|
|
</script> |
</script> |
|
|
|
|
<body onLoad="TODO.getList('todo');TODO.getTags('todo');TODO.getFiles()"> |
<body onLoad="TODO.getList('todo');TODO.getTags('todo');TODO.getFiles()"> |
<h1>Files:</h1><div id='files'></div> |
<h1>Files:</h1><div id='files'></div> |
<h1>Tags:</h1> <div id='tags'></div> |
|
<h1>List:</h1> <div id='list'></div> |
<h1>List:</h1> <div id='list'></div> |
|
<h1>Tags:</h1> <div id='tags'></div> |
</body></html> |
</body></html> |