@@ -8,20 +8,44 @@ public static class CssElementStyleResolver
88 {
99 private const string premailerAttributePrefix = "-premailer-" ;
1010
11- public static IEnumerable < AttributeToCss > GetAllStyles ( IElement domElement , StyleClass styleClass )
12- {
13- var attributeCssList = new List < AttributeToCss > ( ) ;
11+ public static IEnumerable < AttributeToCss > GetAllStyles ( IElement domElement , StyleClass styleClass )
12+ {
13+ var attributeCssList = new List < AttributeToCss > ( ) ;
14+ var originalStyleAttr = domElement . Attributes [ "style" ] ;
15+ var hasImportantInOriginalStyle = originalStyleAttr != null && originalStyleAttr . Value . Contains ( "!important" ) ;
1416
15- AddSpecialPremailerAttributes ( attributeCssList , styleClass ) ;
17+ AddSpecialPremailerAttributes ( attributeCssList , styleClass ) ;
1618
17- if ( styleClass . Attributes . Count > 0 )
18- attributeCssList . Add ( new AttributeToCss { AttributeName = "style" , CssValue = styleClass . ToString ( emitImportant : true ) } ) ;
19+ if ( styleClass . Attributes . Count > 0 )
20+ attributeCssList . Add ( new AttributeToCss { AttributeName = "style" , CssValue = styleClass . ToString ( emitImportant : true ) } ) ;
1921
20- attributeCssList . AddRange ( CssStyleEquivalence . FindEquivalent ( domElement , styleClass ) ) ;
22+ attributeCssList . AddRange ( CssStyleEquivalence . FindEquivalent ( domElement , styleClass ) ) ;
2123
22- return attributeCssList ;
24+ if ( hasImportantInOriginalStyle )
25+ {
26+ var styleAttr = attributeCssList . FirstOrDefault ( a => a . AttributeName == "style" ) ;
27+ if ( styleAttr != null && ! styleAttr . CssValue . Contains ( "!important" ) )
28+ {
29+ var parser = new CssParser ( ) ;
30+ var originalStyleClass = parser . ParseStyleClass ( "inline" , originalStyleAttr . Value ) ;
31+
32+ var currentStyleClass = parser . ParseStyleClass ( "inline" , styleAttr . CssValue ) ;
33+
34+ foreach ( var attr in originalStyleClass . Attributes )
35+ {
36+ if ( attr . Important && ! currentStyleClass . Attributes . ContainsKey ( attr . Style ) )
37+ {
38+ currentStyleClass . Attributes . Merge ( attr ) ;
39+ }
40+ }
41+
42+ styleAttr . CssValue = currentStyleClass . ToString ( emitImportant : true ) ;
43+ }
2344 }
2445
46+ return attributeCssList ;
47+ }
48+
2549 private static void AddSpecialPremailerAttributes ( List < AttributeToCss > attributeCssList , StyleClass styleClass )
2650 {
2751 while ( true )
0 commit comments