diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index c0b5388d8b1..b4352fcc32c 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -1072,8 +1072,7 @@ class AssetsBundle(object): response = [] if debug: if css and self.stylesheets: - compiled = self.preprocess_css() - self.recompose_css(compiled) + self.preprocess_css() if self.css_errors: msg = '\n'.join(self.css_errors) self.stylesheets.append(StylesheetAsset(self, inline=self.css_message(msg))) @@ -1186,24 +1185,22 @@ class AssetsBundle(object): Checks if the bundle contains any sass/less content, then compiles it to css. Returns the bundle's flat css. """ - sass = [asset for asset in self.stylesheets if isinstance(asset, SassStylesheetAsset)] - if sass: - cmd = sass[0].get_command() - source = '\n'.join([asset.get_source() for asset in sass]) - compiled = self.compile_css(cmd, source) - self.recompose_css(compiled) + for atype in (SassStylesheetAsset, LessStylesheetAsset): + assets = [asset for asset in self.stylesheets if isinstance(asset, atype)] + if assets: + cmd = assets[0].get_command() + source = '\n'.join([asset.get_source() for asset in assets]) + compiled = self.compile_css(cmd, source) - less = [asset for asset in self.stylesheets if isinstance(asset, LessStylesheetAsset)] - if less: - cmd = less[0].get_command() - source = '' - for asset in self.stylesheets: - if isinstance(asset, LessStylesheetAsset): - source += asset.get_source() - else: - source += asset.content - compiled = self.compile_css(cmd, source) - return compiled + fragments = self.rx_css_split.split(compiled) + at_rules = fragments.pop(0) + if at_rules: + # Sass and less moves @at-rules to the top in order to stay css 2.1 compatible + self.stylesheets.insert(0, StylesheetAsset(self, inline=at_rules)) + while fragments: + asset_id = fragments.pop(0) + asset = next(asset for asset in self.stylesheets if asset.id == asset_id) + asset._content = fragments.pop(0) return '\n'.join(asset.minify() for asset in self.stylesheets) @@ -1238,14 +1235,6 @@ class AssetsBundle(object): compiled = result[0].strip().decode('utf8') return compiled - def recompose_css(self, compiled): - """Flattenize StylesheetAsset's content from compiled source""" - fragments = self.rx_css_split.split(compiled)[1:] - while fragments: - asset_id = fragments.pop(0) - asset = next(asset for asset in self.stylesheets if asset.id == asset_id) - asset._content = fragments.pop(0) - def get_preprocessor_error(self, stderr, source=None): """Improve and remove sensitive information from sass/less compilator error messages""" error = stderr.split('Load paths')[0].replace(' Use --trace for backtrace.', '') @@ -1318,7 +1307,7 @@ class WebAsset(object): @property def content(self): - if not self._content: + if self._content is None: self._content = self.inline or self._fetch_content() return self._content