ライブラリ更新

git-svn-id: http://www.cozmixng.org/repos/piro/treestyletab/trunk@3972 599a83e7-65a4-db11-8015-0010dcdd6dc2
This commit is contained in:
piro 2009-03-31 07:44:56 +00:00
parent 20964287fd
commit df8aa6f26a

View File

@ -18,45 +18,6 @@
var Ci = Components.interfaces; var Ci = Components.interfaces;
var getFrameOwnerFromFrame = function(aFrame) {
var parentItem = aFrame
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShell)
.QueryInterface(Ci.nsIDocShellTreeNode)
.QueryInterface(Ci.nsIDocShellTreeItem)
.parent;
var isChrome = parentItem.itemType == parentItem.typeChrome;
var parentDocument = parentItem
.QueryInterface(Ci.nsIWebNavigation)
.document;
var nodes = parentDocument.evaluate(
'/descendant::*[contains(" frame FRAME iframe IFRAME browser tabbrowser ", concat(" ", local-name(), " "))]',
parentDocument,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
for (let i = 0, maxi = nodes.snapshotLength; i < maxi; i++)
{
let owner = nodes.snapshotItem(i);
if (isChrome && owner.wrappedJSObject) owner = owner.wrappedJSObject;
if (owner.localName == 'tabbrowser') {
let tabs = owner.mTabContainer.childNodes;
for (let i = 0, maxi = tabs.length; i < maxi; i++)
{
let browser = tabs[i].linkedBrowser;
if (browser.contentWindow == aFrame)
return browser;
}
}
else if (owner.contentWindow == aFrame) {
return owner;
}
}
return null;
};
window['piro.sakura.ne.jp'].boxObject = { window['piro.sakura.ne.jp'].boxObject = {
revision : currentRevision, revision : currentRevision,
@ -65,6 +26,11 @@
if ('getBoxObjectFor' in aNode.ownerDocument) if ('getBoxObjectFor' in aNode.ownerDocument)
return aNode.ownerDocument.getBoxObjectFor(aNode); return aNode.ownerDocument.getBoxObjectFor(aNode);
return this.getBoxObjectFromClientRectFor(aNode);
},
getBoxObjectFromClientRectFor : function(aNode)
{
var box = { var box = {
x : 0, x : 0,
y : 0, y : 0,
@ -87,7 +53,7 @@
while (true) while (true)
{ {
frame = owner.ownerDocument.defaultView; frame = owner.ownerDocument.defaultView;
owner = getFrameOwnerFromFrame(frame); owner = this._getFrameOwnerFromFrame(frame);
if (!owner) { if (!owner) {
box.screenX += frame.screenX; box.screenX += frame.screenX;
box.screenY += frame.screenY; box.screenY += frame.screenY;
@ -107,6 +73,46 @@
catch(e) { catch(e) {
} }
return box; return box;
},
_getFrameOwnerFromFrame : function(aFrame)
{
var parentItem = aFrame
.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShell)
.QueryInterface(Ci.nsIDocShellTreeNode)
.QueryInterface(Ci.nsIDocShellTreeItem)
.parent;
var isChrome = parentItem.itemType == parentItem.typeChrome;
var parentDocument = parentItem
.QueryInterface(Ci.nsIWebNavigation)
.document;
var nodes = parentDocument.evaluate(
'/descendant::*[contains(" frame FRAME iframe IFRAME browser tabbrowser ", concat(" ", local-name(), " "))]',
parentDocument,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
for (let i = 0, maxi = nodes.snapshotLength; i < maxi; i++)
{
let owner = nodes.snapshotItem(i);
if (isChrome && owner.wrappedJSObject) owner = owner.wrappedJSObject;
if (owner.localName == 'tabbrowser') {
let tabs = owner.mTabContainer.childNodes;
for (let i = 0, maxi = tabs.length; i < maxi; i++)
{
let browser = tabs[i].linkedBrowser;
if (browser.contentWindow == aFrame)
return browser;
}
}
else if (owner.contentWindow == aFrame) {
return owner;
}
}
return null;
} }
}; };