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