diff --git a/addons/web/static/lib/datejs/globalization/ab-RU.js b/addons/web/static/lib/datejs/globalization/ab-RU.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/lib/datejs/globalization/ar-AR.js b/addons/web/static/lib/datejs/globalization/ar-AR.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/lib/datejs/globalization/bs-BS.js b/addons/web/static/lib/datejs/globalization/bs-BS.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/lib/datejs/globalization/iu-CA.js b/addons/web/static/lib/datejs/globalization/iu-CA.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/lib/datejs/globalization/ko-KP.js b/addons/web/static/lib/datejs/globalization/ko-KP.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/lib/datejs/globalization/ml-IN.js b/addons/web/static/lib/datejs/globalization/ml-IN.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/lib/datejs/globalization/oc-FR.js b/addons/web/static/lib/datejs/globalization/oc-FR.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/lib/datejs/globalization/si-LK.js b/addons/web/static/lib/datejs/globalization/si-LK.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/lib/datejs/globalization/sr-RS.js b/addons/web/static/lib/datejs/globalization/sr-RS.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/lib/datejs/globalization/sr@latin.js b/addons/web/static/lib/datejs/globalization/sr@latin.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/lib/datejs/globalization/tlh-TLH.js b/addons/web/static/lib/datejs/globalization/tlh-TLH.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 9fe1940d85f..a281745faa0 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -70,7 +70,7 @@ instance.web.Dialog = instance.web.Widget.extend({ autoOpen: false, position: [false, 40], buttons: {}, - beforeClose: function () { self.close(); }, + beforeClose: function () { self.trigger("closing") }, resizeStop: this.on_resized }; for (var f in this) { @@ -84,6 +84,7 @@ instance.web.Dialog = instance.web.Widget.extend({ } _.extend(this.dialog_options, options); } + this.on("closing", this, this._closing); }, get_options: function(options) { var self = this, @@ -150,14 +151,16 @@ instance.web.Dialog = instance.web.Widget.extend({ var res = this.start(); return res; }, - close: function() { + close: function() { + this.$el.dialog('close'); + }, + _closing: function() { if (this.__tmp_dialog_destroying) return; if (this.dialog_options.destroy_on_close) { this.__tmp_dialog_closing = true; this.destroy(); this.__tmp_dialog_closing = undefined; - this.trigger("dialog_close"); } }, on_resized: function() { diff --git a/addons/web/static/src/js/formats.js b/addons/web/static/src/js/formats.js index 3e5e6fecd5e..03b2c5b775d 100644 --- a/addons/web/static/src/js/formats.js +++ b/addons/web/static/src/js/formats.js @@ -135,7 +135,7 @@ instance.web.format_value = function (value, descriptor, value_if_empty) { Math.round((value % 1) * 60)); case 'many2one': // name_get value format - return value[1]; + return value[1] ? value[1].split("\n")[0] : value[1]; case 'one2many': case 'many2many': if (typeof value === 'string') { diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 60c33090c56..a3c6a4d7722 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -4404,9 +4404,8 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ self.check_exit(true); }, title: this.options.title || "", - buttons: [{text:"tmp"}], }, this.$el).open(); - this.$buttonpane = dialog.$el.dialog("widget").find(".ui-dialog-buttonpane").html(""); + this.$buttonpane = dialog.$buttons; this.start(); }, setup_form_view: function() { diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index 4bf61895a09..cd6b018ea0d 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -201,10 +201,7 @@ openerp.web.list_editable = function (instance) { }, function () { return self.editor.edit(item, function (field_name, field) { var cell = cells[field_name]; - if (!cell || field.get('effective_readonly')) { - // Readonly fields can just remain the list's, - // form's usually don't have backgrounds &al - field.set({invisible: true}); + if (!cell) { return; } @@ -400,6 +397,21 @@ openerp.web.list_editable = function (instance) { }, setup_events: function () { var self = this; + _.each(this.editor.form.fields, function(field, field_name) { + var field; + var setting = false; + var set_invisible = function() { + if (!setting && field.get("effective_readonly")) { + setting = true; + field.set({invisible: true}); + setting = false; + } + }; + field.on("change:effective_readonly", self, set_invisible); + field.on("change:invisible", self, set_invisible); + set_invisible(); + }); + this.editor.$el.on('keyup keydown', function (e) { if (!self.editor.is_editing()) { return; } var key = _($.ui.keyCode).chain() diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index b5bb3a7259d..1554d347552 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -296,9 +296,8 @@ instance.web.ActionManager = instance.web.Widget.extend({ buttons: { "Close": function() { $(this).dialog("close"); }}, dialogClass: executor.klass }); - if (on_close) { - this.dialog.on("dialog_close", this, on_close); - } + if(on_close) + this.dialog.on("closing", null, on_close); } else { this.dialog_widget.destroy(); } diff --git a/addons/web/tests/test_dataset.py b/addons/web/tests/test_dataset.py index 8cd9634d5bf..1169ff5f0b9 100644 --- a/addons/web/tests/test_dataset.py +++ b/addons/web/tests/test_dataset.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- import mock import unittest2 -import web.controllers.main +import openerp.addons.web.controllers.main class TestDataSetController(unittest2.TestCase): def setUp(self): - self.dataset = web.controllers.main.DataSet() + self.dataset = openerp.addons.web.controllers.main.DataSet() self.request = mock.Mock() self.read = self.request.session.model().read self.search = self.request.session.model().search diff --git a/addons/web/tests/test_view.py b/addons/web/tests/test_view.py index a9354d0a6c7..51377099558 100644 --- a/addons/web/tests/test_view.py +++ b/addons/web/tests/test_view.py @@ -5,7 +5,7 @@ import mock import unittest2 import simplejson -import web.controllers.main +import openerp.addons.web.controllers.main from .. import nonliterals, session as s def field_attrs(fields_view_get, fieldname): @@ -16,7 +16,7 @@ def field_attrs(fields_view_get, fieldname): #noinspection PyCompatibility class DomainsAndContextsTest(unittest2.TestCase): def setUp(self): - self.view = web.controllers.main.View() + self.view = openerp.addons.web.controllers.main.View() def test_convert_literal_domain(self): e = xml.etree.ElementTree.Element( @@ -106,7 +106,7 @@ class DomainsAndContextsTest(unittest2.TestCase): class AttrsNormalizationTest(unittest2.TestCase): def setUp(self): - self.view = web.controllers.main.View() + self.view = openerp.addons.web.controllers.main.View() def test_identity(self): web_view = """ diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index d08912bbaab..03d22e0dcbd 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -450,12 +450,19 @@ instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ this.dataset = dataset; this.view_id = view_id; this.view = view; + this.on("closing", this, function() { + if (this.view.creating_event_id) { + scheduler.deleteEvent(this.view.creating_event_id); + this.view.creating_event_id = null; + } + }); }, start: function() { var self = this; this._super(); this.form = new instance.web.FormView(this, this.dataset, this.view_id, { - pager: false + pager: false, + $buttons: this.$buttons, }); var def = this.form.appendTo(this.$el); this.form.on('record_created', self, this.on_form_dialog_saved); @@ -474,12 +481,6 @@ instance.web_calendar.CalendarFormDialog = instance.web.Dialog.extend({ this.view.reload_event(id); this.close(); }, - on_close: function() { - if (this.view.creating_event_id) { - scheduler.deleteEvent(this.view.creating_event_id); - this.view.creating_event_id = null; - } - } }); instance.web_calendar.Sidebar = instance.web.Widget.extend({ diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js index d884fa6e6a2..decc20b1a03 100644 --- a/addons/web_kanban/static/src/js/kanban.js +++ b/addons/web_kanban/static/src/js/kanban.js @@ -194,10 +194,10 @@ instance.web_kanban.KanbanView = instance.web.View.extend({ }); var am = instance.webclient.action_manager; var form = am.dialog_widget.views.form.controller; - form.on("on_button_cancel", self, am.dialog.on_close); + form.on("on_button_cancel", am.dialog, am.dialog.close); form.on('record_created', self, function(r) { (new instance.web.DataSet(self, self.group_by_field.relation)).name_get([r]).then(function(new_record) { - am.dialog.on_close(); + am.dialog.close(); var domain = self.dataset.domain.slice(0); domain.push([self.group_by, '=', new_record[0][0]]); var dataset = new instance.web.DataSetSearch(self, self.dataset.model, self.dataset.get_context(), domain); @@ -672,9 +672,9 @@ instance.web_kanban.KanbanGroup = instance.web.Widget.extend({ }); var am = instance.webclient.action_manager; var form = am.dialog_widget.views.form.controller; - form.on("on_button_cancel", self, am.dialog.on_close); + form.on("on_button_cancel", am.dialog, am.dialog.close); form.on('record_saved', self, function() { - am.dialog.on_close(); + am.dialog.close(); self.view.do_reload(); }); }, diff --git a/addons/web_view_editor/static/src/js/view_editor.js b/addons/web_view_editor/static/src/js/view_editor.js index 5e7c61ab17c..2732954097d 100644 --- a/addons/web_view_editor/static/src/js/view_editor.js +++ b/addons/web_view_editor/static/src/js/view_editor.js @@ -67,6 +67,7 @@ instance.web_view_editor.ViewEditor = instance.web.Widget.extend({ {text: _t("Close"), click: function() { self.view_edit_dialog.close(); window.location.reload(); }} ] }).open(); + this.view_edit_dialog.on("closing", this, function(){window.location.reload();}); this.main_view_id = this.parent.fields_view.view_id; this.action_manager = new instance.web.ActionManager(this); this.action_manager.appendTo(this.view_edit_dialog.$el);