--- trunk/hide.js 2004/09/12 18:25:03 15 +++ trunk/hide.js 2004/09/12 19:08:43 16 @@ -1,8 +1,28 @@ +/* + simple yet powerful implementation of show/hide effect + with history navigation (back/forward/default) + + Dobrica Pavlinusic 2004-09-12 +*/ + var changed_display_ids = []; var changed_display_pos = 0; +var id_cache = []; + +function element_id(id) { + if (id_cache[id]) { + return id_cache[id]; + } else { + var el = document.getElementById(id); + if (el) { + id_cache[id] = el; + return el; + } + } +} function toggle_display(name,dont_save) { - var el = eval("document.getElementById('"+name+"')"); + var el = element_id(name); if (el) { if (el.style.display=='none') el.style.display = ''; @@ -15,7 +35,7 @@ return false; } -function apply_changed_display() { +function default_display() { for (var i = 0; i <= changed_display_pos; i++) { toggle_display( changed_display_ids[i], 1 ); } @@ -40,9 +60,13 @@ toggle_display( changed_display_ids[changed_display_pos++], 1 ); } +function reset_changed() { + changed_display_ids.length = 0; + changed_display_pos = 0; +} function set_display(name,display) { - var el = eval("document.getElementById('"+name+"')"); + var el = element_id(name); if (el) el.style.display = display else alert("can't set_display("+name+","+display+")"); @@ -54,12 +78,14 @@ for (var i = 0; i < show.length; i++) { set_display(show[i],''); } + reset_changed(); } function hide_display(hide) { for (var i = 0; i < hide.length; i++) { set_display(hide[i],'none'); } + reset_changed(); } function show_hide_display(show,hide) {