diff -r d0b5ef72a492 -r 7b9824d1b734 web/views/basetemplates.py
--- a/web/views/basetemplates.py Tue Feb 16 09:25:18 2010 +0100
+++ b/web/views/basetemplates.py Tue Feb 16 09:27:15 2010 +0100
@@ -15,6 +15,8 @@
from cubicweb.view import View, MainTemplate, NOINDEX, NOFOLLOW
from cubicweb.utils import UStringIO, can_do_pdf_conversion
from cubicweb.schema import display_name
+from cubicweb.web import formfields as ff, formwidgets as fw
+from cubicweb.web.views import forms
# main templates ##############################################################
@@ -389,7 +391,7 @@
self.w(u'\n')
self.w(u'\n')
self.wview('logform', rset=self.cw_rset, id='popupLoginBox', klass='hidden',
- title=False, message=False)
+ title=False, showmessage=False)
def state_header(self):
state = self._cw.search_state
@@ -460,13 +462,27 @@
self.w(u'')
-class LogFormTemplate(View):
+class LogForm(forms.FieldsForm):
+ __regid__ = 'logform'
+ # XXX have to recall fields name since python is mangling __login/__password
+ __login = ff.StringField('__login', widget=fw.TextInput({'class': 'data'}))
+ __password = ff.StringField('__password', label=_('password'),
+ widget=fw.PasswordSingleInput({'class': 'data'}))
+ form_buttons = [fw.SubmitButton(label=_('log in'),
+ attrs={'class': 'loginButton right'})]
+
+ @property
+ def action(self):
+ return xml_escape(login_form_url(self._cw))
+
+
+class LogFormView(View):
__regid__ = 'logform'
__select__ = match_kwargs('id', 'klass')
title = 'log in'
- def call(self, id, klass, title=True, message=True):
+ def call(self, id, klass, title=True, showmessage=True):
self._cw.add_css('cubicweb.login.css')
self.w(u'
' % (id, klass))
if title:
@@ -477,52 +493,28 @@
stitle = u' '
self.w(u'
%s
' % stitle)
self.w(u'
\n')
-
- if message:
- self.display_message()
- if self._cw.vreg.config['auth-mode'] == 'http':
- # HTTP authentication
- pass
- else:
+ if showmessage and self._cw.message:
+ self.w(u'
%s
\n' % self._cw.message)
+ if self._cw.vreg.config['auth-mode'] != 'http':
# Cookie authentication
self.login_form(id)
self.w(u'
\n')
- def display_message(self):
- message = self._cw.message
- if message:
- self.w(u'%s
\n' % message)
+ def login_form(self, id):
+ cw = self._cw
+ form = cw.vreg['forms'].select('logform', cw)
+ if cw.vreg.config['allow-email-login']:
+ label = cw._('login or email')
+ else:
+ label = cw._('login')
+ form.field_by_name('__login').label = label
+ self.w(form.render(table_class=''))
+ cw.html_headers.add_onload('jQuery("#__login:visible").focus()')
- def login_form(self, id):
- _ = self._cw._
- # XXX turn into a form
- self.w(u'\n')
- self._cw.html_headers.add_onload('jQuery("#__login:visible").focus()')
-
- def add_fields(self):
- msg = (self._cw.vreg.config['allow-email-login'] and _('login or email')) or _('login')
- self.add_field('__login', msg, 'text')
- self.add_field('__password', self._cw._('password'), 'password')
-
- def add_field(self, name, label, inputtype):
- self.w(u'\n')
- self.w(u' | ' % (name, label))
- self.w(u' | \n' %
- (name, name, inputtype))
- self.w(u'
\n')
-
-
-def login_form_url(config, req):
+def login_form_url(req):
if req.https:
return req.url()
- if config.get('https-url'):
- return req.url().replace(req.base_url(), config['https-url'])
+ httpsurl = req.vreg.config.get('https-url')
+ if httpsurl:
+ return req.url().replace(req.base_url(), httpsurl)
return req.url()