From 9215a7dc4fbe66202fab747d00ad42f8b40a6bb6 Mon Sep 17 00:00:00 2001 From: snaka Date: Sat, 14 Feb 2009 12:01:17 +0000 Subject: Add Ta-da list plugin git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@30055 d0d07461-0603-4401-acd4-de1884942a52 --- tada.js | 256 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 tada.js (limited to 'tada.js') diff --git a/tada.js b/tada.js new file mode 100644 index 0000000..74261b9 --- /dev/null +++ b/tada.js @@ -0,0 +1,256 @@ +// +// 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(){ + +// 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]); + //liberator.log(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 html = []; + html.push(""); + + liberator.echo(html.join(''), commandline.FORCE_MULTILINE); + liberator.log(html.join('')); + }); + 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(); + } + +// }}} +// COMMAND {{{ + + commands.addUserCommand( + ["tada"], + "Show / Add ToDo items to Ta-Da list.", + 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", "Subject"]; + context.completions = getLists().map(function(item) [item[1], item[0]]); + }, + argCount: "*", + literal: true + }, + true // for DEVELOP + ); + +// }}} +// PUBLIC {{{ + + return { + // for DEBUG {{{ + // getListId: getListId, + // getDefaultListId: getDefaultListId, + // getLists: getLists, + // showTodoItems: showTodoItems, + // addTodoItem: addTodoItem, + // g: g + // }}} + }; +// }}} + +})(); + +// vim: sw=2 ts=2 et si fdm=marker: -- cgit v1.2.3