summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/framework/ajax.js4
-rw-r--r--addons/web/static/src/js/framework/data.js6
-rw-r--r--addons/web/static/src/js/framework/session.js1
-rw-r--r--addons/web/static/src/js/views/form_view.js5
-rw-r--r--addons/web/static/src/js/views/form_widgets.js19
-rw-r--r--addons/web/static/src/js/views/list_view.js1
-rw-r--r--addons/web/static/src/js/widgets/data_export.js3
-rw-r--r--addons/web/static/src/js/widgets/debug_manager.js4
-rw-r--r--addons/web/static/src/xml/base.xml4
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>