diff options
author | jollytoad | 2005-07-19 15:28:24 +0000 |
---|---|---|
committer | jollytoad | 2005-07-19 15:28:24 +0000 |
commit | 857cfd8a45e7ba31f69f02fef865f592d49c0f6b (patch) | |
tree | 643669827448d950be7710e27e3b3c107249e1a8 | |
parent | c18174f00c4a0cf015103163a00f7e97bd7ec23c (diff) |
Updated XLoadTree to latest version.
(Removes dep on xmlextras.js)
-rw-r--r-- | browser.php | 5 | ||||
-rw-r--r-- | xloadtree/xloadtree2.js | 302 | ||||
-rw-r--r-- | xloadtree/xmlextras.js | 232 | ||||
-rw-r--r-- | xloadtree/xtree2.js | 1076 |
4 files changed, 628 insertions, 987 deletions
diff --git a/browser.php b/browser.php index 97dbabab..ecfb029c 100644 --- a/browser.php +++ b/browser.php @@ -5,7 +5,7 @@ * if you click on a database it shows a list of database objects in that * database. * - * $Id: browser.php,v 1.47 2005/07/19 11:17:28 jollytoad Exp $ + * $Id: browser.php,v 1.48 2005/07/19 15:28:24 jollytoad Exp $ */ // Include application functions @@ -14,11 +14,10 @@ // Output header $misc->printHeader('', ' - <script src="xloadtree/xmlextras.js" type="text/javascript"></script> <script src="xloadtree/xtree2.js" type="text/javascript"></script> <script src="xloadtree/xloadtree2.js" type="text/javascript"></script> <style type="text/css"> - .webfx-tree-children { background-image: url("' . $misc->icon('I') .'"); } + .webfx-tree-children { background-image: url("' . $misc->icon('I') . '"); } </style>'); $misc->printBody('browser'); diff --git a/xloadtree/xloadtree2.js b/xloadtree/xloadtree2.js index 23461327..f5e5f05c 100644 --- a/xloadtree/xloadtree2.js +++ b/xloadtree/xloadtree2.js @@ -12,7 +12,7 @@ |-----------------------------------------------------------------------------|
| A tree menu system for IE 5.5+, Mozilla 1.4+, Opera 7.5+ |
|-----------------------------------------------------------------------------|
-| Copyright (c) 1999 - 2004 Erik Arvidsson & Emil A Eklund |
+| Copyright (c) 1999 - 2005 Erik Arvidsson & Emil A Eklund |
|-----------------------------------------------------------------------------|
| This software is provided "as is", without warranty of any kind, express or |
| implied, including but not limited to the warranties of merchantability, |
@@ -42,22 +42,19 @@ | this, is also licensed under the GPL license. |
|-----------------------------------------------------------------------------|
| 2004-02-21 | Pre release distributed to a few selected tester |
+| 2005-06-06 | Removed dependency on XML Extras |
|-----------------------------------------------------------------------------|
| Dependencies: xtree2.js Supplies the tree control |
|-----------------------------------------------------------------------------|
-| Created 2003-??-?? | All changes are in the log above. | Updated 2004-02-21 |
+| Created 2003-??-?? | All changes are in the log above. | Updated 2004-06-06 |
\----------------------------------------------------------------------------*/
webFXTreeConfig.loadingText = "Loading...";
webFXTreeConfig.loadingIcon = "images/loading.gif";
-webFXTreeConfig.errorIcon = "images/exclamation.16.gif";
-webFXTreeConfig.errorLoadingText = "Error Loading";
-webFXTreeConfig.reloadText = "Click to reload";
-function WebFXLoadTree(sText, sXmlSrc, oAction, sBehavior, sIcon, sOpenIcon)
-{
+function WebFXLoadTree(sText, sXmlSrc, oAction, sBehavior, sIcon, sOpenIcon) {
WebFXTree.call(this, sText, oAction, sBehavior, sIcon, sOpenIcon);
// setup default property values
@@ -66,41 +63,36 @@ function WebFXLoadTree(sText, sXmlSrc, oAction, sBehavior, sIcon, sOpenIcon) this.loaded = !sXmlSrc;
this.errorText = "";
- if (this.src)
- {
+ if (this.src) {
/// add loading Item
this._loadingItem = WebFXLoadTree.createLoadingItem();
this.add(this._loadingItem);
- if (this.getExpanded())
+ if (this.getExpanded()) {
WebFXLoadTree.loadXmlDocument(this);
+ }
}
}
-WebFXLoadTree.createLoadingItem = function ()
-{
+WebFXLoadTree.createLoadingItem = function () {
return new WebFXTreeItem(webFXTreeConfig.loadingText, null, null,
webFXTreeConfig.loadingIcon);
};
-WebFXLoadTree.prototype = new WebFXTree;
+_p = WebFXLoadTree.prototype = new WebFXTree;
-WebFXLoadTree.prototype.setExpanded = function (b)
-{
+_p.setExpanded = function (b) {
WebFXTree.prototype.setExpanded.call(this, b);
- if (this.src && b)
- {
- if (!this.loaded && !this.loading)
- {
+ if (this.src && b) {
+ if (!this.loaded && !this.loading) {
// load
WebFXLoadTree.loadXmlDocument(this);
}
}
};
-function WebFXLoadTreeItem(sText, sXmlSrc, oAction, eParent, sIcon, sOpenIcon)
-{
+function WebFXLoadTreeItem(sText, sXmlSrc, oAction, eParent, sIcon, sOpenIcon) {
WebFXTreeItem.call(this, sText, oAction, eParent, sIcon, sOpenIcon);
// setup default property values
@@ -109,27 +101,24 @@ function WebFXLoadTreeItem(sText, sXmlSrc, oAction, eParent, sIcon, sOpenIcon) this.loaded = !sXmlSrc;
this.errorText = "";
- if (this.src)
- {
+ if (this.src) {
/// add loading Item
this._loadingItem = WebFXLoadTree.createLoadingItem();
this.add(this._loadingItem);
- if (this.getExpanded())
+ if (this.getExpanded()) {
WebFXLoadTree.loadXmlDocument(this);
+ }
}
}
-WebFXLoadTreeItem.prototype = new WebFXTreeItem;
+_p = WebFXLoadTreeItem.prototype = new WebFXTreeItem;
-WebFXLoadTreeItem.prototype.setExpanded = function (b)
-{
+_p.setExpanded = function (b) {
WebFXTreeItem.prototype.setExpanded.call(this, b);
- if (this.src && b)
- {
- if (!this.loaded && !this.loading)
- {
+ if (this.src && b) {
+ if (!this.loaded && !this.loading) {
// load
WebFXLoadTree.loadXmlDocument(this);
}
@@ -138,48 +127,46 @@ WebFXLoadTreeItem.prototype.setExpanded = function (b) // reloads the src file if already loaded
WebFXLoadTree.prototype.reload =
-WebFXLoadTreeItem.prototype.reload = function ()
-{
+_p.reload = function () {
// if loading do nothing
- if (this.loaded)
- {
+ if (this.loaded) {
var t = this.getTree();
var expanded = this.getExpanded();
var sr = t.getSuspendRedraw();
t.setSuspendRedraw(true);
// remove
- while (this.childNodes.length > 0)
+ while (this.childNodes.length > 0) {
this.remove(this.childNodes[this.childNodes.length - 1]);
+ }
this.loaded = false;
this._loadingItem = WebFXLoadTree.createLoadingItem();
this.add(this._loadingItem);
- if (expanded)
+ if (expanded) {
this.setExpanded(true);
+ }
t.setSuspendRedraw(sr);
this.update();
- }
- else if (this.open && !this.loading)
+ } else if (this.open && !this.loading) {
WebFXLoadTree.loadXmlDocument(this);
+ }
};
WebFXLoadTree.prototype.setSrc =
-WebFXLoadTreeItem.prototype.setSrc = function (sSrc)
-{
+_p.setSrc = function (sSrc) {
var oldSrc = this.src;
if (sSrc == oldSrc) return;
var expanded = this.getExpanded();
// remove all
- this._callSuspended(function ()
- {
+ this._callSuspended(function () {
// remove
while (this.childNodes.length > 0)
this.remove(this.childNodes[this.childNodes.length - 1]);
@@ -188,15 +175,13 @@ WebFXLoadTreeItem.prototype.setSrc = function (sSrc) this.loaded = false;
this.loading = false;
- if (this._loadingItem)
- {
+ if (this._loadingItem) {
this._loadingItem.dispose();
this._loadingItem = null;
}
this.src = sSrc;
- if (sSrc)
- {
+ if (sSrc) {
this._loadingItem = WebFXLoadTree.createLoadingItem();
this.add(this._loadingItem);
}
@@ -205,41 +190,35 @@ WebFXLoadTreeItem.prototype.setSrc = function (sSrc) };
WebFXLoadTree.prototype.getSrc =
-WebFXLoadTreeItem.prototype.getSrc = function ()
-{
+_p.getSrc = function () {
return this.src;
};
-WebFXLoadTree.prototype.dispose = function ()
-{
+WebFXLoadTree.prototype.dispose = function () {
WebFXTree.prototype.dispose.call(this);
if (this._xmlHttp)
{
- if (this._xmlHttp.dispose)
+ if (this._xmlHttp.dispose) {
this._xmlHttp.dispose();
- try
- {
+ }
+ try {
this._xmlHttp.onreadystatechange = null;
this._xmlHttp.abort();
- }
- catch (ex) {}
+ } catch (ex) {}
this._xmlHttp = null;
}
};
-WebFXLoadTreeItem.prototype.dispose = function ()
-{
+_p.dispose = function () {
WebFXTreeItem.prototype.dispose.call(this);
- if (this._xmlHttp)
- {
- if (this._xmlHttp.dispose)
+ if (this._xmlHttp) {
+ if (this._xmlHttp.dispose) {
this._xmlHttp.dispose();
- try
- {
+ }
+ try {
this._xmlHttp.onreadystatechange = null;
this._xmlHttp.abort();
- }
- catch (ex) {}
+ } catch (ex) {}
this._xmlHttp = null;
}
};
@@ -247,45 +226,40 @@ WebFXLoadTreeItem.prototype.dispose = function () // The path is divided by '/' and the item is identified by the text
WebFXLoadTree.prototype.openPath =
-WebFXLoadTreeItem.prototype.openPath = function (sPath, bSelect, bFocus)
-{
+_p.openPath = function (sPath, bSelect, bFocus) {
// remove any old pending paths to open
delete this._pathToOpen;
//delete this._pathToOpenById;
this._selectPathOnLoad = bSelect;
this._focusPathOnLoad = bFocus;
- if (sPath == "")
- {
- if (bSelect)
+ if (sPath == "") {
+ if (bSelect) {
this.select();
- if (bFocus)
+ }
+ if (bFocus) {
window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.getId() + "\")", 10);
+ }
return;
}
var parts = sPath.split("/");
var remainingPath = parts.slice(1).join("/");
- if (sPath.charAt(0) == "/")
- {
+ if (sPath.charAt(0) == "/") {
this.getTree().openPath(remainingPath, bSelect, bFocus);
- }
- else
- {
+ } else {
// open
this.setExpanded(true);
- if (this.loaded)
- {
+ if (this.loaded) {
parts = sPath.split("/");
var ti = this.findChildByText(parts[0]);
- if (!ti)
+ if (!ti) {
throw "Could not find child node with text \"" + parts[0] + "\"";
+ }
ti.openPath(remainingPath, bSelect, bFocus);
- }
- else
- {
+ } else {
this._pathToOpen = sPath;
}
}
@@ -296,76 +270,80 @@ WebFXLoadTreeItem.prototype.openPath = function (sPath, bSelect, bFocus) // for certain attributes
WebFXLoadTree._attrs = ["text", "src", "action", "id", "target"];
-WebFXLoadTree.createItemFromElement = function (oNode)
-{
+WebFXLoadTree.createItemFromElement = function (oNode) {
var jsAttrs = {};
var domAttrs = oNode.attributes;
var i, l;
l = domAttrs.length;
- for (i = 0; i < l; i++)
- {
- if (domAttrs[i] == null)
- {
+ for (i = 0; i < l; i++) {
+ if (domAttrs[i] == null) {
continue;
}
jsAttrs[domAttrs[i].nodeName] = domAttrs[i].nodeValue;
}
-
var name, val;
- for (i = 0; i < WebFXLoadTree._attrs.length; i++)
- {
+ for (i = 0; i < WebFXLoadTree._attrs.length; i++) {
name = WebFXLoadTree._attrs[i];
value = oNode.getAttribute(name);
- if (value)
+ if (value) {
jsAttrs[name] = value;
+ }
}
var action;
- if (jsAttrs.onaction)
+ if (jsAttrs.onaction) {
action = new Function(jsAttrs.onaction);
- else if (jsAttrs.action)
+ } else if (jsAttrs.action) {
action = jsAttrs.action;
+ }
var jsNode = new WebFXLoadTreeItem(jsAttrs.html || "", jsAttrs.src, action,
null, jsAttrs.icon, jsAttrs.openIcon);
- if (jsAttrs.text)
+ if (jsAttrs.text) {
jsNode.setText(jsAttrs.text);
+ }
- if (jsAttrs.target)
+ if (jsAttrs.target) {
jsNode.target = jsAttrs.target;
- if (jsAttrs.id)
+ }
+ if (jsAttrs.id) {
jsNode.setId(jsAttrs.id);
- if (jsAttrs.toolTip)
+ }
+ if (jsAttrs.toolTip) {
jsNode.toolTip = jsAttrs.toolTip;
- if (jsAttrs.expanded)
+ }
+ if (jsAttrs.expanded) {
jsNode.setExpanded(jsAttrs.expanded != "false");
- if (jsAttrs.onload)
+ }
+ if (jsAttrs.onload) {
jsNode.onload = new Function(jsAttrs.onload);
- if (jsAttrs.onerror)
+ }
+ if (jsAttrs.onerror) {
jsNode.onerror = new Function(jsAttrs.onerror);
+ }
jsNode.attributes = jsAttrs;
// go through childNodes
var cs = oNode.childNodes;
l = cs.length;
- for (i = 0; i < l; i++)
- {
- if (cs[i].tagName == "tree")
+ for (i = 0; i < l; i++) {
+ if (cs[i].tagName == "tree") {
jsNode.add(WebFXLoadTree.createItemFromElement(cs[i]));
+ }
}
return jsNode;
};
-WebFXLoadTree.loadXmlDocument = function (jsNode)
-{
- if (jsNode.loading || jsNode.loaded)
+WebFXLoadTree.loadXmlDocument = function (jsNode) {
+ if (jsNode.loading || jsNode.loaded) {
return;
+ }
jsNode.loading = true;
var id = jsNode.getId();
- jsNode._xmlHttp = XmlHttp.create();
+ jsNode._xmlHttp = window.XMLHttpRequest ? new XMLHttpRequest : new window.ActiveXObject("Microsoft.XmlHttp");
jsNode._xmlHttp.open("GET", jsNode.src, true); // async
jsNode._xmlHttp.onreadystatechange = new Function("WebFXLoadTree._onload(\"" + id + "\")");
@@ -373,11 +351,9 @@ WebFXLoadTree.loadXmlDocument = function (jsNode) window.setTimeout("WebFXLoadTree._ontimeout(\"" + id + "\")", 10);
};
-WebFXLoadTree._onload = function (sId)
-{
+WebFXLoadTree._onload = function (sId) {
var jsNode = webFXTreeHandler.all[sId];
- if (jsNode._xmlHttp.readyState == 4)
- {
+ if (jsNode._xmlHttp.readyState == 4) {
WebFXLoadTree.documentLoaded(jsNode);
webFXLoadTreeQueue.remove(jsNode);
if (jsNode._xmlHttp.dispose)
@@ -386,8 +362,7 @@ WebFXLoadTree._onload = function (sId) }
};
-WebFXLoadTree._ontimeout = function (sId)
-{
+WebFXLoadTree._ontimeout = function (sId) {
var jsNode = webFXTreeHandler.all[sId];
webFXLoadTreeQueue.add(jsNode);
};
@@ -395,10 +370,10 @@ WebFXLoadTree._ontimeout = function (sId) // Inserts an xml document as a subtree to the provided node
-WebFXLoadTree.documentLoaded = function (jsNode)
-{
- if (jsNode.loaded)
+WebFXLoadTree.documentLoaded = function (jsNode) {
+ if (jsNode.loaded) {
return;
+ }
jsNode.errorText = "";
jsNode.loaded = true;
@@ -411,19 +386,13 @@ WebFXLoadTree.documentLoaded = function (jsNode) var doc = jsNode._xmlHttp.responseXML;
// check that the load of the xml file went well
- if(!doc || doc.parserError && doc.parseError.errorCode != 0 || !doc.documentElement)
- {
- if (!doc || doc.parseError.errorCode == 0)
- {
- jsNode.errorText = webFXTreeConfig.errorLoadingText + " " + jsNode.src + " (" + jsNode._xmlHttp.status + ": " + jsNode._xmlHttp.statusText + ")";
- }
- else
- {
- jsNode.errorText = webFXTreeConfig.errorLoadingText + " " + jsNode.src + " (" + doc.parseError.reason + ")";
+ if(!doc || doc.parserError && doc.parseError.errorCode != 0 || !doc.documentElement) {
+ if (!doc || doc.parseError.errorCode == 0) {
+ jsNode.errorText = "Error loading " + jsNode.src + " (" + jsNode._xmlHttp.status + ": " + jsNode._xmlHttp.statusText + ")";
+ } else {
+ jsNode.errorText = "Error loading " + jsNode.src + " (" + doc.parseError.reason + ")";
}
- }
- else
- {
+ } else {
// there is one extra level of tree elements
var root = doc.documentElement;
@@ -431,54 +400,51 @@ WebFXLoadTree.documentLoaded = function (jsNode) var count = 0;
var cs = root.childNodes;
var l = cs.length;
- for (var i = 0; i < l; i++)
- {
- if (cs[i].tagName == "tree")
- {
+ for (var i = 0; i < l; i++) {
+ if (cs[i].tagName == "tree") {
jsNode.add(WebFXLoadTree.createItemFromElement(cs[i]));
count++;
}
}
// if no children we got an error
- if (count == 0)
- {
- jsNode.errorText = webFXTreeConfig.errorLoadingText + " " + jsNode.src + " (???)";
+ if (count == 0) {
+ jsNode.errorText = "Error loading " + jsNode.src + " (???)";
}
}
- if (jsNode.errorText != "")
- {
- jsNode._loadingItem.icon = webFXTreeConfig.errorIcon;
+ if (jsNode.errorText != "") {
+ jsNode._loadingItem.icon = "images/exclamation.16.gif";
jsNode._loadingItem.text = jsNode.errorText;
jsNode._loadingItem.action = WebFXLoadTree._reloadParent;
- jsNode._loadingItem.toolTip = webFXTreeConfig.reloadText;
+ jsNode._loadingItem.toolTip = "Click to reload";
t.setSuspendRedraw(oldSuspend);
jsNode._loadingItem.update();
- if (typeof jsNode.onerror == "function")
+ if (typeof jsNode.onerror == "function") {
jsNode.onerror();
- }
- else
- {
+ }
+ } else {
// remove dummy
- if (jsNode._loadingItem != null)
+ if (jsNode._loadingItem != null) {
jsNode.remove(jsNode._loadingItem);
+ }
- if (jsNode._pathToOpen)
+ if (jsNode._pathToOpen) {
jsNode.openPath(jsNode._pathToOpen, jsNode._selectPathOnLoad, jsNode._focusPathOnLoad);
+ }
t.setSuspendRedraw(oldSuspend);
jsNode.update();
- if (typeof jsNode.onload == "function")
+ if (typeof jsNode.onload == "function") {
jsNode.onload();
+ }
}
};
-WebFXLoadTree._reloadParent = function ()
-{
+WebFXLoadTree._reloadParent = function () {
this.getParent().reload();
};
@@ -490,45 +456,41 @@ WebFXLoadTree._reloadParent = function () var webFXLoadTreeQueue = {
_nodes: [],
- _ie: /msie/i.test(navigator.userAgent),
- _opera: /opera/i.test(navigator.userAgent),
+ _ie: /msie/i.test(navigator.userAgent),
+ _opera: /opera/i.test(navigator.userAgent),
- add: function (jsNode)
- {
- if (this._ie || this._opera)
- {
+ add: function (jsNode) {
+ if (this._ie || this._opera) {
this._nodes.push(jsNode);
- if (this._nodes.length == 1)
+ if (this._nodes.length == 1) {
this._send();
- }
- else
- {
+ }
+ } else {
jsNode._xmlHttp.send(null);
}
},
-
- remove: function (jsNode)
- {
- if (this._ie || this._opera)
- {
+ remove: function (jsNode) {
+ if (this._ie || this._opera) {
arrayHelper.remove(this._nodes, jsNode);
- if (this._nodes.length > 0)
+ if (this._nodes.length > 0) {
this._send();
+ }
}
},
// IE only
- _send: function ()
- {
+ _send: function () {
var id = this._nodes[0].getId();
var jsNode = webFXTreeHandler.all[id];
- if (!jsNode)
+ if (!jsNode) {
return;
+ }
// if no _xmlHttp then remove it
- if (!jsNode._xmlHttp)
+ if (!jsNode._xmlHttp) {
this.remove(jsNode);
- else
+ } else {
jsNode._xmlHttp.send(null);
+ }
}
};
diff --git a/xloadtree/xmlextras.js b/xloadtree/xmlextras.js deleted file mode 100644 index 6a675121..00000000 --- a/xloadtree/xmlextras.js +++ /dev/null @@ -1,232 +0,0 @@ -/*----------------------------------------------------------------------------\
-| XML Extras 1.01 |
-|-----------------------------------------------------------------------------|
-| Created by Erik Arvidsson |
-| (http://webfx.eae.net/contact.html#erik) |
-| For WebFX (http://webfx.eae.net/) |
-|-----------------------------------------------------------------------------|
-| A library that makes working with XML documents in Mozilla more similar to |
-| working with MSXML. |
-|-----------------------------------------------------------------------------|
-| Copyright (c) 1999 - 2003 Erik Arvidsson |
-|-----------------------------------------------------------------------------|
-| This software is provided "as is", without warranty of any kind, express or |
-| implied, including but not limited to the warranties of merchantability, |
-| fitness for a particular purpose and noninfringement. In no event shall the |
-| authors or copyright holders be liable for any claim, damages or other |
-| liability, whether in an action of contract, tort or otherwise, arising |
-| from, out of or in connection with the software or the use or other |
-| dealings in the software. |
-| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
-| This software is available under the three different licenses mentioned |
-| below. To use this software you must chose, and qualify, for one of those. |
-| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
-| The WebFX Non-Commercial License http://webfx.eae.net/license.html |
-| Permits anyone the right to use the software in a non-commercial context |
-| free of charge. |
-| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
-| The WebFX Commercial license http://webfx.eae.net/commercial.html |
-| Permits the license holder the right to use the software in a commercial |
-| context. Such license must be specifically obtained, however it's valid for |
-| any number of implementations of the licensed software. |
-| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
-| GPL - The GNU General Public License http://www.gnu.org/licenses/gpl.txt |
-| Permits anyone the right to use and modify the software without limitations |
-| as long as proper credits are given and the original and modified source |
-| code are included. Requires that the final product, software derivate from |
-| the original source or any software utilizing a GPL component, such as |
-| this, is also licensed under the GPL license. |
-|-----------------------------------------------------------------------------|
-| ????-??-?? | Original Version Posted. |
-| 2003-09-25 | Added support for parseError getters. Also changed to extend |
-| | only XMLDocument instead of Document |
-|-----------------------------------------------------------------------------|
-| Created ????-??-?? | All changes are in the log above. | Updated 2003-09-25 |
-\----------------------------------------------------------------------------*/
-
-
-//////////////////
-// Helper Stuff //
-//////////////////
-
-// used to find the Automation server name
-function getDomDocumentPrefix() {
- if (getDomDocumentPrefix.prefix)
- return getDomDocumentPrefix.prefix;
-
- var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
- var o;
- for (var i = 0; i < prefixes.length; i++) {
- try {
- // try to create the objects
- o = new ActiveXObject(prefixes[i] + ".DomDocument");
- return getDomDocumentPrefix.prefix = prefixes[i];
- }
- catch (ex) {};
- }
-
- throw new Error("Could not find an installed XML parser");
-}
-
-function getXmlHttpPrefix() {
- if (getXmlHttpPrefix.prefix)
- return getXmlHttpPrefix.prefix;
-
- var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
- var o;
- for (var i = 0; i < prefixes.length; i++) {
- try {
- // try to create the objects
- o = new ActiveXObject(prefixes[i] + ".XmlHttp");
- return getXmlHttpPrefix.prefix = prefixes[i];
- }
- catch (ex) {};
- }
-
- throw new Error("Could not find an installed XML parser");
-}
-
-//////////////////////////
-// Start the Real stuff //
-//////////////////////////
-
-
-// XmlHttp factory
-function XmlHttp() {}
-
-XmlHttp.create = function () {
- try {
- if (window.XMLHttpRequest) {
- var req = new XMLHttpRequest();
-
- // some versions of Moz do not support the readyState property
- // and the onreadystate event so we patch it!
- if (req.readyState == null) {
- req.readyState = 1;
- req.addEventListener("load", function () {
- req.readyState = 4;
- if (typeof req.onreadystatechange == "function")
- req.onreadystatechange();
- }, false);
- }
-
- return req;
- }
- if (window.ActiveXObject) {
- return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
- }
- }
- catch (ex) {}
- // fell through
- throw new Error("Your browser does not support XmlHttp objects");
-};
-
-// XmlDocument factory
-function XmlDocument() {}
-
-XmlDocument.create = function () {
- try {
- // DOM2
- if (document.implementation && document.implementation.createDocument) {
- var doc = document.implementation.createDocument("", "", null);
-
- // some versions of Moz do not support the readyState property
- // and the onreadystate event so we patch it!
- if (doc.readyState == null) {
- doc.readyState = 1;
- doc.addEventListener("load", function () {
- doc.readyState = 4;
- if (typeof doc.onreadystatechange == "function")
- doc.onreadystatechange();
- }, false);
- }
-
- return doc;
- }
- if (window.ActiveXObject)
- return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
- }
- catch (ex) {}
- throw new Error("Your browser does not support XmlDocument objects");
-};
-
-// Create the loadXML method and xml getter for Mozilla
-if (window.DOMParser &&
- window.XMLSerializer &&
- window.Node && Node.prototype && Node.prototype.__defineGetter__) {
-
- // XMLDocument did not extend the Document interface in some versions
- // of Mozilla. Extend both!
- //XMLDocument.prototype.loadXML =
- XMLDocument.prototype.loadXML = function (s) {
-
- // parse the string to a new doc
- var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
-
- // remove all initial children
- while (this.hasChildNodes())
- this.removeChild(this.lastChild);
-
- // insert and import nodes
- for (var i = 0; i < doc2.childNodes.length; i++) {
- this.appendChild(this.importNode(doc2.childNodes[i], true));
- }
- };
-
-
- /*
- * xml getter
- *
- * This serializes the DOM tree to an XML String
- *
- * Usage: var sXml = oNode.xml
- *
- */
-
- // Node, should really be XMLNode but there is no such interface
- Node.prototype.__defineGetter__("xml", function () {
- return (new XMLSerializer()).serializeToString(this);
- });
-
- XMLDocument.prototype.__defineGetter__("parseError", function () {
- var hasError = !this.documentElement ||
- this.documentElement.localName == "parsererror" &&
- this.documentElement.getAttribute("xmlns") == "http://www.mozilla.org/newlayout/xml/parsererror.xml";
- var res = {
- errorCode: 0,
- filepos: 0, // not supported
- line: 0,
- linepos: 0,
- reason: "",
- srcText: "",
- url: ""
- };
- if (hasError) {
- res.errorCode = -1;
- try {
- res.srcText = this.getElementsByTagName("sourcetext")[0].firstChild.data;
- res.srcText = res.srcText.replace( /\n\-\^$/, "");
- }
- catch (ex) {
- res.srcText = "";
- }
-
- try {
- // now we need to parse the first text node
- var s = this.documentElement.firstChild.data;
-
- var re = /XML Parsing Error\: (.+)\nLocation\: (.+)\nLine Number (\d+)\, Column (\d+)/;
- var a = re.exec( s );
- res.reason = a[1];
- res.url = a[2];
- res.line = a[3];
- res.linepos = a[4];
- }
- catch (ex) {
- res.reason = "Uknown";
- }
- }
-
- return res;
- });
-}
\ No newline at end of file diff --git a/xloadtree/xtree2.js b/xloadtree/xtree2.js index 26244bae..c2bb27ad 100644 --- a/xloadtree/xtree2.js +++ b/xloadtree/xtree2.js @@ -12,7 +12,7 @@ |-----------------------------------------------------------------------------| | A tree menu system for IE 5.5+, Mozilla 1.4+, Opera 7, KHTML | |-----------------------------------------------------------------------------| -| Copyright (c) 1999 - 2004 Erik Arvidsson & Emil A Eklund | +| Copyright (c) 1999 - 2005 Erik Arvidsson & Emil A Eklund | |-----------------------------------------------------------------------------| | This software is provided "as is", without warranty of any kind, express or | | implied, including but not limited to the warranties of merchantability, | @@ -42,29 +42,31 @@ | this, is also licensed under the GPL license. | |-----------------------------------------------------------------------------| | 2004-02-21 | Pre release distributed to a few selected tester | +| 2005-06-06 | Added single tab index to improve keyboard navigation | |-----------------------------------------------------------------------------| | Dependencies: xtree2.css Used to define the look and feel | |-----------------------------------------------------------------------------| -| Created 2003-??-?? | All changes are in the log above. | Updated 2004-02-21 | +| Created 2003-??-?? | All changes are in the log above. | Updated 2004-06-06 | \----------------------------------------------------------------------------*/ // // WebFXTreePersisitance function WebFXTreePersistence() {} -WebFXTreePersistence.prototype.getExpanded = function (oNode) { return false; }; -WebFXTreePersistence.prototype.setExpanded = function (oNode, bOpen) {}; +var _p = WebFXTreePersistence.prototype; +_p.getExpanded = function (oNode) { return false; }; +_p.setExpanded = function (oNode, bOpen) {}; // Cookie handling function WebFXCookie() {} -WebFXCookie.prototype.setCookie = function (sName, sValue, nDays) -{ +_p = WebFXCookie.prototype; + +_p.setCookie = function (sName, sValue, nDays) { var expires = ""; - if (typeof nDays == "number") - { + if (typeof nDays == "number") { var d = new Date(); d.setTime(d.getTime() + nDays * 24 * 60 * 60 * 1000); expires = "; expires=" + d.toGMTString(); @@ -73,15 +75,13 @@ WebFXCookie.prototype.setCookie = function (sName, sValue, nDays) document.cookie = sName + "=" + escape(sValue) + expires + "; path=/"; }; -WebFXCookie.prototype.getCookie = function (sName) -{ +_p.getCookie = function (sName) { var re = new RegExp("(\;|^)[^;]*(" + sName + ")\=([^;]*)(;|$)"); var res = re.exec(document.cookie); return res != null ? unescape(res[3]) : null; }; -WebFXCookie.prototype.removeCookie = function (name) -{ +_p.removeCookie = function (name) { this.setCookie(name, "", -1); }; @@ -91,37 +91,33 @@ WebFXCookie.prototype.removeCookie = function (name) // // This is uses one cookie with the ids of the expanded nodes separated using '+' // -function WebFXTreeCookiePersistence() -{ +function WebFXTreeCookiePersistence() { this._openedMap = {}; this._cookies = new WebFXCookie; var s = this._cookies.getCookie(this.cookieName); - if (s) - { + if (s) { var a = s.split("+"); for (var i = a.length - 1; i >= 0; i--) this._openedMap[a[i]] = true; } } -WebFXTreeCookiePersistence.prototype = new WebFXTreePersistence; +_p = WebFXTreeCookiePersistence.prototype = new WebFXTreePersistence; -WebFXTreeCookiePersistence.prototype.cookieName = "webfx-tree-cookie-persistence" +_p.cookieName = "webfx-tree-cookie-persistence" -WebFXTreeCookiePersistence.prototype.getExpanded = function (oNode) -{ +_p.getExpanded = function (oNode) { return oNode.id in this._openedMap; }; -WebFXTreeCookiePersistence.prototype.setExpanded = function (oNode, bOpen) -{ +_p.setExpanded = function (oNode, bOpen) { var old = this.getExpanded(oNode); - if (old != bOpen) - { - if (bOpen) + if (old != bOpen) { + if (bOpen) { this._openedMap[oNode.id] = true; - else + } else { delete this._openedMap[oNode.id]; + } var res = []; var i = 0; @@ -134,32 +130,30 @@ WebFXTreeCookiePersistence.prototype.setExpanded = function (oNode, bOpen) // this object provides a few useful methods when working with arrays -var arrayHelper = -{ - indexOf: function (a, o) - { - for (var i = 0; i < a.length; i++) - { - if (a[i] == o) +var arrayHelper = { + indexOf: function (a, o) { + for (var i = 0; i < a.length; i++) { + if (a[i] == o) { return i; + } } return -1; }, - insertBefore: function (a, o, o2) - { + insertBefore: function (a, o, o2) { var i = this.indexOf(a, o2); - if (i == -1) + if (i == -1) { a.push(o); - else + } else { a.splice(i, 0, o); + } }, - remove: function (a, o) - { + remove: function (a, o) { var i = this.indexOf(a, o); - if (i != -1) + if (i != -1) { a.splice(i, 1); + } } }; @@ -167,24 +161,24 @@ var arrayHelper = // WebFX Tree Config object // /////////////////////////////////////////////////////////////////////////////// var webFXTreeConfig = { - rootIcon : 'images/folder.png', - openRootIcon : 'images/openfolder.png', - folderIcon : 'images/folder.png', - openFolderIcon : 'images/openfolder.png', - fileIcon : 'images/file.png', - iIcon : 'images/I.png', - lIcon : 'images/L.png', - lMinusIcon : 'images/Lminus.png', - lPlusIcon : 'images/Lplus.png', - tIcon : 'images/T.png', - tMinusIcon : 'images/Tminus.png', - tPlusIcon : 'images/Tplus.png', - plusIcon : 'images/plus.png', - minusIcon : 'images/minus.png', - blankIcon : 'images/blank.png', - defaultText : 'Tree Item', + rootIcon : "images/folder.png", + openRootIcon : "images/openfolder.png", + folderIcon : "images/folder.png", + openFolderIcon : "images/openfolder.png", + fileIcon : "images/file.png", + iIcon : "images/I.png", + lIcon : "images/L.png", + lMinusIcon : "images/Lminus.png", + lPlusIcon : "images/Lplus.png", + tIcon : "images/T.png", + tMinusIcon : "images/Tminus.png", + tPlusIcon : "images/Tplus.png", + plusIcon : "images/plus.png", + minusIcon : "images/minus.png", + blankIcon : "images/blank.png", + defaultText : "Tree Item", defaultAction : null, - defaultBehavior : 'classic', + defaultBehavior : "classic", usePersistence : true }; @@ -193,75 +187,54 @@ var webFXTreeConfig = { /////////////////////////////////////////////////////////////////////////////// var webFXTreeHandler = { - ie: /msie/i.test(navigator.userAgent), - idCounter : 0, - idPrefix : "wfxt-", - getUniqueId: function () - { + ie: /msie/i.test(navigator.userAgent), + opera: /opera/i.test(navigator.userAgent), + idCounter: 0, + idPrefix: "wfxt-", + getUniqueId: function () { return this.idPrefix + this.idCounter++; }, - all : {}, - getNodeById: function (sId) - { + all: {}, + getNodeById: function (sId) { return all[sId]; }, - addNode: function (oNode) - { + addNode: function (oNode) { this.all[oNode.id] = oNode; }, - removeNode: function (oNode) - { + removeNode: function (oNode) { delete this.all[oNode.id]; }, - handleEvent: function (e) - { + handleEvent: function (e) { var el = e.target || e.srcElement; - while (el != null && !this.all[el.id]) + while (el != null && !this.all[el.id]) { el = el.parentNode; + } - if (el == null) + if (el == null) { return false; + } var node = this.all[el.id]; - switch (e.type) - { - case "mousedown": - return node._onMouseDown(e); - case "click": - return node._onClick(e); - case "dblclick": - return node._onDblClick(e); - case "focus": - return node._onFocus(e); - case "blur": - return node._onBlur(e); - case "keydown": - return node._onKeyDown(e); - case "keypress": - return node._onKeyPress(e); + if (typeof node["_on" + e.type] == "function") { + return node["_on" + e.type](e); } return false; }, - dispose: function () - { + dispose: function () { if (this.disposed) return; - for (var id in this.all) + for (var id in this.all) { this.all[id].dispose(); + } this.disposed = true; }, - opera: /opera/i.test(navigator.userAgent), - - htmlToText: function (s) - { + htmlToText: function (s) { return String(s).replace(/\s+|<([^>])+>|&|<|>|"| /gi, this._htmlToText); }, - _htmlToText: function (s) - { - switch (s) - { + _htmlToText: function (s) { + switch (s) { case "&": return "&"; case "<": @@ -273,23 +246,22 @@ var webFXTreeHandler = { case " ": return String.fromCharCode(160); default: - if (/\s+/.test(s)) + if (/\s+/.test(s)) { return " "; - if (/^<BR/gi.test(s)) + } + if (/^<BR/gi.test(s)) { return "\n"; + } return ""; } }, - textToHtml: function (s) - { + textToHtml: function (s) { return String(s).replace(/&|<|>|\n|\"\u00A0/g, this._textToHtml); }, - _textToHtml: function (s) - { - switch (s) - { + _textToHtml: function (s) { + switch (s) { case "&": return "&"; case "<": @@ -305,7 +277,7 @@ var webFXTreeHandler = { } }, - persistenceManager: new WebFXTreeCookiePersistence() + persistenceManager: new WebFXTreeCookiePersistence() }; @@ -313,19 +285,19 @@ var webFXTreeHandler = { // WebFXTreeAbstractNode /////////////////////////////////////////////////////////////////////////////// -function WebFXTreeAbstractNode(sText, oAction) -{ +function WebFXTreeAbstractNode(sText, oAction) { this.childNodes = []; if (sText) this.text = sText; if (oAction) this.action = oAction; this.id = webFXTreeHandler.getUniqueId(); - if (webFXTreeConfig.usePersistence) + if (webFXTreeConfig.usePersistence) { this.open = webFXTreeHandler.persistenceManager.getExpanded(this); + } webFXTreeHandler.addNode(this); } -var _p = WebFXTreeAbstractNode.prototype; +_p = WebFXTreeAbstractNode.prototype; _p._selected = false; _p.indentWidth = 19; _p.open = false; @@ -337,50 +309,65 @@ _p._focused = false; /* begin tree model */ -_p.add = function (oChild, oBefore) -{ +_p.add = function (oChild, oBefore) { var oldLast; var emptyBefore = this.childNodes.length == 0; var p = oChild.parentNode; - if (oBefore == null) - { // append + if (oBefore == null) { // append if (p != null) p.remove(oChild); oldLast = this.getLastChild(); this.childNodes.push(oChild); - } - else - { // insertBefore - if (oBefore.parentNode != this) + } else { // insertBefore + if (oBefore.parentNode != this) { throw new Error("Can only add nodes before siblings"); - if (p != null) + } + if (p != null) { p.remove(oChild); + } arrayHelper.insertBefore(this.childNodes, oChild, oBefore); } + if (oBefore) { + if (oBefore == this.firstChild) { + this.firstChild = oChild; + } + oChild.previousSibling = oBefore.previousSibling; + oBefore.previousSibling = oChild; + oChild.nextSibling = oBefore; + } else { + if (!this.firstChild) { + this.firstChild = oChild; + } + if (this.lastChild) { + this.lastChild.nextSibling = oChild; + } + oChild.previousSibling = this.lastChild; + this.lastChild = oChild; + } + oChild.parentNode = this; var t = this.getTree(); - if (t) + if (t) { oChild.tree = t; + } var d = this.getDepth(); - if (d != null) + if (d != null) { oChild.depth = d + 1; + } - if (this.getCreated() && !t.getSuspendRedraw()) - { + if (this.getCreated() && !t.getSuspendRedraw()) { var el = this.getChildrenElement(); var newEl = oChild.create(); var refEl = oBefore ? oBefore.getElement() : null; el.insertBefore(newEl, refEl); - if (oldLast) - { + if (oldLast) { oldLast.updateExpandIcon(); } - if (emptyBefore) - { + if (emptyBefore) { this.setExpanded(this.getExpanded()); // if we are using classic expand will not update icon if (t && t.getBehavior() != "classic") @@ -393,54 +380,62 @@ _p.add = function (oChild, oBefore) -_p.remove = function (oChild) -{ +_p.remove = function (oChild) { // backwards compatible. If no argument remove the node - if (arguments.length == 0) - { - if (this.parentNode) + if (arguments.length == 0) { + if (this.parentNode) { return this.parentNode.remove(this); + } return null; } // if we remove selected or tree with the selected we should select this var t = this.getTree(); var si = t ? t.getSelected() : null; - if (si == oChild || oChild.contains(si)) - { - if (si.getFocused()) - { + if (si == oChild || oChild.contains(si)) { + if (si.getFocused()) { this.select(); window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10); - } - else + } else { this.select(); + } } - var wasLast = oChild.isLastSibling(); - - if (oChild.parentNode != this) + if (oChild.parentNode != this) { throw new Error("Can only remove children"); + } arrayHelper.remove(this.childNodes, oChild); + if (this.lastChild == oChild) { + this.lastChild = oChild.previousSibling; + } + if (this.firstChild == oChild) { + this.firstChild = oChild.nextSibling; + } + if (oChild.previousSibling) { + oChild.previousSibling.nextSibling = oChild.nextSibling; + } + if (oChild.nextSibling) { + oChild.nextSibling.previousSibling = oChild.previousSibling; + } + + var wasLast = oChild.isLastSibling(); + oChild.parentNode = null; oChild.tree = null; oChild.depth = null; - if (t && this.getCreated() && !t.getSuspendRedraw()) - { + if (t && this.getCreated() && !t.getSuspendRedraw()) { var el = this.getChildrenElement(); var childEl = oChild.getElement(); el.removeChild(childEl); - if (wasLast) - { + if (wasLast) { var newLast = this.getLastChild(); - if (newLast) + if (newLast) { newLast.updateExpandIcon(); + } } - if (!this.hasChildren()) - { - //this.setExpanded(this.getExpanded()); + if (!this.hasChildren()) { el.style.display = "none"; this.updateExpandIcon(); this.updateIcon(); @@ -450,160 +445,148 @@ _p.remove = function (oChild) return oChild; }; -WebFXTreeAbstractNode._onTimeoutFocus = function (sId) -{ +WebFXTreeAbstractNode._onTimeoutFocus = function (sId) { var jsNode = webFXTreeHandler.all[sId]; jsNode.focus(); }; -_p.getId = function () -{ +_p.getId = function () { return this.id; }; -_p.getTree = function () -{ +_p.getTree = function () { throw new Error("getTree called on Abstract Node"); }; -_p.getDepth = function () -{ +_p.getDepth = function () { throw new Error("getDepth called on Abstract Node"); }; -_p.getCreated = function () -{ +_p.getCreated = function () { var t = this.getTree(); return t && t.rendered; }; -_p.getParent = function () -{ +_p.getParent = function () { return this.parentNode; }; -_p.contains = function (oDescendant) -{ +_p.contains = function (oDescendant) { if (oDescendant == null) return false; if (oDescendant == this) return true; var p = oDescendant.parentNode; return this.contains(p); }; -_p.getChildren = _p.getChildNodes = function () -{ +_p.getChildren = _p.getChildNodes = function () { return this.childNodes; }; -_p.getFirstChild = function () -{ +_p.getFirstChild = function () { return this.childNodes[0]; }; -_p.getLastChild = function () -{ +_p.getLastChild = function () { return this.childNodes[this.childNodes.length - 1]; }; -_p.getPreviousSibling = function () -{ - var p = this.parentNode; - if (p == null) return null; - var cs = p.childNodes; - return cs[arrayHelper.indexOf(cs, this) - 1] +_p.getPreviousSibling = function () { + return this.previousSibling; + //var p = this.parentNode; + //if (p == null) return null; + //var cs = p.childNodes; + //return cs[arrayHelper.indexOf(cs, this) - 1] }; -_p.getNextSibling = function () -{ - var p = this.parentNode; - if (p == null) return null; - var cs = p.childNodes; - return cs[arrayHelper.indexOf(cs, this) + 1] +_p.getNextSibling = function () { + return this.nextSibling; + //var p = this.parentNode; + //if (p == null) return null; + //var cs = p.childNodes; + //return cs[arrayHelper.indexOf(cs, this) + 1] }; -_p.hasChildren = function () -{ +_p.hasChildren = function () { return this.childNodes.length > 0; }; - -_p.isLastSibling = function () -{ - return this.parentNode && this == this.parentNode.getLastChild(); +_p.isLastSibling = function () { + return this.nextSibling == null; + //return this.parentNode && this == this.parentNode.getLastChild(); }; -_p.findChildByText = function (s, n) -{ - if (!n) +_p.findChildByText = function (s, n) { + if (!n) { n = 0; + } var isRe = s instanceof RegExp; - for (var i = 0; i < this.childNodes.length; i++) - { - if (isRe && s.test(this.childNodes[i].getText()) || this.childNodes[i].getText() == s) - { - if (n == 0) + for (var i = 0; i < this.childNodes.length; i++) { + if (isRe && s.test(this.childNodes[i].getText()) || + this.childNodes[i].getText() == s) { + if (n == 0) { return this.childNodes[i]; + } n--; } } return null; }; -_p.findNodeByText = function (s, n) -{ - if (!n) +_p.findNodeByText = function (s, n) { + if (!n) { n = 0; + } var isRe = s instanceof RegExp; - - if (isRe && s.test(this.getText()) || this.getText() == s) - { - if (n == 0) + if (isRe && s.test(this.getText()) || this.getText() == s) { + if (n == 0) { return this.childNodes[i]; + } n--; } var res; - for (var i = 0; i < this.childNodes.length; i++) - { + for (var i = 0; i < this.childNodes.length; i++) { res = this.childNodes[i].findNodeByText(s, n); - if (res) + if (res) { return res; + } } return null; }; /* end tree model */ -_p.setId = function (sId) -{ +_p.setId = function (sId) { var el = this.getElement(); webFXTreeHandler.removeNode(this); this.id = sId; - if (el) + if (el) { el.id = sId; + } webFXTreeHandler.addNode(this); }; -_p.isSelected = function () -{ +_p.isSelected = function () { return this._selected; }; -_p.select = function () { this._setSelected(true); }; -_p.deselect = function () { this._setSelected(false); }; +_p.select = function () { + this._setSelected(true); +}; + +_p.deselect = function () { + this._setSelected(false); +}; -_p._setSelected = function (b) -{ +_p._setSelected = function (b) { var t = this.getTree(); if (!t) return; - if (this._selected != b) - { + if (this._selected != b) { this._selected = b; var wasFocused = false; // used to keep focus state var si = t.getSelected(); - if (b && si != null && si != this) - { + if (b && si != null && si != this) { var oldFireChange = t._fireChange; wasFocused = si._focused; t._fireChange = false; @@ -612,170 +595,171 @@ _p._setSelected = function (b) } var el = this.getRowElement(); - if (el) - { + if (el) { el.className = this.getRowClassName(); } - if (b) - { + if (b) { + this._setTabIndex(t.tabIndex); t._selectedItem = this; t._fireOnChange(); t.setSelected(this); - if (wasFocused) + if (wasFocused) { this.focus(); + } + } else { + this._setTabIndex(-1); } - if (t.getBehavior() != "classic") + if (t.getBehavior() != "classic") { this.updateIcon(); + } } }; -_p.getExpanded = function () -{ +_p.getExpanded = function () { return this.open; }; -_p.setExpanded = function (b) -{ +_p.setExpanded = function (b) { var ce; this.open = b; var t = this.getTree(); - if (this.hasChildren()) - { + if (this.hasChildren()) { var si = t ? t.getSelected() : null; - if (!b && this.contains(si)) + if (!b && this.contains(si)) { this.select(); + } var el = this.getElement(); - if (el) - { + if (el) { ce = this.getChildrenElement(); - if (ce) + if (ce) { ce.style.display = b ? "block" : "none"; + } var eie = this.getExpandIconElement(); - if (eie) + if (eie) { eie.src = this.getExpandIconSrc(); + } } - if (webFXTreeConfig.usePersistence) + if (webFXTreeConfig.usePersistence) { webFXTreeHandler.persistenceManager.setExpanded(this, b); - } - else - { + } + } else { ce = this.getChildrenElement(); if (ce) ce.style.display = "none"; } - if (t && t.getBehavior() == "classic") + if (t && t.getBehavior() == "classic") { this.updateIcon(); + } }; -_p.toggle = function () -{ +_p.toggle = function () { this.setExpanded(!this.getExpanded()); }; -_p.expand = function () -{ +_p.expand = function () { this.setExpanded(true); }; -_p.collapse = function () -{ +_p.collapse = function () { this.setExpanded(false); }; -_p.collapseChildren = function() -{ +_p.collapseChildren = function () { var cs = this.childNodes; - for (var i = 0; i < cs.length; i++) + for (var i = 0; i < cs.length; i++) { cs[i].collapseAll(); + } }; -_p.collapseAll = function() -{ +_p.collapseAll = function () { this.collapseChildren(); this.collapse(); }; -_p.expandChildren = function() -{ +_p.expandChildren = function () { var cs = this.childNodes; - for (var i = 0; i < cs.length; i++) + for (var i = 0; i < cs.length; i++) { cs[i].expandAll(); + } }; -_p.expandAll = function () -{ +_p.expandAll = function () { this.expandChildren(); this.expand(); }; -_p.reveal = function () -{ +_p.reveal = function () { var p = this.getParent(); - if (p) - { + if (p) { p.setExpanded(true); p.reveal(); } }; -_p.openPath = function (sPath, bSelect, bFocus) -{ - if (sPath == "") - { - if (bSelect) +_p.openPath = function (sPath, bSelect, bFocus) { + if (sPath == "") { + if (bSelect) { this.select(); - if (bFocus) + } + if (bFocus) { window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10); + } return; } var parts = sPath.split("/"); var remainingPath = parts.slice(1).join("/"); var t = this.getTree(); - if (sPath.charAt(0) == "/") - { - if (t) + if (sPath.charAt(0) == "/") { + if (t) { t.openPath(remainingPath, bSelect, bFocus); - else + } else { throw "Invalid path"; - } - else - { + } + } else { // open this.setExpanded(true); parts = sPath.split("/"); var ti = this.findChildByText(parts[0]); - if (!ti) + if (!ti) { throw "Could not find child node with text \"" + parts[0] + "\""; + } ti.openPath(remainingPath, bSelect, bFocus); } }; -_p.focus = function () -{ +_p.focus = function () { var el = this.getLabelElement(); - if (el) + if (el) { el.focus(); + } }; -_p.getFocused = function () -{ +_p.getFocused = function () { return this._focused; }; +_p._setTabIndex = function (i) { + var a = this.getLabelElement(); + if (a) { + a.setAttribute("tabindex", i); + } +}; + + // HTML generation -_p.toHtml = function () -{ - var childrenSb = []; +_p.toHtml = function () { + var sb = []; var cs = this.childNodes; var l = cs.length; - for (var y = 0; y < l; y++) - childrenSb[y] = cs[y].toHtml(); + for (var y = 0; y < l; y++) { + sb[y] = cs[y].toHtml(); + } var t = this.getTree(); var hideLines = !t.getShowLines() || t == this.parentNode && !t.getShowRootLines(); @@ -785,7 +769,7 @@ _p.toHtml = function () this.getLineStyle() + (this.getExpanded() && this.hasChildren() ? "" : "display:none;") + "\">" + - childrenSb.join("") + + sb.join("") + "</div>"; return "<div class=\"webfx-tree-item\" id=\"" + @@ -795,11 +779,10 @@ _p.toHtml = function () "</div>"; }; -_p.getRowHtml = function () -{ +_p.getRowHtml = function () { var t = this.getTree(); return "<div class=\"" + this.getRowClassName() + "\" style=\"padding-left:" + - (this.getDepth() - 1) * this.indentWidth + "px\">" + + Math.max(0, (this.getDepth() - 1) * this.indentWidth) + "px\">" + this.getExpandIconHtml() + //"<span class=\"webfx-tree-icon-and-label\">" + this.getIconHtml() + @@ -808,18 +791,16 @@ _p.getRowHtml = function () "</div>"; }; -_p.getRowClassName = function () -{ +_p.getRowClassName = function () { return "webfx-tree-row" + (this.isSelected() ? " selected" : "") + (this.action ? "" : " no-action"); }; -_p.getLabelHtml = function () -{ +_p.getLabelHtml = function () { var toolTip = this.getToolTip(); var target = this.getTarget(); return "<a href=\"" + webFXTreeHandler.textToHtml(this._getHref()) + - "\" class=\"webfx-tree-item-label\"" + + "\" class=\"webfx-tree-item-label\" tabindex=\"-1\"" + (toolTip ? " title=\"" + webFXTreeHandler.textToHtml(toolTip) + "\"" : "") + (target ? " target=\"" + target + "\"" : "") + " onfocus=\"webFXTreeHandler.handleEvent(event)\"" + @@ -827,33 +808,28 @@ _p.getLabelHtml = function () this.getHtml() + "</a>"; }; -_p._getHref = function () -{ +_p._getHref = function () { if (typeof this.action == "string") return this.action; else return "#"; }; -_p.getEventHandlersHtml = function () -{ +_p.getEventHandlersHtml = function () { return ""; }; -_p.getIconHtml = function () -{ +_p.getIconHtml = function () { // here we are not using textToHtml since the file names rarerly contains // HTML... return "<img class=\"webfx-tree-icon\" src=\"" + this.getIconSrc() + "\">"; }; -_p.getIconSrc = function () -{ +_p.getIconSrc = function () { throw new Error("getIconSrc called on Abstract Node"); }; -_p.getExpandIconHtml = function () -{ +_p.getExpandIconHtml = function () { // here we are not using textToHtml since the file names rarerly contains // HTML... return "<img class=\"webfx-tree-expand-icon\" src=\"" + @@ -861,14 +837,12 @@ _p.getExpandIconHtml = function () }; -_p.getExpandIconSrc = function () -{ +_p.getExpandIconSrc = function () { var src; var t = this.getTree(); var hideLines = !t.getShowLines() || t == this.parentNode && !t.getShowRootLines(); - if (this.hasChildren()) - { + if (this.hasChildren()) { var bits = 0; /* Bitmap used to determine which icon to use @@ -878,24 +852,23 @@ _p.getExpandIconSrc = function () 8 L Line */ - if (t && t.getShowExpandIcons()) - { - if (this.getExpanded()) + if (t && t.getShowExpandIcons()) { + if (this.getExpanded()) { bits = 2; - else + } else { bits = 1; + } } - if (t && !hideLines) - { - if (this.isLastSibling()) + if (t && !hideLines) { + if (this.isLastSibling()) { bits += 4; - else + } else { bits += 8; + } } - switch (bits) - { + switch (bits) { case 1: return webFXTreeConfig.plusIcon; case 2: @@ -915,25 +888,22 @@ _p.getExpandIconSrc = function () default: // 0 return webFXTreeConfig.blankIcon; } - } - else - { - if (t && hideLines) + } else { + if (t && hideLines) { return webFXTreeConfig.blankIcon; - else if (this.isLastSibling()) + } else if (this.isLastSibling()) { return webFXTreeConfig.lIcon; - else + } else { return webFXTreeConfig.tIcon; + } } }; -_p.getLineStyle = function () -{ +_p.getLineStyle = function () { return "background-position:" + this.getLineStyle2() + ";"; }; -_p.getLineStyle2 = function () -{ +_p.getLineStyle2 = function () { return (this.isLastSibling() ? "-100" : (this.getDepth() - 1) * this.indentWidth) + "px 0"; }; @@ -941,45 +911,39 @@ _p.getLineStyle2 = function () // DOM // this returns the div for the tree node -_p.getElement = function () -{ +_p.getElement = function () { return document.getElementById(this.id); }; // the row is the div that is used to draw the node without the children -_p.getRowElement = function () -{ +_p.getRowElement = function () { var el = this.getElement(); if (!el) return null; return el.firstChild; }; // plus/minus image -_p.getExpandIconElement = function () -{ +_p.getExpandIconElement = function () { var el = this.getRowElement(); if (!el) return null; return el.firstChild; }; -_p.getIconElement = function () -{ +_p.getIconElement = function () { var el = this.getRowElement(); if (!el) return null; return el.childNodes[1]; }; // anchor element -_p.getLabelElement = function () -{ +_p.getLabelElement = function () { var el = this.getRowElement(); if (!el) return null; return el.lastChild; }; // the div containing the children -_p.getChildrenElement = function () -{ +_p.getChildrenElement = function () { var el = this.getElement(); if (!el) return null; return el.lastChild; @@ -988,10 +952,8 @@ _p.getChildrenElement = function () // IE uses about:blank if not attached to document and this can cause Win2k3 // to fail -if (webFXTreeHandler.ie) -{ - _p.create = function () - { +if (webFXTreeHandler.ie) { + _p.create = function () { var dummy = document.createElement("div"); dummy.style.display = "none"; document.body.appendChild(dummy); @@ -1000,124 +962,111 @@ if (webFXTreeHandler.ie) document.body.removeChild(dummy); return res; }; -} -else -{ - _p.create = function () - { +} else { + _p.create = function () { var dummy = document.createElement("div"); dummy.innerHTML = this.toHtml(); return dummy.removeChild(dummy.firstChild); }; - } // Getters and setters for some common fields -_p.setIcon = function (s) -{ +_p.setIcon = function (s) { this.icon = s; - if (this.getCreated()) + if (this.getCreated()) { this.updateIcon(); + } }; -_p.getIcon = function () -{ +_p.getIcon = function () { return this.icon; }; -_p.setOpenIcon = function (s) -{ +_p.setOpenIcon = function (s) { this.openIcon = s; - if (this.getCreated()) + if (this.getCreated()) { this.updateIcon(); + } }; -_p.getOpenIcon = function () -{ +_p.getOpenIcon = function () { return this.openIcon; }; -_p.setText = function (s) -{ +_p.setText = function (s) { this.setHtml(webFXTreeHandler.textToHtml(s)); }; -_p.getText = function () -{ +_p.getText = function () { return webFXTreeHandler.htmlToText(this.getHtml()); }; -_p.setHtml = function (s) -{ +_p.setHtml = function (s) { this.text = s; var el = this.getLabelElement(); - if (el) + if (el) { el.innerHTML = s; + } }; -_p.getHtml = function () -{ +_p.getHtml = function () { return this.text; }; -_p.setTarget = function (s) -{ +_p.setTarget = function (s) { this.target = s; }; -_p.getTarget = function () -{ +_p.getTarget = function () { return this.target; }; -_p.setToolTip = function (s) -{ +_p.setToolTip = function (s) { this.toolTip = s; var el = this.getLabelElement(); - if (el) + if (el) { el.title = s; + } }; -_p.getToolTip = function () -{ +_p.getToolTip = function () { return this.toolTip; }; -_p.setAction = function (oAction) -{ +_p.setAction = function (oAction) { this.action = oAction; var el = this.getLabelElement(); - if (el) + if (el) { el.href = this._getHref(); + } el = this.getRowElement(); - if (el) + if (el) { el.className = this.getRowClassName(); + } }; -_p.getAction = function () -{ +_p.getAction = function () { return this.action; }; // update methods -_p.update = function () -{ +_p.update = function () { var t = this.getTree(); if (t.suspendRedraw) return; var el = this.getElement(); if (!el || !el.parentNode) return; var newEl = this.create(); el.parentNode.replaceChild(newEl, el); - + this.setTabIndex(this.tabIndex); // in case root had the tab index var si = t.getSelected(); - if (si && si.getFocused()) + if (si && si.getFocused()) { si.focus(); + } }; -_p.updateExpandIcon = function () -{ +_p.updateExpandIcon = function () { var t = this.getTree(); if (t.suspendRedraw) return; var img = this.getExpandIconElement(); @@ -1126,8 +1075,7 @@ _p.updateExpandIcon = function () cel.style.backgroundPosition = this.getLineStyle2(); }; -_p.updateIcon = function () -{ +_p.updateIcon = function () { var t = this.getTree(); if (t.suspendRedraw) return; var img = this.getIconElement(); @@ -1136,9 +1084,7 @@ _p.updateIcon = function () // End DOM - -_p._callSuspended = function (f) -{ +_p._callSuspended = function (f) { var t = this.getTree(); var sr = t.getSuspendRedraw(); t.setSuspendRedraw(true); @@ -1148,108 +1094,100 @@ _p._callSuspended = function (f) // Event handlers -_p._onMouseDown = function (e) -{ +_p._onmousedown = function (e) { var el = e.target || e.srcElement; // expand icon - if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) - { + if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) { this.toggle(); - if ( webFXTreeHandler.ie ) + if (webFXTreeHandler.ie) { window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10); + } return false; } this.select(); - if (!/webfx-tree-item-label/.test(el.className) && !webFXTreeHandler.opera) // opera cancels the click if focus is called - { + if (/*!/webfx-tree-item-label/.test(el.className) && */!webFXTreeHandler.opera) { // opera cancels the click if focus is called + // in case we are not clicking on the label - if (webFXTreeHandler.ie) + if (webFXTreeHandler.ie) { window.setTimeout("WebFXTreeAbstractNode._onTimeoutFocus(\"" + this.id + "\")", 10); - else + } else { this.focus(); + } } var rowEl = this.getRowElement(); - if (rowEl) + if (rowEl) { rowEl.className = this.getRowClassName(); + } return false; }; -_p._onClick = function (e) -{ +_p._onclick = function (e) { var el = e.target || e.srcElement; // expand icon - if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) + if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) { return false; + } - if (typeof this.action == "function") + if (typeof this.action == "function") { this.action(); - else if (this.action != null) + } else if (this.action != null) { window.open(this.action, this.target || "_self"); + } return false; }; -_p._onDblClick = function (e) -{ +_p._ondblclick = function (e) { var el = e.target || e.srcElement; // expand icon - if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) + if (/webfx-tree-expand-icon/.test(el.className) && this.hasChildren()) { return; + } this.toggle(); }; -_p._onFocus = function (e) -{ +_p._onfocus = function (e) { this.select(); this._focused = true; }; -_p._onBlur = function (e) -{ +_p._onblur = function (e) { this._focused = false; }; -_p._onKeyDown = function (e) -{ +_p._onkeydown = function (e) { var n; var rv = true; - switch (e.keyCode) - { + switch (e.keyCode) { case 39: // RIGHT - if (e.altKey) - { + if (e.altKey) { rv = true; break; } - if (this.hasChildren()) - { - if (!this.getExpanded()) + if (this.hasChildren()) { + if (!this.getExpanded()) { this.setExpanded(true); - else - { + } else { this.getFirstChild().focus(); } } rv = false; break; case 37: // LEFT - if (e.altKey) - { + if (e.altKey) { rv = true; break; } - if (this.hasChildren() && this.getExpanded()) + if (this.hasChildren() && this.getExpanded()) { this.setExpanded(false); - else - { + } else { var p = this.getParent(); var t = this.getTree(); // don't go to root if hidden - if (p && (t.showRootNode || p != t)) - { + if (p && (t.showRootNode || p != t)) { p.focus(); } } @@ -1258,34 +1196,32 @@ _p._onKeyDown = function (e) case 40: // DOWN n = this.getNextShownNode(); - if (n) - { + if (n) { n.focus(); } rv = false; break; case 38: // UP n = this.getPreviousShownNode() - if (n) - { + if (n) { n.focus(); } rv = false; break; } - if (!rv && e.preventDefault) + if (!rv && e.preventDefault) { e.preventDefault(); + } e.returnValue = rv; return rv; }; -_p._onKeyPress = function (e) -{ - if (!e.altKey && e.keyCode >= 37 && e.keyCode <= 40) - { - if (e.preventDefault) +_p._onkeypress = function (e) { + if (!e.altKey && e.keyCode >= 37 && e.keyCode <= 40) { + if (e.preventDefault) { e.preventDefault(); + } e.returnValue = false; return false; } @@ -1293,11 +1229,11 @@ _p._onKeyPress = function (e) // End event handlers -_p.dispose = function () -{ +_p.dispose = function () { if (this.disposed) return; - for (var i = this.childNodes.length - 1; i >= 0; i--) + for (var i = this.childNodes.length - 1; i >= 0; i--) { this.childNodes[i].dispose(); + } this.tree = null; this.parentNode = null; this.childNodes = null; @@ -1305,44 +1241,41 @@ _p.dispose = function () }; // Some methods that are usable when navigating the tree using the arrows -_p.getLastShownDescendant = function () -{ - if (!this.getExpanded() || !this.hasChildren()) +_p.getLastShownDescendant = function () { + if (!this.getExpanded() || !this.hasChildren()) { return this; + } // we know there is at least 1 child return this.getLastChild().getLastShownDescendant(); }; -_p.getNextShownNode = function () -{ - if (this.hasChildren() && this.getExpanded()) +_p.getNextShownNode = function () { + if (this.hasChildren() && this.getExpanded()) { return this.getFirstChild(); - else - { + } else { var p = this; var next; - while (p != null) - { + while (p != null) { next = p.getNextSibling(); - if (next != null) + if (next != null) { return next; + } p = p.getParent(); } return null; } }; -_p.getPreviousShownNode = function () -{ +_p.getPreviousShownNode = function () { var ps = this.getPreviousSibling(); - if (ps != null) - { + if (ps != null) { return ps.getLastShownDescendant(); } var p = this.getParent(); var t = this.getTree(); - if (!t.showRootNode && p == t) + if (!t.showRootNode && p == t) { return null; + } return p; }; @@ -1356,16 +1289,11 @@ _p.getPreviousShownNode = function () // WebFXTree /////////////////////////////////////////////////////////////////////////////// -function WebFXTree(sText, oAction, sBehavior, sIcon, sOpenIcon) -{ +function WebFXTree(sText, oAction, sBehavior, sIcon, sOpenIcon) { WebFXTreeAbstractNode.call(this, sText, oAction); - - if (sIcon) - this.icon = sIcon; - if (sOpenIcon) - this.openIcon = sOpenIcon; - if (sBehavior) - this.behavior = sBehavior; + if (sIcon) this.icon = sIcon; + if (sOpenIcon) this.openIcon = sOpenIcon; + if (sBehavior) this.behavior = sBehavior; } _p = WebFXTree.prototype = new WebFXTreeAbstractNode; @@ -1380,63 +1308,54 @@ _p.showExpandIcons = true; _p.showRootNode = true; _p.showRootLines = true; -_p.getTree = function () -{ +_p.getTree = function () { return this; }; -_p.getDepth = function () -{ +_p.getDepth = function () { return 0; }; -_p.getCreated = function () -{ +_p.getCreated = function () { return this.rendered; }; /* end tree model */ -_p.getExpanded = function () -{ +_p.getExpanded = function () { return !this.showRootNode || WebFXTreeAbstractNode.prototype.getExpanded.call(this); }; -_p.setExpanded = function (b) -{ - if (!this.showRootNode) +_p.setExpanded = function (b) { + if (!this.showRootNode) { this.open = b; - else + } else { WebFXTreeAbstractNode.prototype.setExpanded.call(this, b); + } }; -_p.getExpandIconHtml = function () -{ +_p.getExpandIconHtml = function () { return ""; }; // we don't have an expand icon here -_p.getIconElement = function () -{ +_p.getIconElement = function () { var el = this.getRowElement(); if (!el) return null; return el.firstChild; }; // no expand icon for root element -_p.getExpandIconElement = function (oDoc) -{ +_p.getExpandIconElement = function (oDoc) { return null; }; -_p.updateExpandIcon = function () -{ +_p.updateExpandIcon = function () { // no expand icon }; -_p.getRowClassName = function () -{ +_p.getRowClassName = function () { return WebFXTreeAbstractNode.prototype.getRowClassName.call(this) + (this.showRootNode ? "" : " webfx-tree-hide-root"); }; @@ -1445,21 +1364,21 @@ _p.getRowClassName = function () // if classic then the openIcon is used for expanded, otherwise openIcon is used // for selected -_p.getIconSrc = function () -{ +_p.getIconSrc = function () { var behavior = this.getTree() ? this.getTree().getBehavior() : webFXTreeConfig.defaultBehavior; var open = behavior == "classic" && this.getExpanded() || behavior != "classic" && this.isSelected(); - if (open && this.openIcon) + if (open && this.openIcon) { return this.openIcon; - if (!open && this.icon) + } + if (!open && this.icon) { return this.icon; + } // fall back on default icons return open ? webFXTreeConfig.openRootIcon : webFXTreeConfig.rootIcon; }; -_p.getEventHandlersHtml = function () -{ +_p.getEventHandlersHtml = function () { return " onclick=\"return webFXTreeHandler.handleEvent(event)\" " + "onmousedown=\"return webFXTreeHandler.handleEvent(event)\" " + "ondblclick=\"return webFXTreeHandler.handleEvent(event)\" " + @@ -1467,118 +1386,116 @@ _p.getEventHandlersHtml = function () "onkeypress=\"return webFXTreeHandler.handleEvent(event)\""; }; -_p.setSelected = function (o) -{ - if (this._selectedItem != o) - { - if (o) - o._setSelected(true); +_p.setSelected = function (o) { + if (this._selectedItem != o && o) { + o._setSelected(true); } }; -_p._fireOnChange = function () -{ - if (this._fireChange && typeof this.onchange == "function") +_p._fireOnChange = function () { + if (this._fireChange && typeof this.onchange == "function") { this.onchange(); + } }; -_p.getSelected = function () -{ +_p.getSelected = function () { return this._selectedItem; }; -_p.setBehavior = function (s) -{ +_p.tabIndex = ""; + +_p.setTabIndex = function (i) { + var n = this._selectedItem || (this.showRootNode ? this : this.firstChild); + this.tabIndex = i; + if (n) { + n._setTabIndex(i); + } +}; + +_p.getTabIndex = function () { + return this.tabIndex; +}; + +_p.setBehavior = function (s) { this.behavior = s; }; -_p.getBehavior = function () -{ +_p.getBehavior = function () { return this.behavior || webFXTreeConfig.defaultBehavior; }; -_p.setShowLines = function (b) -{ - if (this.showLines != b) - { +_p.setShowLines = function (b) { + if (this.showLines != b) { this.showLines = b; - if (this.rendered) + if (this.rendered) { this.update(); + } } }; -_p.getShowLines = function () -{ +_p.getShowLines = function () { return this.showLines; }; -_p.setShowRootLines = function (b) -{ - if (this.showRootLines != b) - { +_p.setShowRootLines = function (b) { + if (this.showRootLines != b) { this.showRootLines = b; - if (this.rendered) + if (this.rendered) { this.update(); + } } }; -_p.getShowRootLines = function () -{ +_p.getShowRootLines = function () { return this.showRootLines; }; -_p.setShowExpandIcons = function (b) -{ - if (this.showExpandIcons != b) - { +_p.setShowExpandIcons = function (b) { + if (this.showExpandIcons != b) { this.showExpandIcons = b; - if (this.rendered) + if (this.rendered) { this.getTree().update(); + } } }; -_p.getShowExpandIcons = function () -{ +_p.getShowExpandIcons = function () { return this.showExpandIcons; }; -_p.setShowRootNode = function (b) -{ - if (this.showRootNode != b) - { +_p.setShowRootNode = function (b) { + if (this.showRootNode != b) { this.showRootNode = b; - if (this.rendered) + if (this.rendered) { this.getTree().update(); + } } }; -_p.getShowRoootNode = function () -{ +_p.getShowRoootNode = function () { return this.showRootNode; }; _p.onchange = function () {}; -_p.create = function () -{ +_p.create = function () { var el = WebFXTreeAbstractNode.prototype.create.call(this); + this.setTabIndex(this.tabIndex); this.rendered = true; return el; }; -_p.write = function () -{ +_p.write = function () { document.write(this.toHtml()); + this.setTabIndex(this.tabIndex); this.rendered = true; }; -_p.setSuspendRedraw = function (b) -{ +_p.setSuspendRedraw = function (b) { this.suspendRedraw = b; }; -_p.getSuspendRedraw = function () -{ +_p.getSuspendRedraw = function () { return this.suspendRedraw; }; @@ -1588,15 +1505,11 @@ _p.getSuspendRedraw = function () // WebFXTreeItem /////////////////////////////////////////////////////////////////////////////// -function WebFXTreeItem(sText, oAction, eParent, sIcon, sOpenIcon) -{ +function WebFXTreeItem(sText, oAction, eParent, sIcon, sOpenIcon) { WebFXTreeAbstractNode.call(this, sText, oAction); - if (sIcon) - this.icon = sIcon; - if (sOpenIcon) - this.openIcon = sOpenIcon; - if (eParent) - eParent.add(this); + if (sIcon) this.icon = sIcon; + if (sOpenIcon) this.openIcon = sOpenIcon; + if (eParent) eParent.add(this); } _p = WebFXTreeItem.prototype = new WebFXTreeAbstractNode; @@ -1604,48 +1517,49 @@ _p.tree = null; /* tree model */ -_p.getDepth = function () -{ - if (this.depth != null) +_p.getDepth = function () { + if (this.depth != null) { return this.depth; - if (this.parentNode) - { + } + if (this.parentNode) { var pd = this.parentNode.getDepth(); return this.depth = (pd != null ? pd + 1 : null); } return null; }; -_p.getTree = function () -{ - if (this.tree) +_p.getTree = function () { + if (this.tree) { return this.tree; - if (this.parentNode) + } + if (this.parentNode) { return this.tree = this.parentNode.getTree(); + } return null; }; -_p.getCreated = function () -{ +_p.getCreated = function () { var t = this.getTree(); return t && t.getCreated(); }; // if classic then the openIcon is used for expanded, otherwise openIcon is used // for selected -_p.getIconSrc = function () -{ +_p.getIconSrc = function () { var behavior = this.getTree() ? this.getTree().getBehavior() : webFXTreeConfig.defaultBehavior; var open = behavior == "classic" && this.getExpanded() || behavior != "classic" && this.isSelected(); - if (open && this.openIcon) + if (open && this.openIcon) { return this.openIcon; - if (!open && this.icon) + } + if (!open && this.icon) { return this.icon; + } // fall back on default icons - if (this.hasChildren()) + if (this.hasChildren()) { return open ? webFXTreeConfig.openFolderIcon : webFXTreeConfig.folderIcon; + } return webFXTreeConfig.fileIcon; }; @@ -1654,10 +1568,8 @@ _p.getIconSrc = function () -if (window.attachEvent) -{ - window.attachEvent("onunload", function () - { +if (window.attachEvent) { + window.attachEvent("onunload", function () { for (var id in webFXTreeHandler.all) webFXTreeHandler.all[id].dispose(); }); |