Go-Back-Skeleton/vendor/github.com/vanng822/go-premailer/premailer/element.go
2017-09-25 20:20:52 +02:00

70 lines
1.4 KiB
Go

package premailer
import (
"fmt"
"github.com/PuerkitoBio/goquery"
"github.com/vanng822/css"
"sort"
"strings"
)
type elementRules struct {
element *goquery.Selection
rules []*styleRule
cssToAttributes bool
}
func (er *elementRules) inline() {
inline, _ := er.element.Attr("style")
var inlineStyles map[string]*css.CSSStyleDeclaration
if inline != "" {
inlineStyles = css.ParseBlock(inline)
}
styles := make(map[string]string)
for _, rule := range er.rules {
for prop, s := range rule.styles {
styles[prop] = s.Value
}
}
if len(inlineStyles) > 0 {
for prop, s := range inlineStyles {
styles[prop] = s.Value
}
}
final := make([]string, 0, len(styles))
for p, v := range styles {
final = append(final, fmt.Sprintf("%s:%s", p, v))
if er.cssToAttributes {
er.style_to_basic_html_attribute(p, v)
}
}
sort.Strings(final)
style := strings.Join(final, ";")
if style != "" {
er.element.SetAttr("style", style)
}
}
func (er *elementRules) style_to_basic_html_attribute(prop, value string) {
switch prop {
case "text-align":
er.element.SetAttr("align", value)
case "vertical-align":
er.element.SetAttr("valign", value)
case "background-color":
er.element.SetAttr("bgcolor", value)
case "width":
fallthrough
case "height":
if strings.HasSuffix(value, "px") {
value = value[:len(value)-2]
}
er.element.SetAttr(prop, value)
}
}