web/views/basetemplates.py
changeset 8310 87f2f18a77ef
parent 8307 8be58694f416
child 8311 76a44a0d7f4b
equal deleted inserted replaced
8309:48ef505aa9f9 8310:87f2f18a77ef
    21 _ = unicode
    21 _ = unicode
    22 
    22 
    23 from logilab.mtconverter import xml_escape
    23 from logilab.mtconverter import xml_escape
    24 from logilab.common.deprecation import class_renamed
    24 from logilab.common.deprecation import class_renamed
    25 from logilab.common.registry import objectify_predicate
    25 from logilab.common.registry import objectify_predicate
       
    26 from logilab.common.decorators import classproperty
    26 
    27 
    27 from cubicweb.predicates import match_kwargs, no_cnx, anonymous_user
    28 from cubicweb.predicates import match_kwargs, no_cnx, anonymous_user
    28 from cubicweb.view import View, MainTemplate, NOINDEX, NOFOLLOW, StartupView
    29 from cubicweb.view import View, MainTemplate, NOINDEX, NOFOLLOW, StartupView
    29 from cubicweb.utils import UStringIO
    30 from cubicweb.utils import UStringIO
    30 from cubicweb.schema import display_name
    31 from cubicweb.schema import display_name
   415             self.w(u'<div id="contentfooter">')
   416             self.w(u'<div id="contentfooter">')
   416             for comp in components:
   417             for comp in components:
   417                 comp.render(w=self.w, view=view)
   418                 comp.render(w=self.w, view=view)
   418             self.w(u'</div>')
   419             self.w(u'</div>')
   419 
   420 
   420 
   421 class BaseLogForm(forms.FieldsForm):
   421 class LogForm(forms.FieldsForm):
   422     """Abstract Base login form to be used by any login form
       
   423     """
       
   424     __abstract__ = True
       
   425 
   422     __regid__ = 'logform'
   426     __regid__ = 'logform'
   423     domid = 'loginForm'
   427     domid = 'loginForm'
   424     needs_css = ('cubicweb.login.css',)
   428     needs_css = ('cubicweb.login.css',)
   425     onclick = "javascript: cw.htmlhelpers.popupLoginBox('%s', '%s');"
   429 
       
   430     onclick_base = "javascript: cw.htmlhelpers.popupLoginBox('%s', '%s');"
       
   431     onclick_args = (None, None)
       
   432 
       
   433     @classproperty
       
   434     def form_buttons(cls):
       
   435         # we use a property because sub class will need to define their own onclick_args.
       
   436         # Therefor we can't juste make the string formating when instanciating this class
       
   437         onclick = cls.onclick_base % cls.onclick_args
       
   438         form_buttons = [fw.SubmitButton(label=_('log in'),
       
   439                                     attrs={'class': 'loginButton'}),
       
   440                         fw.ResetButton(label=_('cancel'),
       
   441                                        attrs={'class': 'loginButton',
       
   442                                               'onclick': onclick}),]
       
   443         ## Can't shortcut next access because __dict__ is a "dictproxy" which 
       
   444         ## does not support items assignement.
       
   445         # cls.__dict__['form_buttons'] = form_buttons
       
   446         return form_buttons
       
   447 
       
   448     def form_action(self):
       
   449         if self.action is None:
       
   450             return login_form_url(self._cw)
       
   451         return super(LogForm, self).form_action()
       
   452 
       
   453 class LogForm(BaseLogForm):
       
   454     """Simple login form that send username and password
       
   455     """
       
   456     __regid__ = 'logform'
       
   457     domid = 'loginForm'
       
   458     needs_css = ('cubicweb.login.css',)
   426     # XXX have to recall fields name since python is mangling __login/__password
   459     # XXX have to recall fields name since python is mangling __login/__password
   427     __login = ff.StringField('__login', widget=fw.TextInput({'class': 'data'}))
   460     __login = ff.StringField('__login', widget=fw.TextInput({'class': 'data'}))
   428     __password = ff.StringField('__password', label=_('password'),
   461     __password = ff.StringField('__password', label=_('password'),
   429                                 widget=fw.PasswordSingleInput({'class': 'data'}))
   462                                 widget=fw.PasswordSingleInput({'class': 'data'}))
   430     form_buttons = [fw.SubmitButton(label=_('log in'),
   463 
   431                                     attrs={'class': 'loginButton'}),
   464     onclick_args =  ('popupLoginBox', '__login')
   432                     fw.ResetButton(label=_('cancel'),
       
   433                                    attrs={'class': 'loginButton',
       
   434                                           'onclick': onclick % ('popupLoginBox', '__login')}),]
       
   435 
       
   436     def form_action(self):
       
   437         if self.action is None:
       
   438             return login_form_url(self._cw)
       
   439         return super(LogForm, self).form_action()
       
   440 
   465 
   441 
   466 
   442 class LogFormView(View):
   467 class LogFormView(View):
   443     # XXX an awfull lot of hardcoded assumptions there
   468     # XXX an awfull lot of hardcoded assumptions there
   444     #     makes it unobvious to reuse/specialize
   469     #     makes it unobvious to reuse/specialize