50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
from openerp.addons.web.http import request
|
|
from openerp.osv import orm
|
|
|
|
|
|
class QWeb(orm.AbstractModel):
|
|
""" QWeb object for rendering stuff in the website context
|
|
"""
|
|
_inherit = 'ir.qweb'
|
|
|
|
URL_ATTRS = {
|
|
'form': 'action',
|
|
'a': 'href',
|
|
}
|
|
|
|
CDN_TRIGGERS = {
|
|
'link': 'href',
|
|
'script': 'src',
|
|
'img': 'src',
|
|
}
|
|
|
|
PRESERVE_WHITESPACE = [
|
|
'pre',
|
|
'textarea',
|
|
'script',
|
|
'style',
|
|
]
|
|
|
|
def render_attribute(self, element, name, value, qwebcontext):
|
|
context = qwebcontext.context or {}
|
|
if not context.get('rendering_bundle'):
|
|
if name == self.URL_ATTRS.get(element.tag) and qwebcontext.get('url_for'):
|
|
value = qwebcontext.get('url_for')(value)
|
|
elif request and request.website and request.website.cdn_activated and (name == self.URL_ATTRS.get(element.tag) or name == self.CDN_TRIGGERS.get(element.tag)):
|
|
value = request.website.get_cdn_url(value)
|
|
return super(QWeb, self).render_attribute(element, name, value, qwebcontext)
|
|
|
|
def render_text(self, text, element, qwebcontext):
|
|
compress = request and not request.debug and request.website and request.website.compress_html
|
|
if compress and element.tag not in self.PRESERVE_WHITESPACE:
|
|
text = self.re_remove_spaces.sub(' ', text)
|
|
return super(QWeb, self).render_text(text, element, qwebcontext)
|
|
|
|
def render_tail(self, tail, element, qwebcontext):
|
|
compress = request and not request.debug and request.website and request.website.compress_html
|
|
if compress and element.getparent().tag not in self.PRESERVE_WHITESPACE:
|
|
# No need to recurse because those tags children are not html5 parser friendly
|
|
tail = self.re_remove_spaces.sub(' ', tail.rstrip())
|
|
return super(QWeb, self).render_tail(tail, element, qwebcontext)
|