diff options
Diffstat (limited to 'install/static/navigation.js')
-rw-r--r-- | install/static/navigation.js | 64 |
1 files changed, 61 insertions, 3 deletions
diff --git a/install/static/navigation.js b/install/static/navigation.js index 169729ba0..3aa49fe2b 100644 --- a/install/static/navigation.js +++ b/install/static/navigation.js @@ -18,6 +18,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* use this to track individual changes between two hashchange events */ +var window_hash_cache = {}; function nav_create(nls, container, tabclass) { @@ -38,6 +40,8 @@ function nav_create(nls, container, tabclass) return true; } }); + + nav_update_tabs(nls, container); } function nav_generate_tabs(nls, container, tabclass, depth) @@ -62,9 +66,7 @@ function nav_generate_tabs(nls, container, tabclass, depth) var div = nav_create_tab_div(n.name); container.append(div); - if (n.setup) { - n.setup(div); - } else if (n.children) { + if (n.children) { nav_generate_tabs(n.children, div, tabclass, depth +1 ); } } @@ -103,3 +105,59 @@ function nav_select_tabs(nls, container) } } } + +function nav_update_tabs(nls, container) +{ + nav_select_tabs(nls, container); + + var index1 = container.tabs('option', 'selected'); + if (index1 >= nls.length) return; + + var tab1 = nls[index1]; + if (!tab1.children) return; + + var div1 = $('#' + tab1.name); + var index2 = div1.tabs('option', 'selected'); + if (index2 >= tab1.children.length) return; + + var tab2 = tab1.children[index2]; + var obj_name = tab2.name; + var entity_setup = tab2.setup; + var div2 = $('#' + tab2.name); + + var state = obj_name + '-facet'; + var facet = $.bbq.getState(state, true) || 'search'; + var last_facet = window_hash_cache[state]; + + if (facet != last_facet) { + entity_setup(div2); + window_hash_cache[state] = facet; + + } else if (facet == 'search') { + state = obj_name + '-filter'; + var filter = $.bbq.getState(state, true); + var last_filter = window_hash_cache[state]; + if (filter == last_filter) return; + + entity_setup(div2); + window_hash_cache[state] = filter; + + } else if (facet == 'details') { + state = obj_name + '-pkey'; + var pkey = $.bbq.getState(state, true); + var last_pkey = window_hash_cache[state]; + if (pkey == last_pkey) return; + + entity_setup(div2); + window_hash_cache[state] = pkey; + + } else if (facet == 'associate') { + state = obj_name + '-enroll'; + var enroll = $.bbq.getState(state, true); + var last_enroll = window_hash_cache[state]; + if (enroll == last_enroll) return; + + entity_setup(div2); + window_hash_cache[state] = enroll; + } +} |