(function($) {
var IncrementalFilter = function(params){
var setting = this.setting = {
input: undefined,
items: undefined,
searchScope: '*',
minChars: 2,
useHighlight: true,
foundCounter: undefined,
totalCounter: undefined,
highlightElem: $(''),
foundClass: 'found',
zeroClass: 'zero'
}
$.extend(setting,params)
this.input = $(setting.input);
this.items = $(setting.items);
this.minChars = setting.minChars;
if(setting.foundCounter){
this.totalCounter = setting.totalCounter;
this.foundCounter = new IncrementalFilter.Counter(setting);
}
this.formerQuery = '';
this.itemData = [];
this.init();
}
IncrementalFilter.prototype = {
makeData: function(){
var that = this;
this.items.each(function(){
var obj = [$(this)]
if($(this).is('dt')){
obj.push($(this).next())
}
that.itemData.push(new IncrementalFilter.SearchedItem(obj,that.setting));
})
if(this.foundCounter){
this.foundCounter.refresh(this.itemData.length);
if(this.totalCounter){
$(this.totalCounter).html(this.foundCounter.all)
}
}
},
processQuery: function(query){
var tempq = this.escapeQuery(query)
tempq = $.trim(tempq).split(/\s+/);
var queries = []
for(var i=0,l=tempq.length;i= that.minChars){
that.processQuery(val)
}else{
that.reset();
}
})
},
init: function(){
this.makeData();
this.setEvent();
if(this.input.val().length >= this.minChars){
this.processQuery(this.input.val())
}
}
}
/**
*@param obj {array}
**/
IncrementalFilter.SearchedItem = function(obj,setting){
this.useHighlight = (setting.useHighlight && $.fn.highlightText && $.fn.removeOuterTag)
if(this.useHighlight){
this.highlightElem = setting.highlightElem || $('');
this.highlightExpr = /^<(\w+)/.exec($('').append(this.highlightElem).html())[1]
+ '.'+this.highlightElem.attr('class').split(/\s/).join('.');
}
this.text = '';
this.obj = [];
for(var i=0,l=obj.length;i