# HG changeset patch # User Sylvain Thénault # Date 1248857076 -7200 # Node ID 46859078c8669d4d4f8887d009c0e961072292f8 # Parent 81c8b5312f9c5796c156f7f5be8976b32f068ced [R xhtml] remove xhtml_wrap* function, use instead a single req.document_surrounding_div method diff -r 81c8b5312f9c -r 46859078c866 web/request.py --- a/web/request.py Wed Jul 29 10:43:30 2009 +0200 +++ b/web/request.py Wed Jul 29 10:44:36 2009 +0200 @@ -26,6 +26,7 @@ from cubicweb.common.mail import header from cubicweb.common.uilib import remove_html_tags from cubicweb.utils import SizeConstrainedList, HTMLHead +from cubicweb.view import STRICT_DOCTYPE from cubicweb.web import (INTERNAL_FIELD_VALUE, LOGGER, NothingToEdit, RequestError, StatusResponse) @@ -721,5 +722,11 @@ return 'application/xhtml+xml' return 'text/html' + def document_surrounding_div(self): + if self.xhtml_browser(): + return (u'\n' + STRICT_DOCTYPE + + u'
') + return u'
' + from cubicweb import set_log_methods set_log_methods(CubicWebRequestBase, LOGGER) diff -r 81c8b5312f9c -r 46859078c866 web/test/unittest_views_basecontrollers.py --- a/web/test/unittest_views_basecontrollers.py Wed Jul 29 10:43:30 2009 +0200 +++ b/web/test/unittest_views_basecontrollers.py Wed Jul 29 10:44:36 2009 +0200 @@ -8,16 +8,13 @@ import simplejson from logilab.common.testlib import unittest_main, mock_object - -from cubicweb import Binary, Unauthorized -from cubicweb.devtools._apptest import TestEnvironment from cubicweb.devtools.apptest import EnvBasedTC, ControllerTC -from cubicweb.common import ValidationError +from cubicweb import Binary, NoSelectableObject, ValidationError +from cubicweb.view import STRICT_DOCTYPE from cubicweb.common.uilib import rql_for_eid from cubicweb.web import INTERNAL_FIELD_VALUE, Redirect, RequestError -from cubicweb.web.views.basecontrollers import xhtml_wrap from cubicweb.entities.authobjs import CWUser @@ -515,7 +512,7 @@ def test_not_usable_by_guets(self): self.login('anon') req = self.request() - self.assertRaises(Unauthorized, self.env.app.select_controller, 'sendmail', req) + self.assertRaises(NoSelectableObject, self.env.vreg.select, 'controllers', 'sendmail', req) @@ -538,8 +535,13 @@ ctrl = self.ctrl(req) rset = self.john.as_rset() rset.req = req - self.assertTextEquals(ctrl.publish(), - xhtml_wrap(mock_object(req=req), ctrl.view('primary', rset))) + source = ctrl.publish() + self.failUnless(source.startswith('\n' + STRICT_DOCTYPE + + u'
') + ) + req.xhtml_browser = lambda: False + source = ctrl.publish() + self.failUnless(source.startswith('
')) # def test_json_exec(self): # rql = 'Any T,N WHERE T is Tag, T name N' diff -r 81c8b5312f9c -r 46859078c866 web/views/basecontrollers.py --- a/web/views/basecontrollers.py Wed Jul 29 10:43:30 2009 +0200 +++ b/web/views/basecontrollers.py Wed Jul 29 10:44:36 2009 +0200 @@ -33,21 +33,6 @@ except ImportError: # gae HAS_SEARCH_RESTRICTION = False -def xhtml_wrap_header(self): - # XXX factor out, watch view.py ~ Maintemplate.doctype - if not self.vreg.config['force-html-content-type'] and self.req.xhtml_browser(): - head = (u'\n' + STRICT_DOCTYPE + - u'
') - else: - head = u'
' - return head - -def xhtml_wrap_tail(self): - return u'
' - -def xhtml_wrap(self, source): - return u''.join((xhtml_wrap_header(self), source.strip(), xhtml_wrap_tail(self))) - def jsonize(func): """decorator to sets correct content_type and calls `simplejson.dumps` on results @@ -63,7 +48,8 @@ def wrapper(self, *args, **kwargs): self.req.set_content_type(self.req.html_content_type()) result = func(self, *args, **kwargs) - return xhtml_wrap(self, result) + return ''.join((self.req.document_surrounding_div(), result.strip(), + u'
')) wrapper.__name__ = func.__name__ return wrapper diff -r 81c8b5312f9c -r 46859078c866 web/views/basetemplates.py --- a/web/views/basetemplates.py Wed Jul 29 10:43:30 2009 +0200 +++ b/web/views/basetemplates.py Wed Jul 29 10:44:36 2009 +0200 @@ -13,7 +13,6 @@ from cubicweb.vregistry import objectify_selector from cubicweb.selectors import match_kwargs from cubicweb.view import View, MainTemplate, NOINDEX, NOFOLLOW -from cubicweb.web.views.basecontrollers import xhtml_wrap_header, xhtml_wrap_tail from cubicweb.utils import make_uid, UStringIO @@ -85,12 +84,15 @@ def call(self, view): view.set_request_content_type() view.set_stream() - if view.content_type == self.req.html_content_type(): - view.w(xhtml_wrap_header(self)) + if (self.req.form.has_key('__notemplate') and view.templatable + and view.content_type == self.req.html_content_type()): + view.w(self.req.document_surrounding_div()) view.render() - view.w(xhtml_wrap_tail(self)) + view.w(u'
') else: view.render() + # have to replace our stream by view's stream (which may be a binary + # stream) self._stream = view._stream