Annotation of todotxt/Text-Todo-REST-API/example/htdocs/lib/todo.js, Revision 1.3
1.3 ! andrew 1: "use strict";
1.1 andrew 2: var TODO = function () {
1.2 andrew 3: var base_url = '/~andrew/user-bin/todo-rest.cgi',
1.3 ! andrew 4: editors = {},
! 5:
! 6: makeEntryEditor = function (list, entry) {
1.1 andrew 7: var url = base_url + '/' + list + '/entry/' + entry.line,
1.3 ! andrew 8: id = entry.id;
1.1 andrew 9:
10: if (!id) {
11: id = 'entry_' + entry.line;
12: }
13:
14: if (editors[id]) {
1.3 ! andrew 15: editors[id].dispose();
! 16: delete editors[id];
1.1 andrew 17: }
18:
1.3 ! andrew 19: editors[id] = new Ajax.InPlaceEditor(id, url + '.json', {
! 20: ajaxOptions: {
! 21: method: 'put'
! 22: },
! 23: cols: 80,
! 24: rows: 1,
! 25: callback: function (form, value) {
! 26: entry.oldText = entry.text;
! 27: entry.text = value;
! 28: return entry;
! 29: },
! 30: onComplete: function (transport, element) {
! 31: if (transport && transport.responseJSON) {
! 32: updateEntry(list, transport.responseJSON, element);
1.1 andrew 33: }
34: }
1.3 ! andrew 35: });
1.1 andrew 36: },
37:
1.3 ! andrew 38: getList = function (list) {
! 39: $('list').update("Getting List . . .");
! 40:
! 41: var request = new Ajax.Request(base_url + '/' + list + '.json', {
! 42: method: 'get',
! 43: onSuccess: function (transport) {
! 44: updateList(list, transport);
! 45: },
! 46: });
! 47:
! 48: },
! 49:
! 50: updateEntry = function (list, entry, element) {
1.1 andrew 51: if (!entry.id) {
52: entry.id = 'entry_' + entry.line;
53: }
1.3 ! andrew 54: var k, liId = 'li_' + entry.id;
1.1 andrew 55:
56: if (parseInt(entry.line) !== $(liId).value) {
57: for (k in editors) {
58: if (editors.hasOwnProperty(k)) {
59: editors[k].dispose();
60: delete editors[k];
61: }
62: }
63: return getList(list);
64: }
65:
66: $(liId).update(
1.3 ! andrew 67: new Element('span', {
! 68: id: entry.id
! 69: }).update(entry.text)).insert({
! 70: top: new Element('input', {
! 71: type: 'checkbox',
! 72: id: 'do_' + entry.line,
1.1 andrew 73: checked: entry.done,
74: disabled: true,
75: })
76: });
77:
78: makeEntryEditor(list, entry);
79: },
80:
81: updateList = function (list, transport) {
1.3 ! andrew 82: var i, todo = transport.responseJSON,
! 83: element = new Element('ol'),
! 84: entryElement;
1.1 andrew 85:
1.3 ! andrew 86: $("list").update(element);
1.1 andrew 87:
1.3 ! andrew 88: for (i = 0; i <= todo.length; i++) {
1.1 andrew 89: todo[i].id = 'entry_' + todo[i].line;
90:
1.3 ! andrew 91: entryElement = new Element('li', {
! 92: id: 'li_' + todo[i].id,
! 93: value: todo[i].line
1.1 andrew 94: });
95:
96: element.insert(entryElement);
97:
98: updateEntry(list, todo[i], entryElement);
99: }
100: },
101:
102: getFiles = function () {
103: $('files').update("Getting Files . . .");
104:
1.3 ! andrew 105: var request = new Ajax.Updater('files', base_url, {
! 106: method: 'get'
1.1 andrew 107: });
108: },
109:
110: getTags = function (list) {
1.3 ! andrew 111: $('tags').update("Getting Tags. . .");
1.1 andrew 112:
1.3 ! andrew 113: var url = base_url + '/' + list + '/tags';
1.1 andrew 114:
1.3 ! andrew 115: var request = new Ajax.Request(url + '.json', {
1.1 andrew 116: method: 'get',
1.3 ! andrew 117: onSuccess: function (transport) {
! 118: var k, data = transport.responseJSON,
1.1 andrew 119: element = new Element('ul');
120:
121: $("tags").update(element);
122: for (k in data) {
123: if (data.hasOwnProperty(k)) {
1.3 ! andrew 124: element.insert(
1.1 andrew 125: new Element('li', {
126: id: 'tag_' + k,
1.3 ! andrew 127: }).update(k + ": " + data[k]));
! 128: getTag(list, k);
1.1 andrew 129: }
130: }
131: },
132: });
133: },
134:
1.3 ! andrew 135: getTag = function (list, tag) {
! 136: var request = new Ajax.Request(base_url + '/' + list + '/tags/' + tag + '.json', {
1.1 andrew 137: method: 'get',
138: onSuccess: function (transport) {
139: if (transport && transport.responseJSON) {
1.3 ! andrew 140: var i, myTags = transport.responseJSON,
1.1 andrew 141: element = new Element('ul');
142:
143: if (myTags.length) {
144: $('tag_' + tag).insert(element);
145:
1.3 ! andrew 146: for (i = 0; i < myTags.length; i++) {
! 147: element.insert(new Element('li').
! 148: update(myTags[i]));
1.1 andrew 149: }
150: }
151: }
152: }
153: });
154: };
155:
1.3 ! andrew 156: return {
! 157: getList: getList,
1.1 andrew 158: getFiles: getFiles,
1.3 ! andrew 159: getTags: getTags,
1.1 andrew 160: };
161: }();
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>