diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index d5848c10712..b04a86f6356 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -841,7 +841,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ start: function() { this.$element = $('#' + this.element_id); this.dataset = new openerp.base.form.FieldMany2OneDatasSet(this.session, this.field.relation); - new openerp.base.m2o(this.$element, this.field.relation, this.dataset) + new openerp.base.m2o(this.$element, this.field.relation, this.dataset, this.session) }, set_value: function(value) { this._super.apply(this, arguments); diff --git a/addons/base/static/src/js/m2o.js b/addons/base/static/src/js/m2o.js index 04735288639..8cdf313667e 100644 --- a/addons/base/static/src/js/m2o.js +++ b/addons/base/static/src/js/m2o.js @@ -1,9 +1,10 @@ openerp.base.m2o = function(openerp) { openerp.base.m2o = openerp.base.Controller.extend({ - init: function(element_id, model, dataset) { - this._super(element_id, model, dataset); + init: function(element_id, model, dataset, session) { + this._super(element_id, model, dataset, session); + this.session = session; this.element = element_id.find('input'); this.relation = model; this.dataset = dataset; @@ -72,14 +73,23 @@ openerp.base.m2o = openerp.base.Controller.extend({ displayResults : function(obj) { var self = this; var result = obj.result; - var $fancyTable = jQuery('
', {'id':'create','class': 'm2o_coplition'
+ }).append(jQuery('', {
+ 'style': 'text-transform:none; white-space: nowrap',
+ 'title': 'Create',
+ 'text': 'Create...'}))).appendTo($resultsTable);
+ }
+
+ if (data.length) {
+ jQuery('| ', {'id': 'more','class': 'm2o_coplition'
+ }).append(jQuery('', {
+ 'style': 'text-transform:none; white-space: nowrap',
+ 'title': 'More',
+ 'text': 'More...'}))).appendTo($resultsTable);
+ }
// Swap out the old results with the newly created table
var $resultsHolder = jQuery("#autoCompleteResults_" + self.name);
if($resultsTable.children().length) {
- result.length > 10 ? $resultsHolder.css('height', '50%') : $resultsHolder.css('height', '');
$resultsHolder.empty().append($fancyTable);
+ this.updateSelectedResult();
$resultsHolder.show();
} else {
$resultsHolder.hide();
@@ -145,10 +177,29 @@ openerp.base.m2o = openerp.base.Controller.extend({
if(this.numResultRows > 0) {
switch (evt.which) {
// Enter Key
- //Single Click
+ // Single Click
case 13:
case 1:
var $selectedRow = jQuery("#autoComplete" + this.name + "_" + this.selectedResultRow);
+ this.dataset.ids = _.without.apply(null, [this.dataset.ids].concat(this.result_ids));
+
+ this.dataset.count = this.dataset.ids.length;
+ if ($selectedRow.find('td').attr('id') == 'more') {
+ var element_id = _.uniqueId("act_window_dialog");
+ var dialog = jQuery(' | ',
+ {'id': element_id
+ }).dialog({title: 'test',
+ modal: true,
+ minWidth: 800,
+ buttons: {
+ Cancel: function() {
+ $(this).dialog("close");
+ }
+ }
+ });
+ var event_list = new openerp.base.ListView(this.view_manager, this.session, element_id, this.dataset, false);
+ event_list.start();
+ }
this.setCompletionText($selectedRow, true);
this.clearResults();
break;
@@ -166,7 +217,6 @@ openerp.base.m2o = openerp.base.Controller.extend({
// Down Key
case 40:
-
if(this.selectedResultRow < this.numResultRows - (this.selectedResultRow == null ? 0 : 1)) {
if (this.selectedResultRow == null)
this.selectedResultRow = 0;
@@ -199,10 +249,10 @@ openerp.base.m2o = openerp.base.Controller.extend({
},
updateSelectedResult: function() {
-
// Set classes to show currently selected row
for(var i = 0; i < this.numResultRows; i++) {
- var $selectedRow = jQuery('#autoComplete' + this.name + '_' + i);
+ var rowName = '#autoComplete' + this.name + '_'
+ var $selectedRow = jQuery('#autoComplete' + this.name + '_' + i)
if(this.selectedResultRow == i) {
$selectedRow.addClass("autoTextSelectedRow");
$selectedRow.removeClass("autoTextNormalRow") ;
@@ -218,6 +268,10 @@ openerp.base.m2o = openerp.base.Controller.extend({
setCompletionText: function ($selectedRow, flag) {
var $cell = $selectedRow.find('td');
+ if ($cell.attr('id')) {
+ this.element.val('');
+ return;
+ }
var autoCompleteText = $cell.find('span').text();
autoCompleteText = flag ? autoCompleteText : this.lastSearch + '[' + autoCompleteText.substring(this.lastSearch.length) + ']'
this.element.val(autoCompleteText);
|