From 01f3648d3a6ab2b91ae8393860f0562dd46a44e9 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 14 Jan 2014 12:17:07 +0100 Subject: [PATCH] [ADD] javascript hooks for LoginForm and debug forwarding bzr revid: fme@openerp.com-20140114111707-ts3ik25p4o2vysxb --- addons/web/controllers/main.py | 35 ++++++++++++------------ addons/web/static/src/js/chrome.js | 18 ++++++++++++ addons/web/views/webclient_templates.xml | 13 +++++++-- 3 files changed, 45 insertions(+), 21 deletions(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 4393823314c..ebcd5d9e3e4 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -560,14 +560,15 @@ html_template = """ """ -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('' % i for i in manifest_list('js', debug=debug)) - css = "\n ".join('' % i for i in manifest_list('css', debug=debug)) + js = "\n ".join('' % i for i in manifest_list('js', debug=request.debug)) + css = "\n ".join('' % i for i in manifest_list('css', debug=request.debug)) r = html_template % { 'js': js, diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index caac5c394ae..359b4201921 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -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: diff --git a/addons/web/views/webclient_templates.xml b/addons/web/views/webclient_templates.xml index d4f6decb403..2156061e56e 100644 --- a/addons/web/views/webclient_templates.xml +++ b/addons/web/views/webclient_templates.xml @@ -47,12 +47,19 @@