From e95ca69113bf3b37c82c3e2cab7e6636592c9508 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Thu, 10 Apr 2014 12:06:31 +0200 Subject: [PATCH 1/5] [REF]add bootstrap modal window based, cleaned, refactored from trunk-ui-to-boostrap-modal branch bzr revid: csn@openerp.com-20140410100631-5v6a71oi5wyunbda --- addons/web/static/src/css/base.css | 169 ++------------------ addons/web/static/src/css/base.sass | 127 +++------------ addons/web/static/src/js/chrome.js | 135 ++++++++++------ addons/web/static/src/js/data_export.js | 2 - addons/web/static/src/js/view_form.js | 36 ++--- addons/web/static/src/js/views.js | 4 +- addons/web/static/src/xml/base.xml | 15 +- addons/web_diagram/static/src/js/diagram.js | 8 +- 8 files changed, 151 insertions(+), 345 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 3125d9e938b..22bb7d41c66 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -127,7 +127,7 @@ font-weight: bold; font-size: inherit; } -.openerp a.button:link, .openerp a.button:visited, .openerp button, .openerp .oe_button, .openerp input[type='submit'], .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { +.openerp a.button:link, .openerp a.button:visited, .openerp button, .openerp .oe_button, .openerp input[type='submit'] { display: inline-block; border: 1px solid rgba(0, 0, 0, 0.4); color: #4c4c4c; @@ -152,7 +152,7 @@ -webkit-font-smoothing: antialiased; outline: none; } -.openerp a.button:hover, .openerp button:hover, .openerp .oe_button:hover, .openerp input[type='submit']:hover, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-hover { +.openerp a.button:hover, .openerp button:hover, .openerp .oe_button:hover, .openerp input[type='submit']:hover { background-color: #ececec; background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); @@ -163,7 +163,7 @@ cursor: pointer; background-position: 0; } -.openerp a.button:focus, .openerp button:focus, .openerp .oe_button:focus, .openerp input[type='submit']:focus, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-focus { +.openerp a.button:focus, .openerp button:focus, .openerp .oe_button:focus, .openerp input[type='submit']:focus { border: 1px solid #80bfff; background-position: 0; background-color: #ececec; @@ -177,7 +177,7 @@ -webkit-box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; } -.openerp a.button:active, .openerp a.button.active, .openerp button:active, .openerp .oe_button:active, .openerp .oe_button.active, .openerp input[type='submit']:active, .openerp input[type='submit'].active, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-active { +.openerp a.button:active, .openerp a.button.active, .openerp button:active, .openerp .oe_button:active, .openerp .oe_button.active, .openerp input[type='submit']:active, .openerp input[type='submit'].active { background-color: #ececec; background-image: -webkit-gradient(linear, left top, left bottom, from(#e3e3e3), to(#f6f6f6)); background-image: -webkit-linear-gradient(top, #e3e3e3, #f6f6f6); @@ -212,148 +212,6 @@ .openerp .ui-tabs { position: static; } -.openerp.ui-dialog { - display: none; - height: auto !important; - padding: 6px; - background-color: rgba(60, 60, 60, 0.7); - border: 1px solid; - border-color: #888888 #555555 #444444; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); - -webkit-box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); - box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.openerp.ui-dialog .ui-dialog-content { - padding: 0; -} -.openerp.ui-dialog .ui-dialog-titlebar, .openerp.ui-dialog .ui-dialog-content, .openerp.ui-dialog .ui-dialog-buttonpane { - padding: 16px; -} -.openerp.ui-dialog .ui-dialog-titlebar { - border-top: none; - border-left: none; - border-right: none; - border-bottom: 1px solid #cacaca; - -moz-border-radius: 2px 2px 0 0; - -webkit-border-radius: 2px 2px 0 0; - border-radius: 2px 2px 0 0; - background-color: #ededed; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); -} -.openerp.ui-dialog .ui-dialog-titlebar .ui-dialog-title { - margin: 0; - padding: 0; -} -.openerp.ui-dialog .ui-dialog-content { - background: white; - width: auto !important; -} -.openerp.ui-dialog .ui-dialog-buttonpane { - border-top: 1px solid #e0e0e0; - background: #f5f7f9; - margin: 0; - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp.ui-dialog .ui-dialog-buttonpane button { - margin: 0 4px 0 0; -} -.openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: left; -} -.openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { - margin-right: 4px; -} -.openerp.ui-dialog .ui-dialog-titlebar-close { - padding: 0; -} -.openerp.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick { - display: none; -} -.openerp.ui-dialog .ui-dialog-titlebar-close:before { - content: "×"; - font-size: 18px; - font-weight: bold; - line-height: 16px; - color: black; - text-shadow: 0 1px 0 white; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; -} -.openerp.ui-dialog .ui-dialog-titlebar-close:before:hover { - color: black; - text-decoration: none; -} -.openerp.ui-dialog .oe_about { - background-color: white; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp.ui-dialog .oe_about a { - color: #7c7bad; -} -.openerp.ui-dialog .oe_about a:hover { - text-decoration: underline; -} -.openerp.ui-dialog .oe_about a:focus { - outline: none; -} -.openerp.ui-dialog .oe_about .oe_logo { - margin-left: -6px; -} -.openerp.ui-dialog .oe_about .oe_bottom { - position: absolute; - top: 50%; - left: 0; - right: 0; - bottom: 0; - text-shadow: 0 1px 1px #999999; - background-color: #8a0e0e; - background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); - background-image: -webkit-linear-gradient(top, #b41616, #600606); - background-image: -moz-linear-gradient(top, #b41616, #600606); - background-image: -ms-linear-gradient(top, #b41616, #600606); - background-image: -o-linear-gradient(top, #b41616, #600606); - background-image: linear-gradient(to bottom, #b41616, #600606); - color: #eeeeee; - padding: 0 16px; - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp.ui-dialog .oe_about .oe_bottom a { - color: #eeeeee; -} -.openerp.ui-dialog.oe_act_window .ui-dialog-content { - padding: 0px; -} -.openerp .modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: black; - filter: alpha(opacity=30); - opacity: 0.3; -} .openerp .oe_i { font-family: "mnmliconsRegular" !important; font-size: 21px; @@ -1234,10 +1092,8 @@ } .openerp .oe_about .oe_bottom { position: absolute; - top: 50%; left: 0; right: 0; - bottom: 0; text-shadow: 0 1px 1px #999999; background-color: #8a0e0e; background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); @@ -3426,9 +3282,6 @@ body.oe_single_form .oe_single_form_container { .openerp_ie ul.oe_form_status li.oe_active > .arrow span, .openerp_ie ul.oe_form_status_clickable li.oe_active > .arrow span { background-color: #729fcf !important; } -.openerp_ie .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EFEFEF', endColorstr='#D8D8D8'); -} @media print { .openerp { @@ -3474,7 +3327,19 @@ body.oe_single_form .oe_single_form_container { width: 18px; height: 18px; } - +.modal .modal-header button.close { + border: none; + background: none; + padding: 1px; + height: 18px; + font-size: 20px; +} +.modal .modal-footer { + text-align: left; +} +.modal .oe_act_window.modal-body{ + padding: 0; +} input[type="radio"], input[type="checkbox"] { margin-right: 4px; margin-left: 4px; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index ca77310b0d9..335e04f2424 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -218,7 +218,7 @@ $sheet-padding: 16px font-size: inherit // }}} // Button style {{{ - a.button:link, a.button:visited, button, .oe_button, input[type='submit'], .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button + a.button:link, a.button:visited, button, .oe_button, input[type='submit'] display: inline-block border: 1px solid rgba(0,0,0,0.4) color: #4c4c4c @@ -233,18 +233,18 @@ $sheet-padding: 16px -webkit-font-smoothing: antialiased outline: none - a.button:hover, button:hover,.oe_button:hover, input[type='submit']:hover, .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-hover + a.button:hover, button:hover,.oe_button:hover, input[type='submit']:hover @include vertical-gradient(#f6f6f6, #e3e3e3) cursor: pointer background-position: 0 - a.button:focus, button:focus, .oe_button:focus, input[type='submit']:focus, .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-focus + a.button:focus, button:focus, .oe_button:focus, input[type='submit']:focus border: 1px solid #80bfff background-position: 0 @include vertical-gradient(#f6f6f6, #e3e3e3) @include box-shadow((0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, .8) inset)) - a.button:active, a.button.active, button:active, .oe_button:active, .oe_button.active, input[type='submit']:active, input[type='submit'].active, .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-active + a.button:active, a.button.active, button:active, .oe_button:active, .oe_button.active, input[type='submit']:active, input[type='submit'].active @include vertical-gradient(#e3e3e3, #f6f6f6) @include box-shadow(none) @@ -272,105 +272,6 @@ $sheet-padding: 16px .ui-tabs position: static - // Modal box - &.ui-dialog - display: none - height: auto !important - padding: 6px - //overflow: hidden - background-color: rgba(60,60,60,0.7) - border: 1px solid - border-color: #888 #555 #444 - //overflow: hidden - @include radius(8px) - @include box-shadow(0 1px 12px rgba(0, 0, 0, 0.6)) - @include background-clip() - .ui-dialog-content - padding: 0 - .ui-dialog-titlebar, .ui-dialog-content, .ui-dialog-buttonpane - padding: 16px - .ui-dialog-titlebar - border-top: none - border-left: none - border-right: none - border-bottom: 1px solid #cacaca - @include radius(2px 2px 0 0) - @include vertical-gradient(#FCFCFC, #DEDEDE) - .ui-dialog-title - margin: 0 - padding: 0 - .ui-dialog-content - background: white - width: auto !important - .ui-dialog-buttonpane - border-top: 1px solid #e0e0e0 - background: #f5f7f9 - margin: 0 - @include radius(0 0 2px 2px) - button - margin: 0 4px 0 0 - .ui-dialog-buttonset - float: left - .ui-button - margin-right: 4px - .ui-dialog-titlebar-close - padding: 0 - .ui-icon-closethick - display: none - &:before - content: "×" - font-size: 18px - font-weight: bold - line-height: 16px - color: black - text-shadow: 0 1px 0 white - padding: 0 - cursor: pointer - background: transparent - border: 0 - &:hover - color: black - text-decoration: none - .oe_about - background-color: white - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=) - @include radius(0 0 2px 2px) - a - color: $link-color - &:hover - text-decoration: underline - &:focus - outline: none - .oe_logo - margin-left: -6px - .oe_bottom - position: absolute - top: 50% - left: 0 - right: 0 - bottom: 0 - text-shadow: 0 1px 1px #999999 - @include vertical-gradient(#b41616, #600606) - color: #eee - padding: 0 16px - @include radius(0 0 2px 2px) - a - color: #eee - - &.ui-dialog.oe_act_window - .ui-dialog-content - padding: 0px - - .modal-backdrop - position: fixed - top: 0 - right: 0 - bottom: 0 - left: 0 - z-index: 1040 - background-color: black - @include opacity(.3) - // }}} // Generic classes {{{ .oe_i @@ -1031,10 +932,8 @@ $sheet-padding: 16px margin-left: -6px .oe_bottom position: absolute - top: 50% left: 0 right: 0 - bottom: 0 text-shadow: 0 1px 1px #999999 @include vertical-gradient(#b41616, #600606) color: #eee @@ -2765,9 +2664,6 @@ body.oe_single_form > .arrow span background-color: #729fcf !important - // jquery ui for ie - .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EFEFEF', endColorstr='#D8D8D8') // }}} // @media print {{{ @@ -2812,6 +2708,21 @@ body.oe_single_form height: 18px // End hack}}} +// Customized modal according bootstrap3 +.modal + .modal-header + button.close + border: none + background: none + padding: 1px + height: 18px + font-size: 20px + .modal-footer + text-align: left + &.oe_act_window + .modal-body + padding: 0 + input[type="radio"], input[type="checkbox"] margin-right: 4px margin-left: 4px diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index de56927799e..f9085af3854 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -56,16 +56,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. @@ -91,10 +81,11 @@ instance.web.Dialog = instance.web.Widget.extend({ */ init: function (parent, options, content) { var self = this; + this.css_layout_outer = ['width','min_width','max_width']; + this.css_layout_inner = ['height','min_height','max_height']; this._super(parent); this.content_to_set = content; this.dialog_options = { - modal: true, destroy_on_close: true, width: 900, min_width: 0, @@ -102,18 +93,14 @@ instance.web.Dialog = instance.web.Widget.extend({ height: 'auto', min_height: 0, max_height: $(window.top).height() - 200, - autoOpen: false, - position: [false, 40], + resizable: true, buttons: null, - resizeStop: function() { - self.trigger("resized"); - }, }; if (options) { _.extend(this.dialog_options, options); } this.on("closing", this, this._closing); - this.$buttons = $('
'); + this.$buttons = $(''); }, _get_options: function() { var self = this; @@ -133,6 +120,20 @@ instance.web.Dialog = instance.web.Widget.extend({ o[unit] = o['max_' + unit]; } }); + var layout_inner = {}; + var layout_outer = {}; + _.each(o, function(value,key){ + if (_.contains(self.css_layout_inner, ''+key+'')){ + layout_inner[key] = value; + delete o[key]; + } + if (_.contains(self.css_layout_outer, ''+key+'')){ + layout_outer[key] = value; + delete o[key]; + } + }); + o.layout_inner = layout_inner; + o.layout_outer = layout_outer; o.title = o.title || this.dialog_title; return o; }, @@ -162,8 +163,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 +188,49 @@ instance.web.Dialog = instance.web.Widget.extend({ @return The result returned by start(). */ init_dialog: function() { + var self = this; var options = this._get_options(); 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, + }); + this.$el.appendTo(this.$dialog_box.find(".modal-body")); + var dialog_body = this.$dialog_box.find('.modal-content'); + if (options.layout_outer || options.layout_inner){ + dialog_body.parent().css(options.layout_outer); + dialog_body.css(options.layout_inner); } + if (options.dialogClass){ + dialog_body.find(".modal-body").addClass(options.dialogClass); + } + dialog_body.openerpClass(); + dialog_body.draggable({ handle: ".modal-header", containment: "window" }); + this.$dialog_box.on('hidden.bs.modal',this,function(){ + self.trigger("closing"); + }); + this.$dialog_box.modal('show'); + + if (options.layout_inner.height === 'auto' && options.layout_inner.max_height) { + this.$el.css({ 'max-height': options.layout_inner.max_height, 'overflow-y': 'auto' }); + } + var dialog_body = this.$dialog_box.find('.modal-content'); + if (options.resizable){ + dialog_body.resizable({ handles: 'n, e, s, w, ne, se, sw, nw' }); + } + dialog_body.resize(function() { + var main_modal = dialog_body.parent(); + var modal_body = main_modal.find(".modal-body .in"); + var modal_content = main_modal.find(".modal-content").height(); + modal_body.height(modal_content - 150); + main_modal.find(".modal-content").height((modal_body.height() + main_modal.find(".modal-header").height() + main_modal.find(".modal-footer").height()) + 85); + }); this.dialog_inited = true; var res = this.start(); return res; @@ -206,9 +239,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 +265,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 +304,12 @@ 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($('
' + QWeb.render('CrashManager.warning', {error: error}) + '
'), { + new instance.web.Dialog(this, { 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'); }} + ], + }, $('
' + QWeb.render('CrashManager.warning', {error: error}) + '
')).open(); }, show_error: function(error) { if (!this.active) { @@ -285,17 +317,13 @@ 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 +370,16 @@ instance.web.RedirectWarningHandler = instance.web.Dialog.extend(instance.web.Ex error = this.error; error.data.message = error.data.arguments[0]; - instance.web.dialog($('
' + QWeb.render('CrashManager.warning', {error: error}) + '
'), { + new instance.web.Dialog(this, { 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})); this.destroy(); } }); @@ -498,13 +526,12 @@ instance.web.DatabaseManager = instance.web.Widget.extend({ * @param {String} error.error message of the error dialog */ display_error: function (error) { - return instance.web.dialog($('
'), { - modal: true, + return new instance.web.Dialog(this, { 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); + }, $('
').html(error.error)).open(); }, do_create: function(form) { var self = this; @@ -731,13 +758,12 @@ instance.web.ChangePassword = instance.web.Widget.extend({ }); }, display_error: function (error) { - return instance.web.dialog($('
'), { - modal: true, + return new instance.web.Dialog(this, { 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); + }, $('
').html(error.error)).open(); }, }); instance.web.client_actions.add("change_password", "instance.web.ChangePassword"); @@ -1052,8 +1078,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, { + resizable: false, + title: _t("About"), + width: 507, height: 290, + }, $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 34e5d26c7c2..79bd078b6de 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -586,13 +586,12 @@ 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, { 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 +1079,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 +1954,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($('
').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(); - }, - }); + }, $('
').text(self.node.attrs.confirm)).open(); + dialog.on("closing", null, function() {def.resolve();}); return def.promise(); } else { return self.on_confirmed(); @@ -3302,7 +3297,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 +3390,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(); @@ -4919,11 +4914,11 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ 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(); }, @@ -4970,6 +4965,7 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ }); }); var $cbutton = self.$buttonpane.find(".oe_abstractformpopup-form-close"); + // $cbutton = $cbutton.add(self.$el.parents('.modal:first').find('.close')[0]); $cbutton.click(function() { self.view_form.trigger('on_button_cancel'); self.check_exit(); @@ -4990,8 +4986,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..c9c4ef879c3 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, @@ -1223,7 +1223,7 @@ instance.web.Sidebar = instance.web.Widget.extend({ domain = $.Deferred().resolve(undefined); } if (ids.length === 0) { - instance.web.dialog($("
").text(_t("You must choose at least one record.")), { title: _t("Warning"), modal: true }); + new instance.web.Dialog(this, { title: _t("Warning")}, $("
").text(_t("You must choose at least one record."))).open(); return false; } var active_ids_context = { diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 3f7494c75fa..7a05a6524a3 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -32,7 +32,20 @@
- + + + diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js index 2d3e3cc6b45..77876c9dc52 100644 --- a/addons/web_diagram/static/src/js/diagram.js +++ b/addons/web_diagram/static/src/js/diagram.js @@ -101,7 +101,6 @@ instance.web.DiagramView = instance.web.View.extend({ params['connectors_fields'].push(self.fields[conn.attrs.name]['string']|| this.toTitleCase(conn.attrs.name)); params['connectors'].push(conn.attrs.name); }); - this.rpc( '/web_diagram/diagram/get_diagram_info',params).done(function(result) { self.draw_diagram(result); @@ -179,11 +178,6 @@ instance.web.DiagramView = instance.web.View.extend({ var r = new Raphael(canvas, '100%','100%'); var graph = new CuteGraph(r,style,canvas.parentNode); - - var confirm_dialog = $('#dialog').dialog({ - autoOpen: false, - title: _t("Are you sure?") }); - _.each(res_nodes, function(node) { var n = new CuteNode( @@ -344,7 +338,7 @@ instance.web.DiagramView = instance.web.View.extend({ }); // We want to destroy the dummy edge after a creation cancel. This destroys it even if we save the changes. // This is not a problem since the diagram is completely redrawn on saved changes. - pop.$el.bind("dialogbeforeclose",function(){ + pop.$el.parents('.modal').on('hidden.bs.modal', function (e){ if(dummy_cuteedge){ dummy_cuteedge.remove(); } From 964e94f8a800661020af8082c719b19c4cdddd86 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Thu, 10 Apr 2014 14:11:22 +0200 Subject: [PATCH 2/5] [FIX]forgot to open a dialog bzr revid: csn@openerp.com-20140410121122-y0a8l1hzd01af8bn --- addons/web/static/src/css/base.sass | 4 ++-- addons/web/static/src/js/chrome.js | 2 +- addons/web/static/src/js/view_form.js | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 335e04f2424..fbf86cca678 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -2719,8 +2719,8 @@ body.oe_single_form font-size: 20px .modal-footer text-align: left - &.oe_act_window - .modal-body + .oe_act_window + &.modal-body padding: 0 input[type="radio"], input[type="checkbox"] diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index f9085af3854..4c4f750f76e 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -379,7 +379,7 @@ instance.web.RedirectWarningHandler = instance.web.Dialog.extend(instance.web.Ex this.$el.parents('.modal').modal('hide'); }} ], - }, QWeb.render('CrashManager.warning', {error: error})); + }, QWeb.render('CrashManager.warning', {error: error})).open(); this.destroy(); } }); diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 79bd078b6de..89e5d04fa75 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -4965,7 +4965,6 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ }); }); var $cbutton = self.$buttonpane.find(".oe_abstractformpopup-form-close"); - // $cbutton = $cbutton.add(self.$el.parents('.modal:first').find('.close')[0]); $cbutton.click(function() { self.view_form.trigger('on_button_cancel'); self.check_exit(); From 049539809d4d1e4d37eac4b59d08d10c39c731f7 Mon Sep 17 00:00:00 2001 From: Cedric Snauwaert Date: Thu, 10 Apr 2014 17:19:40 +0200 Subject: [PATCH 3/5] [FIX]modal strict to bootstrap: no resize and only use 3 size, large-medium-small instead of changing width of modal bzr revid: csn@openerp.com-20140410151940-w0m1ljjqgo0eysgp --- addons/web/static/src/css/base.css | 3 - addons/web/static/src/css/base.sass | 3 - addons/web/static/src/js/chrome.js | 93 ++++--------------- addons/web/static/src/js/view_form.js | 4 +- addons/web/static/src/js/views.js | 8 +- .../static/src/js/view_editor.js | 6 +- 6 files changed, 27 insertions(+), 90 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 22bb7d41c66..ea66d600ac5 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1091,9 +1091,6 @@ margin-left: -6px; } .openerp .oe_about .oe_bottom { - position: absolute; - left: 0; - right: 0; text-shadow: 0 1px 1px #999999; background-color: #8a0e0e; background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index fbf86cca678..f70fee5583f 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -931,9 +931,6 @@ $sheet-padding: 16px .oe_logo margin-left: -6px .oe_bottom - position: absolute - left: 0 - right: 0 text-shadow: 0 1px 1px #999999 @include vertical-gradient(#b41616, #600606) color: #eee diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index 4c4f750f76e..7c1cf198efe 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -71,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: + - modal_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