]> git.stg.codes - stg.git/blobdiff - doc/help/xslt/slides/browser/xbCollapsibleLists.js
DocBook documentation stub added
[stg.git] / doc / help / xslt / slides / browser / xbCollapsibleLists.js
diff --git a/doc/help/xslt/slides/browser/xbCollapsibleLists.js b/doc/help/xslt/slides/browser/xbCollapsibleLists.js
new file mode 100644 (file)
index 0000000..6a4f93c
--- /dev/null
@@ -0,0 +1,537 @@
+/*
+xbCollapsibleLists.js 2001-02-26
+
+Contributor(s): Michael Bostock, Netscape Communications, Copyright 1997
+                Bob Clary, Netscape Communications, Copyright 2001
+                Seth Dillingham, Macrobyte Resources, Copyright 2001
+                Mark Filanowicz, Amdahl IT Services, Copyright 2002
+                
+Netscape grants you a royalty free license to use, modify or 
+distribute this software provided that this copyright notice 
+appears on all copies.  This software is provided "AS IS," 
+without a warranty of any kind.
+
+See xbCollapsibleLists.js.changelog.html for details of changes.
+*/
+
+
+var xbcl__id = 0;
+var xbcl_item_id = 0;
+var xbcl_mLists = new Array();
+var xbcl_parentElement = null;
+
+document.lists = xbcl_mLists;
+
+function List(visible, width, height, bgColor, collapsedImageURL, expandedImageURL) 
+{
+  this.lists   = new Array();  // sublists
+  this.items   = new Array();  // layers
+  this.types   = new Array();  // type
+  this.strs    = new Array();  // content
+  this.visible = visible;
+  this.id      = xbcl__id;
+  this.width   = width || 350;
+  this.height  = height || 22;
+  
+  this.collapsedImageURL = collapsedImageURL || 'false.gif';
+  this.expandedImageURL  = expandedImageURL || 'true.gif';
+  
+  if (bgColor) 
+    this.bgColor = bgColor;
+
+  xbcl_mLists[xbcl__id++] = this;
+}
+
+function xbcl_SetFont(i,j) 
+{
+  this.fontIntro = i;
+  this.fontOutro = j;
+}
+
+function xbcl_GetFont() 
+{
+  return [this.fontIntro, this.fontOutro];
+}
+
+function xbcl_setIndent(indent) 
+{ 
+  this.i = indent; 
+  if (this.i < 0) 
+  { 
+    this.i = 0; 
+    this.space = false; 
+  }
+  else
+    this.space = true;
+}
+
+function xbcl_getIndent(indent)
+{
+  return this.i;
+}
+
+function xbcl_writeItemDOMHTML( obj, s, flList, listObj )
+{
+  var styleObj;
+  var outerDiv, innerLeft, innerRight;
+  var str;
+  var leftEdge = 0;
+  
+  styleObj = new xbStyle(obj);
+  styleObj.setVisibility('hidden');
+  outerDiv = document.createElement( "DIV" );
+  outerDiv.id = "DIV_" + obj.id;
+  styleObj = new xbStyle( outerDiv );
+  styleObj.setWidth( this.width );
+  
+  if ( flList )
+  {
+    innerLeft = document.createElement( "DIV" );
+    innerLeft.style.position = "absolute";
+    innerLeft.style.valign = "middle";
+    leftEdge = 15;
+    
+    styleObj = new xbStyle( innerLeft );
+    styleObj.setWidth( 15 );
+    styleObj.setBackgroundColor( "transparent" );
+    
+    if ( listObj.visible )
+      str = '<A TARGET="_self" HREF="javascript:xbcl_expand(' + listObj.id + ');"><IMG BORDER="0" SRC="' + this.expandedImageURL + '" ID="_img' + listObj.id + '" NAME="_img' + listObj.id + '"></A>';
+    else
+      str = '<A TARGET="_self" HREF="javascript:xbcl_expand(' + listObj.id + ');"><IMG BORDER="0" SRC="' + this.collapsedImageURL + '" ID="_img' + listObj.id + '" NAME="_img' + listObj.id + '"></A>';
+    
+    innerLeft.innerHTML = str;
+    outerDiv.appendChild( innerLeft );
+  }
+  else if ( this.space )
+    leftEdge = 15;
+  
+  innerRight = document.createElement( "DIV" );
+  innerRight.noWrap = true;
+  innerRight.style.position = "absolute";
+  
+  styleObj = new xbStyle( innerRight );
+  styleObj.setLeft( leftEdge + ( this.l * this.i ) );
+  styleObj.setWidth( this.width - 15 - this.l * this.i );
+  styleObj.setBackgroundColor( "transparent" );
+  
+  // start of change by Mark Filanowicz  02-22-2002
+  if ( flList ) 
+       {
+         s = this.fontIntro + '<A TARGET="_self" STYLE="text-decoration: none;" HREF="javascript:xbcl_expand(' + listObj.id + ');">' + s + this.fontOutro;
+       }
+       else
+       {
+  s = this.fontIntro + s + this.fontOutro;
+       }
+  // end of change by Mark Filanowicz  02-22-2002
+  
+  
+  innerRight.innerHTML = s;
+  outerDiv.appendChild( innerRight );
+
+  obj.appendChild( outerDiv );
+  
+  return;
+}
+
+function xbcl_writeItem( obj, s, flList, listObj )
+{
+  var cellStyle = '';
+  var str = '';
+  var styleObj = new xbStyle( obj );
+  
+  styleObj.setVisibility( 'hidden' );
+  
+  if ( document.body && document.body.style )
+    cellStyle = ' style="background-color: transparent;"';
+  
+  str += '<TABLE WIDTH='+this.width+' NOWRAP BORDER="0" CELLPADDING="0" CELLSPACING="0"><TR>';
+
+  if ( flList ) 
+  {
+    str += '<TD WIDTH="15" NOWRAP VALIGN="MIDDLE"' + cellStyle + '>';
+    str += '<A TARGET="_self" HREF="javascript:xbcl_expand(' + listObj.id + ');">';
+    
+    if ( listObj.visible )
+      str += '<IMG BORDER="0" SRC="' + this.expandedImageURL + '" ID="_img' +  listObj.id + '" NAME="_img' + listObj.id + '">';
+    else
+      str += '<IMG BORDER="0" SRC="' + this.collapsedImageURL + '" ID="_img' +  listObj.id + '" NAME="_img' + listObj.id + '">';
+    
+    str += '</A></TD>';
+  } 
+  else if (this.space)
+    str += '<TD WIDTH="15" NOWRAP' + cellStyle + '>&nbsp;</TD>';
+  
+  if (this.l>0 && this.i>0) 
+    str += '<TD WIDTH="' + this.l*this.i+ '" NOWRAP' + cellStyle + '>&nbsp;</TD>';
+
+  str += '<TD HEIGHT="' + ( this.height - 3) + '" WIDTH="' + ( this.width - 15 - this.l * this.i ) + '" VALIGN="MIDDLE" ALIGN="LEFT"' + cellStyle + '>';
+  
+  // start of change by Mark Filanowicz  02-22-2002
+  if ( flList ) 
+       {
+         str += this.fontIntro + '<A TARGET="_self" STYLE="text-decoration: none;" HREF="javascript:xbcl_expand(' + listObj.id + ');">' + s + this.fontOutro;
+       }
+       else
+       {
+  str += this.fontIntro + s + this.fontOutro;
+       }
+  // end of change by Mark Filanowicz  02-22-2002
+  
+  str += '</TD></TR></TABLE>';
+  
+  styleObj.setInnerHTML( str );
+  
+  return;
+}
+
+function xbcl_writeList()
+{
+  var item;
+  var i;
+  var flList;
+  
+  for ( i = 0; i < this.types.length; i++ )
+  {
+    item = this.items[ i ];
+    flList = ( this.types[ i ] == 'list' );
+    
+    this._writeItem( item, this.strs[ i ], flList, this.lists[ i ] );
+    
+    if ( flList && this.lists[ i ].visible )
+      this.lists[ i ]._writeList();
+  }
+  
+  this.built = true;
+  this.needsRewrite = false;
+  self.status = '';
+}
+
+function xbcl_showList() 
+{
+  var item;
+  var styleObj;
+  var i;
+
+  for (i = 0; i < this.types.length; i++) 
+  { 
+    item = this.items[i];
+    styleObj = new xbStyle(item);
+    styleObj.setClipLeft(0);
+    styleObj.setClipRight(this.width);
+    styleObj.setClipTop(0);
+    if (item.height)
+    {
+      styleObj.setClipBottom(item.height);
+      styleObj.setHeight(item.height);
+    }
+    else
+    {
+      styleObj.setClipBottom(this.height);
+      styleObj.setHeight(this.height);
+    }
+    
+    if ( this.visible )
+      styleObj.setVisibility( 'visible' );
+
+    var bg = item.oBgColor || this.bgColor;
+    if ((bg == null) || (bg == 'null')) 
+      bg = '';
+
+    styleObj.setBackgroundColor(bg);
+
+    if (this.types[i] == 'list' && this.lists[i].visible)
+      this.lists[i]._showList();
+  }
+  this.shown = true;
+  this.needsUpdate = false;
+}
+
+function xbcl_setImage(list, item, file)
+{
+  var id = '_img' + list.id;
+  var img = null;
+  
+  // for DOMHTML or IE4 use cross browser getElementById from xbStyle
+  // can't use it for NN4 since it only works for layers in NN4
+  if (document.layers) 
+    img = item.document.images[0];
+  else 
+    img = xbGetElementById(id);
+    
+  if (img)
+    img.src = file;
+}
+
+function xbcl_getHeight() 
+{
+  var totalHeight = 0;
+  var i;
+  
+  if (!this.visible)
+    return 0;
+  
+  for (i = 0; i < this.types.length; i++) 
+  {
+    if (this.items[i].height)
+      totalHeight += this.items[i].height;
+    else
+      totalHeight += this.height;
+    
+    if ((this.types[i] == 'list') && this.lists[i].visible)
+    {
+      totalHeight += this.lists[i].getHeight();
+    }
+  }
+  
+  return totalHeight;
+}
+
+function xbcl_updateList(pVis, x, y) 
+{
+  var currTop = y; 
+  var item;
+  var styleObj;
+  var i;
+
+  for (i = 0; i < this.types.length; i++) 
+  { 
+    item = this.items[i];
+    styleObj = new xbStyle(item);
+
+    if (this.visible && pVis) 
+    {
+      styleObj.moveTo(x, currTop);
+      if (item.height)  // allow custom heights for each item
+        currTop += item.height;
+      else
+        currTop += this.height;
+      
+      styleObj.setVisibility('visible');
+    } 
+    else 
+    {
+      styleObj.setVisibility('hidden');
+    }
+
+    if (this.types[i] == 'list') 
+    {
+      if (this.lists[i].visible) 
+      {
+        if (!this.lists[i].built || this.lists[i].needsRewrite) 
+          this.lists[i]._writeList();
+
+        if (!this.lists[i].shown || this.lists[i].needsUpdate) 
+          this.lists[i]._showList();
+
+        xbcl_setImage(this.lists[i], item, this.expandedImageURL );
+      } 
+      else 
+        xbcl_setImage(this.lists[i], item, this.collapsedImageURL );
+
+      if (this.lists[i].built)
+        currTop = this.lists[i]._updateList(this.visible && pVis, x, currTop);
+    }
+  }
+  return currTop;
+}
+
+function xbcl_updateParent( pid, l ) 
+{
+  var i;
+
+  if ( !l ) 
+    l = 0;
+
+  this.pid = pid;
+  this.l = l;
+
+  for ( i = 0; i < this.types.length; i++ )
+  {
+    if ( this.types[ i ] == 'list' )
+    {
+      this.lists[ i ]._updateParent( pid, l + 1 );
+    }
+  }
+}
+
+function xbcl_expand(i) 
+{
+  xbcl_mLists[i].visible = !xbcl_mLists[i].visible;
+
+  if (xbcl_mLists[i].onexpand != null) 
+    xbcl_mLists[i].onexpand(xbcl_mLists[i].id);
+
+  xbcl_mLists[xbcl_mLists[i].pid].rebuild();
+
+  if (xbcl_mLists[i].postexpand != null) 
+    xbcl_mLists[i].postexpand(xbcl_mLists[i].id);
+}
+
+function xbcl_build(x, y) 
+{
+  this._updateParent(this.id);
+  this._writeList();
+  this._showList();
+  this._updateList(true, x, y);
+  this.x = x; 
+  this.y = y;
+}
+
+function xbcl_rebuild() 
+{ 
+  this._updateList(true, this.x, this.y); 
+}
+
+function xbcl_getNewItem()
+{
+  var newItem = null;
+
+  newItem = xbGetElementById('lItem' + xbcl_item_id);
+
+  if (!newItem) 
+  {
+    if (document.all && !document.getElementById)
+    {
+      var parentElement = this.parentElement;
+      if (!parentElement)
+        parentElement = document.body;
+        
+      parentElement.insertAdjacentHTML('beforeEnd', '<div id="lItem' + xbcl_item_id + '" style="position:absolute;"></div>');
+      newItem = xbGetElementById('lItem' + xbcl_item_id);
+    }
+    else if (document.layers)
+    {
+      if (this.parentElement)
+        newItem = new Layer(this.width, this.parentElement);
+      else
+        newItem = new Layer(this.width);
+    }
+    else if (document.createElement)
+    {
+      newItem = document.createElement('div');
+      newItem.id= 'lItem' + xbcl_item_id;
+      newItem.style.position = 'absolute';
+
+      if (this.parentElement)
+        this.parentElement.appendChild(newItem);
+      else 
+        document.body.appendChild(newItem);
+    }
+  }
+
+  return newItem;
+}
+
+function xbcl_addItem(str, bgColor, item) 
+{
+  if (!item) 
+    item = this._getNewItem();
+  
+  if (!item)
+    return;
+
+  if (bgColor) 
+    item.oBgColor = bgColor;
+
+  this.items[this.items.length] = item;
+  this.types[this.types.length] = 'item';
+  this.strs[this.strs.length] = str;
+  ++xbcl_item_id;
+  
+  if ( this.built )
+  {
+    this._writeItem( item, str, false );
+    xbcl_mLists[this.pid].rebuild();
+    if ( this.visible )
+      this._showList();
+    else
+      this.needsUpdate = true;
+  }
+  
+  return item;
+}
+
+function xbcl_addList(list, str, bgColor, item) 
+{
+  if (!item) 
+    item = this._getNewItem();
+
+  if (!item)
+    return;
+
+  if (bgColor) 
+    item.oBgColor = bgColor;
+
+  this.lists[this.items.length] = list;
+  this.items[this.items.length] = item;
+  this.types[this.types.length] = 'list';
+  this.strs[this.strs.length] = str;
+  ++xbcl_item_id;
+  
+  list.parentList = this;
+  
+  list.pid = this.pid;
+  list.l = this.l + 1;
+  
+  if ( this.built )
+  {
+    this._writeItem( item, str, true, list );
+    xbcl_mLists[ this.pid ].rebuild();
+    if ( this.visible )
+      this._showList();
+    else
+      this.needsUpdate = true;
+  }
+  
+  return item;
+}
+
+List.prototype.setIndent     = xbcl_setIndent;
+List.prototype.getIndent     = xbcl_getIndent;
+List.prototype.addItem       = xbcl_addItem;
+List.prototype.addList       = xbcl_addList;
+List.prototype.build         = xbcl_build;
+List.prototype.rebuild       = xbcl_rebuild;
+List.prototype.setFont       = xbcl_SetFont;
+List.prototype.getFont       = xbcl_GetFont;
+List.prototype.getHeight     = xbcl_getHeight;
+
+List.prototype._writeList    = xbcl_writeList;
+List.prototype._getNewItem   = xbcl_getNewItem;
+
+if ( document.getElementById && document.createElement )
+  List.prototype._writeItem  = xbcl_writeItemDOMHTML;
+else
+  List.prototype._writeItem  = xbcl_writeItem;
+
+List.prototype._showList     = xbcl_showList;
+List.prototype._updateList   = xbcl_updateList;
+List.prototype._updateParent = xbcl_updateParent;
+
+List.prototype.onexpand      = null;
+List.prototype.postexpand    = null;
+List.prototype.lists         = null;  // sublists
+List.prototype.items         = null;  // layers
+List.prototype.types         = null;  // type
+List.prototype.strs          = null;  // content
+List.prototype.x             = 0;
+List.prototype.y             = 0;
+List.prototype.visible       = false;
+List.prototype.id            = -1;
+List.prototype.i             = 18;
+List.prototype.space         = true;
+List.prototype.pid           = 0;
+List.prototype.fontIntro     = '';
+List.prototype.fontOutro     = '';
+List.prototype.width         = 350;
+List.prototype.height        = 22;
+List.prototype.built         = false;
+List.prototype.shown         = false;
+List.prototype.needsUpdate   = false;
+List.prototype.needsRewrite  = false;
+List.prototype.l             = 0;
+List.prototype.bgColor       = null;
+List.prototype.parentList    = null;
+List.prototype.parentElement = null;