58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
![]() |
(function($) {
|
||
|
var self = null;
|
||
|
|
||
|
$.fn.liveUpdate = function(list) {
|
||
|
return this.each(function() {
|
||
|
new $.liveUpdate(this, list);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
$.liveUpdate = function (e, list) {
|
||
|
this.field = $(e);
|
||
|
this.list = $('#' + list);
|
||
|
if (this.list.length > 0) {
|
||
|
this.init();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
$.liveUpdate.prototype = {
|
||
|
init: function() {
|
||
|
var self = this;
|
||
|
this.setupCache();
|
||
|
this.field.parents('form').submit(function() { return false; });
|
||
|
this.field.keyup(function() { self.filter(); });
|
||
|
self.filter();
|
||
|
},
|
||
|
|
||
|
filter: function() {
|
||
|
if ($.trim(this.field.val()) == '') { this.list.children('li').show(); return; }
|
||
|
this.displayResults(this.getScores(this.field.val().toLowerCase()));
|
||
|
},
|
||
|
|
||
|
setupCache: function() {
|
||
|
var self = this;
|
||
|
this.cache = [];
|
||
|
this.rows = [];
|
||
|
this.list.children('li').each(function() {
|
||
|
self.cache.push(this.innerHTML.toLowerCase());
|
||
|
self.rows.push($(this));
|
||
|
});
|
||
|
this.cache_length = this.cache.length;
|
||
|
},
|
||
|
|
||
|
displayResults: function(scores) {
|
||
|
var self = this;
|
||
|
this.list.children('li').hide();
|
||
|
$.each(scores, function(i, score) { self.rows[score[1]].show(); });
|
||
|
},
|
||
|
|
||
|
getScores: function(term) {
|
||
|
var scores = [];
|
||
|
for (var i=0; i < this.cache_length; i++) {
|
||
|
var score = this.cache[i].score(term);
|
||
|
if (score > 0) { scores.push([score, i]); }
|
||
|
}
|
||
|
return scores.sort(function(a, b) { return b[0] - a[0]; });
|
||
|
}
|
||
|
}
|
||
|
})(jQuery);
|