[BACK]Return to todo.js CVS log [TXT][DIR] Up to [local] / todotxt / Text-Todo-REST-API / example / htdocs / lib

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>