| version 1.7, 2010/02/02 06:11:31 |
version 1.12, 2010/02/18 06:25:31 |
|
|
| <html><head> |
<html><head> |
| <!-- $AFresh1: index.html,v 1.6 2010/01/31 03:40:21 andrew Exp $ --> |
<!-- $AFresh1: index.html,v 1.11 2010/02/18 05:35:04 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"> |
| |
|
| <script src="scriptaculous/lib/prototype.js"></script> |
<script src="scriptaculous/lib/prototype.js"></script> |
| <script src="scriptaculous/src/scriptaculous.js?load=effects,controls"></script> |
<script src="scriptaculous/src/scriptaculous.js?load=effects,controls"></script> |
| <script type='text/javascript'> |
<script type='text/javascript'> |
| var base_url = '/~andrew/user-bin/todo.cgi'; |
|
| |
|
| function getFiles() { |
var TODO = function () { |
| $('files').update("Getting Files . . ."); |
var base_url = '/~andrew/user-bin/todo.cgi', |
| new Ajax.Updater('files', base_url, { |
editors = {}, |
| method: 'get', |
|
| //insertion: Insertion.Top |
makeEntryEditor = function(list, entry) { |
| }); |
var url = base_url + '/' + list + '/entry/' + entry.line, |
| } |
id = entry.id; |
| |
|
| function updateList(list, transport) { |
if (!id) { |
| var todo = transport.responseJSON; |
id = 'entry_' + entry.line; |
| |
} |
| |
|
| $('list').update(''); |
if (editors[id]) { |
| for (var i=0; i <= todo.length; i++) { |
editors[id].dispose(); |
| $('list').insert({ bottom: new Element('div', { id: todo[i].md5 }) }); |
delete editors[id]; |
| $(todo[i].md5).update(todo[i].text); |
} |
| |
|
| var entry_url = base_url + '/' + list + '/' + todo[i].md5; |
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); |
| |
} |
| |
} |
| |
} |
| |
); |
| |
}, |
| |
|
| new Ajax.InPlaceEditor(todo[i].md5, entry_url + '.txt', { |
updateEntry = function(list, entry, element) { |
| loadTextURL: entry_url + '.txt', |
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, |
| |
}) |
| }); |
}); |
| } |
|
| } |
|
| |
|
| function getList(list) { |
makeEntryEditor(list, entry); |
| $('list').update("Getting List . . ."); |
}, |
| var list_url = base_url + '/' + list; |
|
| |
|
| new Ajax.Request(list_url + '.json', { |
updateList = function (list, transport) { |
| method: 'get', |
var i, |
| onSuccess: function(transport) { updateList(list, transport) }, |
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<myTags.length; i++) { |
| |
element.insert( new Element('li'). |
| |
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 { |
| |
getList: getList, |
| |
getFiles: getFiles, |
| |
getTags: getTags, |
| |
}; |
| |
}(); |
| |
|
| </script> |
</script> |
| </head> |
</head> |
| |
|
| <body onLoad="getFiles();getList('todo')"> |
<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>List:</h1> <div id='list'></div> |
<h1>List:</h1> <div id='list'></div> |
| |
<h1>Tags:</h1> <div id='tags'></div> |
| </body></html> |
</body></html> |