Clean-up and parameterize more.

This commit is contained in:
slamm%netscape.com 2000-01-06 22:27:22 +00:00
Родитель e397a910fc
Коммит a9a2856f45
4 изменённых файлов: 69 добавлений и 97 удалений

Просмотреть файл

@ -36,20 +36,37 @@ function debug(msg)
function Init() function Init()
{ {
sidebar.datasource_uri = window.arguments[0]; var all_panels_datasources = window.arguments[0];
sidebar.resource = window.arguments[1]; var all_panels_resource = window.arguments[1];
sidebar.datasource_uri = window.arguments[2];
sidebar.resource = window.arguments[3];
debug("all panels datasources = " + all_panels_datasources);
debug("all panels resource = " + all_panels_resource);
debug("sidebar.datasource_uri = " + sidebar.datasource_uri); debug("sidebar.datasource_uri = " + sidebar.datasource_uri);
debug("sidebar.resource = " + sidebar.resource); debug("sidebar.resource = " + sidebar.resource);
// This will load the datasource, if it isn't already. var all_panels = document.getElementById('other-panels');
sidebar.datasource = RDF.GetDataSource(sidebar.datasource_uri); var current_panels = document.getElementById('current-panels');
// Add the necessary datasources to the select list all_panels_datasources = all_panels_datasources.split(/\s+/);
var select_list = document.getElementById('selected-panels'); for (var ii = 0; ii < all_panels_datasources.length; ii++) {
select_list.database.AddDataSource(sidebar.datasource); debug("Adding "+all_panels_datasources[ii]);
// This will load the datasource, if it isn't already.
var datasource = RDF.GetDataSource(all_panels_datasources[ii]);
all_panels.database.AddDataSource(datasource);
current_panels.database.AddDataSource(datasource);
}
// Add the datasource for current list of panels. It selects panels out
// of the other datasources.
sidebar.datasource = RDF.GetDataSource(sidebar.datasource_uri);
current_panels.database.AddDataSource(sidebar.datasource);
// Root the customize dialog at the correct place. // Root the customize dialog at the correct place.
select_list.setAttribute('ref', sidebar.resource); all_panels.setAttribute('ref', all_panels_resource);
current_panels.setAttribute('ref', sidebar.resource);
saveInitialPanels(); saveInitialPanels();
enableButtons(); enableButtons();
@ -57,7 +74,7 @@ function Init()
function saveInitialPanels() function saveInitialPanels()
{ {
var root = document.getElementById('selected-panels-root'); var root = document.getElementById('current-panels-root');
for (var node = root.firstChild; node != null; node = node.nextSibling) { for (var node = root.firstChild; node != null; node = node.nextSibling) {
original_panels[original_panels.length] = node.getAttribute('id'); original_panels[original_panels.length] = node.getAttribute('id');
} }
@ -70,8 +87,8 @@ function addOption(registry, service, selectIt)
var option_customize = getAttr(registry, service, 'customize'); var option_customize = getAttr(registry, service, 'customize');
var option_content = getAttr(registry, service, 'content'); var option_content = getAttr(registry, service, 'content');
var tree = document.getElementById('selected-panels'); var tree = document.getElementById('current-panels');
var treeroot = document.getElementById('selected-panels-root'); var treeroot = document.getElementById('current-panels-root');
// Check to see if the panel already exists... // Check to see if the panel already exists...
for (var ii = treeroot.firstChild; ii != null; ii = ii.nextSibling) { for (var ii = treeroot.firstChild; ii != null; ii = ii.nextSibling) {
@ -124,15 +141,15 @@ function getAttr(registry,service,attr_name) {
function selectChange() { function selectChange() {
// Remove the selection in the other list // Remove the selection in the other list
var other_panels = document.getElementById('other-panels'); var all_panels = document.getElementById('other-panels');
other_panels.clearItemSelection(); all_panels.clearItemSelection();
enableButtons(); enableButtons();
enableOtherButtons(); enableOtherButtons();
} }
function moveUp() { function moveUp() {
var tree = document.getElementById('selected-panels'); var tree = document.getElementById('current-panels');
if (tree.selectedItems.length == 1) { if (tree.selectedItems.length == 1) {
var selected = tree.selectedItems[0]; var selected = tree.selectedItems[0];
if (selected.previousSibling) { if (selected.previousSibling) {
@ -145,7 +162,7 @@ function moveUp() {
} }
function moveDown() { function moveDown() {
var tree = document.getElementById('selected-panels'); var tree = document.getElementById('current-panels');
if (tree.selectedItems.length == 1) { if (tree.selectedItems.length == 1) {
var selected = tree.selectedItems[0]; var selected = tree.selectedItems[0];
if (selected.nextSibling) { if (selected.nextSibling) {
@ -165,7 +182,7 @@ function moveDown() {
function enableButtons() { function enableButtons() {
var up = document.getElementById('up'); var up = document.getElementById('up');
var down = document.getElementById('down'); var down = document.getElementById('down');
var tree = document.getElementById('selected-panels'); var tree = document.getElementById('current-panels');
var customize = document.getElementById('customize-button'); var customize = document.getElementById('customize-button');
var remove = document.getElementById('remove-button'); var remove = document.getElementById('remove-button');
@ -193,7 +210,7 @@ function enableButtons() {
} }
// "Customize..." button // "Customize..." button
var customizeURL = null; var customizeURL = null;
if (selectedNode) { if (numSelected == 1) {
customizeURL = selectedNode.getAttribute('customize'); customizeURL = selectedNode.getAttribute('customize');
} }
if (customizeURL == null || customizeURL == '') { if (customizeURL == null || customizeURL == '') {
@ -229,7 +246,7 @@ function CustomizePanel()
function RemovePanel() function RemovePanel()
{ {
var tree = document.getElementById('selected-panels'); var tree = document.getElementById('current-panels');
var nextNode = null; var nextNode = null;
var numSelected = tree.selectedItems.length var numSelected = tree.selectedItems.length
@ -252,12 +269,12 @@ function RemovePanel()
function Save() function Save()
{ {
// Iterate through the 'selected-panels' tree to collect the panels // Iterate through the 'current-panels' tree to collect the panels
// that the user has chosen. We need to do this _before_ we remove // that the user has chosen. We need to do this _before_ we remove
// the panels from the datasource, because the act of removing them // the panels from the datasource, because the act of removing them
// from the datasource will change the tree! // from the datasource will change the tree!
var panels = new Array(); var panels = new Array();
var root = document.getElementById('selected-panels-root'); var root = document.getElementById('current-panels-root');
for (var node = root.firstChild; node != null; node = node.nextSibling) { for (var node = root.firstChild; node != null; node = node.nextSibling) {
panels[panels.length] = node.getAttribute('id'); panels[panels.length] = node.getAttribute('id');
} }
@ -290,7 +307,7 @@ function Save()
function otherPanelSelected(event, target) function otherPanelSelected(event, target)
{ {
// Remove the selection in the "current" panels list // Remove the selection in the "current" panels list
var current_panels = document.getElementById('selected-panels'); var current_panels = document.getElementById('current-panels');
current_panels.clearItemSelection(); current_panels.clearItemSelection();
enableButtons(); enableButtons();
@ -309,12 +326,12 @@ function enableOtherButtons()
{ {
var add_button = document.getElementById('add_button'); var add_button = document.getElementById('add_button');
var preview_button = document.getElementById('preview_button'); var preview_button = document.getElementById('preview_button');
var other_panels = document.getElementById('other-panels'); var all_panels = document.getElementById('other-panels');
var num_selected = 0; var num_selected = 0;
// Only count non-folders as selected for button enabling // Only count non-folders as selected for button enabling
for (var ii=0; ii<other_panels.selectedItems.length; ii++) { for (var ii=0; ii<all_panels.selectedItems.length; ii++) {
var node = other_panels.selectedItems[ii]; var node = all_panels.selectedItems[ii];
if (node.getAttribute('container') != 'true') { if (node.getAttribute('container') != 'true') {
num_selected++; num_selected++;
} }
@ -353,8 +370,8 @@ function AddPanel()
// Remove the selection in the other list. // Remove the selection in the other list.
// Selection will move to "current" list. // Selection will move to "current" list.
var other_panels = document.getElementById('other-panels'); var all_panels = document.getElementById('other-panels');
other_panels.clearItemSelection(); all_panels.clearItemSelection();
enableButtons(); enableButtons();
enableOtherButtons(); enableOtherButtons();
@ -391,7 +408,7 @@ function PreviewPanel()
function enableSave() { function enableSave() {
debug("in enableSave()"); debug("in enableSave()");
var root = document.getElementById('selected-panels-root'); var root = document.getElementById('current-panels-root');
var panels = root.childNodes; var panels = root.childNodes;
var list_unchanged = (panels.length == original_panels.length); var list_unchanged = (panels.length == original_panels.length);
debug ("panels.length="+panels.length); debug ("panels.length="+panels.length);

Просмотреть файл

@ -32,8 +32,9 @@
windowtype="sidebar:customize" windowtype="sidebar:customize"
align="vertical"> align="vertical">
<!-- Dialog title -->
<html:script src="chrome://sidebar/content/customize.js" /> <html:script src="chrome://sidebar/content/customize.js" />
<!-- Dialog title -->
<html:div class="title"> <html:div class="title">
&sidebar.customize.title.label; &sidebar.customize.title.label;
</html:div> </html:div>
@ -54,9 +55,7 @@
<html:div style="width:15em;height:15em" flex="1*"> <html:div style="width:15em;height:15em" flex="1*">
<tree id="other-panels" size="10" <tree id="other-panels" size="10"
datasources="chrome://sidebar/content/local-panels.rdf datasources="rdf:null"
chrome://sidebar/content/remote-panels.rdf"
ref="urn:sidebar:master-panel-list"
indent="true" indent="true"
style="width:100%;height:100%"> style="width:100%;height:100%">
@ -104,9 +103,8 @@
<box align="horizontal" class="box-group" flex="1*"> <box align="horizontal" class="box-group" flex="1*">
<html:div style="width:15em;height:15em" flex="1*"> <html:div style="width:15em;height:15em" flex="1*">
<tree id="selected-panels" onclick="selectChange();" <tree id="current-panels" onclick="selectChange();"
datasources="chrome://sidebar/content/local-panels.rdf datasources="rdf:null"
chrome://sidebar/content/remote-panels.rdf"
style="width:100%;height:100%"> style="width:100%;height:100%">
<template> <template>
@ -128,7 +126,7 @@
<!-- We explicitly create a 'treechildren' so we can refer <!-- We explicitly create a 'treechildren' so we can refer
to it from the script --> to it from the script -->
<treechildren id="selected-panels-root"/> <treechildren id="current-panels-root"/>
</tree> </tree>
</html:div> </html:div>

Просмотреть файл

@ -86,6 +86,7 @@ function getSidebarDatasourceURI(panels_file_id) {
function sidebarOverlayInit() { function sidebarOverlayInit() {
sidebar.datasource_uri = getSidebarDatasourceURI(PANELS_RDF_FILE); sidebar.datasource_uri = getSidebarDatasourceURI(PANELS_RDF_FILE);
sidebar.resource = 'urn:sidebar:current-panel-list'; sidebar.resource = 'urn:sidebar:current-panel-list';
sidebar.master_resource = 'urn:sidebar:master-panel-list';
// Initialize the display // Initialize the display
var sidebar_element = document.getElementById('sidebar-box') var sidebar_element = document.getElementById('sidebar-box')
@ -113,7 +114,7 @@ function sidebarOverlayInit() {
panels.database.AddObserver(panel_observer); panels.database.AddObserver(panel_observer);
// XXX This is a hack to force re-display // XXX This is a hack to force re-display
panels.setAttribute('ref', 'urn:sidebar:current-panel-list'); panels.setAttribute('ref', sidebar.resource);
sidebarOpenDefaultPanel(100, 0); sidebarOpenDefaultPanel(100, 0);
} }
@ -185,7 +186,6 @@ function enableCustomize() {
function sidebarCustomize() { function sidebarCustomize() {
// Use a single sidebar customize dialog // Use a single sidebar customize dialog
var cwindowManager = Components.classes['component://netscape/rdf/datasource?name=window-mediator'].getService(); var cwindowManager = Components.classes['component://netscape/rdf/datasource?name=window-mediator'].getService();
var iwindowManager = Components.interfaces.nsIWindowMediator; var iwindowManager = Components.interfaces.nsIWindowMediator;
var windowManager = cwindowManager.QueryInterface(iwindowManager); var windowManager = cwindowManager.QueryInterface(iwindowManager);
@ -198,19 +198,21 @@ function sidebarCustomize() {
} else { } else {
debug("Open a new customize dialog"); debug("Open a new customize dialog");
if (true == gDisableCustomize) { if (false == gDisableCustomize) {
debug("Recently opened one. Wait a little bit.");
return;
}
gDisableCustomize = true; gDisableCustomize = true;
var panels = document.getElementById('sidebar-panels');
var datasources = panels.getAttribute('datasources');
customizeWindow = window.openDialog( customizeWindow = window.openDialog(
'chrome://sidebar/content/customize.xul', 'chrome://sidebar/content/customize.xul',
'_blank','chrome', '_blank','chrome',
datasources, sidebar.master_resource,
sidebar.datasource_uri, sidebar.resource); sidebar.datasource_uri, sidebar.resource);
setTimeout(enableCustomize, 2000); setTimeout(enableCustomize, 2000);
} }
} }
}
function sidebarShowHide() { function sidebarShowHide() {
var sidebar = document.getElementById('sidebar-box') var sidebar = document.getElementById('sidebar-box')
@ -232,50 +234,5 @@ function sidebarShowHide() {
document.persist('sidebar-box', 'width'); document.persist('sidebar-box', 'width');
} }
function dumpAttributes(node) {
var attributes = node.attributes
if (!attributes || attributes.length == 0) {
debug("no attributes")
}
for (var ii=0; ii < attributes.length; ii++) {
var attr = attributes.item(ii)
debug("attr "+ii+": "+ attr.name +"="+attr.value)
}
}
function dumpStats() {
var box = document.getElementById('sidebar-box');
var splitter = document.getElementById('sidebar-splitter');
var style = box.getAttribute('style')
var visibility = style.match('visibility:([^;]*)')
if (visibility) {
visibility = visibility[1]
}
debug("sidebar-box.style="+style)
debug("sidebar-box.visibility="+visibility)
debug('sidebar-box.width='+box.getAttribute('width'))
debug('sidebar-box attrs\n---------------------')
dumpAttributes(box)
debug('sidebar-splitter attrs\n--------------------------')
dumpAttributes(splitter)
}
function dumpTree(node, depth) {
var indent = "| | | | | | | | | | | | | | | | | | | | | | | | | | | | | + "
var kids = node.childNodes
debug(indent.substr(indent.length - depth*2))
// Print your favorite attributes here
debug(node.nodeName)
debug(" "+node.getAttribute('id'))
debug("")
for (var ii=0; ii < kids.length; ii++) {
dumpTree(kids[ii], depth + 1)
}
}
// Install our load handler // Install our load handler
addEventListener("load", sidebarOverlayInit, false); addEventListener("load", sidebarOverlayInit, false);

Просмотреть файл

@ -61,7 +61,7 @@
<!-- Splitter on the right of sidebar --> <!-- Splitter on the right of sidebar -->
<splitter id="sidebar-splitter" collapse="before" persist="state hidden" <splitter id="sidebar-splitter" collapse="before" persist="state hidden"
chromeclass="extrachrome" onclick="dumpStats();"> chromeclass="extrachrome">
<box id="topright-cap" align="vertical"> <box id="topright-cap" align="vertical">
<spring flex="100%"/> <spring flex="100%"/>
</box> </box>