diff -r 5e8fd89c02ea -r a38876c0793c includes/clientside/static/expander.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/clientside/static/expander.js Tue Jun 24 23:37:23 2008 -0400 @@ -0,0 +1,137 @@ +/* + * Expandable fieldsets + */ + +var expander_onload = function() +{ + var sets = document.getElementsByTagName('fieldset'); + if ( sets.length < 1 ) + return false; + var init_us = []; + for ( var index = 0; index < sets.length; index++ ) + { + var mode = sets[index].getAttribute('enano:expand'); + if ( mode == 'closed' || mode == 'open' ) + { + init_us.push(sets[index]); + } + } + for ( var k = 0; k < init_us.length; k++ ) + { + expander_init_element(init_us[k]); + } +} + +function expander_init_element(el) +{ + // get the legend tag + var legend = el.getElementsByTagName('legend')[0]; + if ( !legend ) + return false; + // existing content + var existing_inner = legend.innerHTML; + // blank the innerHTML and replace it with a link + legend.innerHTML = ''; + var button = document.createElement('a'); + button.className = 'expander expander-open'; + button.innerHTML = existing_inner; + button.href = '#'; + + legend.appendChild(button); + + button.onclick = function() + { + try + { + expander_handle_click(this); + } + catch(e) + { + console.debug('Exception caught: ', e); + } + return false; + } + + if ( el.getAttribute('enano:expand') == 'closed' ) + { + expander_close(el); + } +} + +function expander_handle_click(el) +{ + if ( el.parentNode.parentNode.tagName != 'FIELDSET' ) + return false; + var parent = el.parentNode.parentNode; + if ( parent.getAttribute('enano:expand') == 'closed' ) + { + expander_open(parent); + } + else + { + expander_close(parent); + } +} + +function expander_close(el) +{ + var children = el.childNodes; + for ( var i = 0; i < children.length; i++ ) + { + var child = children[i]; + if ( child.tagName == 'LEGEND' ) + { + var a = child.getElementsByTagName('a')[0]; + $(a).rmClass('expander-open'); + $(a).addClass('expander-closed'); + continue; + } + if ( child.style ) + { + child.expander_meta_old_state = child.style.display; + child.style.display = 'none'; + } + } + el.expander_meta_padbak = el.style.padding; + el.setAttribute('enano:expand', 'closed'); +} + +function expander_open(el) +{ + var children = el.childNodes; + for ( var i = 0; i < children.length; i++ ) + { + var child = children[i]; + if ( child.tagName == 'LEGEND' ) + { + var a = child.getElementsByTagName('a')[0]; + $(a).rmClass('expander-closed'); + $(a).addClass('expander-open'); + continue; + } + if ( child.expander_meta_old_state && child.style ) + { + child.style.display = child.expander_meta_old_state; + child.expander_meta_old_state = null; + } + else + { + if ( child.style ) + { + child.style.display = null; + } + } + } + if ( el.expander_meta_padbak ) + { + el.style.padding = el.expander_meta_padbak; + el.expander_meta_padbak = null; + } + else + { + el.style.padding = null; + } + el.setAttribute('enano:expand', 'open'); +} + +addOnloadHook(expander_onload);