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) |