summaryrefslogtreecommitdiff
path: root/scss/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'scss/__init__.py')
-rw-r--r--scss/__init__.py74
1 files changed, 41 insertions, 33 deletions
diff --git a/scss/__init__.py b/scss/__init__.py
index 0384ee5..685057f 100644
--- a/scss/__init__.py
+++ b/scss/__init__.py
@@ -590,7 +590,7 @@ class Scss(object):
elif block.unparsed_contents is None:
rule.properties.append((block.prop, None))
elif scope is None: # needs to have no scope to crawl down the nested rules
- self._nest_rules(rule, p_children, scope, block)
+ self._nest_at_rules(rule, p_children, scope, block)
####################################################################
# Properties
elif block.unparsed_contents is None:
@@ -1207,47 +1207,55 @@ class Scss(object):
rule.properties.append((_prop, value))
@print_timing(10)
- def _nest_rules(self, rule, p_children, scope, block):
+ def _nest_at_rules(self, rule, p_children, scope, block):
"""
- Implements Nested CSS rules
+ Implements @-blocks
"""
- if block.is_atrule:
- new_ancestry = list(rule.ancestry)
- if block.directive == '@media' and rule.ancestry:
- for i, header in reversed(list(enumerate(new_ancestry))):
- if header.is_selector:
- continue
- elif header.directive == '@media':
- from scss.rule import BlockAtRuleHeader
- new_ancestry[i] = BlockAtRuleHeader(
- '@media',
- "%s and %s" % (header.argument, block.argument))
- break
- else:
- new_ancestry.insert(i, block.header)
+ # Interpolate the current block
+ # TODO this seems like it should be done in the block header. and more
+ # generally?
+ calculator = Calculator(rule.namespace)
+ block.header.argument = calculator.apply_vars(block.header.argument)
+
+ new_ancestry = list(rule.ancestry)
+ if block.directive == '@media' and rule.ancestry:
+ for i, header in reversed(list(enumerate(new_ancestry))):
+ if header.is_selector:
+ continue
+ elif header.directive == '@media':
+ from scss.rule import BlockAtRuleHeader
+ new_ancestry[i] = BlockAtRuleHeader(
+ '@media',
+ "%s and %s" % (header.argument, block.argument))
+ break
else:
- new_ancestry.insert(0, block.header)
+ new_ancestry.insert(i, block.header)
else:
- new_ancestry.append(block.header)
-
- new_rule = SassRule(
- source_file=rule.source_file,
- lineno=block.lineno,
- unparsed_contents=block.unparsed_contents,
+ new_ancestry.insert(0, block.header)
+ else:
+ new_ancestry.append(block.header)
- #dependent_rules
- options=rule.options.copy(),
- #properties
- #extends_selectors
- ancestry=new_ancestry,
+ new_rule = SassRule(
+ source_file=rule.source_file,
+ lineno=block.lineno,
+ unparsed_contents=block.unparsed_contents,
- namespace=rule.namespace.derive(),
- )
+ #dependent_rules
+ options=rule.options.copy(),
+ #properties
+ #extends_selectors
+ ancestry=new_ancestry,
- p_children.appendleft(new_rule)
+ namespace=rule.namespace.derive(),
+ )
- return
+ p_children.appendleft(new_rule)
+ @print_timing(10)
+ def _nest_rules(self, rule, p_children, scope, block):
+ """
+ Implements Nested CSS rules
+ """
calculator = Calculator(rule.namespace)
raw_selectors = calculator.apply_vars(block.prop)
c_selectors, c_parents = self.parse_selectors(raw_selectors)