From 5fac26a8128092def1911f01cac5193041392c1f Mon Sep 17 00:00:00 2001 From: anekos Date: Thu, 12 Feb 2009 14:16:39 +0000 Subject: インストーラを追加 サブコマンド式のコマンドを追加 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@29979 d0d07461-0603-4401-acd4-de1884942a52 --- pluginManager.js | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 133 insertions(+), 3 deletions(-) (limited to 'pluginManager.js') diff --git a/pluginManager.js b/pluginManager.js index 2b36f14..7cff473 100644 --- a/pluginManager.js +++ b/pluginManager.js @@ -4,7 +4,7 @@ var PLUGIN_INFO = Manage Vimperator Plugins Vimpeatorプラグインの管理 teramako -0.5.1 +0.6.0 2.0pre 2.0pre http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/pluginManager.js @@ -377,9 +377,8 @@ var WikiParser = (function () { if (!(this instanceof arguments.callee)) return new arguments.callee(name, state); - this.__ok = false; this.name = name; - this.state = state; //TODO clone + this.state = state; } function ok (v) @@ -816,6 +815,66 @@ commands.addUserCommand(['plugin[help]'], 'list Vimperator plugins', ]).filter(function(row) row[0].toLowerCase().indexOf(context.filter.toLowerCase()) >= 0); } + }, true); + +commands.addUserCommand(['pluginmanager', 'pm'], 'Manage Vimperator plugins', + function(args){ + if (args.length < 1) + liberator.echoerr('Not enough arguments. Sub-command required.'); + + var xml; + var sub = args[0]; + var subArgs = args.slice(1); + + function s2b (s, d) (!/^(\d+|false)$/i.test(s)|parseInt(s)|!!d*2)&1<= 0); + } + } + } }, true); // }}} // -------------------------------------------------------- @@ -856,6 +915,77 @@ var public = { xml += plugin.itemFormatter(verbose); }); return xml; + }, + install: function(urls){ + function makeURL(s){ + let url = Cc["@mozilla.org/network/standard-url;1"].createInstance(Ci.nsIURL); + url.spec = s; + return url; + } + + function fixURL(url){ + const cr = RegExp('^http://coderepos\.org/share/browser/lang/javascript/vimperator-plugins/trunk/[^/]+\.js$'); + const pi = RegExp('^http://vimperator\.kurinton\.net/plugins/'); + const npi = /\/(all|index)\.html/; + const js = /\.js$/; + function xe(xpath){ + let ss = buffer.evaluateXPath(xpath); + return (ss.snapshotLength > 0) && ss.snapshotItem(0).href; + } + if (cr.test(url)) { + return url.replace(/coderepos/, 'svn.coderepos').replace(/browser\//, ''); + } else if (pi.test(url) && !npi.test(url)) { + return xe('//a[@id="file-link"]'); + } else if (js.test(url)) { + return url; + } else { + throw 'Current URL is not pluginFile'; + } + } + + function download(url){ + let wbp = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(Ci.nsIWebBrowserPersist); + + let progressListener = { + onStateChange: function (_webProgress, _request, _stateFlags, _status) { + if (_stateFlags & Ci.nsIWebProgressListener.STATE_STOP) { + if (file.exists()) { + io.source(file.path); + liberator.echo('Executed: ' + file.path) + } else { + return liberator.echoerr('Download error!'); + } + } + }, + onProgressChange: function () undefined, + onLocationChange: function () undefined, + onStatusChange: function () undefined, + onSecurityChange: function () undefined, + } + + let filename = url.match(/[^\/]+$/).toString(); + let file = io.getRuntimeDirectories('plugin')[0]; + file.append(filename); + + if (file.exists()) + return liberator.echoerr('Already exists: ' + file.path); + + let fileuri = makeFileURI(file); + + wbp.progressListener = progressListener; + wbp.persistFlags |= wbp.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION; + wbp.saveURI(makeURL(url), null, null, null, null, fileuri); + } + + var url = urls.length ? urls[0] : buffer.URL; + var sourceURL = fixURL(url); + if (sourceURL == url) { + liberator.log(url); + download(url); + } else { + liberator.open(sourceURL); + liberator.echoerr('Please check the source code of plugin, and retry ":pluginmanager install"'); + } } }; return public; -- cgit v1.2.3