X-Git-Url: http://git.indexdata.com/?p=mkws-moved-to-github.git;a=blobdiff_plain;f=src%2Fmkws-filter.js;h=0b2ea6353429768000f2c17a51f6fd97d1a18d7e;hp=353fce57494854a2e1ae86650f1995661a645cd0;hb=058ce4a204a9ce4d63b2d319037f60cd9f94ff1b;hpb=1fa8c5e2e7cf9ed6aff2ace6fe36e6ea2334917a diff --git a/src/mkws-filter.js b/src/mkws-filter.js index 353fce5..0b2ea63 100644 --- a/src/mkws-filter.js +++ b/src/mkws-filter.js @@ -1,120 +1,129 @@ // 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 OLD = that.OLD_pp2filter(); - var NEW = that.NEW_pp2filter(); - if (OLD !== NEW) { - alert("pp2filter(): OLD[" + OLD + "] !== NEW[" + NEW + "]"); - } - return OLD; - }; - - that.OLD_pp2filter = function() { - var res = ""; - - for (var i in m_list) { - var filter = m_list[i]; - if (filter.id) { - if (res) res += ","; - if (filter.id.match(/^[a-z:]+[=~]/)) { - m_team.log("filter '" + filter.id + "' already begins with SETTING OP"); - } else { - filter.id = 'pz:id=' + filter.id; - } - res += filter.id; - } - } - - return res; - }; - - that.NEW_pp2filter = function() { - return that.OLD_pp2filter(); - }; - - that.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; - }; - - - return that; -} + var m_team = team; + var m_list = []; + + var that = {}; + that.toJSON = function() { + return mkws.$.toJSON(m_list); + }; -// Factory function for filters. These can be of several types. -function filter(id, name, field, value) { - var res; + that.add = function(filter) { + m_list.push(filter); + }; - if (id) { - res = { id: id, name: name }; - } else { - res = { field: field, value: value }; + 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.visitCategories = function(callback) { + for (var i in m_list) { + var filter = m_list[i]; + if (filter.type === 'category') { + callback(filter.id); + } + } + }; + + that.removeMatching = function(matchFn) { + var newList = []; + for (var i in m_list) { + var filter = m_list[i]; + if (matchFn(filter)) { + m_team.info("removeMatching: removing filter " + mkws.$.toJSON(filter)); + } else { + m_team.info("removeMatching: keeping filter " + mkws.$.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.info("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; + } + + that.pp2catLimit = function() { + var res = ""; + that.visitCategories(function(id) { + if (res) res += ","; + res += "category~" + id.replace(/[\\,]/g, '\\$&'); + }); return res; + } + + return that; +} + + +// Factory functions for filters. These can be of several types. +function targetFilter(id, name) { + return { + type: 'target', + id: id, + name: name + }; +} + +function fieldFilter(field, value) { + return { + type: 'field', + field: field, + value: value + }; +} + +function categoryFilter(id) { + return { + type: 'category', + id: id + }; }