diff options
| author | suVene | 2008-12-20 16:11:27 +0000 | 
|---|---|---|
| committer | suVene | 2008-12-20 16:11:27 +0000 | 
| commit | 8a8fc8086e7a9d125a56b7adbde29a61222ae177 (patch) | |
| tree | 8fac5252aa2cf062d26ce075be3bc3aeb82764fd | |
| parent | 427654cd8aab97d3aebd0b20b8f5aa34e186c37e (diff) | |
| download | vimperator-plugins-8a8fc8086e7a9d125a56b7adbde29a61222ae177.tar.bz2 | |
* add version info to a completer header.(気にいらなければ外してください to @teramako)
* multiple names support for args.
* add args '-check'.(plugin version check)
* add tags <updateURL>.
* add property > plugin.info, plugin.orgInfo.
* pluginManager自身 の Version は policy がわからなかったのでそのまま。
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27131 d0d07461-0603-4401-acd4-de1884942a52
| -rw-r--r-- | pluginManager.js | 74 | 
1 files changed, 54 insertions, 20 deletions
| diff --git a/pluginManager.js b/pluginManager.js index 5b385ec..0d1bbfd 100644 --- a/pluginManager.js +++ b/pluginManager.js @@ -7,6 +7,7 @@ var PLUGIN_INFO =  <version>0.2</version>  <minVersion>2.0pre</minVersion>  <maxVersion>2.0pre</maxVersion> +<updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/pluginManager.js</updateURL>  <detail lang="ja"><![CDATA[  これはVimperatorプラグインの詳細情報orヘルプを表示するためのプラグインです。  == Command == @@ -42,6 +43,8 @@ maxVersion:      プラグインが使用できるVimperatorの最大バージョン  minVersion:      プラグインが使用できるVimperatorの最小バージョン +updateURL: +    プラグインの最新リソースURL  detail:      ここにコマンドやマップ、プラグインの説明      CDATAセクションにwiki的に記述可能 @@ -113,6 +116,7 @@ var tags = {      version: id,      maxVersion: id,      minVersion: id, +    updateURL: function(info) makeLink(info.toString()),      detail: function(info){          if (info.* && info.*[0] && info.*[0].nodeKind() == 'element')              return info.*; @@ -162,11 +166,16 @@ function getPlugins(){              ['path', path]          ];          plugin['name'] = context.NAME; +        plugin['info'] = {}; +        plugin['orgInfo'] = {};          if (info){              for (let tag in tags){ +                plugin.orgInfo[tag] = info[tag];                  let value = tags[tag](info); -                if (value && value.toString().length > 0) +                if (value && value.toString().length > 0){                      plugin.push([tag, value]); +                    plugin.info[tag] = value; +                }              }          }          list.push(plugin); @@ -180,6 +189,21 @@ function itemFormater(plugin, showDetails){      var data = plugin.filter(function($_) $_[0] != 'detail');      return template.table(plugin.name, data);  } +function checkVersion(plugin){ +    var data = { +        "Current Version": plugin.info.version || 'unknown', +        "Latest Version": getLatestVersion(plugin.info.updateURL) || 'unknown', +        "Update URL": plugin.info.updateURL || '-' +    }; +    return template.table(plugin.name, data); +} +function getLatestVersion(url){ +    if (!url) return ''; +    var val = util.httpGet(url).responseText || ''; +    val.match(/PLUGIN_INFO[\s\S]*<VimperatorPlugin>[\s\S]*<version>(.*)<\/version>[\s\S]*<\/VimperatorPlugin>/); +    val = RegExp.$1; +    return val; +}  function WikiParser(text){      this.mode = '';      this.lines = text.split(/\n\r|[\r\n]/); @@ -273,7 +297,7 @@ WikiParser.prototype = {                  prevMode = this.mode;                  continue;              } -            if (!line) { +            if (!line){                  //this.xmlstack.append(<>{"\n"}</>);                  continue;              } @@ -342,7 +366,7 @@ HTMLStack.prototype = {          }          return this.last;      }, -    appendChild: function(xml) { +    appendChild: function(xml){          var buf = this.stack[this.length-1];          buf[buf.length()-1].* += xml;          return this.last; @@ -389,38 +413,47 @@ HTMLStack.prototype = {  };  commands.addUserCommand(['plugin[help]'], 'list Vimperator plugins',      function(args){ -        liberator.plugins.pluginManager.list(args[0], args['-verbose']); +        liberator.plugins.pluginManager.list(args);      }, {          argCount: '*',          options: [              [['-verbose', '-v'], commands.OPTION_NOARG], +            [['-check', '-c'], commands.OPTION_NOARG],          ],          completer: function(context){              var all = getPlugins().map(function(plugin){ -                let desc = '-'; -                for (let i=plugin.length; i-->0;){ -                    if (plugin[i][0] == 'description'){ -                        desc = plugin[i][1]; -                        break; -                    } -                } -                return [plugin.name, desc]; +                let ver = plugin.info.version || 'unknown'; +                let desc = plugin.info.description || '-'; +                return [plugin.name, '[' + ver + ']' + desc];              }); -            context.title = ['PluginName', 'Description']; +            context.title = ['PluginName', '[Version]Description'];              context.completions = all.filter(function(row) row[0].toLowerCase().indexOf(context.filter.toLowerCase()) >= 0);          }      }, true);  var public = { -    list: function(name, showDetails){ +    list: function(args){ +        var names = args; +        var check = args['-check']; +        var showDetails = args['-verbose']; +          var xml = <></>;          var plugins = getPlugins(); -        if (name){ -            let plugin = plugins.filter(function(plugin) plugin.name == name)[0]; -            if (plugin){ -                xml = itemFormater(plugin, showDetails); -            } + +        var action = itemFormater; +        var params = [showDetails]; + +        if (check) +            action = checkVersion; + +        if (names.length){ +            names.forEach(function(name){ +                let plugin = plugins.filter(function(plugin) plugin.name == name)[0]; +                if (plugin){ +                    xml += action.apply(this, [plugin].concat(params)); +                } +            });          } else { -            plugins.forEach(function(plugin) xml += itemFormater(plugin, showDetails)); +            plugins.forEach(function(plugin) xml += action.apply(this, [plugin].concat(params)));          }          liberator.echo(xml, true);      } @@ -428,3 +461,4 @@ var public = {  return public;  })();  // vim: sw=4 ts=4 et fdm=marker: + | 
