Part of MKWS-64.
[mkws-moved-to-github.git] / src / mkws-filter.js
index 2be1bd9..63d80bd 100644 (file)
@@ -6,7 +6,7 @@ function filterSet(team) {
   var that = {};
 
   that.toJSON = function() {
-    return $.toJSON(m_list);
+    return mkws.$.toJSON(m_list);
   };
 
   that.add = function(filter) {
@@ -45,15 +45,16 @@ function filterSet(team) {
     for (var i in m_list) {
       var filter = m_list[i];
       if (matchFn(filter)) {
-        m_team.log("removeMatching() removing filter " + $.toJSON(filter));
+        m_team.info("removeMatching: removing filter " + mkws.$.toJSON(filter));
       } else {
-        m_team.log("removeMatching() keeping filter " + $.toJSON(filter));
+        m_team.info("removeMatching: keeping filter " + mkws.$.toJSON(filter));
         newList.push(filter);
       }
     }
     m_list = newList;
   };
 
+  // ### Surely the || in this function should be &&
   that.targetFiltered = function(id) {
     for (var i = 0; i < m_list.length; i++) {
       if (m_list[i].type === 'target' ||
@@ -70,7 +71,7 @@ function filterSet(team) {
     that.visitTargets(function(id, name) {
       if (res) res += ",";
       if (id.match(/^[a-z:]+[=~]/)) {
-        m_team.log("filter '" + id + "' already begins with SETTING OP");
+        m_team.info("filter '" + id + "' already begins with SETTING OP");
       } else {
         id = 'pz:id=' + id;
       }
@@ -95,11 +96,34 @@ function filterSet(team) {
 
     that.visitCategories(function(id) {
       if (res) res += ",";
-      res += "category~" + id.replace(/[\\|,]/g, '\\$&');
+      res += "category~" + id.replace(/[\\,]/g, '\\$&');
     });
     return res;
   }
 
+  // Returns a hash of key=value pairs representing the filter-set
+  // These will become part of the URL-fragment representing the state
+  that.fragmentItems = function() {
+    var hash = {};
+
+    for (var i in m_list) {
+      var filter = m_list[i];
+      var type = filter.type;
+      if (type === 'target') {
+        hash['xt-' + filter.id] = filter.name;
+      } else if (type === 'field') {
+        // Ugly names, but we need to include the value because fields can be repeated
+        hash['xf-' + filter.field + '-' + filter.value] = 1;
+      } else if (type === 'category') {
+        hash['xc-' + filter.id] = 1;
+      } else {
+        alert("unsupported filter-type '" + type + "'");
+      }
+    }
+    
+    return hash;
+  }
+
   return that;
 }
 
@@ -124,6 +148,6 @@ function fieldFilter(field, value) {
 function categoryFilter(id) {
   return {
     type: 'category',
-    id: id,
+    id: id
   };
 }