/[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

Diff of /trunk/bfilter.js

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1 by dpavlin, Tue Sep 7 08:33:53 2004 UTC revision 5 by dpavlin, Tue Sep 7 09:16:24 2004 UTC
# Line 3  Line 3 
3     Dobrica Pavlinusic, dpavlin@rot13.org 2004-09-06     Dobrica Pavlinusic, dpavlin@rot13.org 2004-09-06
4  */  */
5    
6    var debug = 0;
7    
8  function bfilter_init() {  function bfilter_init() {
9          show_status();          show_status();
10  }  }
# Line 57  function results(html,clean) { Line 59  function results(html,clean) {
59          }          }
60  }  }
61    
62    // modified binary search to find first element with substring
63    function binarySearch(arr, find) {
64            if (!arr ||
65                    typeof (arr) != "object" ||
66                    typeof (find) == "undefined" || !arr.length) {
67                    return null;
68            }
69            var low = 0;
70            var high = arr.length - 1;
71            var middlearr = parseInt(arr.length / 2);
72            var lastTry;
73            while (low <= high) {
74                    var mid = (low + high) / 2;
75                    var aTry = (mid < 1) ? 0 : parseInt(mid);
76            
77                    var curr = arr[aTry].substr(0,find.length).toLowerCase();
78                    if (debug) { results("low="+low+" high="+high+" lastTry="+lastTry+" "+aTry+": "+curr+"<br>"); }
79                    if (curr < find) {
80                            low = aTry + 1;
81                            continue;
82                    }
83                    if (curr > find) {
84                            high = aTry - 1;
85                            continue;
86                    }
87                    if (curr == find) {
88                            high = aTry - 1;
89                            lastTry = aTry;
90                            continue;
91                    }
92                    return aTry;
93            }
94            if (debug) { results("lastTry="+lastTry+"<br>"); }
95    
96  function bfilter(document, id, find, arr) {          if (typeof (lastTry) != "undefined") {
97                    return lastTry;
98            } else {
99                    return null;
100            }
101    }
102    
103          var debug = 0;  function bfilter(document, id, find, arr) {
104    
105          results('',1);          results('',1);
106          hits = 0;          hits = 0;
# Line 89  function bfilter(document, id, find, arr Line 129  function bfilter(document, id, find, arr
129          if (find.length == min_len) {          if (find.length == min_len) {
130                  var html = '';                  var html = '';
131                  for (var i = 0; i < arr[part].length; i++) {                  for (var i = 0; i < arr[part].length; i++) {
132                          html += "<li>"+arr[part][i]+"</li>\n";                          html += "<li>";
133                            if (debug) { $html += i+": "; }
134                            html += arr[part][i]+"</li>\n";
135                          hits++;                          hits++;
136                  }                  }
137                  results(html);                  results(html);
138          } else {          } else {
139    
140                  for (var i = 0; i < arr[part].length; i++) {                  var from = binarySearch(arr[part], find_lc);
   
                         var text = arr[part][i].toLowerCase();  
141    
142                          if (debug) { results(part+" "+i+": "+text); }                  if (from != null) {
143                    
144                          // get li element by ID                          if (debug) { results("loop "+from+" ... "+arr[part].length)+"<br>\n"; }
145    
146                          if (debug) { results("cmp: "+text.substring(0,find.length)+" "+find+" ["+text+"]<br>\n"); }                          var html = '';
147    
148                          if (text.substring(0,find.length) == find_lc) {                          for(var i = from ; i < arr[part].length ; i++) {
149                                  results("<li>"+text+"</li>\n");                                  if (arr[part][i].substring(0,find.length).toLowerCase() != find_lc) {
150                                            break;
151                                    }
152                                    if (debug) { html += i+": "; }
153                                    html += arr[part][i]+"<br>\n";
154                                  hits++;                                  hits++;
155                          }                          }
156    
157                            results(html);
158                    } else {
159                            // clean results list
160    //                      results("",1);
161                  }                  }
162    
163          }          }
164    
         // clean clock if no results  
         if (hits == 0) { results("",1); }  
165          show_status(" for <em>"+find+"</em>");          show_status(" for <em>"+find+"</em>");
166    
167  }  }

Legend:
Removed from v.1  
changed lines
  Added in v.5

  ViewVC Help
Powered by ViewVC 1.1.26