ensure that we only fetch this setting once per page
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 12 Nov 2010 19:43:27 +0000 (19:43 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 12 Nov 2010 19:43:27 +0000 (19:43 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@18715 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/common/js/opac_utils.js

index 8499c5e..64bfc50 100644 (file)
@@ -827,17 +827,34 @@ function drawOrgTree() {
        //setTimeout( 'buildOrgSelector(G.ui.common.org_tree, orgTreeSelector);', 10 );
        setTimeout( 'buildOrgSelector(G.ui.common.org_tree, orgTreeSelector);', 1 );
 }
-       
+
+var checkOrgHiding_cached = false;
+var checkOrgHiding_cached_context_org;
+var checkOrgHiding_cached_depth;
 function checkOrgHiding() {
-       var context_org = getOrigLocation() || globalOrgTree.id();
-       var depth = fetchOrgSettingDefault( context_org, 'opac.org_unit_hiding.depth');
-       if (isXUL()) {
-               return false; // disable org hiding for staff client
-       }
-       if ( findOrgDepth( context_org ) < depth ) {
-               return false; // disable org hiding if Original Location doesn't make sense with setting depth (avoids disjointed org selectors)
-       }
-       return { 'org' : findOrgUnit(context_org), 'depth' : depth };
+    if (isXUL()) {
+        return false; // disable org hiding for staff client
+    }
+    var context_org = getOrigLocation() || globalOrgTree.id();
+    var depth;
+    if (checkOrgHiding_cached) {
+        if (checkOrgHiding_cached_context_org != context_org) {
+            checkOrgHiding_cached_context_org = context_org;
+            checkOrgHiding_cached_depth = undefined;
+            checkOrgHiding_cached = false;
+        } else {
+            depth = checkOrgHiding_cached_depth;
+        }
+    } else {
+        depth = fetchOrgSettingDefault( context_org, 'opac.org_unit_hiding.depth');
+        checkOrgHiding_cached_depth = depth;
+        checkOrgHiding_cached_context_org = context_org;
+        checkOrgHiding_cached = true;
+    }
+    if ( findOrgDepth( context_org ) < depth ) {
+        return false; // disable org hiding if Original Location doesn't make sense with setting depth (avoids disjointed org selectors)
+    }
+    return { 'org' : findOrgUnit(context_org), 'depth' : depth };
 }
 
 var orgTreeSelector;