ルート要素の属性値を変更する時に他の属性が壊れてしまうバグに対処
git-svn-id: http://www.cozmixng.org/repos/piro/treestyletab/trunk@7185 599a83e7-65a4-db11-8015-0010dcdd6dc2
This commit is contained in:
parent
441222fc2e
commit
6d4f956d6e
@ -12,7 +12,7 @@
|
|||||||
http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/stopRendering.js
|
http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/stopRendering.js
|
||||||
*/
|
*/
|
||||||
(function() {
|
(function() {
|
||||||
const currentRevision = 7;
|
const currentRevision = 8;
|
||||||
|
|
||||||
if (!('piro.sakura.ne.jp' in window)) window['piro.sakura.ne.jp'] = {};
|
if (!('piro.sakura.ne.jp' in window)) window['piro.sakura.ne.jp'] = {};
|
||||||
|
|
||||||
@ -146,7 +146,7 @@
|
|||||||
init : function()
|
init : function()
|
||||||
{
|
{
|
||||||
if (this.useCanvas) {
|
if (this.useCanvas) {
|
||||||
this.initCanvas();
|
window.addEventListener('DOMContentLoaded', this, true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this._popups = [];
|
this._popups = [];
|
||||||
@ -160,6 +160,11 @@
|
|||||||
destroy : function()
|
destroy : function()
|
||||||
{
|
{
|
||||||
if (this.useCanvas) {
|
if (this.useCanvas) {
|
||||||
|
try {
|
||||||
|
window.removeEventListener('DOMContentLoaded', this, true);
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
}
|
||||||
this.destroyCanvas();
|
this.destroyCanvas();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -179,7 +184,7 @@
|
|||||||
.getService(Ci.nsIXULAppInfo);
|
.getService(Ci.nsIXULAppInfo);
|
||||||
const comparator = Cc['@mozilla.org/xpcom/version-comparator;1']
|
const comparator = Cc['@mozilla.org/xpcom/version-comparator;1']
|
||||||
.getService(Ci.nsIVersionComparator);
|
.getService(Ci.nsIVersionComparator);
|
||||||
return comparator.compare(XULAppInfo.version, '3.6.9999') > 0;
|
return comparator.compare(XULAppInfo.version, '4.0b1') > 0;
|
||||||
})(),
|
})(),
|
||||||
|
|
||||||
DRAW_WINDOW_FLAGS : Ci.nsIDOMCanvasRenderingContext2D.DRAWWINDOW_DRAW_VIEW |
|
DRAW_WINDOW_FLAGS : Ci.nsIDOMCanvasRenderingContext2D.DRAWWINDOW_DRAW_VIEW |
|
||||||
@ -314,12 +319,26 @@
|
|||||||
|
|
||||||
destroyCanvas : function()
|
destroyCanvas : function()
|
||||||
{
|
{
|
||||||
|
if (!this.canvas)
|
||||||
|
return;
|
||||||
|
|
||||||
document.documentElement.removeChild(this.box);
|
document.documentElement.removeChild(this.box);
|
||||||
document.removeChild(this.stylePI);
|
document.removeChild(this.stylePI);
|
||||||
this.box = null;
|
this.box = null;
|
||||||
this.canvas = null;
|
this.canvas = null;
|
||||||
this.style = null;
|
this.style = null;
|
||||||
this.stylePI = null;
|
this.stylePI = null;
|
||||||
|
},
|
||||||
|
|
||||||
|
handleEvent : function(aEvent)
|
||||||
|
{
|
||||||
|
switch (aEvent.type)
|
||||||
|
{
|
||||||
|
case 'DOMContentLoaded':
|
||||||
|
window.removeEventListener('DOMContentLoaded', this, true);
|
||||||
|
this.initCanvas();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -127,14 +127,18 @@ var TreeStyleTabService = {
|
|||||||
maxTabbarWidth : function TSTService_maxTabbarWidth(aWidth, aTabBrowser)
|
maxTabbarWidth : function TSTService_maxTabbarWidth(aWidth, aTabBrowser)
|
||||||
{
|
{
|
||||||
aTabBrowser = aTabBrowser || this.browser;
|
aTabBrowser = aTabBrowser || this.browser;
|
||||||
var max = Math.max(window.outerWidth, parseInt(document.documentElement.getAttribute('width') || 0));
|
var windowWidth = window.outerWidth;
|
||||||
|
var rootWidth = parseInt(document.documentElement.getAttribute('width') || 0);
|
||||||
|
var max = Math.max(windowWidth, rootWidth);
|
||||||
return Math.max(0, Math.min(aWidth, max * this.MAX_TABBAR_SIZE_RATIO));
|
return Math.max(0, Math.min(aWidth, max * this.MAX_TABBAR_SIZE_RATIO));
|
||||||
},
|
},
|
||||||
|
|
||||||
maxTabbarHeight : function TSTService_maxTabbarHeight(aHeight, aTabBrowser)
|
maxTabbarHeight : function TSTService_maxTabbarHeight(aHeight, aTabBrowser)
|
||||||
{
|
{
|
||||||
aTabBrowser = aTabBrowser || this.browser;
|
aTabBrowser = aTabBrowser || this.browser;
|
||||||
var max = Math.max(window.outerHeight, parseInt(document.documentElement.getAttribute('height') || 0));
|
var windowHeight = window.outerHeight;
|
||||||
|
var rootHeight = parseInt(document.documentElement.getAttribute('height') || 0);
|
||||||
|
var max = Math.max(windowHeight, rootHeight);
|
||||||
return Math.max(0, Math.min(aHeight, max * this.MAX_TABBAR_SIZE_RATIO));
|
return Math.max(0, Math.min(aHeight, max * this.MAX_TABBAR_SIZE_RATIO));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -765,9 +765,10 @@ var TreeStyleTabUtils = {
|
|||||||
if (!strip) return;
|
if (!strip) return;
|
||||||
if (aValue) {
|
if (aValue) {
|
||||||
strip.setAttribute(aAttr, aValue);
|
strip.setAttribute(aAttr, aValue);
|
||||||
strip.ownerDocument.defaultView.setTimeout(function() {
|
strip.ownerDocument.defaultView.setTimeout(function(aSelf) {
|
||||||
strip.ownerDocument.documentElement.setAttribute(aAttr, aValue);
|
// setting an attribute to a root element sometimes breaks others...
|
||||||
}, 10);
|
aSelf.safeSetAttribute(strip.ownerDocument.documentElement, aAttr, aValue);
|
||||||
|
}, 10, this);
|
||||||
if (this._tabStripPlaceHolder)
|
if (this._tabStripPlaceHolder)
|
||||||
this._tabStripPlaceHolder.setAttribute(aAttr, aValue);
|
this._tabStripPlaceHolder.setAttribute(aAttr, aValue);
|
||||||
if (strip.tabsToolbarInnerBox)
|
if (strip.tabsToolbarInnerBox)
|
||||||
@ -775,9 +776,9 @@ var TreeStyleTabUtils = {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
strip.removeAttribute(aAttr);
|
strip.removeAttribute(aAttr);
|
||||||
strip.ownerDocument.defaultView.setTimeout(function() {
|
strip.ownerDocument.defaultView.setTimeout(function(aSelf) {
|
||||||
strip.ownerDocument.documentElement.removeAttribute(aAttr);
|
aSelf.safeSetAttribute(strip.ownerDocument.documentElement, aAttr);
|
||||||
}, 10);
|
}, 10, this);
|
||||||
if (this._tabStripPlaceHolder)
|
if (this._tabStripPlaceHolder)
|
||||||
this._tabStripPlaceHolder.removeAttribute(aAttr);
|
this._tabStripPlaceHolder.removeAttribute(aAttr);
|
||||||
if (strip.tabsToolbarInnerBox)
|
if (strip.tabsToolbarInnerBox)
|
||||||
@ -790,6 +791,36 @@ var TreeStyleTabUtils = {
|
|||||||
this.setTabStripAttribute(aAttr, null);
|
this.setTabStripAttribute(aAttr, null);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
safeSetAttribute : function TSTUtils_safeSetAttribute(aElem, aAttr, aValue)
|
||||||
|
{
|
||||||
|
var old = {};
|
||||||
|
Array.slice(aElem.attributes).forEach(function(aAttr) {
|
||||||
|
old[aAttr.name] = aAttr.value;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (aValue)
|
||||||
|
aElem.setAttribute(aAttr, aValue);
|
||||||
|
else
|
||||||
|
aElem.removeAttribute(aAttr);
|
||||||
|
|
||||||
|
for (var i in old)
|
||||||
|
{
|
||||||
|
if (old[i] != aElem.getAttribute(i)) {
|
||||||
|
dump('TSTUtils_safeSetAttribute restores '+aElem+'.'+i+
|
||||||
|
', from '+aElem.getAttribute(i)+' to '+old[i]+'\n');
|
||||||
|
aElem.setAttribute(i, old[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// verification
|
||||||
|
for (var i in old)
|
||||||
|
{
|
||||||
|
if (old[i] != aElem.getAttribute(i)) {
|
||||||
|
dump('TSTUtils_safeSetAttribute failed to restore '+aElem+'.'+i+
|
||||||
|
', from '+aElem.getAttribute(i)+' to '+old[i]+'\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
getTabFromChild : function TSTUtils_getTabFromChild(aTab)
|
getTabFromChild : function TSTUtils_getTabFromChild(aTab)
|
||||||
{
|
{
|
||||||
return this.evaluateXPath(
|
return this.evaluateXPath(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user