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. +
    +
  • store
  • +
  • restore
  • +
+

+
+
+
+ + 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. +
    +
  • store
  • +
  • restore
  • +
+

+
+
+
+; +// }}} + + +(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