[ADD] javascript hooks for LoginForm and debug forwarding

bzr revid: fme@openerp.com-20140114111707-ts3ik25p4o2vysxb
This commit is contained in:
Fabien Meghazi 2014-01-14 12:17:07 +01:00
parent 75e02860c2
commit 01f3648d3a
3 changed files with 45 additions and 21 deletions

View File

@ -560,14 +560,15 @@ html_template = """<!DOCTYPE html>
</html>
"""
def render_bootstrap_template(db, template, values=None, **kw):
def render_bootstrap_template(db, template, values=None, debug=False, **kw):
if values is None:
values = {}
values.update(kw)
values['debug'] = debug
for res in ['js', 'css']:
if res not in values:
values[res] = manifest_list(res, db=db, debug=values.get('debug', request.debug))
values[res] = manifest_list(res, db=db, debug=debug)
if 'modules' not in values:
values['modules'] = module_boot(db=db)
@ -581,13 +582,11 @@ def render_bootstrap_template(db, template, values=None, **kw):
class Home(http.Controller):
@http.route('/', type='http', auth="none")
def index(self, s_action=None, db=None, debug=False, **kw):
def index(self, s_action=None, db=None, **kw):
return redirect_with_hash('/web', keep_query=True)
@http.route('/web', type='http', auth="none")
def web_client(self, s_action=None, db=None, debug=False, **kw):
debug = debug is not False # we just check presence of `debug` query param
def web_client(self, s_action=None, db=None, **kw):
# if db not provided, use the session one
if not db:
db = request.session.db
@ -607,22 +606,24 @@ class Home(http.Controller):
request.session.db = db
if request.session.uid:
html = render_bootstrap_template(db, "web.webclient_bootstrap")
html = render_bootstrap_template(db, "web.webclient_bootstrap", debug=request.debug)
return request.make_response(html, {'Cache-Control': 'no-cache', 'Content-Type': 'text/html; charset=utf-8'})
else:
return redirect_with_hash('/web/login', keep_query=True)
@http.route('/web/login', type='http', auth="none")
def web_login(self, redir='/web', **kw):
def web_login(self, redirect=None, **kw):
assert request.session.db is not None
values = request.params.copy()
values['redir'] = redir
if not redirect:
redirect = '/web?' + request.httprequest.query_string
values['redirect'] = redirect
if request.httprequest.method == 'POST':
uid = request.session.authenticate(request.session.db, request.params['login'], request.params['password'])
if uid is not False:
return set_cookie_and_redirect(redir)
return redirect_with_hash(redirect)
values['authentication_failed'] = True
return render_bootstrap_template(request.session.db, 'web.login', values)
return render_bootstrap_template(request.session.db, 'web.login', values, debug=request.debug)
@http.route('/login', type='http', auth="none")
def login(self, db, login, key):
@ -797,22 +798,20 @@ class Proxy(http.Controller):
class Database(http.Controller):
@http.route('/web/database/selector', type='http', auth="none")
def selector(self, debug=False):
debug = debug is not False # we just check presence of `debug` query param
def selector(self, **kw):
dbs = http.db_list(True)
if not dbs:
return redirect_with_hash('/web/database/manager', keep_query=['debug'])
return env.get_template("database_selector.html").render({
'databases': dbs,
'debug': debug,
'debug': request.debug,
})
@http.route('/web/database/manager', type='http', auth="none")
def manager(self, debug=False):
def manager(self, **kw):
request.session.logout()
debug = debug is not False # we just check presence of `debug` query param
js = "\n ".join('<script type="text/javascript" src="%s"></script>' % i for i in manifest_list('js', debug=debug))
css = "\n ".join('<link rel="stylesheet" href="%s">' % i for i in manifest_list('css', debug=debug))
js = "\n ".join('<script type="text/javascript" src="%s"></script>' % i for i in manifest_list('js', debug=request.debug))
css = "\n ".join('<link rel="stylesheet" href="%s">' % i for i in manifest_list('css', debug=request.debug))
r = html_template % {
'js': js,

View File

@ -1483,6 +1483,24 @@ instance.web.embed = function (origin, dbname, login, key, action, options) {
client.insertAfter(currentScript);
};
openerp.web.LoginForm = openerp.web.Widget.extend({
init: function ($form) {
this._super(/* no parent */);
this.setElement($form);
this.$el.on('submit', this.on_submit);
this.start();
},
start: function () {
if (location.hash) {
this.$el.attr('action', this.$el.attr('action') + location.hash);
}
return this._super();
},
on_submit: function () {
return true;
},
});
})();
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -47,12 +47,19 @@
<template id="web.login" name="Login">
<t t-call="web.layout">
<t t-set="head">
<script type="text/javascript">
$(function() {
var login_form = new openerp.web.LoginForm($('.oe_login_form'));
});
</script>
</t>
<div class="container">
<div class="row">
<div class="col-md-4"> </div>
<div class="col-md-4">
<img src="/web/static/src/img/logo2.png"/>
<form role="form" action="/web/login" method="post">
<form class="oe_login_form" role="form" t-attf-action="/web/login{{ '?debug' if debug else '' }}" method="post">
<img src="/web/static/src/img/logo2.png"/>
<div class="form-group">
<label for="login">Login</label>
<input type="text" name="login" t-att-value="login" id="login" class="form-control" placeholder="Enter login" required="required" autofocus="autofocus"/>
@ -61,7 +68,7 @@
<label for="password">Password</label>
<input type="password" name="password" id="password" class="form-control" placeholder="Password" required="required"/>
</div>
<input type="hidden" name="redir" t-att-value="redir"/>
<input type="hidden" name="redirect" t-att-value="redirect"/>
<button type="submit" class="btn btn-default">Log in</button>
<p class="alert alert-danger" t-if="authentication_failed">
Wrong login/password