web/views/basetemplates.py
changeset 3377 dd9d292b6a6d
parent 3293 69c0ba095536
child 3451 6b46d73823f5
equal deleted inserted replaced
3376:f5c69485381f 3377:dd9d292b6a6d
    41         self.wview('htmlheader', rset=self.rset)
    41         self.wview('htmlheader', rset=self.rset)
    42         w(u'<title>%s</title>\n' % xml_escape(page_title))
    42         w(u'<title>%s</title>\n' % xml_escape(page_title))
    43 
    43 
    44 
    44 
    45 class LogInTemplate(LogInOutTemplate):
    45 class LogInTemplate(LogInOutTemplate):
    46     id = 'login'
    46     __regid__ = 'login'
    47     title = 'log in'
    47     title = 'log in'
    48 
    48 
    49     def content(self, w):
    49     def content(self, w):
    50         self.wview('logform', rset=self.rset, id='loginBox', klass='')
    50         self.wview('logform', rset=self.rset, id='loginBox', klass='')
    51 
    51 
    52 
    52 
    53 class LoggedOutTemplate(LogInOutTemplate):
    53 class LoggedOutTemplate(LogInOutTemplate):
    54     id = 'loggedout'
    54     __regid__ = 'loggedout'
    55     title = 'logged out'
    55     title = 'logged out'
    56 
    56 
    57     def content(self, w):
    57     def content(self, w):
    58         # FIXME Deprecated code ?
    58         # FIXME Deprecated code ?
    59         msg = self.req._('you have been logged out')
    59         msg = self.req._('you have been logged out')
    76     return view.templatable
    76     return view.templatable
    77 
    77 
    78 
    78 
    79 class NonTemplatableViewTemplate(MainTemplate):
    79 class NonTemplatableViewTemplate(MainTemplate):
    80     """main template for any non templatable views (xml, binaries, etc.)"""
    80     """main template for any non templatable views (xml, binaries, etc.)"""
    81     id = 'main-template'
    81     __regid__ = 'main-template'
    82     __select__ = ~templatable_view()
    82     __select__ = ~templatable_view()
    83 
    83 
    84     def call(self, view):
    84     def call(self, view):
    85         view.set_request_content_type()
    85         view.set_request_content_type()
    86         view.set_stream()
    86         view.set_stream()
    99 class TheMainTemplate(MainTemplate):
    99 class TheMainTemplate(MainTemplate):
   100     """default main template :
   100     """default main template :
   101 
   101 
   102     - call header / footer templates
   102     - call header / footer templates
   103     """
   103     """
   104     id = 'main-template'
   104     __regid__ = 'main-template'
   105     __select__ = templatable_view()
   105     __select__ = templatable_view()
   106 
   106 
   107     def call(self, view):
   107     def call(self, view):
   108         self.set_request_content_type()
   108         self.set_request_content_type()
   109         self.template_header(self.content_type, view)
   109         self.template_header(self.content_type, view)
   191 class ErrorTemplate(TheMainTemplate):
   191 class ErrorTemplate(TheMainTemplate):
   192     """fallback template if an internal error occured during displaying the
   192     """fallback template if an internal error occured during displaying the
   193     main template. This template may be called for authentication error,
   193     main template. This template may be called for authentication error,
   194     which means that req.cnx and req.user may not be set.
   194     which means that req.cnx and req.user may not be set.
   195     """
   195     """
   196     id = 'error-template'
   196     __regid__ = 'error-template'
   197 
   197 
   198     def call(self):
   198     def call(self):
   199         """display an unexpected error"""
   199         """display an unexpected error"""
   200         self.set_request_content_type()
   200         self.set_request_content_type()
   201         self.req.reset_headers()
   201         self.req.reset_headers()
   220         self.w(u'</body>')
   220         self.w(u'</body>')
   221 
   221 
   222 
   222 
   223 class SimpleMainTemplate(TheMainTemplate):
   223 class SimpleMainTemplate(TheMainTemplate):
   224 
   224 
   225     id = 'main-no-top'
   225     __regid__ = 'main-no-top'
   226 
   226 
   227     def template_header(self, content_type, view=None, page_title='', additional_headers=()):
   227     def template_header(self, content_type, view=None, page_title='', additional_headers=()):
   228         page_title = page_title or view.page_title()
   228         page_title = page_title or view.page_title()
   229         additional_headers = additional_headers or view.html_headers()
   229         additional_headers = additional_headers or view.html_headers()
   230         whead = self.whead
   230         whead = self.whead
   271     from StringIO import StringIO
   271     from StringIO import StringIO
   272     from tempfile import NamedTemporaryFile
   272     from tempfile import NamedTemporaryFile
   273     from cubicweb.ext.xhtml2fo import ReportTransformer
   273     from cubicweb.ext.xhtml2fo import ReportTransformer
   274 
   274 
   275     class PdfMainTemplate(TheMainTemplate):
   275     class PdfMainTemplate(TheMainTemplate):
   276         id = 'pdf-main-template'
   276         __regid__ = 'pdf-main-template'
   277 
   277 
   278         def call(self, view):
   278         def call(self, view):
   279             """build the standard view, then when it's all done, convert xhtml to pdf
   279             """build the standard view, then when it's all done, convert xhtml to pdf
   280             """
   280             """
   281             super(PdfMainTemplate, self).call(view)
   281             super(PdfMainTemplate, self).call(view)
   306 
   306 
   307 # page parts templates ########################################################
   307 # page parts templates ########################################################
   308 
   308 
   309 class HTMLHeader(View):
   309 class HTMLHeader(View):
   310     """default html headers"""
   310     """default html headers"""
   311     id = 'htmlheader'
   311     __regid__ = 'htmlheader'
   312 
   312 
   313     def call(self, **kwargs):
   313     def call(self, **kwargs):
   314         self.favicon()
   314         self.favicon()
   315         self.stylesheets()
   315         self.stylesheets()
   316         self.javascripts()
   316         self.javascripts()
   350         req.html_headers.define_var('pageid', pid)
   350         req.html_headers.define_var('pageid', pid)
   351 
   351 
   352 
   352 
   353 class HTMLPageHeader(View):
   353 class HTMLPageHeader(View):
   354     """default html page header"""
   354     """default html page header"""
   355     id = 'header'
   355     __regid__ = 'header'
   356     main_cell_components = ('appliname', 'breadcrumbs')
   356     main_cell_components = ('appliname', 'breadcrumbs')
   357 
   357 
   358     def call(self, view, **kwargs):
   358     def call(self, view, **kwargs):
   359         self.main_header(view)
   359         self.main_header(view)
   360         self.w(u'''
   360         self.w(u'''
   417 
   417 
   418 
   418 
   419 class HTMLPageFooter(View):
   419 class HTMLPageFooter(View):
   420     """default html page footer: include logo if any, and close the HTML body
   420     """default html page footer: include logo if any, and close the HTML body
   421     """
   421     """
   422     id = 'footer'
   422     __regid__ = 'footer'
   423 
   423 
   424     def call(self, **kwargs):
   424     def call(self, **kwargs):
   425         req = self.req
   425         req = self.req
   426         self.w(u'<div class="footer">')
   426         self.w(u'<div class="footer">')
   427         # XXX Take object from the registry if in there? would be
   427         # XXX Take object from the registry if in there? would be
   438 class HTMLContentHeader(View):
   438 class HTMLContentHeader(View):
   439     """default html page content header:
   439     """default html page content header:
   440     * include message component if selectable for this request
   440     * include message component if selectable for this request
   441     * include selectable content navigation components
   441     * include selectable content navigation components
   442     """
   442     """
   443     id = 'contentheader'
   443     __regid__ = 'contentheader'
   444 
   444 
   445     def call(self, view, **kwargs):
   445     def call(self, view, **kwargs):
   446         """by default, display informal messages in content header"""
   446         """by default, display informal messages in content header"""
   447         components = self.vreg['contentnavigation'].poss_visible_objects(
   447         components = self.vreg['contentnavigation'].poss_visible_objects(
   448             self.req, rset=self.rset, view=view, context='navtop')
   448             self.req, rset=self.rset, view=view, context='navtop')
   455 
   455 
   456 class HTMLContentFooter(View):
   456 class HTMLContentFooter(View):
   457     """default html page content footer: include selectable content navigation
   457     """default html page content footer: include selectable content navigation
   458     components
   458     components
   459     """
   459     """
   460     id = 'contentfooter'
   460     __regid__ = 'contentfooter'
   461 
   461 
   462     def call(self, view, **kwargs):
   462     def call(self, view, **kwargs):
   463         components = self.vreg['contentnavigation'].poss_visible_objects(
   463         components = self.vreg['contentnavigation'].poss_visible_objects(
   464             self.req, rset=self.rset, view=view, context='navbottom')
   464             self.req, rset=self.rset, view=view, context='navbottom')
   465         if components:
   465         if components:
   468                 comp.render(w=self.w, view=view)
   468                 comp.render(w=self.w, view=view)
   469             self.w(u'</div>')
   469             self.w(u'</div>')
   470 
   470 
   471 
   471 
   472 class LogFormTemplate(View):
   472 class LogFormTemplate(View):
   473     id = 'logform'
   473     __regid__ = 'logform'
   474     __select__ = match_kwargs('id', 'klass')
   474     __select__ = match_kwargs('id', 'klass')
   475 
   475 
   476     title = 'log in'
   476     title = 'log in'
   477 
   477 
   478     def call(self, id, klass, title=True, message=True):
   478     def call(self, id, klass, title=True, message=True):