Fix merge_styles for proper ordering of styles w.r.t. "constituent" styles
#267
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
"Constituent" styles are, for example,
margin-bottomformargin.Rationale
To illustrate the problem, suppose you have this HTML:
After "premailing" with the current version, this becomes
what is obviously wrong. The desired output would be:
Note the ordering of
borderandborder-bottom-width.Suggested fix
The underlying reason for this error is that when you assign to an existing key in
OrderedDict, it replaces the value in-place instead of appending it to the end. That is,This way, the inline
borderstyle in the example takes place of theborderstyle inherited from the.cclass, and gets lesser priority thanborder-bottom-width.The simplest fix to achieve the desired behavior would be to
delthe key from theOrderedDictfirst.PR contents
PR contains a fix and a unit test failing without the fix.