// // tada.js // // LICENSE: {{{ // Copyright (c) 2009 snaka // // Distributable under the terms of an MIT-style license. // http://www.opensource.jp/licenses/mit-license.html // }}} // PLUGIN INFO: {{{ var PLUGIN_INFO = Ta-Da Show ToDo items in commandline buffer. Also add item to your Ta-da list. コマンドラインバッファからTa-Da list のToDo一覧を参照したり、からToDo項目を追加したりします。 2.0pre 2.0 http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/tada.js snaka MIT style license 0.7 ; // }}} liberator.plugins.tada = (function(){ // COMMAND {{{ commands.addUserCommand( ["tada"], "Show / Add ToDo items to Ta-Da list. (:tada [LISTNAME] [SUBJECT])", function(args) { var listId; switch (args.length) { case 0: showTodoItems(getDefaultListId()); break; case 1: if (listId = getListId(args[0])) showTodoItems(listId); else addTodoItem(getDefaultListId(), args[0]); break; default: if (listId = getListId(args[0])) addTodoItem([listId, args[0]], args[1]); else addTodoItem(getDefaultListId(), args.join('')); } }, { completer: function(context) { context.title = ["List", "Description"]; context.completions = getLists().map(function(item) [item[1], "(not implemented)"]); }, argCount: "*", literal: true }, true // for DEVELOP ); // }}} // PUBLIC {{{ var PUBLICS = { // for DEBUG {{{ // getListId: getListId, // getDefaultListId: getDefaultListId, // getLists: getLists, // showTodoItems: showTodoItems, // addTodoItem: addTodoItem, // g: g // }}} }; // }}} // PRIVATE {{{ function g(str) { return liberator.globalVariables[str]; } function getURI() { if (userId = g('tada_userId')) return "http://" + userId + ".tadalist.com/lists/"; throw "Please specify your user id to global variable 'tada_userId'."; } function parseListId(source) { let m; if (m = source.match(/\/lists\/([0-9]+)/)) return m[1]; return source; } function getListId(name) { var list = getLists(); for(var i in list) { if (list[i][1] == name) return list[i][0]; } return null; } // Get default list id and name by Array // @return [defaultListId, defaultListName] // 1.Use global variable g:tadaDefaultListName if specified. // 2.Use first list if global variable not specified or specified list name is not // exist in your lists. function getDefaultListId() { var defaultId; var defaultName; if (defaultName = g('tadaDefaultListName')) if (defaultId = getListId(defaultName)) return [defaultId, defaultName]; var lists = getLists(); // [[id, name], ...] return [lists[0][0], lists[0][1]]; } function getLists() { var lists = []; var req = new libly.Request(getURI(), null, {asynchronous: false}); req.addEventListener('onSuccess', function(data) { liberator.log("success"); data.getHTMLDocument(); var xpath = "//div[@id='Container']/div[2]/div/div/ul/li/a" libly.$U.getNodesFromXPath(xpath, data.doc).forEach(function(item){ lists.push([parseListId(item.href), item.innerHTML]); }); }); req.get(); if (lists.length == 0) throw "Cannot get your list. Please chehek " + getURI() + " is accessible."; return lists; } function showTodoItems(listId) { var req = new libly.Request(getURI() + listId.toString()); req.addEventListener('onSuccess', function(data) { liberator.log("success"); data.getHTMLDocument(); var list = ; libly.$U.getNodesFromXPath("//ul[@id='incomplete_items']/li/form", data.doc).forEach(function(item){ list.li +=
  • {item.textContent.replace(/^\s*|\n|\r|\s*$/g, '')}
  • ; }); liberator.echo(list.toXMLString(), commandline.FORCE_MULTILINE); liberator.log(list.toXMLString()); }); req.get(); } function addTodoItem([listId, listName], content) { var endpoint = getURI() + listId + "/items" liberator.log("endpoint:" + endpoint); var req = new libly.Request( endpoint, null, { asyncronus: true, postBody: "item[content]=" + encodeURIComponent(content) } ); req.addEventListener('onSuccess', function(data) { liberator.echo("Posted[" + listName + "]:" + content); liberator.plugins.posted = data; }); req.addEventListener('onFailure', function(data) { liberator.echoerr("POST FAILURE: " + content); }); req.post(); } return PUBLICS; // }}} })(); // vim: sw=2 ts=2 et si fdm=marker: