Handle inheritable properties when resolving pseudo elements

This commit is contained in:
Kovid Goyal 2016-04-12 16:14:57 +05:30
parent 36434a4c85
commit 0f1fbf0a8c
2 changed files with 11 additions and 6 deletions

View File

@ -208,7 +208,7 @@ def resolve_styles(container, name, select=None, sheet_callback=None):
style_map = {elem:resolve_declarations(x) for elem, x in style_map.iteritems()} style_map = {elem:resolve_declarations(x) for elem, x in style_map.iteritems()}
pseudo_style_map = {elem:resolve_pseudo_declarations(x) for elem, x in pseudo_style_map.iteritems()} pseudo_style_map = {elem:resolve_pseudo_declarations(x) for elem, x in pseudo_style_map.iteritems()}
return partial(resolve_property, style_map), partial(resolve_pseudo_property, pseudo_style_map), select return partial(resolve_property, style_map), partial(resolve_pseudo_property, style_map, pseudo_style_map), select
_defvals = None _defvals = None
@ -237,12 +237,14 @@ def resolve_property(style_map, elem, name):
q = q.getparent() if inheritable else None q = q.getparent() if inheritable else None
return defvals().get(name) return defvals().get(name)
def resolve_pseudo_property(pseudo_style_map, elem, prop, name): def resolve_pseudo_property(style_map, pseudo_style_map, elem, prop, name):
style_map = pseudo_style_map.get(elem) sub_map = pseudo_style_map.get(elem)
if style_map is not None: if sub_map is not None:
prop_map = style_map.get(prop) prop_map = sub_map.get(prop)
if prop_map is not None: if prop_map is not None:
val = prop_map.get(name) val = prop_map.get(name)
if val is not None: if val is not None:
return val return val
if name in INHERITED:
return resolve_property(style_map, elem, name)
return defvals().get(name) return defvals().get(name)

View File

@ -121,5 +121,8 @@ class CascadeTest(BaseTest):
t = get_maps('<p></p>', "p:before { content: 'xxx' } p:first-letter { font-weight: bold }", True) t = get_maps('<p></p>', "p:before { content: 'xxx' } p:first-letter { font-weight: bold }", True)
t('p', 'before', 'content', '"xxx"') t('p', 'before', 'content', '"xxx"')
t('p', 'first-letter', 'font-weight', 'bold') t('p', 'first-letter', 'font-weight', 'bold')
t = get_maps('<p></p>', 'p:before { content: xxx }', True) t = get_maps('<p></p>', 'p { font-weight: bold; margin: 11pt } p:before { content: xxx }', True)
t('p', 'before', 'content', 'xxx') t('p', 'before', 'content', 'xxx')
t('p', 'before', 'margin-top', '0')
t('p', 'before', 'font-weight', 'bold')
t('p', 'first-letter', 'content', 'normal')