diff --git a/addons/web/static/src/js/corelib.js b/addons/web/static/src/js/corelib.js index b5fbacc7927..8c38724b1d5 100644 --- a/addons/web/static/src/js/corelib.js +++ b/addons/web/static/src/js/corelib.js @@ -1440,6 +1440,10 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({ }, }); +instance.web.py_eval = function(expr, context) { + return py.eval(expr, _.extend({}, context || {}, {"true": true, "false": false, "null": null})); +}; + } // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index afb5e258c0b..75e48334f5c 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -956,7 +956,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM var self = this; return this.reload_mutex.exec(function() { if (self.dataset.index == null) { - self.do_prev_view(); + self.trigger("previous_view"); return $.Deferred().reject().promise(); } if (self.dataset.index == null || self.dataset.index < 0) { @@ -2087,11 +2087,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w this.field = this.field_manager.get_field_desc(this.name); this.widget = this.node.attrs.widget; this.string = this.node.attrs.string || this.field.string || this.name; - try { - this.options = JSON.parse(this.node.attrs.options || '{}'); - } catch (e) { - throw new Error(_.str.sprintf(_t("Widget options for field '%s' are not valid JSON."), this.name)); - } + this.options = instance.web.py_eval(this.node.attrs.options || '{}'); this.set({'value': false}); this.on("change:value", this, function() { @@ -2877,7 +2873,7 @@ instance.web.form.CompletionFieldMixin = { self.build_domain(), new instance.web.CompoundContext(self.build_context(), context || {}) ); - pop.on_select_elements.add(function(element_ids) { + pop.on("select_elements",self,function(element_ids) { self.add_id(element_ids[0]); self.focus(); }); @@ -3598,7 +3594,7 @@ instance.web.form.One2ManyViewManager = instance.web.ViewManager.extend({ form_view_options: {'not_interactible_on_create':true}, readonly: self.o2m.get("effective_readonly") }); - pop.on_select_elements.add_last(function() { + pop.on("select_elements", self, function() { self.o2m.reload_current_view(); }); }, @@ -3684,7 +3680,7 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({ self.o2m.build_domain(), self.o2m.build_context() ); - pop.on_select_elements.add_last(function() { + pop.on("select_elements", self, function() { self.o2m.reload_current_view(); }); } @@ -4121,7 +4117,7 @@ instance.web.form.Many2ManyListView = instance.web.ListView.extend(/** @lends in this.m2m_field.build_context() ); var self = this; - pop.on_select_elements.add(function(element_ids) { + pop.on("select_elements", self, function(element_ids) { _.each(element_ids, function(one_id) { if(! _.detect(self.dataset.ids, function(x) {return x == one_id;})) { self.dataset.set_ids([].concat(self.dataset.ids, [one_id])); @@ -4236,7 +4232,7 @@ instance.web.form.FieldMany2ManyKanban = instance.web.form.AbstractField.extend( new instance.web.CompoundDomain(this.build_domain(), ["!", ["id", "in", this.dataset.ids]]), this.build_context() ); - pop.on_select_elements.add(function(element_ids) { + pop.on("select_elements", self, function(element_ids) { _.each(element_ids, function(one_id) { if(! _.detect(self.dataset.ids, function(x) {return x == one_id;})) { self.dataset.set_ids([].concat(self.dataset.ids, [one_id])); @@ -4456,11 +4452,12 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ self.view_form.do_show(); }); }, - on_select_elements: function(element_ids) { + elements_selected: function(element_ids) { + this.trigger("select_elements",element_ids); }, check_exit: function(no_destroy) { if (this.created_elements.length > 0) { - this.on_select_elements(this.created_elements); + this.elements_selected(this.created_elements); this.created_elements = []; } this.destroy(); @@ -4571,7 +4568,7 @@ instance.web.form.SelectCreatePopup = instance.web.form.AbstractFormPopup.extend }); var $sbutton = self.$buttonpane.find(".oe_selectcreatepopup-search-select"); $sbutton.click(function() { - self.on_select_elements(self.selected_ids); + self.elements_selected(self.selected_ids); self.destroy(); }); }); @@ -4613,7 +4610,7 @@ instance.web.form.SelectCreateListView = instance.web.ListView.extend({ this.popup.new_object(); }, select_record: function(index) { - this.popup.on_select_elements([this.dataset.ids[index]]); + this.popup.elements_selected([this.dataset.ids[index]]); this.popup.destroy(); }, do_select: function(ids, records) { diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index f985e5f6dc8..5f90c4215f7 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -525,8 +525,8 @@ instance.web.ViewManager = instance.web.Widget.extend({ controller.set_embedded_view(view.embedded_view); } controller.on('switch_mode', self, this.switch_mode); - - controller.do_prev_view.add_last(this.on_prev_view); + controller.on('previous_view', self, this.prev_view); + var container = this.$el.find(".oe_view_manager_view_" + view_type); var view_promise = controller.appendTo(container); this.views[view_type].controller = controller; @@ -602,7 +602,7 @@ instance.web.ViewManager = instance.web.Widget.extend({ * @param {String} [options.default=null] view to switch to if no previous view * @returns {$.Deferred} switching end signal */ - on_prev_view: function (options) { + prev_view: function (options) { options = options || {}; var current_view = this.views_history.pop(); var previous_view = this.views_history[this.views_history.length - 1] || options['default']; @@ -1266,8 +1266,7 @@ instance.web.View = instance.web.Widget.extend({ * @param {Boolean} [options.created=false] resource was created * @param {String} [options.default=null] view to switch to if no previous view */ - do_prev_view: function (options) { - }, + do_search: function(view) { }, on_sidebar_export: function() { diff --git a/addons/web/tests/test_menu.py b/addons/web/tests/test_menu.py index 1bfa89d9a64..c5e1b948b67 100644 --- a/addons/web/tests/test_menu.py +++ b/addons/web/tests/test_menu.py @@ -4,7 +4,7 @@ import mock import unittest2 from ..controllers import main -from ..common.session import OpenERPSession +from ..session import OpenERPSession class Placeholder(object): def __init__(self, **kwargs): diff --git a/addons/web/tests/test_view.py b/addons/web/tests/test_view.py index beb6996b8e2..a9354d0a6c7 100644 --- a/addons/web/tests/test_view.py +++ b/addons/web/tests/test_view.py @@ -6,7 +6,7 @@ import unittest2 import simplejson import web.controllers.main -from ..common import nonliterals, session as s +from .. import nonliterals, session as s def field_attrs(fields_view_get, fieldname): (field,) = filter(lambda f: f['attrs'].get('name') == fieldname, diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js index 9fd74853c3c..5b699fa7870 100644 --- a/addons/web_diagram/static/src/js/diagram.js +++ b/addons/web_diagram/static/src/js/diagram.js @@ -273,7 +273,7 @@ instance.web.DiagramView = instance.web.View.extend({ self.dataset.domain, self.context || self.dataset.context ); - pop.on_select_elements.add_last(function(element_ids) { + pop.on("select_elements", self, function(element_ids) { self.dataset.read_index(_.keys(self.fields_view.fields)).pipe(self.on_diagram_loaded); }); @@ -325,8 +325,7 @@ instance.web.DiagramView = instance.web.View.extend({ this.dataset.domain, this.context || this.dataset.context ); - - pop.on_select_elements.add_last(function(element_ids) { + pop.on("select_elements", self, function(element_ids) { self.dataset.read_index(_.keys(self.fields_view.fields)).pipe(self.on_diagram_loaded); }); // We want to destroy the dummy edge after a creation cancel. This destroys it even if we save the changes. diff --git a/addons/web_gantt/static/src/js/gantt.js b/addons/web_gantt/static/src/js/gantt.js index 66d699c2cde..32bfea8e212 100644 --- a/addons/web_gantt/static/src/js/gantt.js +++ b/addons/web_gantt/static/src/js/gantt.js @@ -222,7 +222,7 @@ instance.web_gantt.GanttView = instance.web.View.extend({ on_task_create: function() { var self = this; var pop = new instance.web.form.SelectCreatePopup(this); - pop.on_select_elements.add_last(function() { + pop.on("select_elements", self, function() { self.reload(); }); pop.select_element( diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index 537325394e9..37aea87e50e 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -1067,7 +1067,7 @@ instance.web_kanban.QuickCreate = instance.web.Widget.extend({ [], {"default_name": self.$input.val()} ); - pop.on_select_elements.add(function(element_ids) { + pop.on("select_elements", self, function(element_ids) { self.$input.val(""); self.trigger('added', element_ids[0]); });