diff options
| author | Cedric Snauwaert <csn@openerp.com> | 2014-04-11 15:29:34 +0200 |
|---|---|---|
| committer | Cedric Snauwaert <csn@openerp.com> | 2014-04-11 15:29:34 +0200 |
| commit | 280caaa95ce16b73503bdd2b06bf6379650f2edd (patch) | |
| tree | 3d3d2c6235d869eec98608119a2425cb9e0461a1 /addons/web/static/src/js | |
| parent | 27738154c3fd6a47e02c6a11413b5054cba1093f (diff) | |
| parent | c8607c8b818b4554c01294f5c05bc5d20f226f82 (diff) | |
[MERGE]change modal windows to only use bootstrap3
bzr revid: csn@openerp.com-20140411132934-iodyidypjxb7v9ug
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/chrome.js | 155 | ||||
| -rw-r--r-- | addons/web/static/src/js/data_export.js | 2 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 39 | ||||
| -rw-r--r-- | addons/web/static/src/js/views.js | 10 |
4 files changed, 85 insertions, 121 deletions
diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index de56927799e..ee88839e656 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -57,16 +57,6 @@ instance.web.action_warn = function(element, action) { instance.web.client_actions.add("action_warn", "instance.web.action_warn"); /** - * The very minimal function everything should call to create a dialog - * in OpenERP Web Client. - */ -instance.web.dialog = function(element) { - var result = element.dialog.apply(element, _.rest(_.toArray(arguments))); - result.dialog("widget").openerpClass(); - return result; -}; - -/** A useful class to handle dialogs. Attributes: @@ -81,6 +71,8 @@ instance.web.Dialog = instance.web.Widget.extend({ @param {Widget} parent @param {dictionary} options A dictionary that will be forwarded to jQueryUI Dialog. Additionaly, that dictionary can contain the following keys: + - size: one of the following: 'large', 'medium', 'small' + - dialogClass: class to add to the body of dialog - buttons: Deprecated. The buttons key is not propagated to jQueryUI Dialog. It must be a dictionary (key = button label, value = click handler) or a list of dictionaries (each element in the dictionary is send to the corresponding method of a jQuery element targeting the <button> tag). It is deprecated because all dialogs @@ -94,57 +86,15 @@ instance.web.Dialog = instance.web.Widget.extend({ this._super(parent); this.content_to_set = content; this.dialog_options = { - modal: true, destroy_on_close: true, - width: 900, - min_width: 0, - max_width: '95%', - height: 'auto', - min_height: 0, - max_height: $(window.top).height() - 200, - autoOpen: false, - position: [false, 40], + size: 'large', //'medium', 'small' buttons: null, - resizeStop: function() { - self.trigger("resized"); - }, }; if (options) { _.extend(this.dialog_options, options); } this.on("closing", this, this._closing); - this.$buttons = $('<div class="ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"><span class="oe_dialog_custom_buttons"/></div>'); - }, - _get_options: function() { - var self = this; - var o = _.extend({}, this.dialog_options); - var sizes = { - width: $(window.top).width(), - height: $(window.top).height(), - }; - _.each(sizes, function(available_size, unit) { - o[unit] = self._get_size(o[unit], available_size); - o['min_' + unit] = self._get_size(o['min_' + unit] || 0, available_size); - o['max_' + unit] = self._get_size(o['max_' + unit] || 0, available_size); - if (o[unit] !== 'auto' && o['min_' + unit] && o[unit] < o['min_' + unit]) { - o[unit] = o['min_' + unit]; - } - if (o[unit] !== 'auto' && o['max_' + unit] && o[unit] > o['max_' + unit]) { - o[unit] = o['max_' + unit]; - } - }); - o.title = o.title || this.dialog_title; - return o; - }, - _get_size: function(val, available_size) { - val = val.toString(); - if (val === 'auto') { - return val; - } else if (val.slice(-1) === "%") { - return Math.round(available_size / 100 * parseInt(val.slice(0, -1), 10)); - } else { - return parseInt(val, 10); - } + this.$buttons = $('<div class="modal-footer"><span class="oe_dialog_custom_buttons"/></div>'); }, renderElement: function() { if (this.content_to_set) { @@ -162,8 +112,7 @@ instance.web.Dialog = instance.web.Widget.extend({ if (!this.dialog_inited) { this.init_dialog(); } - this.$el.dialog('open'); - this.$el.dialog("widget").append(this.$buttons); + this.$buttons.insertAfter(this.$dialog_box.find(".modal-body")); return this; }, _add_buttons: function(buttons) { @@ -188,16 +137,39 @@ instance.web.Dialog = instance.web.Widget.extend({ @return The result returned by start(). */ init_dialog: function() { - var options = this._get_options(); + var self = this; + var options = _.extend({}, this.dialog_options); + options.title = options.title || this.dialog_title; if (options.buttons) { this._add_buttons(options.buttons); delete(options.buttons); } this.renderElement(); - instance.web.dialog(this.$el, options); - if (options.height === 'auto' && options.max_height) { - this.$el.css({ 'max-height': options.max_height, 'overflow-y': 'auto' }); + + this.$dialog_box = $(QWeb.render('Dialog', options)).appendTo("body"); + this.$el.modal({ + 'backdrop': false, + 'keyboard': true, + }); + if (options.size !== 'large'){ + var dialog_class_size = this.$dialog_box.find('.modal-lg').removeClass('modal-lg') + if (options.size === 'small'){ + dialog_class_size.addClass('modal-sm'); + } } + + this.$el.appendTo(this.$dialog_box.find(".modal-body")); + var $dialog_content = this.$dialog_box.find('.modal-content'); + if (options.dialogClass){ + $dialog_content.find(".modal-body").addClass(options.dialogClass); + } + $dialog_content.openerpClass(); + + this.$dialog_box.on('hidden.bs.modal', this, function(){ + self.trigger("closing"); + }); + this.$dialog_box.modal('show'); + this.dialog_inited = true; var res = this.start(); return res; @@ -206,9 +178,8 @@ instance.web.Dialog = instance.web.Widget.extend({ Closes the popup, if destroy_on_close was passed to the constructor, it is also destroyed. */ close: function(reason) { - if (this.dialog_inited && this.$el.is(":data(dialog)")) { - this.trigger("closing", reason); - this.$el.dialog('close'); + if (this.dialog_inited && this.$el.is(":data(bs.modal)")) { + this.$el.parents('.modal').modal('hide'); } }, _closing: function() { @@ -233,8 +204,8 @@ instance.web.Dialog = instance.web.Widget.extend({ this.close(reason); this.__tmp_dialog_destroying = undefined; } - if (this.dialog_inited && !this.isDestroyed() && this.$el.is(":data(dialog)")) { - this.$el.dialog('destroy'); + if (this.dialog_inited && !this.isDestroyed() && this.$el.is(":data(bs.modal)")) { + this.$el.parents('.modal').remove(); } this._super(); } @@ -272,12 +243,13 @@ instance.web.CrashManager = instance.web.Class.extend({ if (error.data.exception_type === "except_osv") { error = _.extend({}, error, {data: _.extend({}, error.data, {message: error.data.arguments[0] + "\n\n" + error.data.arguments[1]})}); } - instance.web.dialog($('<div>' + QWeb.render('CrashManager.warning', {error: error}) + '</div>'), { + new instance.web.Dialog(this, { + size: 'medium', title: "OpenERP " + (_.str.capitalize(error.type) || "Warning"), buttons: [ - {text: _t("Ok"), click: function() { $(this).dialog("close"); }} - ] - }); + {text: _t("Ok"), click: function() { this.parents('.modal').modal('hide'); }} + ], + }, $('<div>' + QWeb.render('CrashManager.warning', {error: error}) + '</div>')).open(); }, show_error: function(error) { if (!this.active) { @@ -285,17 +257,12 @@ instance.web.CrashManager = instance.web.Class.extend({ } var buttons = {}; buttons[_t("Ok")] = function() { - $(this).dialog("close"); + this.parents('.modal').modal('hide'); }; - var dialog = new instance.web.Dialog(this, { + new instance.web.Dialog(this, { title: "OpenERP " + _.str.capitalize(error.type), - width: '80%', - height: '50%', - min_width: '800px', - min_height: '600px', buttons: buttons - }).open(); - dialog.$el.html(QWeb.render('CrashManager.error', {session: instance.session, error: error})); + }, QWeb.render('CrashManager.error', {session: instance.session, error: error})).open(); }, show_message: function(exception) { this.show_error({ @@ -342,16 +309,17 @@ instance.web.RedirectWarningHandler = instance.web.Dialog.extend(instance.web.Ex error = this.error; error.data.message = error.data.arguments[0]; - instance.web.dialog($('<div>' + QWeb.render('CrashManager.warning', {error: error}) + '</div>'), { + new instance.web.Dialog(this, { + size: 'medium', title: "OpenERP " + (_.str.capitalize(error.type) || "Warning"), buttons: [ - {text: _t("Ok"), click: function() { $(this).dialog("close"); }}, + {text: _t("Ok"), click: function() { this.$el.parents('.modal').modal('hide'); }}, {text: error.data.arguments[2], click: function() { window.location.href='#action='+error.data.arguments[1]; - $(this).dialog("close"); + this.$el.parents('.modal').modal('hide'); }} - ] - }); + ], + }, QWeb.render('CrashManager.warning', {error: error})).open(); this.destroy(); } }); @@ -498,13 +466,13 @@ instance.web.DatabaseManager = instance.web.Widget.extend({ * @param {String} error.error message of the error dialog */ display_error: function (error) { - return instance.web.dialog($('<div>'), { - modal: true, + return new instance.web.Dialog(this, { + size: 'medium', title: error.title, buttons: [ - {text: _t("Ok"), click: function() { $(this).dialog("close"); }} + {text: _t("Ok"), click: function() { this.$el.parents('.modal').modal('hide'); }} ] - }).html(error.error); + }, $('<div>').html(error.error)).open(); }, do_create: function(form) { var self = this; @@ -731,13 +699,13 @@ instance.web.ChangePassword = instance.web.Widget.extend({ }); }, display_error: function (error) { - return instance.web.dialog($('<div>'), { - modal: true, + return new instance.web.Dialog(this, { + size: 'medium', title: error.title, buttons: [ - {text: _t("Ok"), click: function() { $(this).dialog("close"); }} + {text: _t("Ok"), click: function() { this.$el.parents('.modal').modal('hide'); }} ] - }).html(error.error); + }, $('<div>').html(error.error)).open(); }, }); instance.web.client_actions.add("change_password", "instance.web.ChangePassword"); @@ -1052,8 +1020,11 @@ instance.web.UserMenu = instance.web.Widget.extend({ e.preventDefault(); window.location = $.param.querystring( window.location.href, 'debug'); }); - instance.web.dialog($help, {autoOpen: true, - modal: true, width: 507, height: 290, resizable: false, title: _t("About")}); + new instance.web.Dialog(this, { + size: 'medium', + dialogClass: 'oe_act_window', + title: _t("About"), + }, $help).open(); }); }, }); diff --git a/addons/web/static/src/js/data_export.js b/addons/web/static/src/js/data_export.js index 252a5a378cc..2de933f45e8 100644 --- a/addons/web/static/src/js/data_export.js +++ b/addons/web/static/src/js/data_export.js @@ -46,7 +46,6 @@ instance.web.DataExport = instance.web.Dialog.extend({ start: function() { var self = this; this._super.apply(this, arguments); - self.$el.removeClass('ui-dialog-content ui-widget-content'); var got_fields = new $.Deferred(); this.$el.find('#import_compat').change(function() { @@ -413,7 +412,6 @@ instance.web.DataExport = instance.web.Dialog.extend({ }); }, close: function() { - this.$el.remove(); this._super(); } }); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 37c60a36f04..83745133a3b 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -586,13 +586,13 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM this._internal_set_values(result.value, processed); } if (!_.isEmpty(result.warning)) { - instance.web.dialog($(QWeb.render("CrashManager.warning", result.warning)), { + new instance.web.Dialog(this, { + size: 'medium', title:result.warning.title, - modal: true, buttons: [ - {text: _t("Ok"), click: function() { $(this).dialog("close"); }} + {text: _t("Ok"), click: function() { this.parents('.modal').modal('hide'); }} ] - }); + }, QWeb.render("CrashManager.warning", result.warning)).open(); } return $.Deferred().resolve(); @@ -1080,7 +1080,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM }; }) .value(); - var d = new instance.web.Dialog(this, { title: _t("Set Default"), args: { @@ -1956,26 +1955,23 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ var exec_action = function() { if (self.node.attrs.confirm) { var def = $.Deferred(); - var dialog = instance.web.dialog($('<div/>').text(self.node.attrs.confirm), { + var dialog = instance.web.Dialog(this, { title: _t('Confirm'), - modal: true, buttons: [ {text: _t("Cancel"), click: function() { - $(this).dialog("close"); + this.parents('.modal').modal('hide'); } }, {text: _t("Ok"), click: function() { var self2 = this; self.on_confirmed().always(function() { - $(self2).dialog("close"); + self2.parents('.modal').modal('hide'); }); } } ], - beforeClose: function() { - def.resolve(); - }, - }); + }, $('<div/>').text(self.node.attrs.confirm)).open(); + dialog.on("closing", null, function() {def.resolve();}); return def.promise(); } else { return self.on_confirmed(); @@ -3234,7 +3230,7 @@ instance.web.form.M2ODialog = instance.web.Dialog.extend({ init: function(parent) { this._super(parent, { title: _.str.sprintf(_t("Add %s"), parent.string), - width: 312, + size: 'medium', }); }, start: function() { @@ -3302,7 +3298,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc delete this.$drop_down; } if (this.$input) { - this.$input.closest(".ui-dialog .ui-dialog-content").off('scroll'); + this.$input.closest(".modal .modal-content").off('scroll'); this.$input.off('keyup blur autocompleteclose autocompleteopen ' + 'focus focusout change keydown'); delete this.$input; @@ -3395,7 +3391,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc self.$input.autocomplete("close"); } }, 50); - this.$input.closest(".ui-dialog .ui-dialog-content").on('scroll', this, close_autocomplete); + this.$input.closest(".modal .modal-content").on('scroll', this, close_autocomplete); self.ed_def = $.Deferred(); self.uned_def = $.Deferred(); @@ -4921,13 +4917,12 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ var self = this; this.renderElement(); var dialog = new instance.web.Dialog(this, { - min_width: '800px', dialogClass: 'oe_act_window', - close: function() { - self.check_exit(true); - }, title: this.options.title || "", }, this.$el).open(); + dialog.on('closing', this, function (e){ + self.check_exit(true); + }); this.$buttonpane = dialog.$buttons; this.start(); }, @@ -4994,8 +4989,8 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ }, destroy: function () { this.trigger('closed'); - if (this.$el.is(":data(dialog)")) { - this.$el.dialog('close'); + if (this.$el.is(":data(bs.modal)")) { + this.$el.parents('.modal').modal('hide'); } this._super(); }, diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 2f401445f7e..dc9f706d40e 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -410,10 +410,10 @@ instance.web.ActionManager = instance.web.Widget.extend({ } this.dialog_stop(executor.action); this.dialog = new instance.web.Dialog(this, { + title: executor.action.name, dialogClass: executor.klass, }); this.dialog.on("closing", null, options.on_close); - this.dialog.dialog_title = executor.action.name; if (widget instanceof instance.web.ViewManager) { _.extend(widget.flags, { $buttons: this.dialog.$buttons, @@ -926,7 +926,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ current_view = this.views[this.active_view].controller; switch (val) { case 'fvg': - var dialog = new instance.web.Dialog(this, { title: _t("Fields View Get"), width: '95%' }).open(); + var dialog = new instance.web.Dialog(this, { title: _t("Fields View Get") }).open(); $('<pre>').text(instance.web.json_node_to_xml(current_view.fields_view.arch, true)).appendTo(dialog.$el); break; case 'tests': @@ -943,7 +943,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ this.dataset.call('perm_read', [ids]).done(function(result) { var dialog = new instance.web.Dialog(this, { title: _.str.sprintf(_t("View Log (%s)"), self.dataset.model), - width: 400 + size: 'medium', }, QWeb.render('ViewManagerDebugViewLog', { perm : result[0], format : instance.web.format_value @@ -986,7 +986,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ new instance.web.Dialog(self, { title: _.str.sprintf(_t("Model %s fields"), self.dataset.model), - width: '95%'}, $root).open(); + }, $root).open(); }); break; case 'edit_workflow': @@ -1223,7 +1223,7 @@ instance.web.Sidebar = instance.web.Widget.extend({ domain = $.Deferred().resolve(undefined); } if (ids.length === 0) { - instance.web.dialog($("<div />").text(_t("You must choose at least one record.")), { title: _t("Warning"), modal: true }); + new instance.web.Dialog(this, { title: _t("Warning"), size: 'medium',}, $("<div />").text(_t("You must choose at least one record."))).open(); return false; } var active_ids_context = { |
