diff options
Diffstat (limited to 'frontend/js/lca.js')
-rw-r--r-- | frontend/js/lca.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/frontend/js/lca.js b/frontend/js/lca.js new file mode 100644 index 0000000..39dc96d --- /dev/null +++ b/frontend/js/lca.js @@ -0,0 +1,79 @@ +var lca_last_search; +var lca_search_timeout; +var lca_found_last; +function lcat(id, set) { // Short for 'toggle' + tag=document.getElementById(id); + for (var i=1; i<tag.childNodes.length; i++) { + if (tag.childNodes[i].className && tag.childNodes[i].className.indexOf('lcae') != -1) { + if (typeof(set) == 'undefined') { + set=tag.childNodes[i].style.display=="none"?"":"none"; + } + tag.childNodes[i].style.display=set; + } + } +} +function lca_expand(id) { + lcat(id, ""); +} +function lca_collapse(id) { + lcat(id, "none"); +} +function lca_search(q, el, depth, maxdepth, t) { + if (!t) { + clearTimeout(lca_search_timeout); + lca_search_timeout=setTimeout(function () {lca_found_last=lca_search(q, el, depth, maxdepth, true)}, 300); + return; + } + if (depth == 0) { + if (q == lca_last_search) return lca_found_last; + if (lca_found_last == 0 && q.indexOf(lca_last_search) != -1) { + debug('lca', 'Already had no results, not searching "'+q+'"'); + return 0; + } + lca_last_search=q; + debug('lca', 'Searching "'+q+'"'); + } + var found=0; + for (var i=0; i<el.childNodes.length; i++) { + if (el.childNodes[i].nodeName == "LABEL" || (el.childNodes[i].className && el.childNodes[i].className.indexOf('lcal') != -1)) { + found+=(el.childNodes[i].innerHTML.toLowerCase().indexOf(q.toLowerCase()) == -1?0:1); + break; + } + } + if (depth < maxdepth) { + for (var i=0; i<el.childNodes.length; i++) { + if (!(el.childNodes[i].className && el.childNodes[i].className.indexOf('lcae') != -1)) continue; + var lfound=lca_search(q, el.childNodes[i], depth+1, maxdepth, true); + found+=lfound; + el.childNodes[i].style.display=(q.length == 0 || lfound > 0?"":"none"); + } + if (q.length == 0 && el.className.indexOf('lcac') != -1) { + lca_collapse(el.id); + } + } + if (depth == 0) { + el.childNodes[el.childNodes.length-1].style.display=found?"none":""; + } + return found; +} +function lca_show_checked(el, depth, maxdepth) { + if (depth == 0) { + lca_last_search=undefined; + } + var found=0; + for (var i=0; i<el.childNodes.length; i++) { + if (el.childNodes[i].nodeName == "INPUT" && el.childNodes[i].type == "checkbox" && el.childNodes[i].checked) { + found++; + } + if (depth < maxdepth) { + if (!(el.childNodes[i].className && el.childNodes[i].className.indexOf('lcae') != -1)) continue; + var lfound=lca_show_checked(el.childNodes[i], depth+1, maxdepth); + found+=lfound; + el.childNodes[i].style.display=(lfound > 0?"":"none"); + } + } + if (depth == 0) { + el.childNodes[el.childNodes.length-1].style.display=found?"none":""; + } + return found; +} |