New function delimitQuery().
[mkws-moved-to-github.git] / tools / htdocs / mkws.js
index acf3235..9530afe 100644 (file)
@@ -5,7 +5,8 @@
 
 // Set up namespace and some state.
 var mkws = {
-    curFilter: null,
+    filters: [],
+    pp2filter: null,
 };
 
 /*
@@ -374,7 +375,8 @@ function resetPage()
 
 function triggerSearch ()
 {
-    my_paz.search(document.mkwsSearchForm.mkwsQuery.value, recPerPage, curSort, mkws.curFilter);
+    debug("triggerSearch: filters = " + JSON.stringify(mkws.filters));
+    my_paz.search(document.mkwsSearchForm.mkwsQuery.value, recPerPage, curSort, mkws.pp2filter);
 }
 
 function loadSelect ()
@@ -391,6 +393,8 @@ function loadSelect ()
 mkws.limitQuery = function (field, value)
 {
     debug("limitQuery(field=" + field + ", value=" + value + ")");
+    mkws.filters.push({ field: field, value: value });
+    redraw_navi();
     document.mkwsSearchForm.mkwsQuery.value += ' and ' + field + '="' + value + '"';
     onFormSubmitEventHandler();
 }
@@ -399,28 +403,90 @@ mkws.limitQuery = function (field, value)
 mkws.limitTarget  = function (id, name)
 {
     debug("limitTarget(id=" + id + ", name=" + name + ")");
-    var navi = document.getElementById('mkwsNavi');
-    navi.innerHTML =
-        'Source: <a class="crossout" href="#" onclick="mkws.delimitTarget();return false;">'
-        + name + '</a>';
-    mkws.curFilter = 'pz:id=' + id;
+    mkws.filters.push({ id: id, name: name });
+    redraw_navi();
+    mkws.pp2filter = 'pz:id=' + id;
     resetPage();
     loadSelect();
     triggerSearch();
     return false;
 }
 
-mkws.delimitTarget = function ()
+mkws.delimitQuery = function (field, value)
 {
-    var navi = document.getElementById('mkwsNavi');
-    navi.innerHTML = '';
-    mkws.curFilter = null;
+    debug("delimitQuery(field=" + field + ", value=" + value + ")");    
+    var newFilters = [];
+    for (var i in mkws.filters) {
+       var filter = mkws.filters[i];
+       if (filter.field &&
+           field == filter.field &&
+           value == filter.value) {
+           debug("delimitTarget() removing filter " + JSON.stringify(filter));
+       } else {
+           debug("delimitTarget() keeping filter " + JSON.stringify(filter));
+           newFilters.push(filter);
+       }
+    }
+    mkws.filters = newFilters;
+
+    redraw_navi();
+    mkws.pp2filter = null;
     resetPage();
     loadSelect();
     triggerSearch();
     return false;
 }
 
+
+mkws.delimitTarget = function (id)
+{
+    debug("delimitTarget(id=" + id + ")");    
+    var newFilters = [];
+    for (var i in mkws.filters) {
+       var filter = mkws.filters[i];
+       if (filter.id) {
+           debug("delimitTarget() removing filter " + JSON.stringify(filter));
+       } else {
+           debug("delimitTarget() keeping filter " + JSON.stringify(filter));
+           newFilters.push(filter);
+       }
+    }
+    mkws.filters = newFilters;
+
+    redraw_navi();
+    mkws.pp2filter = null;
+    resetPage();
+    loadSelect();
+    triggerSearch();
+    return false;
+}
+
+
+function redraw_navi ()
+{
+    var navi = document.getElementById('mkwsNavi');
+    if (!navi) return;
+
+    var text = "";
+    for (var i in mkws.filters) {
+       if (text) {
+           text += " | ";
+       }
+       var filter = mkws.filters[i];
+       if (filter.id) {
+           text += 'Source: <a class="crossout" href="#" onclick="mkws.delimitTarget(' +
+               "'" + filter.id + "'" + ');return false;">' + filter.name + '</a>';
+       } else {
+           text += filter.field + ': <a class="crossout" href="#" onclick="mkws.delimitQuery(' +
+               "'" + filter.field + "', '" + filter.value + "'" +
+               ');return false;">' + filter.value + '</a>';
+       }
+    }
+    
+    navi.innerHTML = text;
+}
+
+
 function drawPager (pagerDiv)
 {
     //client indexes pages from 1 but pz2 from 0