web/views/basetemplates.py
branchtls-sprint
changeset 1421 77ee26df178f
parent 1149 1e19b6ef53a1
child 1723 30c3a713ab61
--- a/web/views/basetemplates.py	Wed Apr 22 16:51:29 2009 +0200
+++ b/web/views/basetemplates.py	Wed Apr 22 16:54:23 2009 +0200
@@ -12,7 +12,7 @@
 
 from cubicweb.vregistry import objectify_selector
 from cubicweb.selectors import match_kwargs
-from cubicweb.view import View, MainTemplate,  NOINDEX, NOFOLLOW
+from cubicweb.view import View, MainTemplate,  NOINDEX, NOFOLLOW, STRICT_DOCTYPE
 from cubicweb.utils import make_uid, UStringIO
 
 # main templates ##############################################################
@@ -78,14 +78,20 @@
 class NonTemplatableViewTemplate(MainTemplate):
     """main template for any non templatable views (xml, binaries, etc.)"""
     id = 'main-template'
-    __select__ = ~ templatable_view()
-    
+    __select__ = ~templatable_view()
+
     def call(self, view):
         view.set_request_content_type()
-        self.set_stream(templatable=False)
+        view.set_stream()
+        xhtml_wrap = (self.req.form.has_key('__notemplate') and view.templatable
+                      and view.content_type == self.req.html_content_type())
+        if xhtml_wrap:
+            view.w(u'<?xml version="1.0"?>\n' + STRICT_DOCTYPE)
+            view.w(u'<div xmlns="http://www.w3.org/1999/xhtml" xmlns:cubicweb="http://www.logilab.org/2008/cubicweb">')
         # have to replace our unicode stream using view's binary stream
         view.dispatch()
-        assert self._stream, 'duh, template used as a sub-view ?? (%s)' % self._stream
+        if xhtml_wrap:
+            view.w(u'</div>')
         self._stream = view._stream
 
 
@@ -96,7 +102,7 @@
     """
     id = 'main-template'
     __select__ = templatable_view()
-    
+
     def call(self, view):
         self.set_request_content_type()
         self.template_header(self.content_type, view)
@@ -417,9 +423,9 @@
 class LogFormTemplate(View):
     id = 'logform'
     __select__ = match_kwargs('id', 'klass')
-    
+
     title = 'log in'
-    
+
     def call(self, id, klass, title=True, message=True):
         self.req.add_css('cubicweb.login.css')
         self.w(u'<div id="%s" class="%s">' % (id, klass))