browser: minimum multiplier to stabilise order of unused versions
[sheet.git] / searchlocal.js
1 function filtertable(query, action) {
2         var rows = document.getElementsByTagName('TBODY')[0].rows;
3         for (var i = 0; i < rows.length; i++) {
4                 var keep = rows[i].cells[1].textContent.match(query, query.match(/[A-Z]/) ? '' : 'i');
5                 switch (action) {
6                         case 'focus':
7                                 rows[i].classList[keep ? 'add' : 'remove'](action);
8                                 break;
9                         case 'target':
10                                 if (keep) rows[i].classList.toggle(action);
11                                 break;
12                         case 'filter':
13                                 rows[i].style.display = keep ? '' : 'none';
14                                 // continue
15                         default: // reset
16                                 rows[i].classList.remove('focus');
17                                 rows[i].classList.remove('target');
18                 }
19         }
20 }
21
22 function newelement(tagname, attrlist, childlist) {
23         if (!attrlist) return document.createTextNode(tagname);
24         var el = document.createElement(tagname);
25         for (var name in attrlist)
26                 el.setAttribute(name, attrlist[name]);
27         if (childlist) for (var i = 0; i < childlist.length; i++)
28                 el.appendChild(childlist[i]);
29         return el;
30 }
31
32 function prependsearch(target) {
33         target.parentNode.insertBefore(newelement(
34                 'form', {
35                         id: 'search',
36                         class: 'aside',
37                         onsubmit: "filtertable(this.q.value, 'filter'); this.q.value = ''; return false",
38                 },
39                 [
40                         newelement('input', {
41                                 type: 'search',
42                                 name: 'q',
43                                 onkeyup: "filtertable(this.value, this.value.length > 1 ? 'focus' : 'reset')",
44                         }),
45                         newelement('input', {
46                                 type: 'button',
47                                 value: 'toggle',
48                                 onclick: "filtertable(this.form.q.value, 'target')",
49                         }),
50                         newelement('input', {type:'submit', value:'filter'}),
51                 ]
52         ), target);
53 }
54