From c063ef410992db2f46d933e84068d0d4033a6dd2 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 30 May 2013 11:08:23 +0200 Subject: [PATCH 1/4] [FIX] linting warnings in export bzr revid: xmo@openerp.com-20130530090823-7l75tasejwt5ywb9 --- addons/web/static/src/js/data_export.js | 30 +++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/addons/web/static/src/js/data_export.js b/addons/web/static/src/js/data_export.js index e38d21d1cd2..3781cade4fe 100644 --- a/addons/web/static/src/js/data_export.js +++ b/addons/web/static/src/js/data_export.js @@ -6,13 +6,13 @@ instance.web.DataExport = instance.web.Dialog.extend({ dialog_title: {toString: function () { return _t("Export Data"); }}, init: function(parent, dataset) { var self = this; - options = { - buttons : [ - {text: _t("Close"), click: function() { self.close(); }}, - {text: _t("Export To File"), click: function() { self.on_click_export_data(); }} + var options = { + buttons: [ + {text: _t("Close"), click: function () { self.close(); }}, + {text: _t("Export To File"), click: function () { self.on_click_export_data(); }} ], - close: function(event, ui){ self.close();} - } + close: function () { self.close();} + }; this._super(parent, options); this.records = {}; this.dataset = dataset; @@ -24,8 +24,9 @@ instance.web.DataExport = instance.web.Dialog.extend({ this._super.apply(this, arguments); self.$el.removeClass('ui-dialog-content ui-widget-content'); self.$el.find('#add_field').click(function() { - if ($('#field-tree-structure tr.ui-selected')) { - var fld = self.$el.find('#field-tree-structure tr.ui-selected').find('a'); + var $selected = self.$('#field-tree-structure tr.ui-selected'); + if ($selected) { + var fld = $selected.find('a'); for (var i = 0; i < fld.length; i++) { var id = $(fld[i]).attr('id').split('-')[1]; var string = $(fld[i]).attr('string'); @@ -79,7 +80,7 @@ instance.web.DataExport = instance.web.Dialog.extend({ var self = this; if (self.$el.find('#saved_export_list').is(':hidden')) { self.$el.find('#ExistsExportList').show(); - return; + return $.when(); } return this.exports.read_slice(['name'], { domain: [['resource', '=', this.dataset.model]] @@ -192,7 +193,6 @@ instance.web.DataExport = instance.web.Dialog.extend({ }, on_show_data: function(result, after) { var self = this; - var imp_cmpt = Boolean(self.$el.find("#import_compat").val()); if (after) { var current_tr = self.$el.find("tr[id='treerow-" + after + "']"); @@ -220,15 +220,16 @@ instance.web.DataExport = instance.web.Dialog.extend({ frst_click = self.$el.find("tr[id^='treerow-']")[self.row_index-1]; $(frst_click).addClass("ui-selected"); } else { + var i; if (this.rowIndex >=self.row_index) { - for (var i = (self.row_index-1); i < this.rowIndex; i++) { + for (i = (self.row_index-1); i < this.rowIndex; i++) { scnd_click = self.$el.find("tr[id^='treerow-']")[i]; if (!$(scnd_click).find('#tree-column').hasClass("oe_export_readonlyfield")) { $(scnd_click).addClass("ui-selected"); } } } else { - for (var i = (self.row_index-1); i >= (this.rowIndex-1); i--) { + for (i = (self.row_index-1); i >= (this.rowIndex-1); i--) { scnd_click = self.$el.find("tr[id^='treerow-']")[i]; if (!$(scnd_click).find('#tree-column').hasClass("oe_export_readonlyfield")) { $(scnd_click).addClass("ui-selected"); @@ -263,6 +264,7 @@ instance.web.DataExport = instance.web.Dialog.extend({ self.$el.find("tr[id='treerow-" + record.id + "']").keydown(function(e) { var keyCode = e.keyCode || e.which; var arrow = {left: 37, up: 38, right: 39, down: 40 }; + var elem; switch (keyCode) { case arrow.left: if ($(this).hasClass('open')) { @@ -275,7 +277,7 @@ instance.web.DataExport = instance.web.Dialog.extend({ } break; case arrow.up: - var elem = this; + elem = this; $(elem).removeClass("ui-selected"); while (!$(elem).prev().is(":visible")) { elem = $(elem).prev(); @@ -286,7 +288,7 @@ instance.web.DataExport = instance.web.Dialog.extend({ $(elem).prev().find('a').focus(); break; case arrow.down: - var elem = this; + elem = this; $(elem).removeClass("ui-selected"); while(!$(elem).next().is(":visible")) { elem = $(elem).next(); From 03b80e154ec94d930c3b5c5f11fd117322aee6f3 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 30 May 2013 11:45:25 +0200 Subject: [PATCH 2/4] [IMP] option to only export selected records lp bug: https://launchpad.net/bugs/900385 fixed bzr revid: xmo@openerp.com-20130530094525-1ub1yhdqsag6xxzq --- addons/web/static/src/js/data_export.js | 8 ++++++-- addons/web/static/src/xml/base.xml | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/data_export.js b/addons/web/static/src/js/data_export.js index 3781cade4fe..9322a9fba0c 100644 --- a/addons/web/static/src/js/data_export.js +++ b/addons/web/static/src/js/data_export.js @@ -376,16 +376,20 @@ instance.web.DataExport = instance.web.Dialog.extend({ alert(_t("Please select fields to export...")); return; } - exported_fields.unshift({name: 'id', label: 'External ID'}); + var export_format = this.$el.find("#export_format").val(); + var ids_to_export = this.$('#export_selection_only').prop('checked') + ? this.getParent().get_selected_ids() + : this.dataset.ids; + instance.web.blockUI(); this.session.get_file({ url: '/web/export/' + export_format, data: {data: JSON.stringify({ model: this.dataset.model, fields: exported_fields, - ids: this.dataset.ids, + ids: ids_to_export, domain: this.dataset.domain, import_compat: Boolean( this.$el.find("#import_compat").val()) diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 9c0e3fa249f..77f76ea4520 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1699,6 +1699,9 @@ + + + From 398f570e69637c5543b2bbe3e2bd0b23a3090d93 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 30 May 2013 11:58:27 +0200 Subject: [PATCH 3/4] [IMP] code cleanup, better use of jquery bzr revid: xmo@openerp.com-20130530095827-ondsza16ze29neel --- addons/web/static/src/js/data_export.js | 33 +++++++++++-------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/addons/web/static/src/js/data_export.js b/addons/web/static/src/js/data_export.js index 9322a9fba0c..c7971371bef 100644 --- a/addons/web/static/src/js/data_export.js +++ b/addons/web/static/src/js/data_export.js @@ -24,16 +24,13 @@ instance.web.DataExport = instance.web.Dialog.extend({ this._super.apply(this, arguments); self.$el.removeClass('ui-dialog-content ui-widget-content'); self.$el.find('#add_field').click(function() { - var $selected = self.$('#field-tree-structure tr.ui-selected'); - if ($selected) { - var fld = $selected.find('a'); - for (var i = 0; i < fld.length; i++) { - var id = $(fld[i]).attr('id').split('-')[1]; - var string = $(fld[i]).attr('string'); + self.$('#field-tree-structure tr.ui-selected') + .removeClass('ui-selected') + .find('a').each(function () { + var id = $(this).attr('id').split('-')[1]; + var string = $(this).attr('string'); self.add_field(id, string); - } - self.$el.find('#field-tree-structure tr').removeClass('ui-selected'); - } + }); }); self.$el.find('#remove_field').click(function() { self.$el.find('#fields_list option:selected').remove(); @@ -50,7 +47,7 @@ instance.web.DataExport = instance.web.Dialog.extend({ var import_comp = self.$el.find("#import_compat").val(); self.rpc("/web/export/get_fields", { model: self.dataset.model, - import_compat: Boolean(import_comp) + import_compat: !!import_comp, }).done(function (records) { got_fields.resolve(); self.on_show_data(records); @@ -355,14 +352,13 @@ instance.web.DataExport = instance.web.Dialog.extend({ } }, get_fields: function() { - var export_field = []; - this.$el.find("#fields_list option").each(function() { - export_field.push($(this).val()); - }); - if (!export_field.length) { + var export_fields = this.$("#fields_list option").map(function() { + return $(this).val(); + }).get(); + if (!export_fields.length) { alert(_t("Please select fields to save export list...")); } - return export_field; + return export_fields; }, on_click_export_data: function() { var self = this; @@ -391,10 +387,9 @@ instance.web.DataExport = instance.web.Dialog.extend({ fields: exported_fields, ids: ids_to_export, domain: this.dataset.domain, - import_compat: Boolean( - this.$el.find("#import_compat").val()) + import_compat: !!this.$el.find("#import_compat").val(), })}, - complete: instance.web.unblockUI + complete: instance.web.unblockUI, }); }, close: function() { From c0807b34b10d1d8fce8ed1554ba9dd62e933c9d4 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 30 May 2013 12:04:20 +0200 Subject: [PATCH 4/4] [IMP] export view: use events hash bzr revid: xmo@openerp.com-20130530100420-8zsa03ssom8ox2g4 --- addons/web/static/src/js/data_export.js | 35 ++++++++++++++----------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/addons/web/static/src/js/data_export.js b/addons/web/static/src/js/data_export.js index c7971371bef..fb5e391effd 100644 --- a/addons/web/static/src/js/data_export.js +++ b/addons/web/static/src/js/data_export.js @@ -4,6 +4,25 @@ var QWeb = instance.web.qweb, instance.web.DataExport = instance.web.Dialog.extend({ template: 'ExportTreeView', dialog_title: {toString: function () { return _t("Export Data"); }}, + events: { + 'click #add_field': function () { + var self = this; + this.$('#field-tree-structure tr.ui-selected') + .removeClass('ui-selected') + .find('a').each(function () { + var id = $(this).attr('id').split('-')[1]; + var string = $(this).attr('string'); + self.add_field(id, string); + }); + }, + 'click #remove_field': function () { + this.$('#fields_list option:selected').remove(); + }, + 'click #remove_all_field': function () { + this.$('#fields_list').empty(); + }, + 'click #export_new_list': 'on_show_save_list', + }, init: function(parent, dataset) { var self = this; var options = { @@ -23,22 +42,6 @@ instance.web.DataExport = instance.web.Dialog.extend({ var self = this; this._super.apply(this, arguments); self.$el.removeClass('ui-dialog-content ui-widget-content'); - self.$el.find('#add_field').click(function() { - self.$('#field-tree-structure tr.ui-selected') - .removeClass('ui-selected') - .find('a').each(function () { - var id = $(this).attr('id').split('-')[1]; - var string = $(this).attr('string'); - self.add_field(id, string); - }); - }); - self.$el.find('#remove_field').click(function() { - self.$el.find('#fields_list option:selected').remove(); - }); - self.$el.find('#remove_all_field').click(function() { - self.$el.find('#fields_list').empty(); - }); - this.$el.find('#export_new_list').click(this.on_show_save_list); var got_fields = new $.Deferred(); this.$el.find('#import_compat').change(function() {