New function delimitQuery().
authorMike Taylor <mike@indexdata.com>
Fri, 22 Nov 2013 13:28:09 +0000 (13:28 +0000)
committerMike Taylor <mike@indexdata.com>
Fri, 22 Nov 2013 13:28:09 +0000 (13:28 +0000)
New function redraw_navi() handles drawing all selected facets,
whether based on field values or source.
This is now used by limitQuery(), limitTarget(), delimitQuery() and
delimitTarget().
(These methods have too much shared code at the moment -- I'll fix
that shortly, but want to check in the first working version.)

tools/htdocs/mkws.js

index 98b9ff8..9530afe 100644 (file)
@@ -394,6 +394,7 @@ 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();
 }
@@ -403,10 +404,7 @@ mkws.limitTarget  = function (id, name)
 {
     debug("limitTarget(id=" + id + ", name=" + name + ")");
     mkws.filters.push({ id: id, name: name });
-    var navi = document.getElementById('mkwsNavi');
-    navi.innerHTML =
-        'Source: <a class="crossout" href="#" onclick="mkws.delimitTarget(' + "'" + id + "'" + ');return false;">'
-        + name + '</a>';
+    redraw_navi();
     mkws.pp2filter = 'pz:id=' + id;
     resetPage();
     loadSelect();
@@ -414,6 +412,32 @@ mkws.limitTarget  = function (id, name)
     return false;
 }
 
+mkws.delimitQuery = function (field, value)
+{
+    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 + ")");    
@@ -429,8 +453,7 @@ mkws.delimitTarget = function (id)
     }
     mkws.filters = newFilters;
 
-    var navi = document.getElementById('mkwsNavi');
-    navi.innerHTML = '';
+    redraw_navi();
     mkws.pp2filter = null;
     resetPage();
     loadSelect();
@@ -438,6 +461,32 @@ mkws.delimitTarget = function (id)
     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