From b038c5fc96cefafdb8bc4df7226032a9214301ec Mon Sep 17 00:00:00 2001 From: anekos Date: Sun, 8 Aug 2010 11:53:33 +0000 Subject: サブコマンドを整理して、より簡単に定義できるように git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@38226 d0d07461-0603-4401-acd4-de1884942a52 --- twittperator.js | 64 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 26 deletions(-) (limited to 'twittperator.js') diff --git a/twittperator.js b/twittperator.js index d1aeefd..f6261f0 100755 --- a/twittperator.js +++ b/twittperator.js @@ -28,7 +28,7 @@ let PLUGIN_INFO = twittperator Twitter Client using ChirpStream OAuth対応Twitterクライアント - 1.0.7 + 1.0.8 2.3 2.4 teramako @@ -1558,56 +1558,68 @@ function loadPlugins() { // {{{ } }; // }}} + const SubCommand = function(init) { + return { + __proto__: init, + get expr() { + return RegExp( + '^' + + this.command.map(function (c) + let (r = util.escapeRegex(c)) + (/^[\W]$/(c) ? r : r + ' ') + ).join(/|/) + ); + }, + match: function(s) s.match(this.expr), + action: function(args) init.action(args.literalArg.replace(this.expr, '').trim()) + }; + }; + const SubCommands = [ // {{{ - { - match: function(s) s.match(/^\+/), + SubCommand({ command: ["+"], description: "Fav a tweet", - action: function(args) { - let m = args.literalArg.match(/^\+.*#(\d+)/); + action: function(arg) { + let m = arg.match(/^.*#(\d+)/); if (m) favTwitter(m[1]); }, completer: Completers.name_id_text - }, - { - match: function(s) s.match(/^\-/), + }), + SubCommand({ command: ["-"], description: "Unfav a tweet", - action: function(args) { - let m = args.literalArg.match(/^\-.*#(\d+)/); + action: function(arg) { + let m = arg.match(/^.*#(\d+)/); if (m) unfavTwitter(m[1]); }, completer: Completers.name_id_text - }, - { - match: function(s) s.match(/^@/), + }), + SubCommand({ command: ["@"], description: "Show mentions or follower tweets", - action: function(args) { - if (args.literalArg.match(/^@.+/)) { - showFollowersStatus(args.literalArg, true); + action: function(arg) { + if (arg.match(/^.+/)) { + showFollowersStatus(arg, true); } else { showTwitterMentions(); } }, completer: Completers.name - }, - { - match: function(s) s.match(/^\?/), + }), + SubCommand({ command: ["?"], description: "Twitter search", - action: function(args) showTwitterSearchResult(args.literalArg), + action: function(arg) showTwitterSearchResult(arg), completer: Completers.text - }, - { - match: function(s) s.match(/^(open\s|\/)/), + }), + SubCommand({ command: ["/"], description: "Open link", - action: function(args) openLink(args.literalArg), + action: function(arg) openLink(arg), completer: Completers.link - } + }) ]; // }}} function findSubCommand(s) { // {{{ @@ -1701,7 +1713,7 @@ function loadPlugins() { // {{{ return showFollowersStatus(null, args.bang); if (args.bang) { - let [subCmd] = findSubCommand(arg); + let [subCmd] = findSubCommand(arg) || []; if (subCmd) subCmd.action(args); } else { -- cgit v1.2.3