[FIX] web: remove some memory leak

This commit is contained in:
Christophe Matthieu
2017-05-15 13:16:02 +02:00
parent 1c5ea99b7b
commit ef35702cbc
6 changed files with 50 additions and 33 deletions
@@ -1758,7 +1758,8 @@ var JournalDashboardGraph = AbstractField.extend({
this.data = JSON.parse(this.value);
},
start: function () {
nv.utils.windowResize(this._onResize.bind(this));
this._onResize = this._onResize.bind(this);
nv.utils.windowResize(this._onResize);
return this._super.apply(this, arguments);
},
destroy: function () {
@@ -1072,6 +1072,11 @@ var FieldMany2ManyBinaryMultiFiles = AbstractField.extend({
this._generatedMetadata();
},
destroy: function () {
this._super();
$(window).off(this.fileupload_id);
},
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
@@ -17,6 +17,10 @@ var QWeb = core.qweb;
* @type {*}
*/
var QuickCreate = Dialog.extend({
events: _.extend({}, Dialog.events, {
'keyup input': '_onkeyup',
}),
/**
* @constructor
* @param {Widget} parent
@@ -32,7 +36,6 @@ var QuickCreate = Dialog.extend({
// Can hold data pre-set from where you clicked on agenda
this.dataTemplate = dataTemplate || {};
this.dataCalendar = dataCalendar;
this.$input = $();
var self = this;
this._super(parent, {
@@ -46,7 +49,7 @@ var QuickCreate = Dialog.extend({
}},
{text: _t("Edit"), click: function () {
dataCalendar.disableQuickCreate = true;
dataCalendar.title = self.$input.val().trim();
dataCalendar.title = self.$('input').val().trim();
dataCalendar.on_save = self.destroy.bind(self);
self.trigger_up('openCreate', dataCalendar);
}},
@@ -55,37 +58,13 @@ var QuickCreate = Dialog.extend({
$content: QWeb.render('CalendarView.quick_create', {widged: this})
});
},
/**
* @override
* @returns {Deferred}
*/
start: function () {
var self = this;
if (this.options.disableQuickCreate) {
this.slow_create();
return;
}
this.$input = this.$('input').keyup(function enterHandler (e) {
if(e.keyCode === $.ui.keyCode.ENTER) {
self.$input.off('keyup', enterHandler);
if (!self._quickAdd(self.dataCalendar)){
self.$input.on('keyup', enterHandler);
}
} else if (e.keyCode === $.ui.keyCode.ESCAPE && self._buttons) {
self.close();
}
});
return this._super();
},
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
focus: function () {
this.$input.focus();
this.$('input').focus();
},
//--------------------------------------------------------------------------
@@ -110,10 +89,27 @@ var QuickCreate = Dialog.extend({
*/
_quickAdd: function (dataCalendar) {
dataCalendar = $.extend({}, this.dataTemplate, dataCalendar);
var val = this.$input.val().trim();
var val = this.$('input').val().trim();
dataCalendar.title = val;
return (val)? this.trigger_up('quickCreate', {data: dataCalendar, options: this.options}) : false;
},
/**
* @private
* @param {keyEvent} event
*/
_onkeyup: function (event) {
if (this._flagEnter) {
return;
}
if(event.keyCode === $.ui.keyCode.ENTER) {
this._flagEnter = true;
if (!this._quickAdd(this.dataCalendar)){
this._flagEnter = false;
}
} else if (event.keyCode === $.ui.keyCode.ESCAPE && this._buttons) {
this.close();
}
},
});
return QuickCreate;
@@ -724,6 +724,8 @@ var FormRenderer = BasicRenderer.extend({
return $.when.apply($, defs).then(function () {
self._updateView($form.contents());
}, function () {
$form.remove();
});
},
/**
@@ -30,7 +30,7 @@ var GraphController = AbstractController.extend({
destroy: function () {
if (this.$buttons) {
// remove jquery's tooltip() handlers
this.$buttons.find('button').off();
this.$buttons.find('button').off().tooltip('destroy');
}
this._super.apply(this, arguments);
},
@@ -7,6 +7,9 @@ var field_utils = require('web.field_utils');
var PivotRenderer = AbstractRenderer.extend({
tagName: 'table',
className: 'table-hover table-condensed table-bordered',
events: _.extend({}, AbstractRenderer.prototype.events, {
'hover td': '_onTdHover',
}),
//--------------------------------------------------------------------------
// Private
@@ -34,9 +37,6 @@ var PivotRenderer = AbstractRenderer.extend({
}
this._renderHeaders($thead, this.state.headers);
this._renderRows($tbody, this.state.rows);
$table.on('hover', 'td', function () {
$table.find('col:eq(' + $(this).index()+')').toggleClass('hover');
});
// todo: make sure the next line does something
$table.find('.o_pivot_header_cell_opened,.o_pivot_header_cell_closed').tooltip();
this.$el.html($table.contents());
@@ -139,6 +139,19 @@ var PivotRenderer = AbstractRenderer.extend({
}
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* @private
* @param {MouseEvent} event
*/
_onTdHover: function (event) {
var $td = $(event.target);
$td.closest('table').find('col:eq(' + $td.index()+')').toggleClass('hover');
}
});
return PivotRenderer;