Regression-test scaffolding for pp2limit method.
[mkws-moved-to-github.git] / src / mkws-filter.js
index c62235e..4d600cc 100644 (file)
@@ -1,5 +1,109 @@
+// Factory function for sets of filters.
+function filterSet(team) {
+    var m_team = team;
+    var m_list = [];
+
+    var that = {};
+
+    that.toJSON = function() {
+       return $.toJSON(m_list);
+    };
+
+    that.add = function(filter) {
+       m_list.push(filter);
+    };
+
+    that.visitTargets = function(callback) {
+       for (var i in m_list) {
+           var filter = m_list[i];
+           if (filter.id) {
+               callback(filter.id, filter.name);
+           }
+       }
+    };
+
+    that.visitFields = function(callback) {
+       for (var i in m_list) {
+           var filter = m_list[i];
+           if (!filter.id) {
+               callback(filter.field, filter.value);
+           }
+       }
+    };
+
+    that.removeMatching = function(matchFn) {
+       var newList = [];
+       for (var i in m_list) {
+           var filter = m_list[i];
+           if (matchFn(filter)) {
+               m_team.log("removeMatching() removing filter " + $.toJSON(filter));
+           } else {
+               m_team.log("removeMatching() keeping filter " + $.toJSON(filter));
+               newList.push(filter);
+           }
+       }
+       m_list = newList;
+    };
+
+    that.targetFiltered = function(id) {
+       for (var i = 0; i < m_list.length; i++) {
+           if (m_list[i].id === id ||
+               m_list[i].id === 'pz:id=' + id) {
+               return true;
+           }
+       }
+       return false;
+    };
+
+    that.pp2filter = function() {
+       var res = "";
+
+       that.visitTargets(function(id, name) {
+           if (res) res += ",";
+           if (id.match(/^[a-z:]+[=~]/)) {
+               m_team.log("filter '" + id + "' already begins with SETTING OP");
+           } else {
+               id = 'pz:id=' + id;
+           }
+           res += id;
+       });
+
+       return res;
+    };
+
+    that.pp2limit = function(initial) {
+       var OLD = that.OLD_pp2limit(initial);
+       var NEW = that.NEW_pp2limit(initial);
+       if (OLD !== NEW) {
+           alert("pp2limit(): OLD[" + OLD + "] !== NEW[" + NEW + "]");
+       }
+       return OLD;
+    };
+
+    that.OLD_pp2limit = function(initial) {
+       var res = initial || "";
+
+       for (var i in m_list) {
+           var filter = m_list[i];
+           if (!filter.id) {
+               if (res) res += ",";
+               res += filter.field + "=" + filter.value.replace(/[\\|,]/g, '\\$&');
+           }
+       }
+
+       return res;
+    };
+
+    that.NEW_pp2limit = function(initial) {
+       return that.OLD_pp2limit(initial);
+    }
+
+    return that;
+}
+
+
 // Factory function for filters. These can be of several types.
-function filter(id, field, value) {
+function filter(id, name, field, value) {
     var res;
 
     if (id) {