[ Index ]

Source Code Reference for V1.00

title

Body

[close]

/js/ -> collapse.js (source)

   1  /**
   2   * Support for collapsible views. 
   3   *
   4   * Rows are marked with an ID.  Rows are deleted by ID, or added by ID.
   5   * The user
   6   */
   7  
   8  var saved_rows = new Comparable;
   9  
  10  function toggle_collapse(item, collapse) {
  11      var item_image = document.getElementById('image_' + item);
  12      if (! item_image) {
  13          return false;
  14      }
  15      // Grab the row that belongs to the icon
  16      var item_elem = document.getElementById('r_' + item);
  17      var parent = item_elem.parentNode;
  18      // Check to see if the item is toggled.
  19      // This braindead method is required because IE does not
  20      // implement substr correctly and you cannot use negative
  21      // offsets. Why anyone would use such a crappy browser is
  22      // beyond me.
  23      var bottom = item_image.name.substr(item_image.name.length-2,2);
  24      if (bottom == '_0') {
  25          // Item is collapsed, expand it.
  26          if (collapse) {
  27              return false;
  28          }
  29          var orig = saved_rows.find(item);
  30          if (orig) {
  31              // Find the next sibling and insert the node before it.
  32              var next = item_elem.nextSibling;
  33              for (var j = 0, j_cmp = orig.length; j < j_cmp; j++)
  34                  parent.insertBefore(orig[j], next);
  35              item_image.name = item_image.id + '_1';
  36              item_image.src = './images/arrow-down.gif';
  37          } 
  38      } else {
  39          // Item is expanded, collapse it.
  40          item_image.name = item_image.id + '_0';
  41          item_image.src = './images/arrow-right.gif';
  42          var row_array = new Array();
  43          var rid = 0;
  44          var sib = item_elem.nextSibling;
  45          var level_item = document.getElementById('rl_' + item);
  46          var level = level_item.value;
  47          while (sib) {
  48              if (! sib.id) {
  49                  sib = sib.nextSibling;
  50                  continue;
  51              }
  52              var sib_id = sib.id.substr(2);
  53              var sublevel = document.getElementById('rl_' + sib_id).value;
  54              if (sublevel <= level)
  55                  break;
  56              var nxt = sib.nextSibling;
  57              // Now delete the row
  58              row_array[rid++] = parent.removeChild(sib);
  59              sib = nxt;
  60          }
  61          saved_rows.add(item, row_array);
  62      }
  63      return true;
  64  }
  65  
  66  function collapse_all(parent) {
  67      var parent_elem = document.getElementById(parent);
  68      for (var i = 0, i_cmp = parent_elem.childNodes.length; i < i_cmp; i++) {
  69          if (parent_elem.childNodes[i].tagName == 'TR' && parent_elem.childNodes[i].id) {
  70              toggle_collapse(parent_elem.childNodes[i].id.substr(2), true);
  71          }
  72      }
  73  }
  74  
  75  var show_tab_function = null;
  76  var hide_tab_function = null;
  77  
  78  function show_tab(i) {
  79      hide_tabs();
  80      if (show_tab_function) {
  81          show_tab_function(i);
  82          return;
  83      }
  84      var tab = document.getElementById('tab_' + i);
  85      tab.style.display = 'block';
  86      tab = document.getElementById('toptab_' + i);
  87      tab.className = 'tabon';
  88  }
  89  
  90  function hide_tabs() {
  91      if (hide_tab_function) {
  92          hide_tab_function();
  93          return;
  94      }
  95      var tabs = document.getElementsByTagName('td');
  96      var i;
  97      for(i = 0; i < tabs.length; i++) {
  98          if (tabs[i].className == 'tabon') {
  99              tabs[i].className = 'taboff';
 100          }
 101      }
 102  
 103      tabs = document.getElementsByTagName('div');
 104      for(i = 0; i < tabs.length; i++) {
 105          if (tabs[i].className == 'tab') {
 106              tabs[i].style.display = 'none';
 107          }
 108      }
 109  } 


Generated: Thu Nov 20 03:00:14 2008 Cross-referenced by PHPXref 0.7