diff options
author | Kris Maglione <maglione.k@gmail.com> | 2011-08-16 21:17:52 -0400 |
---|---|---|
committer | Kris Maglione <maglione.k@gmail.com> | 2011-08-16 21:17:52 -0400 |
commit | 1ad3fdf195813913a7fabe0e2da0402427bdd5fb (patch) | |
tree | 88d5344c2e59968f0ec8a4bc00f8d5df9cce3f87 | |
parent | 01fd946df1a7bd89528ec4c7cdfff9fde38d00ab (diff) | |
download | pentadactyl-1ad3fdf195813913a7fabe0e2da0402427bdd5fb.tar.gz |
Import part of top patch in queue: Add no-op option hive for plugin API reasons, cleanup some related code.
-rw-r--r-- | common/content/autocommands.js | 6 | ||||
-rw-r--r-- | common/content/buffer.js | 5 | ||||
-rw-r--r-- | common/content/events.js | 15 | ||||
-rw-r--r-- | common/content/mappings.js | 9 | ||||
-rw-r--r-- | common/modules/contexts.jsm | 11 | ||||
-rw-r--r-- | common/modules/options.jsm | 24 | ||||
-rw-r--r-- | pentadactyl/TODO | 2 |
7 files changed, 52 insertions, 20 deletions
diff --git a/common/content/autocommands.js b/common/content/autocommands.js index 4c50fb21..89029a39 100644 --- a/common/content/autocommands.js +++ b/common/content/autocommands.js @@ -154,13 +154,9 @@ var AutoCommands = Module("autocommands", { else var { uri, doc } = buffer; - let baseArgs = update({ doc: doc }, arguments[1]); - event = event.toLowerCase(); for (let hive in values(this.matchingHives(uri, doc))) { - let args = update({}, - hive.argsExtra(baseArgs), - arguments[1]); + let args = hive.makeArgs(doc, null, arguments[1]); for (let autoCmd in values(hive._store)) if (autoCmd.eventName === event && autoCmd.filter(uri, doc)) { diff --git a/common/content/buffer.js b/common/content/buffer.js index 8afff7e5..f8aac7b4 100644 --- a/common/content/buffer.js +++ b/common/content/buffer.js @@ -463,7 +463,10 @@ var Buffer = Module("buffer", { else flags = services.focus.FLAG_SHOWRING; - if (!elem.dactylHadFocus && elem.value && elem.selectionStart == elem.selectionEnd) + if (!elem.dactylHadFocus && elem.value && + elem instanceof HTMLInputElement && + elem.selectionStart != null && + elem.selectionStart == elem.selectionEnd) elem.selectionStart = elem.selectionEnd = elem.value.length; dactyl.focus(elem, flags); diff --git a/common/content/events.js b/common/content/events.js index 6981f596..42248e18 100644 --- a/common/content/events.js +++ b/common/content/events.js @@ -1684,18 +1684,23 @@ var Events = Module("events", { get pass() (this.flush(), this.pass), - keepQuotes: true, - - setter: function (values) { - values.forEach(function (filter) { + parse: function parse() { + let value = parse.superapply(this, arguments); + value.forEach(function (filter) { let vals = Option.splitList(filter.result); filter.keys = events.fromString(vals[0]).map(events.closure.toString); filter.commandKeys = vals.slice(1).map(events.closure.canonicalKeys); filter.inputKeys = filter.commandKeys.filter(bind("test", /^<[ACM]-/)); }); + return value; + }, + + keepQuotes: true, + + setter: function (value) { this.flush(); - return values; + return value; } }); diff --git a/common/content/mappings.js b/common/content/mappings.js index 3abe11e6..7c5214e9 100644 --- a/common/content/mappings.js +++ b/common/content/mappings.js @@ -119,12 +119,9 @@ var Map = Class("Map", { .map(function ([i, prop]) [prop, this[i]], arguments) .toObject(); - let orig = args; - args = update({ - context: contexts.context, - doc: this.hive.group.lastDocument - }, args); - update(args, this.hive.argsExtra(args), orig); + args = this.hive.makeArgs(this.hive.group.lastDocument, + contexts.context, + args); let self = this; function repeat() self.action(args) diff --git a/common/modules/contexts.jsm b/common/modules/contexts.jsm index 319ccbec..b6c68ecc 100644 --- a/common/modules/contexts.jsm +++ b/common/modules/contexts.jsm @@ -45,6 +45,11 @@ var Group = Class("Group", { argsExtra: function argsExtra() ({}), + makeArgs: function makeArgs(doc, context, args) { + let res = update({ doc: doc, context: context }, args); + return update(this.argsExtra(res), args); + }, + get toStringParams() [this.name], get builtin() this.modules.contexts.builtinGroups.indexOf(this) >= 0, @@ -288,7 +293,10 @@ var Contexts = Module("contexts", { groups: { value: this.activeGroups(uri) } }), - activeGroups: function (uri, doc) { + activeGroups: function (uri) { + if (uri instanceof Ci.nsIDOMDocument) + var [doc, uri] = [uri, uri.documentURIObject || util.newURI(uri.documentURI)]; + if (!uri) var { uri, doc } = this.modules.buffer; @@ -463,6 +471,7 @@ var Contexts = Module("contexts", { get modifiable() this.group.modifiable, get argsExtra() this.group.argsExtra, + get makeArgs() this.group.makeArgs, get builtin() this.group.builtin, get name() this.group.name, diff --git a/common/modules/options.jsm b/common/modules/options.jsm index 5b0a398b..828fd0ce 100644 --- a/common/modules/options.jsm +++ b/common/modules/options.jsm @@ -11,7 +11,7 @@ try { Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("options", { exports: ["Option", "Options", "ValueError", "options"], - require: ["messages", "storage"], + require: ["contexts", "messages", "storage"], use: ["commands", "completion", "config", "prefs", "services", "styles", "template", "util"] }, this); @@ -757,6 +757,18 @@ var Option = Class("Option", { EXPORTED_SYMBOLS.push(class_.className); }, this); +var OptionHive = Class("OptionHive", Contexts.Hive, { + init: function init(group) { + init.supercall(this, group); + this.values = {}; + this.has = Set.has(this.values); + }, + + add: function add(names, description, type, defaultValue, extraInfo) { + return this.modules.options.add(names, description, type, defaultValue, extraInfo); + } +}); + /** * @instance options */ @@ -764,6 +776,12 @@ var Options = Module("options", { Local: function Local(dactyl, modules, window) let ({ contexts } = modules) ({ init: function init() { const self = this; + + update(this, { + hives: contexts.Hives("options", Class("OptionHive", OptionHive, { modules: modules })), + user: contexts.hives.options.user + }); + this.needInit = []; this._options = []; this._optionMap = {}; @@ -853,6 +871,10 @@ var Options = Module("options", { */ add: function add(names, description, type, defaultValue, extraInfo) { const self = this; + + if (!util.isDactyl(Components.stack.caller)) + deprecated.warn(add, "options.add", "group.options.add"); + util.assert(type in Option.types, _("option.noSuchType", type), true); diff --git a/pentadactyl/TODO b/pentadactyl/TODO index 1e7a3be5..67d4b748 100644 --- a/pentadactyl/TODO +++ b/pentadactyl/TODO @@ -17,6 +17,7 @@ FEATURES: locations in the history list). 9 clean up error message codes and document 9 option groups, including buffer-local and site-specific +9 add [count] support to :b* and :tab* commands where missing 8 wherever possible: get rid of dialogs and ask console-like dialog questions or write error prompts directly on the webpage or with :echo() 8 add search capability to MOW @@ -32,7 +33,6 @@ FEATURES: 7 make an option to disable session saving by default when you close Firefox 7 :grep support (needs location list) 6 :mksession -6 add [count] support to :b* and :tab* commands where missing 6 check/correct spellings in insert mode with some mappings 6 add more autocommands (TabClose, TabOpen, TabChanged etc) 6 Use ctrl-w+j/k/w to switch between sidebar, content, preview window |