diff options
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/framework/ajax.js | 4 | ||||
| -rw-r--r-- | addons/web/static/src/js/framework/data.js | 6 | ||||
| -rw-r--r-- | addons/web/static/src/js/framework/session.js | 1 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/form_view.js | 5 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/form_widgets.js | 19 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/list_view.js | 1 | ||||
| -rw-r--r-- | addons/web/static/src/js/widgets/data_export.js | 3 | ||||
| -rw-r--r-- | addons/web/static/src/js/widgets/debug_manager.js | 4 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 4 |
9 files changed, 35 insertions, 12 deletions
diff --git a/addons/web/static/src/js/framework/ajax.js b/addons/web/static/src/js/framework/ajax.js index 869e0214ad9..87fd08c7786 100644 --- a/addons/web/static/src/js/framework/ajax.js +++ b/addons/web/static/src/js/framework/ajax.js @@ -203,7 +203,9 @@ function get_file(options) { // opening a new window seems the best way to workaround if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) { var params = _.extend({}, options.data || {}, {token: token}); - var url = this.url(options.url, params); + var url = options.session.url(options.url, params); + if (options.complete) { options.complete(); } + return window.open(url); } diff --git a/addons/web/static/src/js/framework/data.js b/addons/web/static/src/js/framework/data.js index a1b8e1602e9..3e9396a4e96 100644 --- a/addons/web/static/src/js/framework/data.js +++ b/addons/web/static/src/js/framework/data.js @@ -320,6 +320,7 @@ var DataSet = Class.extend(mixins.PropertiesMixin, { this.index = null; this._sort = []; this._model = new Model(model, context); + this.orderer = new utils.DropMisordered(); }, previous: function () { this.index -= 1; @@ -408,10 +409,11 @@ var DataSet = Class.extend(mixins.PropertiesMixin, { read_slice: function (fields, options) { var self = this; options = options || {}; - return this._model.query(fields) + var query = this._model.query(fields) .limit(options.limit || false) .offset(options.offset || 0) - .all().done(function (records) { + .all(); + return this.orderer.add(query).done(function (records) { self.ids = _(records).pluck('id'); }); }, diff --git a/addons/web/static/src/js/framework/session.js b/addons/web/static/src/js/framework/session.js index 71819cc6b7a..6639ab172ba 100644 --- a/addons/web/static/src/js/framework/session.js +++ b/addons/web/static/src/js/framework/session.js @@ -270,6 +270,7 @@ var Session = core.Class.extend(mixins.EventDispatcherMixin, { if (this.override_session){ options.data.session_id = this.session_id; } + options.session = this; ajax.get_file(options); }, synchronized_mode: function(to_execute) { diff --git a/addons/web/static/src/js/views/form_view.js b/addons/web/static/src/js/views/form_view.js index 864931a42c2..32b3e43af7d 100644 --- a/addons/web/static/src/js/views/form_view.js +++ b/addons/web/static/src/js/views/form_view.js @@ -836,7 +836,10 @@ var FormView = View.extend(common.FieldManagerMixin, { def.reject(); }, }; - Dialog.confirm(this, message, options); + var dialog = Dialog.confirm(this, message, options); + dialog.$modal.on('hidden.bs.modal', function() { + def.reject(); + }); return def; }, /** diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js index 2a2a36cdaba..f3a8bd76041 100644 --- a/addons/web/static/src/js/views/form_widgets.js +++ b/addons/web/static/src/js/views/form_widgets.js @@ -1536,13 +1536,20 @@ var FieldStatus = common.AbstractField.extend({ val = $li.data("id"); } if (val != self.get('value')) { - this.view.recursive_save().done(function() { - var change = {}; - change[self.name] = val; - self.view.dataset.write(self.view.datarecord.id, change).done(function() { - self.view.reload(); + if (!this.view.datarecord.id || + this.view.datarecord.id.toString().match(data.BufferedDataSet.virtual_id_regex)) { + // don't save, only set value for not-yet-saved many2ones + self.set_value(val); + } + else { + this.view.recursive_save().done(function() { + var change = {}; + change[self.name] = val; + self.view.dataset.write(self.view.datarecord.id, change).done(function() { + self.view.reload(); + }); }); - }); + } } }, }); diff --git a/addons/web/static/src/js/views/list_view.js b/addons/web/static/src/js/views/list_view.js index b8d0c569609..0923776c951 100644 --- a/addons/web/static/src/js/views/list_view.js +++ b/addons/web/static/src/js/views/list_view.js @@ -1900,6 +1900,7 @@ var Column = Class.extend({ row_data[this.id].value, this, options.value_if_empty)); } }); +ListView.Column = Column; var MetaColumn = Column.extend({ meta: true, diff --git a/addons/web/static/src/js/widgets/data_export.js b/addons/web/static/src/js/widgets/data_export.js index a73020ce9b2..d1c10098586 100644 --- a/addons/web/static/src/js/widgets/data_export.js +++ b/addons/web/static/src/js/widgets/data_export.js @@ -6,6 +6,7 @@ var crash_manager = require('web.crash_manager'); var data = require('web.data'); var Dialog = require('web.Dialog'); var framework = require('web.framework'); +var pyeval = require('web.pyeval'); var QWeb = core.qweb; var _t = core._t; @@ -427,7 +428,7 @@ var DataExport = Dialog.extend({ fields: exported_fields, ids: this.ids_to_export, domain: this.domain, - context: this.dataset.context, + context: pyeval.eval('contexts', [this.dataset._model.context()]), import_compat: !!this.$el.find("#import_compat").val(), })}, complete: framework.unblockUI, diff --git a/addons/web/static/src/js/widgets/debug_manager.js b/addons/web/static/src/js/widgets/debug_manager.js index 36a3a205632..5c6cfa60cfc 100644 --- a/addons/web/static/src/js/widgets/debug_manager.js +++ b/addons/web/static/src/js/widgets/debug_manager.js @@ -85,6 +85,10 @@ if (core.debug) { }, get_metadata: function() { var ds = this.dataset; + if (!this.view.get_selected_ids().length) { + console.warn(_t("No metadata available")); + return + } ds.call('get_metadata', [this.view.get_selected_ids()]).done(function(result) { new Dialog(this, { title: _.str.sprintf(_t("Metadata (%s)"), ds.model), diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 6030c1bce2b..c3670c9aa56 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -204,7 +204,9 @@ </t> <t t-name="WebClient.DebugDropdown"> <t t-if="active_view.type === 'form'"> - <li class="oe_metadata"><a href="#" data-action="get_metadata">View Metadata</a></li> + <t t-if="active_view.controller.get_selected_ids().length == 1"> + <li class="oe_metadata"><a href="#" data-action="get_metadata">View Metadata</a></li> + </t> <li class="oe_layout"><a href="#" data-action="toggle_layout_outline">Toggle Form Layout Outline</a></li> <li class="oe_defaults"><a href="#" data-action="set_defaults">Set Defaults</a></li> </t> |
