From 5f5f4c51e989b0917b33acc4d85216a609258c5c Mon Sep 17 00:00:00 2001 From: hogelog Date: Tue, 15 Sep 2009 05:51:22 +0000 Subject: add stylish plugin git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@35385 d0d07461-0603-4401-acd4-de1884942a52 --- stylish.js | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 stylish.js (limited to 'stylish.js') diff --git a/stylish.js b/stylish.js new file mode 100644 index 0000000..255c7f3 --- /dev/null +++ b/stylish.js @@ -0,0 +1,164 @@ +// PLUGIN_INFO//{{{ +var PLUGIN_INFO = + + {NAME} + stylish + hogelog + 0.0.1 + 2.2pre + 2.2pre + http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/stylish.js + public domain + +; +//}}} + +(function(){ +let stylishService = stylishOverlay.service; +let control = plugins.stylish = { + COMMAND_DESCRIPTION: 0, + COMMAND_FUNCTION: 1, + COMMAND_COMPLETER: 2, + commands: { + edit: { + description: "Edit style", + fun: function(args){ + let [cmd, name] = args; + return control.editStyle(name); + }, + completer: function(args){ + let title = ["style"]; + let completions = [[s.name,""] for each(s in control.listStyle())]; + return [title, completions]; + }, + }, + new: { + description: "Write new style", + fun: function(args){ + let [cmd, rule] = args; + let code = "@namespace url(http://www.w3.org/1999/xhtml);\n\n"; + if(rule) { + code += "@-moz-document " + rule + " {\n}\n"; + } + return stylishOverlay.addCode(code); + //return control.newStyle(); + }, + completer: function(args){ + let title = ["rule"]; + let completions = []; + control.getDomains().forEach(function(x) completions.push(["domain("+x+")", "domain"])); + if(content&&content.document&&content.document.location){ + completions.push(["url("+content.document.location+")", "url"]); + } + control.getDirectories().forEach(function(x) completions.push(["url-prefix("+x+")", "url-prefix"])); + return [title, completions]; + }, + }, + dialog: { + description: "Open stylish dialog", + fun: function(){ + return stylishOverlay.openManage(); + }, + }, + find: { + description: "Find styles for this site", + fun: function(){ + return stylishOverlay.findStyle(); + }, + }, + turnall: { + description: "Turn all styles", + fun: function(args){ + let turn = gPrefService.getBoolPref("extensions.stylish.styleRegistrationEnabled"); + let on = false; + if (args[1]) { + if (args[1] == "on") + on = true; + else if (args[1] != "off") + liberator.echoerr("Not a stylish turncommand: " + args[1]); + } else { + on = !turn; + } + if (turn != on) + gPrefService.setBoolPref("extensions.stylish.styleRegistrationEnabled", on); + return on; + }, + completer: function(args) + [ + ["turnall", "description"], + [["on","Turn all styles on"], ["off","Turn all styles off"]] + ], + }, + }, + listStyle: function() + [s for each(s in stylishService.list(0, {}))], + getStyle: function(name) + { + let styles = [s for each(s in control.listStyle()) if(s.name==name)]; + if(styles.length == 0) return false + return styles[0]; + }, + editStyle: function(name) + { + if(!name) return control.newStyle(); + let style = control.getStyle(name); + if(!style) return false; + return stylishCommon.openEditForStyle(style); + }, + newStyle: function() { + var style = Components.classes["@userstyles.org/style;1"].createInstance(Components.interfaces.stylishStyle); + style.mode = style.CALCULATE_META | style.REGISTER_STYLE_ON_CHANGE; + style.init(null, null, null, null, "", false, null); + stylishCommon.openEdit(stylishCommon.getWindowName("stylishEdit"), {style: style}); + }, + getDomains: function() + { + let domains = []; + if(content&&content.document&&content.document.domain){ + stylishOverlay.getDomainList(content.document.domain, domains); + } + return domains; + }, + getDirectories: function() + { + let uri = buffer.URI; + let dirs = []; + while (uri.match(/^(.*?:\/)(.*?)(\/+[^\/]+)\/?$/)) + { + uri = RegExp.$1 + RegExp.$2 + "/"; + dirs.push(uri); + } + return dirs; + }, + execute: function(args) + { + let command = control.commands[args[0]]; + if(command&&command.fun) + return command.fun(args); + return false; + }, + complete: function(args) + { + if (args.completeArg == 0){ + let title = ["command", "description"]; + let completions = [[c, control.commands[c].description] for(c in control.commands)]; + return [title, completions]; + } + let command = control.commands[args[0]]; + if(command&&command.completer) + return command.completer(args); + return []; + } +}; +commands.addUserCommand(["stylish"], "stylish command", + function(args){ + return control.execute(args); + }, { + completer: function(context, args){ + [context.title, context.completions] = control.complete(args); + }, + literal: 1, + }); +})(); +// vim: fdm=marker sw=4 ts=4 et: -- cgit v1.2.3