From 784fee757ab07c6485de2c75165203629e2bf386 Mon Sep 17 00:00:00 2001 From: piro Date: Thu, 1 Feb 2007 15:15:06 +0000 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=89=B2=E3=81=95=E3=82=8C=E3=81=9F?= =?UTF-8?q?=E3=83=96=E3=83=A9=E3=82=A6=E3=82=B6=E3=82=92=E3=81=9F=E3=81=9F?= =?UTF-8?q?=E3=82=80=E3=83=BB=E3=81=B2=E3=82=8D=E3=81=92=E3=82=8B=E5=87=A6?= =?UTF-8?q?=E7=90=86=E3=82=92=E6=9B=B8=E3=81=8D=E7=9B=B4=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://www.cozmixng.org/repos/piro/splitbrowser/trunk@117 599a83e7-65a4-db11-8015-0010dcdd6dc2 --- content/splitbrowser/splitbrowser.css | 11 +- content/splitbrowser/splitbrowser.js | 156 +++++---- content/splitbrowser/splitbrowser.xml | 477 ++++++++++++++++++++------ 3 files changed, 478 insertions(+), 166 deletions(-) diff --git a/content/splitbrowser/splitbrowser.css b/content/splitbrowser/splitbrowser.css index 410e025..4446e70 100644 --- a/content/splitbrowser/splitbrowser.css +++ b/content/splitbrowser/splitbrowser.css @@ -10,7 +10,7 @@ } #appcontent > vbox > hbox > .primary-browser-wrapper { - -moz-binding: url("./splitbrowser.xml#subbrowser-base") !important; + -moz-binding: url("./splitbrowser.xml#subbrowser-primary") !important; } subbrowser-container { @@ -21,6 +21,15 @@ subbrowser { -moz-binding: url("./splitbrowser.xml#subbrowser") !important; } +vbox.vertical-container > hbox.horizontal-container { + -moz-binding: url("./splitbrowser.xml#horizontal-container") !important; +} + +vbox.vertical-container { + -moz-binding: url("./splitbrowser.xml#vertical-container") !important; +} + + /* tabbed browsing mode / simple mode */ diff --git a/content/splitbrowser/splitbrowser.js b/content/splitbrowser/splitbrowser.js index b513bdb..fddc62d 100644 --- a/content/splitbrowser/splitbrowser.js +++ b/content/splitbrowser/splitbrowser.js @@ -46,6 +46,14 @@ var SplitBrowser = { return document.getElementById('splitbrowser-expandAll-broadcaster'); }, updateBroadcasters : function() + { + if (this.updateBroadcastersTimer) { + window.clearTimeout(this.updateBroadcastersTimer); + this.updateBroadcastersTimer = null; + } + this.updateBroadcastersTimer = window.setTimeout('SplitBrowser.updateBroadcastersCallback();', 1); + }, + updateBroadcastersCallback : function() { if (!this.browsers.length) { this.removeAllBroadcaster.setAttribute('disabled', true); @@ -66,7 +74,6 @@ var SplitBrowser = { if (collapsed && expanded) break; } - if (collapsed) this.expandAllBroadcaster.removeAttribute('disabled'); else @@ -77,6 +84,8 @@ var SplitBrowser = { else this.collapseAllBroadcaster.setAttribute('disabled', true); } + + this.updateBroadcastersTimer = null; }, POSITION_LEFT : 1, @@ -465,15 +474,19 @@ var SplitBrowser = { if (cont.previousSibling && cont.previousSibling.localName == 'splitter') { box = cont.previousSibling.previousSibling; - box.height = box.boxObject.height + cont.boxObject.height; - cont.previousSibling.previousSibling.removeAttribute('collapsed'); + if (box) { + box.height = box.boxObject.height + cont.boxObject.height; + box.removeAttribute('collapsed'); + } container.vContainer.removeChild(cont.previousSibling); } else if (cont.nextSibling && cont.nextSibling.localName == 'splitter') { box = cont.nextSibling.nextSibling; - box.height = box.boxObject.height + cont.boxObject.height; - cont.nextSibling.nextSibling.removeAttribute('collapsed'); + if (box) { + box.height = box.boxObject.height + cont.boxObject.height; + box.removeAttribute('collapsed'); + } container.vContainer.removeChild(cont.nextSibling); } container.vContainer.removeChild(cont); @@ -504,14 +517,18 @@ var SplitBrowser = { var box; if (container.previousSibling && container.previousSibling.localName == 'splitter') { box = container.previousSibling.previousSibling; - box.width = box.boxObject.width + container.boxObject.width; - container.previousSibling.previousSibling.removeAttribute('collapsed'); + if (box) { + box.width = box.boxObject.width + container.boxObject.width; + box.removeAttribute('collapsed'); + } container.parentNode.removeChild(container.previousSibling); } else if (container.nextSibling && container.nextSibling.localName == 'splitter') { box = container.nextSibling.nextSibling; - box.width = box.boxObject.width + container.boxObject.width; - container.nextSibling.nextSibling.removeAttribute('collapsed'); + if (box) { + box.width = box.boxObject.width + container.boxObject.width; + box.removeAttribute('collapsed'); + } container.parentNode.removeChild(container.nextSibling); } container.parentNode.removeChild(container); @@ -553,16 +570,16 @@ var SplitBrowser = { for (var i = 0, maxi = this.browsers.length; i < maxi; i++) { if (!this.browsers[i].contentCollapsed) - this.browsers[i].toggleCollapsed(this.browsers[i].FORCE_COLLAPSE); + this.browsers[i].collapse(); } }, expandAllSubBrowsers : function() { - for (var i = this.browsers.length -1; i > -1; i--) + for (var i = 0, maxi = this.browsers.length; i < maxi; i++) { if (this.browsers[i].contentCollapsed) - this.browsers[i].toggleCollapsed(this.browsers[i].FORCE_EXPAND); + this.browsers[i].expand(true); } }, @@ -576,9 +593,8 @@ var SplitBrowser = { getContainerState : function(aContainer) { - var state = { - children : [] - }; + var state = {}; + state.children = []; var hContainer = aContainer.hContainer; if (hContainer) { @@ -606,7 +622,9 @@ var SplitBrowser = { }; } else { - state.content = this.getContainerState(originalContent); + state.children.push(this.getContainerState(originalContent)); + state.children[state.children.length-1].position = this.POSITION_RIGHT; + state.children[state.children.length-1].width = originalContent.boxObject.width; } var node = originalContent.previousSibling; @@ -658,7 +676,9 @@ var SplitBrowser = { state.content.lastHeight = aContainer.lastheight; } else if (!state.content) { - state.content = this.getContainerState(originalContent); + state.children.push(this.getContainerState(originalContent)); + state.children[state.children.length-1].position = this.POSITION_BOTTOM; + state.children[state.children.length-1].height = originalContent.boxObject.height; } var node = originalContent.previousSibling; @@ -819,6 +839,7 @@ var SplitBrowser = { eval('state = '+state); } catch(e) { +alert(e+'\n\n'+state); return; } @@ -827,41 +848,52 @@ var SplitBrowser = { buildContent : function(aState, aContainer) { - switch (aState.content.type) - { - case 'root': - aContainer.contentWrapper.width = aState.content.width; - aContainer.contentWrapper.height = aState.content.height; - break; - - default: - case 'subbrowser': - if (aState.content.history) { - aState.content.histories = [aState.content.history]; - } + var content; + if (aState.content && aState.content.type) { + switch (aState.content.type) + { + case 'root': + aContainer.contentWrapper.width = aState.content.width; + aContainer.contentWrapper.height = aState.content.height; + content = aContainer.contentWrapper; + break; - var b = this.createSubBrowser( - aState.content.histories && aState.content.histories.length ? null : aState.content.uri - ); - aContainer.hContainer.appendChild(b); - aContainer.hContainer.width = aState.content.width; - aContainer.hContainer.height = aState.content.height; + case 'subbrowser': + if (aState.content.history) { + aState.content.histories = [aState.content.history]; + } - this.deserializeBrowserState(b.browser, aState.content); + var b = this.createSubBrowser( + aState.content.histories && aState.content.histories.length ? null : aState.content.uri + ); + aContainer.hContainer.appendChild(b); + aContainer.hContainer.width = aState.content.width; + aContainer.hContainer.height = aState.content.height; + + this.deserializeBrowserState(b.browser, aState.content); + + aContainer.lastwidth = aState.content.lastWidth; + aContainer.lastheight = aState.content.lastHeight; + /* + if (aState.content.collapsed) { + if (aState.position & this.POSITION_HORIZONTAL) + aContainer.setAttribute('maxwidth', 0); + else + aContainer.setAttribute('maxheight', 0); + } + */ - aContainer.lastwidth = aState.content.lastWidth; - aContainer.lastheight = aState.content.lastHeight; -/* - if (aState.content.collapsed) { - aContainer.contentCollapsed = true; - if (aState.position & this.POSITION_HORIZONTAL) - aContainer.setAttribute('maxwidth', 0); - else - aContainer.setAttribute('maxheight', 0); - } -*/ + content = b; + break; - break; + default: + break; + } + } + if (!content) { + content = document.createElement('spacer'); + content.setAttribute('flex', 1); + aContainer.hContainer.appendChild(content); } var container; @@ -872,7 +904,7 @@ var SplitBrowser = { container = this.addContainerTo( aContainer, aState.children[i].position, - null, + content, aState.children[i].width, aState.children[i].height ); @@ -881,8 +913,13 @@ var SplitBrowser = { this.buildContent(aState.children[i], container); } - if (!aContainer.hContainer.hasChildNodes()) { - aContainer.vContainer.removeChild(aContainer.hContainer); + if (content && content.localName == 'spacer') { + if (content.nextSibling) + aContainer.hContainer.removeChild(content.nextSibling); + else if (content.previousSibling) + aContainer.hContainer.removeChild(content.previousSibling); + aContainer.hContainer.removeChild(content); + this.cleanUpContainer(aContainer); } }, @@ -1239,10 +1276,10 @@ catch(e) { updateSplitterSideBoxes : function(aEvent, aProp) { var splitter = aEvent.originalTarget || aEvent.target; - this.updateSplitterSideBox(splitter.previousSibling, aEvent, aProp); - this.updateSplitterSideBox(splitter.nextSibling, aEvent, aProp); + this.updateSplitterSideBox(splitter, splitter.previousSibling, aEvent, aProp); + this.updateSplitterSideBox(splitter, splitter.nextSibling, aEvent, aProp); }, - updateSplitterSideBox : function(aNode, aEvent, aProp) + updateSplitterSideBox : function(aSplitter, aNode, aEvent, aProp) { if (aEvent.type == 'mousedown') { aNode.splitterDragging = true; @@ -1252,11 +1289,11 @@ catch(e) { else { aNode['tempLast'+aProp] = -1; } - aNode.contentCollapsed = false; aNode.removeAttribute('max'+aProp); } else { - if (aNode.contentCollapsed && + var cCProp = aProp == 'width' ? 'hContentCompletelyCollapsed' : 'vContentCompletelyCollapsed' ; + if (aNode[cCProp] && aNode['tempLast'+aProp] !== void(0) && aNode['tempLast'+aProp] > -1 && ( @@ -1265,7 +1302,6 @@ catch(e) { ) ) { aNode['last'+aProp] = aNode['tempLast'+aProp]; - aNode.contentCollapsed = true; aNode.setAttribute('max'+aProp, 0); } aNode['tempLast'+aProp] = -1; @@ -1273,12 +1309,16 @@ catch(e) { aNode.splitterDragging = false; }, 0); } + + for (var i = 0, maxi = aNode.childNodes.length; i < maxi; i = i+2) + { + this.updateSplitterSideBox(aSplitter, aNode.childNodes[i], aEvent, aProp); + } }, updateSplitterContextMenu : function() { var c = this.getSplitterTarget(document.popupNode); - alert(c); if (!c) return; var popup = document.getElementById('subbrowser-splitter-contextmenu'); diff --git a/content/splitbrowser/splitbrowser.xml b/content/splitbrowser/splitbrowser.xml index b2f1bb1..c0f8ee8 100644 --- a/content/splitbrowser/splitbrowser.xml +++ b/content/splitbrowser/splitbrowser.xml @@ -25,7 +25,7 @@ ]]> - + + + + + + -1 + -1 @@ -81,10 +89,15 @@ ]]> - false + + - -1 - -1 + + @@ -97,6 +110,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - 1 - 2 - - + + + + + + + + + + + + + + + + + + + + + @@ -444,6 +693,19 @@ + + + + + + + + + @@ -459,10 +721,10 @@ oncommand="this.parentNode.parentNode.close();"/> + oncommand="this.parentNode.parentNode.collapse();"/> + oncommand="this.parentNode.parentNode.expand();"/> @@ -634,13 +896,13 @@ - - - + + + + @@ -1528,50 +1792,49 @@