/[bfilter]/trunk/bfilter.js
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/bfilter.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations)
Tue Sep 7 08:33:53 2004 UTC (19 years, 7 months ago) by dpavlin
File MIME type: application/javascript
File size: 2215 byte(s)
initial import into svn: linear search version

1 /*
2 Fast filtering function using pre-sorted list elements
3 Dobrica Pavlinusic, dpavlin@rot13.org 2004-09-06
4 */
5
6 function bfilter_init() {
7 show_status();
8 }
9
10 var id_cache = Array();
11
12 function element_id(id) {
13 if (id_cache[id]) {
14 return id_cache[id];
15 } else {
16 var el = document.getElementById(id);
17 if (el) {
18 id_cache[id] = el;
19 return el;
20 } else {
21 alert("can't find element id: "+id);
22 }
23 }
24 }
25
26 // total number of hits
27 var hits = 0;
28
29 function show_status(status) {
30 var html;
31 if (hits > 0) {
32 html = "shown "+hits+" entries";
33 } else {
34 html = "no results";
35 }
36 if (! status) {
37 html = "Enter "+min_len+" letter"+(min_len == 1 ? '' : 's')+" to filter entries";
38 status = "";
39 }
40
41 var el = element_id("status");
42 el.innerHTML = html+status+"\n";
43 }
44
45 var wait = 0;
46
47 function results(html,clean) {
48
49 if (! html) { html = ""; }
50
51 // results_div.style.cursor = 'wait'; // 'auto'
52 var results_div = element_id("results");
53 if (clean) {
54 results_div.innerHTML = html+"\n";
55 } else {
56 results_div.innerHTML += html+"\n";
57 }
58 }
59
60
61 function bfilter(document, id, find, arr) {
62
63 var debug = 0;
64
65 results('',1);
66 hits = 0;
67
68 if (find.length < min_len) {
69 show_status();
70 return;
71 }
72
73 if (debug) { results("filter: '"+find+"'<br>"); }
74
75 var find_lc = find.toLowerCase();
76
77 var part = find_lc.substr(0,min_len);
78
79 // no part found
80 if (! arr[part]) {
81 show_status(" for <em>"+find+"</em><br>");
82 return;
83 }
84
85 // start anim icon
86 //results("<img src=\"pie.gif\">&nbsp;Please wait, filtering...\n",1);
87
88 // full part? (optimization)
89 if (find.length == min_len) {
90 var html = '';
91 for (var i = 0; i < arr[part].length; i++) {
92 html += "<li>"+arr[part][i]+"</li>\n";
93 hits++;
94 }
95 results(html);
96 } else {
97
98 for (var i = 0; i < arr[part].length; i++) {
99
100 var text = arr[part][i].toLowerCase();
101
102 if (debug) { results(part+" "+i+": "+text); }
103
104 // get li element by ID
105
106 if (debug) { results("cmp: "+text.substring(0,find.length)+" "+find+" ["+text+"]<br>\n"); }
107
108 if (text.substring(0,find.length) == find_lc) {
109 results("<li>"+text+"</li>\n");
110 hits++;
111 }
112
113 }
114
115 }
116
117 // clean clock if no results
118 if (hits == 0) { results("",1); }
119 show_status(" for <em>"+find+"</em>");
120
121 }
122

  ViewVC Help
Powered by ViewVC 1.1.26