diff --git a/common/content/tabs.js b/common/content/tabs.js index 500d0eea..fa31e415 100644 --- a/common/content/tabs.js +++ b/common/content/tabs.js @@ -27,7 +27,8 @@ var Tabs = Module("tabs", { config.tabStrip.collapsed = true; this.tabStyle = styles.system.add("tab-strip-hiding", config.styleableChrome, - (config.tabStrip.id ? "#" + config.tabStrip.id : ".tabbrowser-strip") + + (config.tabStrip.id ? "#" + config.tabStrip.id + : ".tabbrowser-strip") + "{ visibility: collapse; }", false, true); diff --git a/common/modules/base.jsm b/common/modules/base.jsm index a45a4070..b405b66c 100644 --- a/common/modules/base.jsm +++ b/common/modules/base.jsm @@ -1426,7 +1426,7 @@ function octal(decimal) parseInt(decimal, 8); * @param {nsIJSIID} iface The interface to which to query all elements. * @returns {Generator} */ -let _iterator = "@@iterator" in [] ? "@@iterator" : "iterator"; +iter.iteratorProp = "@@iterator" in [] ? "@@iterator" : "iterator"; function iter(obj, iface) { if (arguments.length == 2 && iface instanceof Ci.nsIJSIID) return iter(obj).map(item => item.QueryInterface(iface)); @@ -1444,7 +1444,7 @@ function iter(obj, iface) { ; else if (isinstance(obj, [Ci.nsIDOMHTMLCollection, Ci.nsIDOMNodeList])) res = array.iterItems(obj); - else if (_iterator in obj && callable(obj[_iterator]) && !("__iterator__" in obj)) + else if (iter.iteratorProp in obj && callable(obj[iter.iteratorProp]) && !("__iterator__" in obj)) res = (x for (x of obj)); else if (ctypes && ctypes.CData && obj instanceof ctypes.CData) { while (obj.constructor instanceof ctypes.PointerType) diff --git a/common/modules/util.jsm b/common/modules/util.jsm index cad4b5fc..f7f41529 100644 --- a/common/modules/util.jsm +++ b/common/modules/util.jsm @@ -1033,12 +1033,18 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]), // window.content often does not want to be queried with "var i in object" try { let hasValue = !("__iterator__" in object || isinstance(object, ["Generator", "Iterator"])); + if (object.dactyl && object.modules && object.modules.modules == object.modules) { object = Iterator(object); hasValue = false; } + let keyIter = object; - if ("__iterator__" in object && !callable(object.__iterator__)) + if (iter.iteratorProp in object) { + keyIter = (k for (k of object)); + hasValue = false; + } + else if ("__iterator__" in object && !callable(object.__iterator__)) keyIter = keys(object); for (let i in keyIter) { @@ -1047,6 +1053,7 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]), value = object[i]; } catch (e) {} + if (!hasValue) { if (isArray(i) && i.length == 2) [i, value] = i;