summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKris Maglione <maglione.k@gmail.com>2011-08-16 21:17:52 -0400
committerKris Maglione <maglione.k@gmail.com>2011-08-16 21:17:52 -0400
commit1ad3fdf195813913a7fabe0e2da0402427bdd5fb (patch)
tree88d5344c2e59968f0ec8a4bc00f8d5df9cce3f87
parent01fd946df1a7bd89528ec4c7cdfff9fde38d00ab (diff)
downloadpentadactyl-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.js6
-rw-r--r--common/content/buffer.js5
-rw-r--r--common/content/events.js15
-rw-r--r--common/content/mappings.js9
-rw-r--r--common/modules/contexts.jsm11
-rw-r--r--common/modules/options.jsm24
-rw-r--r--pentadactyl/TODO2
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