Almost working search

This commit is contained in:
magnolia-fan
2011-09-08 14:56:10 +04:00
parent 1b02272d81
commit 4f3bd75bfd
7 changed files with 136 additions and 173 deletions
@@ -38,6 +38,8 @@
this.ignoreValueChange = false;
this.serviceUrl = options.serviceUrl;
this.isLocal = false;
this.containerId = options.containerId;
this.containerItemsId = options.containerItemsId;
this.options = {
autoSubmit: false,
minChars: 1,
@@ -79,10 +81,13 @@
if (!this.options.width) { this.options.width = this.el.width(); }
this.mainContainerId = 'AutocompleteContainter_' + uid;
this.mainContainerId = this.containerId;
$('<div class="autocomplete-container" id="' + this.mainContainerId + '" style="position:absolute;z-index:9999;"><div class="autocomplete-w1"><div class="autocomplete" id="' + autocompleteElId + '" style="display:none; width:300px;"></div></div></div>').appendTo('body');
//$('<div class="autocomplete-container" id="' + this.mainContainerId + '" style="position:absolute;z-index:9999;"><div class="autocomplete-w1"><div class="autocomplete" id="' + autocompleteElId + '" style="display:none; width:300px;"></div></div></div>').appendTo('body');
this.container = $('#' + autocompleteElId);
this.container_items = $('#'+ this.containerItemsId);
this.fixPosition();
if (window.opera) {
this.el.keypress(function(e) { me.onKeyPress(e); });
@@ -101,8 +106,8 @@
this.isLocal = true;
if($.isArray(o.lookup)){ o.lookup = { suggestions:o.lookup, data:[] }; }
}
$('#'+this.mainContainerId).css({ zIndex:o.zIndex });
this.container.css({ maxHeight: o.maxHeight + 'px', width:o.width });
//$('#'+this.mainContainerId).css({ zIndex:o.zIndex });
//this.container.css({ maxHeight: o.maxHeight + 'px', width:o.width });
},
clearCache: function(){
@@ -120,7 +125,7 @@
fixPosition: function() {
var offset = this.el.offset();
$('#' + this.mainContainerId).css({ top: (offset.top + this.el.innerHeight()) + 'px', left: offset.left + 'px' });
//$('#' + this.mainContainerId).css({ top: (offset.top + this.el.innerHeight()) + 'px', left: offset.left + 'px' });
},
enableKillerFn: function() {
@@ -266,7 +271,7 @@
this.hide();
return;
}
var me, len, div, f, v, i, s, mOver, mClick;
me = this;
len = this.suggestions.length;
@@ -274,22 +279,19 @@
v = this.getQuery(this.currentValue);
mOver = function(xi) { return function() { me.activate(xi); }; };
mClick = function(xi) { return function() { me.select(xi); }; };
this.container.hide().empty();
this.container = $('#'+ this.containerId);
this.container_items = $('#'+ this.containerItemsId);
this.container_items.empty();
for (i = 0; i < len; i++) {
s = this.suggestions[i];
div = $((me.selectedIndex === i ? '<div class="selected"' : '<div') + ' title="' + s + '">' + f(s, this.data[i], v) + '</div>');
div.mouseover(mOver(i));
div.click(mClick(i));
this.container.append(div);
this.container_items.append(div);
}
this.enabled = true;
that = this;
$('.pulldown').animate({height: 250}, 'fast', function(){
that.container.show();
_beathaven.adjustSizes()
_beathaven.redrawScrollbar()
});
this.container.show();
},
processResponse: function(text) {
@@ -311,7 +313,7 @@
activate: function(index) {
var divs, activeItem;
divs = this.container.children();
divs = this.container_items.children();
// Clear previous selection:
if (this.selectedIndex !== -1 && divs.length > this.selectedIndex) {
$(divs.get(this.selectedIndex)).removeClass();
@@ -347,7 +349,7 @@
moveUp: function() {
if (this.selectedIndex === -1) { return; }
if (this.selectedIndex === 0) {
this.container.children().get(0).className = '';
this.container_items.children().get(0).className = '';
this.selectedIndex = -1;
this.el.val(this.currentValue);
return;
@@ -364,12 +366,12 @@
var activeItem, offsetTop, upperBound, lowerBound;
activeItem = this.activate(i);
offsetTop = activeItem.offsetTop;
upperBound = this.container.scrollTop();
upperBound = this.container_items.scrollTop();
lowerBound = upperBound + this.options.maxHeight - 25;
if (offsetTop < upperBound) {
this.container.scrollTop(offsetTop);
this.container_items.scrollTop(offsetTop);
} else if (offsetTop > lowerBound) {
this.container.scrollTop(offsetTop - this.options.maxHeight + 25);
this.container_items.scrollTop(offsetTop - this.options.maxHeight + 25);
}
this.el.val(this.getValue(this.suggestions[i]));
},