[REM] Removed Login from webclient
bzr revid: fme@openerp.com-20140113173808-1clqlztx6fs79h2k
This commit is contained in:
parent
3f34405c7c
commit
75e02860c2
|
@ -1,4 +1,4 @@
|
|||
@charset "utf-8";
|
||||
@charset "UTF-8";
|
||||
@font-face {
|
||||
font-family: "mnmliconsRegular";
|
||||
src: url("/web/static/src/font/mnmliconsv21-webfont.eot") format("eot");
|
||||
|
@ -870,153 +870,6 @@
|
|||
padding: 5px;
|
||||
width: 32px;
|
||||
}
|
||||
.openerp .oe_login {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=);
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
height: 100%;
|
||||
}
|
||||
.openerp .oe_login ul, .openerp .oe_login li {
|
||||
margin: 0;
|
||||
list-style-type: none;
|
||||
padding: 0 0 4px 0;
|
||||
}
|
||||
.openerp .oe_login button {
|
||||
cursor: pointer;
|
||||
padding: 6px 16px;
|
||||
border: 1px solid #222222;
|
||||
color: white;
|
||||
margin: 0;
|
||||
background-color: #8c1313;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#b92020), to(#600606));
|
||||
background-image: -webkit-linear-gradient(top, #b92020, #600606);
|
||||
background-image: -moz-linear-gradient(top, #b92020, #600606);
|
||||
background-image: -ms-linear-gradient(top, #b92020, #600606);
|
||||
background-image: -o-linear-gradient(top, #b92020, #600606);
|
||||
background-image: linear-gradient(to bottom, #b92020, #600606);
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset;
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset;
|
||||
}
|
||||
.openerp .oe_login input, .openerp .oe_login select {
|
||||
width: 252px;
|
||||
font-family: "Lucida Grande", Helvetica, Verdana, Arial;
|
||||
border: 1px solid #999999;
|
||||
background: whitesmoke;
|
||||
-moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4);
|
||||
-webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4);
|
||||
box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4);
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.openerp .oe_login input {
|
||||
margin-bottom: 9px;
|
||||
padding: 5px 6px;
|
||||
}
|
||||
.openerp .oe_login select {
|
||||
padding: 1px;
|
||||
}
|
||||
.openerp .oe_login .oe_login_dbpane {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 8px;
|
||||
padding: 5px 10px;
|
||||
color: #eeeeee;
|
||||
border: solid 1px #333333;
|
||||
background: #1e1e1e;
|
||||
background: rgba(30, 30, 30, 0.94);
|
||||
-moz-border-radius: 0 0 8px 8px;
|
||||
-webkit-border-radius: 0 0 8px 8px;
|
||||
border-radius: 0 0 8px 8px;
|
||||
}
|
||||
.openerp .oe_login .oe_login_dbpane input {
|
||||
padding: 2px 4px;
|
||||
margin: 4px 0;
|
||||
}
|
||||
.openerp .oe_login .oe_login_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);
|
||||
}
|
||||
.openerp .oe_login .oe_login_pane {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin: -160px -166px;
|
||||
border: solid 1px #333333;
|
||||
background: #1e1e1e;
|
||||
background: rgba(30, 30, 30, 0.94);
|
||||
padding: 22px 32px;
|
||||
color: #eeeeee;
|
||||
text-align: left;
|
||||
-moz-border-radius: 8px;
|
||||
-webkit-border-radius: 8px;
|
||||
border-radius: 8px;
|
||||
-moz-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9);
|
||||
-webkit-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9);
|
||||
box-shadow: 0 0 18px rgba(0, 0, 0, 0.9);
|
||||
}
|
||||
.openerp .oe_login .oe_login_pane h2 {
|
||||
margin-top: 0;
|
||||
font-size: 18px;
|
||||
}
|
||||
.openerp .oe_login .oe_login_logo {
|
||||
position: absolute;
|
||||
top: -70px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
.openerp .oe_login .oe_login_footer {
|
||||
position: absolute;
|
||||
bottom: -40px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
.openerp .oe_login .oe_login_footer a {
|
||||
color: #eeeeee;
|
||||
margin: 0 6px;
|
||||
}
|
||||
.openerp .oe_login .oe_login_footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.openerp .oe_login .oe_login_footer span {
|
||||
font-weight: bold;
|
||||
font-size: 16px;
|
||||
}
|
||||
.openerp .oe_login .oe_login_error_message {
|
||||
display: none;
|
||||
background-color: #b41616;
|
||||
color: #eeeeee;
|
||||
padding: 14px 18px;
|
||||
margin-top: 15px;
|
||||
text-align: center;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8);
|
||||
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8);
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
.openerp .oe_login_invalid .oe_login_error_message {
|
||||
display: inline-block;
|
||||
}
|
||||
.openerp .oe_database_manager {
|
||||
background: white;
|
||||
color: black;
|
||||
|
|
|
@ -744,108 +744,6 @@ $sheet-padding: 16px
|
|||
padding: 5px
|
||||
width: 32px
|
||||
// }}}
|
||||
// Login {{{
|
||||
.oe_login
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=)
|
||||
text-align: center
|
||||
font-size: 14px
|
||||
height: 100%
|
||||
ul, li
|
||||
margin: 0
|
||||
list-style-type: none
|
||||
padding: 0 0 4px 0
|
||||
button
|
||||
cursor: pointer
|
||||
padding: 6px 16px
|
||||
border: 1px solid #222
|
||||
color: white
|
||||
margin: 0
|
||||
@include vertical-gradient(#b92020, #600606)
|
||||
@include radius(4px)
|
||||
@include box-shadow((0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset))
|
||||
input, select
|
||||
width: 252px
|
||||
font-family: "Lucida Grande", Helvetica, Verdana, Arial
|
||||
border: 1px solid #999999
|
||||
background: whitesmoke
|
||||
@include box-shadow(inset 0 1px 4px rgba(0, 0, 0, 0.4))
|
||||
@include radius(3px)
|
||||
input
|
||||
margin-bottom: 9px
|
||||
padding: 5px 6px
|
||||
select
|
||||
padding: 1px
|
||||
.oe_login_dbpane
|
||||
position: fixed
|
||||
top: 0
|
||||
right: 8px
|
||||
padding: 5px 10px
|
||||
color: #eee
|
||||
border: solid 1px #333
|
||||
background: #1e1e1e
|
||||
background: rgba(30,30,30,0.94)
|
||||
@include radius(0 0 8px 8px)
|
||||
input
|
||||
padding: 2px 4px
|
||||
margin: 4px 0
|
||||
.oe_login_bottom
|
||||
position: absolute
|
||||
top: 50%
|
||||
left: 0
|
||||
right: 0
|
||||
bottom: 0
|
||||
text-shadow: 0 1px 1px #999999
|
||||
@include vertical-gradient(#b41616, #600606)
|
||||
.oe_login_pane
|
||||
position: absolute
|
||||
top: 50%
|
||||
left: 50%
|
||||
margin: -160px -166px
|
||||
border: solid 1px #333333
|
||||
background: #1e1e1e
|
||||
background: rgba(30,30,30,0.94)
|
||||
padding: 22px 32px
|
||||
color: #eee
|
||||
text-align: left
|
||||
@include radius(8px)
|
||||
@include box-shadow(0 0 18px rgba(0, 0, 0, 0.9))
|
||||
h2
|
||||
margin-top: 0
|
||||
font-size: 18px
|
||||
.oe_login_logo
|
||||
position: absolute
|
||||
top: -70px
|
||||
left: 0
|
||||
width: 100%
|
||||
margin: 0 auto
|
||||
text-align: center
|
||||
.oe_login_footer
|
||||
position: absolute
|
||||
bottom: -40px
|
||||
left: 0
|
||||
width: 100%
|
||||
text-align: center
|
||||
a
|
||||
color: #eee
|
||||
margin: 0 6px
|
||||
&:hover
|
||||
text-decoration: underline
|
||||
span
|
||||
font-weight: bold
|
||||
font-size: 16px
|
||||
.oe_login_error_message
|
||||
display: none
|
||||
background-color: #b41616
|
||||
color: #eee
|
||||
padding: 14px 18px
|
||||
margin-top: 15px
|
||||
text-align: center
|
||||
@include radius(4px)
|
||||
@include box-shadow(0 1px 4px rgba(0, 0, 0, 0.8))
|
||||
.oe_login_invalid
|
||||
.oe_login_error_message
|
||||
display: inline-block
|
||||
// }}}
|
||||
// DatabaseManager {{{
|
||||
.oe_database_manager
|
||||
background: #fff
|
||||
|
|
|
@ -475,19 +475,6 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
|
|||
this.$el.find('#db-create, #db-drop, #db-backup, #db-restore, #db-change-password, #back-to-login').unbind('click').end().empty();
|
||||
this._super();
|
||||
},
|
||||
/**
|
||||
* Converts a .serializeArray() result into a dict. Does not bother folding
|
||||
* multiple identical keys into an array, last key wins.
|
||||
*
|
||||
* @param {Array} array
|
||||
*/
|
||||
to_object: function (array) {
|
||||
var result = {};
|
||||
_(array).each(function (record) {
|
||||
result[record.name] = record.value;
|
||||
});
|
||||
return result;
|
||||
},
|
||||
/**
|
||||
* Blocks UI and replaces $.unblockUI by a noop to prevent third parties
|
||||
* from unblocking the UI
|
||||
|
@ -525,25 +512,11 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
|
|||
var self = this;
|
||||
var fields = $(form).serializeArray();
|
||||
self.rpc("/web/database/create", {'fields': fields}).done(function(result) {
|
||||
var form_obj = self.to_object(fields);
|
||||
var client_action = {
|
||||
type: 'ir.actions.client',
|
||||
tag: 'login',
|
||||
params: {
|
||||
'db': form_obj['db_name'],
|
||||
'login': 'admin',
|
||||
'password': form_obj['create_admin_pwd'],
|
||||
'login_successful': function() {
|
||||
var url = '/web?db=' + form_obj['db_name'];
|
||||
if (self.session.debug) {
|
||||
url += '&debug';
|
||||
}
|
||||
instance.web.redirect(url);
|
||||
},
|
||||
},
|
||||
_push_me: false,
|
||||
};
|
||||
self.do_action(client_action);
|
||||
if (result) {
|
||||
instance.web.redirect('/web')
|
||||
} else {
|
||||
alert("Failed to create database");
|
||||
}
|
||||
});
|
||||
},
|
||||
do_duplicate: function(form) {
|
||||
|
@ -641,156 +614,20 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
|
|||
},
|
||||
do_exit: function () {
|
||||
this.$el.remove();
|
||||
instance.webclient.show_login();
|
||||
instance.web.redirect('/web');
|
||||
}
|
||||
});
|
||||
instance.web.client_actions.add("database_manager", "instance.web.DatabaseManager");
|
||||
|
||||
instance.web.Login = instance.web.Widget.extend({
|
||||
template: "Login",
|
||||
remember_credentials: true,
|
||||
events: {
|
||||
'change input[name=db],select[name=db]': function(ev) {
|
||||
this.set('database_selector', $(ev.currentTarget).val());
|
||||
},
|
||||
},
|
||||
instance.web.login = function() {
|
||||
instance.web.redirect('/web/login');
|
||||
};
|
||||
instance.web.client_actions.add("login", "instance.web.login");
|
||||
|
||||
init: function(parent, action) {
|
||||
this._super(parent);
|
||||
this.has_local_storage = typeof(localStorage) != 'undefined';
|
||||
this.db_list = null;
|
||||
this.selected_db = instance.webclient.client_options.dbname || null;
|
||||
this.selected_login = null;
|
||||
this.params = action.params || {};
|
||||
if (_.isEmpty(this.params)) {
|
||||
this.params = $.bbq.getState(true);
|
||||
}
|
||||
if (action && action.params && action.params.db) {
|
||||
this.params.db = action.params.db;
|
||||
} else if ($.deparam.querystring().db) {
|
||||
this.params.db = $.deparam.querystring().db;
|
||||
}
|
||||
if (this.params.db) {
|
||||
this.selected_db = this.params.db;
|
||||
}
|
||||
|
||||
if (this.params.login_successful) {
|
||||
this.on('login_successful', this, this.params.login_successful);
|
||||
}
|
||||
// some cleanup to remove any trace of that last login feature
|
||||
if (typeof(localStorage) != 'undefined') {
|
||||
var toRemove = [];
|
||||
_.each(_.range(localStorage.length), function(i) {
|
||||
var key = localStorage.key(i);
|
||||
if (key.match(/^.*?\|last_password$/)) {
|
||||
toRemove.push(key);
|
||||
}
|
||||
});
|
||||
_.each(toRemove, function(k) {
|
||||
localStorage.removeItem(k);
|
||||
});
|
||||
}
|
||||
},
|
||||
start: function() {
|
||||
var self = this;
|
||||
self.$el.find("form").submit(self.on_submit);
|
||||
self.$el.find('.oe_login_manage_db').click(function() {
|
||||
self.do_action("database_manager");
|
||||
});
|
||||
self.on('change:database_selector', this, function() {
|
||||
this.database_selected(this.get('database_selector'));
|
||||
});
|
||||
var d = $.when();
|
||||
if ($.param.fragment().token) {
|
||||
self.params.token = $.param.fragment().token;
|
||||
}
|
||||
// used by dbmanager.do_create via internal client action
|
||||
if (self.params.db && self.params.login && self.params.password) {
|
||||
d = self.do_login(self.params.db, self.params.login, self.params.password);
|
||||
} else {
|
||||
d = self.rpc("/web/database/get_list", {})
|
||||
.done(self.on_db_loaded)
|
||||
.fail(self.on_db_failed)
|
||||
.always(function() {
|
||||
if (self.selected_db && self.has_local_storage && self.remember_credentials) {
|
||||
self.$("[name=login]").val(localStorage.getItem(self.selected_db + '|last_login') || '');
|
||||
}
|
||||
});
|
||||
}
|
||||
return d;
|
||||
},
|
||||
database_selected: function(db) {
|
||||
var params = $.deparam.querystring();
|
||||
params.db = db;
|
||||
this.$('.oe_login_dbpane').empty().text(_t('Loading...'));
|
||||
this.$('[name=login], [name=password]').prop('readonly', true);
|
||||
instance.web.redirect('/web?' + $.param(params));
|
||||
},
|
||||
on_db_loaded: function (result) {
|
||||
var self = this;
|
||||
this.db_list = result;
|
||||
if (!this.selected_db) {
|
||||
this.selected_db = result[0];
|
||||
}
|
||||
this.$("[name=db]").replaceWith(QWeb.render('Login.dblist', { db_list: this.db_list, selected_db: this.selected_db}));
|
||||
if(this.db_list.length === 0) {
|
||||
this.do_action("database_manager");
|
||||
} else if(this.db_list.length === 1) {
|
||||
this.$('div.oe_login_dbpane').hide();
|
||||
} else {
|
||||
this.$('div.oe_login_dbpane').show();
|
||||
}
|
||||
},
|
||||
on_db_failed: function (error, event) {
|
||||
if (error.data.name === 'openerp.exceptions.AccessDenied') {
|
||||
event.preventDefault();
|
||||
}
|
||||
},
|
||||
on_submit: function(ev) {
|
||||
if(ev) {
|
||||
ev.preventDefault();
|
||||
}
|
||||
var db = this.$("form [name=db]").val();
|
||||
if (!db) {
|
||||
this.do_warn(_t("Login"), _t("No database selected !"));
|
||||
return false;
|
||||
}
|
||||
var login = this.$("form input[name=login]").val();
|
||||
var password = this.$("form input[name=password]").val();
|
||||
|
||||
this.do_login(db, login, password);
|
||||
},
|
||||
/**
|
||||
* Performs actual login operation, and UI-related stuff
|
||||
*
|
||||
* @param {String} db database to log in
|
||||
* @param {String} login user login
|
||||
* @param {String} password user password
|
||||
*/
|
||||
do_login: function (db, login, password) {
|
||||
var self = this;
|
||||
self.hide_error();
|
||||
self.$(".oe_login_pane").fadeOut("slow");
|
||||
return this.session.session_authenticate(db, login, password).then(function() {
|
||||
if (self.has_local_storage && self.remember_credentials) {
|
||||
localStorage.setItem(db + '|last_login', login);
|
||||
}
|
||||
self.trigger('login_successful');
|
||||
}, function () {
|
||||
self.$(".oe_login_pane").fadeIn("fast", function() {
|
||||
self.show_error(_t("Invalid username or password"));
|
||||
});
|
||||
});
|
||||
},
|
||||
show_error: function(message) {
|
||||
this.$el.addClass("oe_login_invalid");
|
||||
this.$(".oe_login_error_message").text(message);
|
||||
},
|
||||
hide_error: function() {
|
||||
this.$el.removeClass('oe_login_invalid');
|
||||
},
|
||||
});
|
||||
instance.web.client_actions.add("login", "instance.web.Login");
|
||||
instance.web.logout = function() {
|
||||
instance.web.redirect('/web/session/logout');
|
||||
};
|
||||
instance.web.client_actions.add("logout", "instance.web.logout");
|
||||
|
||||
|
||||
/**
|
||||
|
@ -1335,9 +1172,7 @@ instance.web.WebClient = instance.web.Client.extend({
|
|||
if (jQuery.deparam !== undefined && jQuery.deparam(jQuery.param.querystring()).kitten !== undefined) {
|
||||
self.to_kitten();
|
||||
}
|
||||
if (!self.session.session_is_valid()) {
|
||||
self.show_login();
|
||||
} else {
|
||||
if (self.session.session_is_valid()) {
|
||||
self.show_application();
|
||||
}
|
||||
if (self.client_options.action) {
|
||||
|
@ -1393,25 +1228,6 @@ instance.web.WebClient = instance.web.Client.extend({
|
|||
});
|
||||
};
|
||||
},
|
||||
show_login: function() {
|
||||
this.toggle_bars(false);
|
||||
|
||||
var state = $.bbq.getState(true);
|
||||
var action = {
|
||||
type: 'ir.actions.client',
|
||||
tag: 'login',
|
||||
_push_me: false,
|
||||
};
|
||||
|
||||
this.action_manager.do_action(action);
|
||||
this.action_manager.inner_widget.on('login_successful', this, function() {
|
||||
if ('redirect' in state) {
|
||||
openerp.web.redirect(state.redirect);
|
||||
} else {
|
||||
this.show_application(); // will load the state we just pushed
|
||||
}
|
||||
});
|
||||
},
|
||||
show_application: function() {
|
||||
var self = this;
|
||||
self.toggle_bars(true);
|
||||
|
@ -1510,11 +1326,7 @@ instance.web.WebClient = instance.web.Client.extend({
|
|||
on_logout: function() {
|
||||
var self = this;
|
||||
if (!this.has_uncommitted_changes()) {
|
||||
this.session.session_logout().done(function () {
|
||||
$(window).unbind('hashchange', self.on_hashchange);
|
||||
self.do_push_state({});
|
||||
window.location.reload();
|
||||
});
|
||||
self.action_manager.do_action('logout');
|
||||
}
|
||||
},
|
||||
bind_hashchange: function() {
|
||||
|
|
|
@ -252,7 +252,7 @@ instance.web.Session.include( /** @lends instance.web.Session# */{
|
|||
return !!this.uid;
|
||||
},
|
||||
/**
|
||||
* The session is validated either by login or by restoration of a previous session
|
||||
* The session is validated by restoration of a previous session
|
||||
*/
|
||||
session_authenticate: function() {
|
||||
var self = this;
|
||||
|
|
|
@ -58,46 +58,6 @@
|
|||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="Login">
|
||||
<div class="oe_login">
|
||||
<div class="oe_login_bottom"> </div>
|
||||
<div class="oe_login_error_message"/>
|
||||
<div class="oe_login_pane">
|
||||
<div class="oe_login_logo"><img src='/web/static/src/img/logo2.png'/></div>
|
||||
<form action="" method="post">
|
||||
<div class="oe_login_dbpane" >
|
||||
Database:
|
||||
<input name="db" t-att-value="widget.selected_db || ''"/>
|
||||
</div>
|
||||
<ul>
|
||||
<li>Username</li>
|
||||
<li><input name="login" type="text" value="" autofocus="autofocus"/></li>
|
||||
<li>Password</li>
|
||||
<li><input name="password" type="password" value=""/></li>
|
||||
<li><button name="submit">Log in</button></li>
|
||||
</ul>
|
||||
</form>
|
||||
<div class="oe_login_footer">
|
||||
<a href="#" class="oe_login_manage_db">Manage Databases</a> |
|
||||
<a href="http://www.openerp.com" target="_blank">Powered by <span>OpenERP</span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="Login.dblist">
|
||||
<select name="db">
|
||||
<t t-foreach="db_list" t-as="db">
|
||||
<t t-if="selected_db === db">
|
||||
<option t-att-value="db" selected="true">
|
||||
<t t-esc="db"/></option>
|
||||
</t>
|
||||
<t t-if="selected_db !== db">
|
||||
<option t-att-value="db"><t t-esc="db"/></option>
|
||||
</t>
|
||||
</t>
|
||||
</select>
|
||||
</t>
|
||||
|
||||
<t t-name="DatabaseManager">
|
||||
<div class="oe_view_manager_view_form">
|
||||
<div class="oe_form">
|
||||
|
|
Loading…
Reference in New Issue