mkdru.removeLimits() no longer leaves dangling limit_subject
[mkdru-moved-to-drupal.org.git] / mkdru.client.js
index ce5637e..5c2d0d0 100644 (file)
@@ -34,12 +34,11 @@ var mkdru = {
       limiter: 'au'
     }
   },
-  // State
+  // State; Keys limit_{facet key} will also be initialised
   defaultState: {
     page: 1,
     perpage: 20,
     sort: 'relevance',
-    filter: null,
     query:'',
     recid:null
   },
@@ -228,21 +227,28 @@ mkdru.uiFromState = function () {
 };
 
 mkdru.hashChange = function () {
+  // do we need to restart the search?
+  var searchTrigger = false;
+  // shallow copy of state so we can see what changed.
+  var oldState = $.extend({}, mkdru.state);
   mkdru.stateFromHash();
-  // Request for details
-  if (mkdru.state.recid) {
+  // only have to compare values since all keys are initialised
+  for (key in mkdru.state) {
+    var changed = (mkdru.state[key] != oldState[key]);
+    if (key.substring(0,5) === 'limit' && changed)
+      searchTrigger = true;
+    if (key === 'page' && changed)
+      mkdru.pz2.showPage(mkdru.state.page-1);
+    if (key === 'query' && changed)
+      searchTrigger = true;
+  }
+  if (searchTrigger)
+    mkdru.search();
+  // request for record detail
+  if (mkdru.state.recid && (mkdru.state.recid != oldState.recid)) {
     mkdru.pz2.record(mkdru.state.recid);
   }
-  // Other internal link
   else {
-    // may need to run search again to limit targets
-    for (key in mkdru.state) {
-      if (key.substring(0,5) === 'limit' && mkdru.state[key]) {
-        mkdru.search();
-        break;
-      }
-    }
-    mkdru.pz2.showPage(mkdru.state.page-1);
     $('.mkdru-detail').hide();
     $('.mkdru-results').show();
   }
@@ -266,7 +272,8 @@ mkdru.addLimit = function (facet, limit) {
 mkdru.removeLimit = function (facet, limit) {
   var newHash = $.deparam.fragment();
   delete newHash['page'];
-  if (!newHash['limit_' + facet].indexOf(';') || !mkdru.facets[facet].multiLimit) { 
+  if (!newHash['limit_' + facet].indexOf(';')
+      || !mkdru.facets[facet].multiLimit) {
     delete newHash['limit_' + facet];
   }
   else {
@@ -274,7 +281,10 @@ mkdru.removeLimit = function (facet, limit) {
     for (var i = 0; i < limits.length; i++) {
       if (limits[i] == limit) {
         limits.splice(i, 1);
-        newHash['limit_' + facet] = limits.join(';');
+        if (limits.length < 1)
+          delete newHash['limit_' + facet];
+        else
+          newHash['limit_' + facet] = limits.join(';');
         break;
       }
     }