browser: cumulative search prefixes
authorMischa POSLAWSKY <perl@shiar.org>
Tue, 7 Dec 2010 18:50:02 +0000 (19:50 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Wed, 15 Dec 2010 21:40:44 +0000 (22:40 +0100)
Queries can be prepended by [-+?] to hide/show/toggle matches without
touching other rows.

searchlocal.js

index 1a5037f1f7def5737a8ce3455f1c7e2ff74de848..e6f16ff92c672c28ffa519b32864fac2ce0d366a 100644 (file)
@@ -6,6 +6,15 @@ function filtercell(el, set, action) {
                case 'target':
                        if (set) el.classList.toggle(action);
                        break;
+               case 'remove':
+                       if (set) el.style.display = 'none';
+                       break;
+               case 'add':
+                       if (set) el.style.display = '';
+                       break;
+               case 'toggle':
+                       if (set) el.style.display = el.style.display == 'none' ? '' : 'none';
+                       break;
                case 'filter':
                        el.style.display = set ? '' : 'none';
                        if (!Element.prototype.hasOwnProperty('classList')) return;
@@ -26,6 +35,17 @@ function filterrows(table, match, action) {
 function filtertable(query, action) {
        var table = document.getElementsByTagName('TABLE')[0];
 
+       if (!action) {
+               var match = /^([-+?=]?)(.*)/.exec(query);
+               switch (match[1]) {
+                       case '+': action = 'add';    break;
+                       case '-': action = 'remove'; break;
+                       case '?': action = 'toggle'; break;
+                       case '=': action = 'filter'; break;
+               }
+               query = match[2];
+       }
+
        if (/^[A-Z0-9 ]{2,}$/.test(query)) {
                // category title if all uppercase
                var match = function(row) {