From f8bafd53a6549febc4ee9e001933494015cfc7d9 Mon Sep 17 00:00:00 2001
From: anekos
Date: Wed, 3 Feb 2010 13:07:49 +0000
Subject: Initial release: アドオンの有効無効状態を保存&復帰できるプラギン
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@36607 d0d07461-0603-4401-acd4-de1884942a52
---
extension-manager.js | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 223 insertions(+)
create mode 100755 extension-manager.js
(limited to 'extension-manager.js')
diff --git a/extension-manager.js b/extension-manager.js
new file mode 100755
index 0000000..8fcfe71
--- /dev/null
+++ b/extension-manager.js
@@ -0,0 +1,223 @@
+/* NEW BSD LICENSE {{{
+Copyright (c) 2010, anekos.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ 3. The names of the authors may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+
+
+###################################################################################
+# http://sourceforge.jp/projects/opensource/wiki/licenses%2Fnew_BSD_license #
+# に参考になる日本語訳がありますが、有効なのは上記英文となります。 #
+###################################################################################
+
+}}} */
+
+// PLUGIN_INFO {{{
+let PLUGIN_INFO =
+
+ extension manager
+ アドオン管理
+ extension manager
+ アドオンを管理します。
+ 1.0.0
+ anekos
+ new BSD License (Please read the source code comments of this plugin)
+ 修正BSDライセンス (ソースコードのコメントを参照してください)
+ http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/extensions-manager.js
+ 2.3
+ 2.3
+
+
+;
+// }}}
+// INFO {{{
+let INFO =
+<>
+
+ anekos
+ New BSD License
+
+
+ Extention manager death yohooo
+
+ -
+ :extstate
+ :extstate sub-command name extension-names...
+
+
+ Store or restore current extensions state with name.
+
The following sub-commands are interpreted.
+ if the extension-names arguments are specified,
+ this command is only for these extensions.
+
+
+
+
+
+
+ anekos
+ New BSD License
+
+
+ extention manager
+
+ -
+ :extstate
+ :extstate sub-command name extension-names...
+
+
+ Store or restore current extensions state with name.
+
The following sub-commands are interpreted.
+ if the extension-names arguments are specified,
+ this command is only for these extensions.
+
+
+
+
+
+>;
+// }}}
+
+
+(function () {
+
+ let states = storage.newMap('plugins-extman-states', {store: true});
+
+ function xabled (id, enable)
+ services.get("extensionManager")[enable ? 'enableItem' : 'disableItem'](id);
+
+ function xabledWithName (name, enable)
+ xabled(liberator.getExtension(name), enable);
+
+ function cmp (s1, s2)
+ (s1.toLowerCase() == s2.toLowerCase());
+
+ function extFilter (exts, names)
+ (names && names.length) ? exts.filter(function (ext) names.some(function (name) cmp(name, ext.name)))
+ : exts;
+
+ function store (name, targets) {
+ let es = extFilter(liberator.extensions, targets);
+ states.set(name, {extensions: es, date: new Date()});
+ }
+
+ store('last');
+
+ let extState = {
+ store: function (name, targets) {
+ function done ()
+ liberator.echo('extensions state was stored to "' + name + '".');
+
+ if (!name)
+ return liberator.echoerr('too few arguments');
+
+ if (states.get(name)) {
+ commandline.input(
+ 'overwrite? [y/n]',
+ function (answer)
+ (answer.toLowerCase() == 'y' ? (store(name, targets, true), done()) : liberator.echo('canceled'))
+ );
+ } else {
+ store(name, targets, true);
+ done();
+ }
+ },
+
+ restore: function (name, targets) {
+ if (!name)
+ return liberator.echoerr('too few arguments');
+
+ let state = states.get(name);
+ if (!state)
+ return liberator.echoerr('"' + name + '" has not been stored.');
+
+ let es = state.extensions;
+ if (targets.length)
+ es = es.filter(function (ext) targets.some(function (t) t == ext.name));
+ es.forEach(function (ext) xabled(ext.id, ext.enabled));
+
+ liberator.echo('extensions state was restored from "' + name + '".');
+ },
+
+ flush: function () {
+ states.save();
+ },
+
+ __noSuchMethod__: function (name) {
+ liberator.echoerr(name + ' is not valid sub-command');
+ }
+ };
+
+ commands.addUserCommand(
+ ['exts[tate]'],
+ 'store / restore extensions state (enabled / disabled).',
+ function (args) {
+ let [cmd,] = args;
+ extState[cmd](args[1], args.slice(2));
+ },
+ {
+ completer: function (context, args) {
+ if (args.length == 1) {
+ context.title = ['sub command', 'description'];
+ context.completions = [
+ ['store', 'store current state'],
+ ['restore', 'restore current state'],
+ ['flush', 'flush']
+ ];
+ } else if (args.length == 2) {
+ context.title = ['name'];
+ context.completions = [[name, state.date] for ([name, state] in states)];
+ } else if (args.length >= 3) {
+ let exts = liberator.extensions;
+ context.title = ['name'];
+ context.quote = ['', util.escapeString, ''];
+ context.completions = [[ext.name, ext.description] for each (ext in exts)];
+ }
+ }
+ },
+ true
+ );
+
+ states.save();
+
+})();
+
+// vim:sw=2 ts=2 et si fdm=marker:
--
cgit v1.2.3