63 lines
1.6 KiB
JavaScript
63 lines
1.6 KiB
JavaScript
// xCollapsible, Copyright 2005 Michael Foster (Cross-Browser.com)
|
|
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
|
|
|
|
function xCollapsible(outerEle, bShow) // object prototype
|
|
{
|
|
// Constructor
|
|
|
|
var container = xGetElementById(outerEle);
|
|
if (!container) {return null;}
|
|
var isUL = container.nodeName.toUpperCase() == 'UL';
|
|
var i, trg, aTgt = xGetElementsByTagName(isUL ? 'UL':'DIV', container);
|
|
for (i = 0; i < aTgt.length; ++i) {
|
|
trg = xPrevSib(aTgt[i]);
|
|
if (trg && (isUL || trg.nodeName.charAt(0).toUpperCase() == 'H')) {
|
|
aTgt[i].xTrgPtr = trg;
|
|
aTgt[i].style.display = bShow ? 'block' : 'none';
|
|
trg.style.cursor = 'pointer';
|
|
trg.xTgtPtr = aTgt[i];
|
|
trg.onclick = trg_onClick;
|
|
}
|
|
}
|
|
|
|
// Private
|
|
|
|
function trg_onClick()
|
|
{
|
|
var tgt = this.xTgtPtr.style;
|
|
if (tgt.display == 'none') {
|
|
tgt.display = 'block';
|
|
}
|
|
else {
|
|
tgt.display = 'none';
|
|
}
|
|
}
|
|
|
|
// Public
|
|
|
|
this.displayAll = function(bShow)
|
|
{
|
|
for (var i = 0; i < aTgt.length; ++i) {
|
|
if (aTgt[i].xTrgPtr) {
|
|
xDisplay(aTgt[i], bShow ? "block":"none");
|
|
}
|
|
}
|
|
};
|
|
|
|
// The unload listener is for IE's circular reference memory leak bug.
|
|
this.onUnload = function()
|
|
{
|
|
if (!xIE4Up || !container || !aTgt) {return;}
|
|
for (i = 0; i < aTgt.length; ++i) {
|
|
trg = aTgt[i].xTrgPtr;
|
|
if (trg) {
|
|
if (trg.xTgtPtr) {
|
|
trg.xTgtPtr.TrgPtr = null;
|
|
trg.xTgtPtr = null;
|
|
}
|
|
trg.onclick = null;
|
|
}
|
|
}
|
|
};
|
|
}
|