From 6debfa4132ab149994b9b2ac7e1834d731be5531 Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Mon, 8 Aug 2011 12:19:01 -0400 Subject: [PATCH] Make 'doc' available to group initializer. --- common/content/mappings.js | 9 ++++++--- common/modules/base.jsm | 5 +++-- common/modules/contexts.jsm | 15 ++++++++++++--- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/common/content/mappings.js b/common/content/mappings.js index c58ba3eb..f7af1c6e 100644 --- a/common/content/mappings.js +++ b/common/content/mappings.js @@ -119,9 +119,12 @@ var Map = Class("Map", { .map(function ([i, prop]) [prop, this[i]], arguments) .toObject(); - args = update({ context: contexts.context }, - this.hive.argsExtra(args), - args); + let orig = args; + args = update({ + context: contexts.context, + doc: this.hive.group.lastDocument + }, args); + update(args, this.hive.argsExtra(args), orig); let self = this; function repeat() self.action(args) diff --git a/common/modules/base.jsm b/common/modules/base.jsm index d92c8d4b..ae8db7d1 100644 --- a/common/modules/base.jsm +++ b/common/modules/base.jsm @@ -611,12 +611,13 @@ function call(fn) { */ function memoize(obj, key, getter) { if (arguments.length == 1) { + let res = Object.create(obj); for each (let prop in Object.getOwnPropertyNames(obj)) { let get = __lookupGetter__.call(obj, prop); if (get) - memoize(obj, prop, get); + memoize(res, prop, get); } - return obj; + return res; } try { diff --git a/common/modules/contexts.jsm b/common/modules/contexts.jsm index f5d976ca..d7b8d7d9 100644 --- a/common/modules/contexts.jsm +++ b/common/modules/contexts.jsm @@ -25,6 +25,9 @@ var Group = Class("Group", { this.hives = []; }, + set lastDocument(val) { this._lastDocument = val && Cu.getWeakReference(val); }, + get lastDocument() this._lastDocument && this._lastDocument.get(), + modifiable: true, cleanup: function cleanup() { @@ -271,7 +274,7 @@ var Contexts = Module("contexts", { return frame; }, - groups: Class.memoize(function () this.matchingGroups(this.modules.buffer.uri)), + groups: Class.memoize(function () this.matchingGroups()), allGroups: Class.memoize(function () Object.create(this.groupsProto, { groups: { value: this.initializedGroups() } @@ -283,8 +286,14 @@ var Contexts = Module("contexts", { activeGroups: function (uri, doc) { if (!uri) - ({ uri, doc }) = this.modules.buffer; - return this.initializedGroups().filter(function (g) uri && g.filter(uri, doc)); + var { uri, doc } = this.modules.buffer; + + return this.initializedGroups().filter(function (g) { + let res = uri && g.filter(uri, doc); + if (doc) + g.lastDocument = res && doc; + return res; + }); }, flush: function flush() {