web/views/basetemplates.py
changeset 2058 7ef12c03447c
parent 1977 606923dff11b
child 2144 51c84d585456
equal deleted inserted replaced
2057:0a0cbccafcb5 2058:7ef12c03447c
   110         w(u'<div id="pageContent">\n')
   110         w(u'<div id="pageContent">\n')
   111         vtitle = self.req.form.get('vtitle')
   111         vtitle = self.req.form.get('vtitle')
   112         if vtitle:
   112         if vtitle:
   113             w(u'<h1 class="vtitle">%s</h1>\n' % html_escape(vtitle))
   113             w(u'<h1 class="vtitle">%s</h1>\n' % html_escape(vtitle))
   114         # display entity type restriction component
   114         # display entity type restriction component
   115         etypefilter = self.vreg.select_component('etypenavigation',
   115         etypefilter = self.vreg.select_vobject('components', 'etypenavigation',
   116                                                  self.req, self.rset)
   116                                               self.req, rset=self.rset)
   117         if etypefilter and etypefilter.propval('visible'):
   117         if etypefilter:
   118             etypefilter.render(w=w)
   118             etypefilter.render(w=w)
   119         self.nav_html = UStringIO()
   119         self.nav_html = UStringIO()
   120         if view and view.need_navigation:
   120         if view and view.need_navigation:
   121             view.paginate(w=self.nav_html.write)
   121             view.paginate(w=self.nav_html.write)
   122         w(_(self.nav_html.getvalue()))
   122         w(_(self.nav_html.getvalue()))
   150         w(u'<body>\n')
   150         w(u'<body>\n')
   151         self.wview('header', rset=self.rset, view=view)
   151         self.wview('header', rset=self.rset, view=view)
   152         w(u'<div id="page"><table width="100%" border="0" id="mainLayout"><tr>\n')
   152         w(u'<div id="page"><table width="100%" border="0" id="mainLayout"><tr>\n')
   153         self.nav_column(view, 'left')
   153         self.nav_column(view, 'left')
   154         w(u'<td id="contentcol">\n')
   154         w(u'<td id="contentcol">\n')
   155         rqlcomp = self.vreg.select_component('rqlinput', self.req, self.rset)
   155         rqlcomp = self.vreg.select_object('components', 'rqlinput', self.req,
       
   156                                           rset=self.rset)
   156         if rqlcomp:
   157         if rqlcomp:
   157             rqlcomp.render(w=self.w, view=view)
   158             rqlcomp.render(w=self.w, view=view)
   158         msgcomp = self.vreg.select_component('applmessages', self.req, self.rset)
   159         msgcomp = self.vreg.select_object('components', 'applmessages',
       
   160                                           self.req, rset=self.rset)
   159         if msgcomp:
   161         if msgcomp:
   160             msgcomp.render(w=self.w)
   162             msgcomp.render(w=self.w)
   161         self.content_header(view)
   163         self.content_header(view)
   162 
   164 
   163     def template_footer(self, view=None):
   165     def template_footer(self, view=None):
   167         self.w(u'</tr></table></div>\n')
   169         self.w(u'</tr></table></div>\n')
   168         self.wview('footer', rset=self.rset)
   170         self.wview('footer', rset=self.rset)
   169         self.w(u'</body>')
   171         self.w(u'</body>')
   170 
   172 
   171     def nav_column(self, view, context):
   173     def nav_column(self, view, context):
   172         boxes = list(self.vreg.possible_vobjects('boxes', self.req, self.rset,
   174         boxes = list(self.vreg.possible_vobjects('boxes', self.req, rset=self.rset,
   173                                                  view=view, context=context))
   175                                                  view=view, context=context))
   174         if boxes:
   176         if boxes:
   175             self.w(u'<td class="navcol"><div class="navboxes">\n')
   177             self.w(u'<td class="navcol"><div class="navboxes">\n')
   176             for box in boxes:
   178             for box in boxes:
   177                 box.render(w=self.w, view=view)
   179                 box.render(w=self.w, view=view)
   194 
   196 
   195     def call(self):
   197     def call(self):
   196         """display an unexpected error"""
   198         """display an unexpected error"""
   197         self.set_request_content_type()
   199         self.set_request_content_type()
   198         self.req.reset_headers()
   200         self.req.reset_headers()
   199         view = self.vreg.select_view('error', self.req, self.rset)
   201         view = self.vreg.select('views', 'error', self.req, rset=self.rset)
   200         self.template_header(self.content_type, view, self.req._('an error occured'),
   202         self.template_header(self.content_type, view, self.req._('an error occured'),
   201                              [NOINDEX, NOFOLLOW])
   203                              [NOINDEX, NOFOLLOW])
   202         view.render(w=self.w)
   204         view.render(w=self.w)
   203         self.template_footer(view)
   205         self.template_footer(view)
   204 
   206 
   236         w(u'<body>\n')
   238         w(u'<body>\n')
   237         w(u'<div id="page">')
   239         w(u'<div id="page">')
   238         w(u'<table width="100%" height="100%" border="0"><tr>\n')
   240         w(u'<table width="100%" height="100%" border="0"><tr>\n')
   239         w(u'<td class="navcol">\n')
   241         w(u'<td class="navcol">\n')
   240         self.topleft_header()
   242         self.topleft_header()
   241         boxes = list(self.vreg.possible_vobjects('boxes', self.req, self.rset,
   243         boxes = list(self.vreg.possible_vobjects('boxes', self.req, rset=self.rset,
   242                                                  view=view, context='left'))
   244                                                  view=view, context='left'))
   243         if boxes:
   245         if boxes:
   244             w(u'<div class="navboxes">\n')
   246             w(u'<div class="navboxes">\n')
   245             for box in boxes:
   247             for box in boxes:
   246                 box.render(w=w)
   248                 box.render(w=w)
   251         vtitle = self.req.form.get('vtitle')
   253         vtitle = self.req.form.get('vtitle')
   252         if vtitle:
   254         if vtitle:
   253             w(u'<h1 class="vtitle">%s</h1>' % html_escape(vtitle))
   255             w(u'<h1 class="vtitle">%s</h1>' % html_escape(vtitle))
   254 
   256 
   255     def topleft_header(self):
   257     def topleft_header(self):
   256         self.w(u'<table id="header"><tr>\n')
   258         logo = self.vreg.select_vobject('components', 'logo', self.req,
   257         self.w(u'<td>')
   259                                         rset=self.rset)
   258         self.vreg.select_component('logo', self.req, self.rset).render(w=self.w)
   260         if logo:
   259         self.w(u'</td>\n')
   261             self.w(u'<table id="header"><tr>\n')
   260         self.w(u'</tr></table>\n')
   262             self.w(u'<td>')
       
   263             logo.render(w=self.w)
       
   264             self.w(u'</td>\n')
       
   265             self.w(u'</tr></table>\n')
   261 
   266 
   262 # page parts templates ########################################################
   267 # page parts templates ########################################################
   263 
   268 
   264 class HTMLHeader(View):
   269 class HTMLHeader(View):
   265     """default html headers"""
   270     """default html headers"""
   290     def javascripts(self):
   295     def javascripts(self):
   291         for jscript in self.req.external_resource('JAVASCRIPTS'):
   296         for jscript in self.req.external_resource('JAVASCRIPTS'):
   292             self.req.add_js(jscript, localfile=False)
   297             self.req.add_js(jscript, localfile=False)
   293 
   298 
   294     def alternates(self):
   299     def alternates(self):
   295         urlgetter = self.vreg.select_component('rss_feed_url', self.req, self.rset)
   300         urlgetter = self.vreg.select_object('components', 'rss_feed_url',
       
   301                                             self.req, rset=self.rset)
   296         if urlgetter is not None:
   302         if urlgetter is not None:
   297             url = urlgetter.feed_url()
       
   298             self.whead(u'<link rel="alternate" type="application/rss+xml" title="RSS feed" href="%s"/>\n'
   303             self.whead(u'<link rel="alternate" type="application/rss+xml" title="RSS feed" href="%s"/>\n'
   299                        %  html_escape(url))
   304                        %  html_escape(urlgetter.feed_url()))
   300 
   305 
   301     def pageid(self):
   306     def pageid(self):
   302         req = self.req
   307         req = self.req
   303         pid = make_uid(id(req))
   308         pid = make_uid(id(req))
   304         req.pageid = pid
   309         req.pageid = pid
   320 
   325 
   321     def main_header(self, view):
   326     def main_header(self, view):
   322         """build the top menu with authentification info and the rql box"""
   327         """build the top menu with authentification info and the rql box"""
   323         self.w(u'<table id="header"><tr>\n')
   328         self.w(u'<table id="header"><tr>\n')
   324         self.w(u'<td id="firstcolumn">')
   329         self.w(u'<td id="firstcolumn">')
   325         self.vreg.select_component('logo', self.req, self.rset).render(w=self.w)
   330         logo = self.vreg.select_vobject('components', 'logo',
       
   331                                         self.req, rset=self.rset)
       
   332         if logo:
       
   333             logo.render(w=self.w)
   326         self.w(u'</td>\n')
   334         self.w(u'</td>\n')
   327         # appliname and breadcrumbs
   335         # appliname and breadcrumbs
   328         self.w(u'<td id="headtext">')
   336         self.w(u'<td id="headtext">')
   329         comp = self.vreg.select_component('appliname', self.req, self.rset)
   337         for cid in ('appliname', 'breadcrumbs'):
   330         if comp and comp.propval('visible'):
   338             comp = self.vreg.select_vobject('components', cid,
   331             comp.render(w=self.w)
   339                                             self.req, rset=self.rset)
   332         comp = self.vreg.select_component('breadcrumbs', self.req, self.rset, view=view)
   340             if comp:
   333         if comp and comp.propval('visible'):
   341                 comp.render(w=self.w)
   334             comp.render(w=self.w, view=view)
       
   335         self.w(u'</td>')
   342         self.w(u'</td>')
   336         # logged user and help
   343         # logged user and help
   337         self.w(u'<td>\n')
   344         self.w(u'<td>\n')
   338         comp = self.vreg.select_component('loggeduserlink', self.req, self.rset)
   345         comp = self.vreg.select_vobject('components', 'loggeduserlink',
   339         comp.render(w=self.w)
   346                                         self.req, rset=self.rset)
       
   347         if comp:
       
   348             comp.render(w=self.w)
   340         self.w(u'</td><td>')
   349         self.w(u'</td><td>')
   341         helpcomp = self.vreg.select_component('help', self.req, self.rset)
   350         helpcomp = self.vreg.select_vobject('components', 'help',
   342         if helpcomp: # may not be available if Card is not defined in the schema
   351                                             self.req, rset=self.rset)
       
   352         if helpcomp:
   343             helpcomp.render(w=self.w)
   353             helpcomp.render(w=self.w)
   344         self.w(u'</td>')
   354         self.w(u'</td>')
   345         # lastcolumn
   355         # lastcolumn
   346         self.w(u'<td id="lastcolumn">')
   356         self.w(u'<td id="lastcolumn">')
   347         self.w(u'</td>\n')
   357         self.w(u'</td>\n')
   392     id = 'contentheader'
   402     id = 'contentheader'
   393 
   403 
   394     def call(self, view, **kwargs):
   404     def call(self, view, **kwargs):
   395         """by default, display informal messages in content header"""
   405         """by default, display informal messages in content header"""
   396         components = self.vreg.possible_vobjects('contentnavigation',
   406         components = self.vreg.possible_vobjects('contentnavigation',
   397                                                  self.req, self.rset,
   407                                                  self.req, rset=self.rset,
   398                                                  view=view, context='navtop')
   408                                                  view=view, context='navtop')
   399         if components:
   409         if components:
   400             self.w(u'<div id="contentheader">')
   410             self.w(u'<div id="contentheader">')
   401             for comp in components:
   411             for comp in components:
   402                 comp.render(w=self.w, view=view)
   412                 comp.render(w=self.w, view=view)
   409     """
   419     """
   410     id = 'contentfooter'
   420     id = 'contentfooter'
   411 
   421 
   412     def call(self, view, **kwargs):
   422     def call(self, view, **kwargs):
   413         components = self.vreg.possible_vobjects('contentnavigation',
   423         components = self.vreg.possible_vobjects('contentnavigation',
   414                                                  self.req, self.rset,
   424                                                  self.req, rset=self.rset,
   415                                                  view=view, context='navbottom')
   425                                                  view=view, context='navbottom')
   416         if components:
   426         if components:
   417             self.w(u'<div id="contentfooter">')
   427             self.w(u'<div id="contentfooter">')
   418             for comp in components:
   428             for comp in components:
   419                 comp.render(w=self.w, view=view)
   429                 comp.render(w=self.w, view=view)