X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fmkws-filter.js;h=7d9fac06672e02ca220922301fb8d0a6bd210805;hb=fea2b711c389ba5f31aed757622fe268b7084768;hp=232d0d5a520fc75f3b1e7948311188b8884d4e4b;hpb=681a6de3a7f4d1c9493d66157b11c948c59434ae;p=mkws-moved-to-github.git diff --git a/src/mkws-filter.js b/src/mkws-filter.js index 232d0d5..7d9fac0 100644 --- a/src/mkws-filter.js +++ b/src/mkws-filter.js @@ -1,43 +1,110 @@ // Factory function for sets of filters. -function filterSet() { - var that = {}; +function filterSet(team) { + var m_team = team; var m_list = []; - that.list = function() { - return 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.type === 'target') { + callback(filter.id, filter.name); + } + } + }; + + that.visitFields = function(callback) { + for (var i in m_list) { + var filter = m_list[i]; + if (filter.type === 'field') { + 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)) { - log("removeMatching() removing filter " + $.toJSON(filter)); + m_team.log("removeMatching() removing filter " + $.toJSON(filter)); } else { - log("removeMatching() keeping filter " + $.toJSON(filter)); + 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].type === 'target' || + 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 res = initial || ""; + + that.visitFields(function(field, value) { + if (res) res += ","; + res += field + "=" + value.replace(/[\\|,]/g, '\\$&'); + }); + return res; + } + return that; } -// Factory function for filters. These can be of several types. -function filter(id, name, field, value) { - var res; +// Factory functions for filters. These can be of several types. +function targetFilter(id, name) { + return { + type: 'target', + id: id, + name: name + }; +} - if (id) { - res = { id: id, name: name }; - } else { - res = { field: field, value: value }; - } +function fieldFilter(field, value) { + return { + type: 'field', + field: field, + value: value + }; +} - return res; +function categoryFilter(id) { + return { + type: 'category', + id: id, + }; }