diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py
index a1560936213..07b576bf49d 100644
--- a/addons/base/controllers/main.py
+++ b/addons/base/controllers/main.py
@@ -423,7 +423,7 @@ class DataSet(openerpweb.Controller):
@openerpweb.jsonrequest
def name_search(self, req, model, search_str, domain=[], context={}):
m = req.session.model(model)
- r = m.name_search(search_str, domain, 'ilike', context)
+ r = m.name_search(search_str+'%', domain, '=ilike', context)
return {'result': r}
class View(openerpweb.Controller):
diff --git a/addons/base/static/src/js/m2o.js b/addons/base/static/src/js/m2o.js
index 33959b19e1f..5cdf3ee1b06 100644
--- a/addons/base/static/src/js/m2o.js
+++ b/addons/base/static/src/js/m2o.js
@@ -8,6 +8,7 @@ openerp.base.m2o = openerp.base.Controller.extend({
this.relation = model;
this.dataset = dataset;
this.name = this.element.attr('name');
+
this.selectedResultRow = 0;
this.selectedResult = false;
this.numResultRows = 0;
@@ -15,9 +16,10 @@ openerp.base.m2o = openerp.base.Controller.extend({
this.specialKeyPressed = false;
this.lastKey = null;
this.delayedRequest = null;
- this.value = this.element.val();
+
this.lastTextResult = this.element.val();
this.lastSearch = null;
+
this.select_img = jQuery('#'+ this.element.attr('name') + '_select');
if(this.select_img)
jQuery(this.select_img).click(jQuery.proxy(this, 'select'));
@@ -43,9 +45,9 @@ openerp.base.m2o = openerp.base.Controller.extend({
callSearchRequest: function() {
this.delayedRequest = null
+ this.lastSearch = this.element.val();
var s = this.element.val();
var val = s.lastIndexOf(',') >= 0 ? s.substring(s.lastIndexOf(',') + 1).replace(/^\s+|\s+$/g, "") : s.replace(/^\s+|\s+$/g, "");
- this.lastSearch = this.element.val();
var self = this;
this.dataset.name_search(val, function(obj){
self.displayResults(obj);
@@ -69,7 +71,6 @@ openerp.base.m2o = openerp.base.Controller.extend({
displayResults : function(obj) {
var self = this;
- console.log('AT DISPLAY')
var result = obj.result;
var $fancyTable = jQuery('
', {
"class": "autoTextTable",
@@ -109,38 +110,35 @@ openerp.base.m2o = openerp.base.Controller.extend({
},
on_keypress: function(evt) {
- console.log(this.element.val().length, 'at on_keypress', evt.which)
if (evt.which == 9 || evt.ctrlKey) {
- return true;
+ return true;
}
},
on_keyup: function(evt) {
- console.log(this.element.val().length, 'at on_keyup',evt.which)
if(this.specialKeyPressed || (this.element.val() == this.lastSearch)) return false;
- try {
- if (evt.which == 40) {
- if (!this.element.val().length) {
- if (this.delayedRequest) {
- clearInterval(this.delayedRequest);
- this.clearResults();
- return false;
- }
- }
- if (this.delayedRequest)
- clearInterval(this.delayedRequest);//this.delayedRequest.cancel();
- console.log('call')
- this.delayedRequest = setTimeout(function(thisObj){
- thisObj.callSearchRequest()
- }, this.completeDelay, this);
- }
- return true;
- } catch (e){console.log('EEEEEEEEEEEEEEEE',e)}
+ if (evt.which == 40) {
+ if (!this.element.val().length) {
+ if (this.delayedRequest) {
+ clearInterval(this.delayedRequest);
+ this.clearResults();
+ return false;
+ }
+ }
+ if (this.delayedRequest)
+ clearInterval(this.delayedRequest);
+
+ this.delayedRequest = setTimeout(function(thisObj){
+ thisObj.callSearchRequest()
+ }, this.completeDelay, this);
+ }
+ return true;
+
},
on_keydown : function(evt) {
- console.log(this.element.val().length,'at on_keydown',evt.which)
+
var key = evt.which;
this.lastKey = evt.which;
this.specialKeyPressed = false;
@@ -168,7 +166,7 @@ openerp.base.m2o = openerp.base.Controller.extend({
// Down Key
case 40:
- console.log(this.selectedResultRow, 33333, this.numResultRows)
+
if(this.selectedResultRow < this.numResultRows - (this.selectedResultRow == null ? 0 : 1)) {
if (this.selectedResultRow == null)
this.selectedResultRow = 0;
@@ -182,10 +180,21 @@ openerp.base.m2o = openerp.base.Controller.extend({
default:
break;
}
- if(evt.which == 13 || evt.which == 27 || evt.which == 38 || evt.which == 40)
+ if(evt.which == 13 || evt.which == 27 || evt.which == 38 || evt.which == 40)//
this.specialKeyPressed = true;
}
+ if((evt.which == 8 || evt.which == 46)) {
+ var value = this.element.val();
+ if (value.indexOf('[') > 0) {
+ this.element.val(this.lastSearch)
+ evt.stopPropagation();
+ evt.preventDefault();
+ }
+ else if (value.length == 1) {
+ this.clearResults();
+ }
+ }
return !this.specialKeyPressed;
},
@@ -208,11 +217,9 @@ openerp.base.m2o = openerp.base.Controller.extend({
},
setCompletionText: function ($selectedRow) {
-
var $cell = $selectedRow.find('td');
-
var autoCompleteText = $cell.find('span').text();
- console.log('Replace...',autoCompleteText)
+ autoCompleteText = this.lastSearch + '[' + autoCompleteText.substring(this.lastSearch.length) + ']'
this.element.val(autoCompleteText);
this.lastTextResult = autoCompleteText;
},