Drop mkdruFacetLimit, extend args for mkdruFacet
[mkdru-moved-to-drupal.org.git] / mkdru.client.js
index 9365e78..f931c3e 100644 (file)
@@ -122,23 +122,49 @@ mkdru.pz2Status = function (data) {
   $('.mkdru-status').html(Drupal.theme('mkdruStatus', data.activeclients, data.clients));
 };
 
+mkdru.contains = function (hash, key, value) {
+  if (hash[key]) {
+    if (hash[key].length) {
+      for (var i=0; i<hash[key].length; i++) {
+        if (hash[key][i] === value) {
+          return true;
+        }
+      }
+    } else {
+      return hash[key] === value;
+    }
+  }
+  return false;
+}
+
 mkdru.pz2Term = function (data) {
   // if signaled, prepare container client-side
   if (mkdru.facetContainerSelector) {
     $(mkdru.facetContainerSelector).html(Drupal.theme('mkdruFacetContainer',
       data, mkdru.facets));
   }
+  // map all facets against selected, for simple rendering 
+  var hash = $.deparam.fragment();
+  for (var key in hash) {
+    if (key.indexOf('limit') == 0 && hash[key].indexOf(';'))
+      hash[key.substr(6)] = hash[key].split(';');
+    delete hash[key];
+  }
   for (var facet in mkdru.facets) {
-    // facet is limited
-    if (mkdru.state['limit_' + facet]) {
-      $('.mkdru-facet-' + facet).html(Drupal.theme('mkdruFacetLimit',
-                                 data[mkdru.facets[facet].pz2Name][0],
-                                 mkdru.hashAddDelOne(null, null, 'limit_' + facet)));
-    } else {
-      $('.mkdru-facet-' + facet).html(Drupal.theme('mkdruFacet',
-                                 data[mkdru.facets[facet].pz2Name],
-                                 facet, mkdru.facets[facet].max));
+    var terms = data[mkdru.facets[facet].pz2Name];
+    for (var i=0; i<terms.length; i++) {
+      var term = terms[i];
+      var value = facet == "source" ? term.id : term.name;
+      if (mkdru.contains(hash, facet, value)) { //enabled
+        term.hashQuery = mkdru.removeLimit(facet, value);
+        term.selected = true;
+      } else { //disabled
+        term.hashQuery = mkdru.addLimit(facet, value);
+        term.selected = false;
+      }
     }
+    $('.mkdru-facet-' + facet).html(
+        Drupal.theme('mkdruFacet', terms, facet, mkdru.facets[facet].max));
   }
 };