package gen import ( "git.clearsky.net.au/cody/gex.git/gen/domquery" ) func AddClassAttr(htmlStr string, className string) string { dom := domquery.LoadHTML(htmlStr) tags := dom.QuerySelectorAll("*") for _, tag := range tags { if isExcludedTag(tag.TagName()) { continue } tag.ClassListAdd(className) } return dom.InnerHTML() } func isExcludedTag(tagName string) bool { validTags := map[string]bool{ "html": true, "head": true, "style": true, "script": true, "link": true, "meta": true, "title": true, "slot": true, "block": true, "layout": true, "part": true, } return validTags[tagName] } // func isTargetTag(tagName string) bool { // validTags := map[string]bool{ // "a": true, // "abbr": true, // "address": true, // "area": true, // "article": true, // "aside": true, // "audio": true, // "b": true, // "blockquote": true, // "body": true, // "br": true, // "button": true, // "canvas": true, // "caption": true, // "cite": true, // "code": true, // "col": true, // "colgroup": true, // "data": true, // "datalist": true, // "dd": true, // "del": true, // "details": true, // "dialog": true, // "div": true, // "dl": true, // "dt": true, // "em": true, // "fieldset": true, // "figcaption": true, // "figure": true, // "footer": true, // "form": true, // "h1": true, // "h2": true, // "h3": true, // "h4": true, // "h5": true, // "h6": true, // "header": true, // "hr": true, // "i": true, // "iframe": true, // "img": true, // "input": true, // "ins": true, // "kbd": true, // "label": true, // "legend": true, // "li": true, // "main": true, // "map": true, // "mark": true, // "meter": true, // "nav": true, // "noscript": true, // "object": true, // "ol": true, // "option": true, // "optgroup": true, // "p": true, // "picture": true, // "pre": true, // "progress": true, // "q": true, // "samp": true, // "section": true, // "select": true, // "small": true, // "source": true, // "span": true, // "strong": true, // "sub": true, // "summary": true, // "sup": true, // "svg": true, // "table": true, // "tbody": true, // "td": true, // "textarea": true, // "tfoot": true, // "th": true, // "thead": true, // "time": true, // "tr": true, // "track": true, // "u": true, // "ul": true, // "var": true, // "video": true, // "wbr": true, // "label-wc": true, // "textarea-wc": true, // "fieldset-wc": true, // "input-wc": true, // "select-wc": true, // "button-wc": true, // } // return validTags[tagName] // } func ExtractCSS(htmlStr *string) string { document := domquery.LoadHTML(*htmlStr) styleTag := document.QuerySelector("style") css := "" if styleTag.InnerHTML() != "" { css = styleTag.InnerHTML() styleTag.SetOuterHTML("") *htmlStr = document.InnerHTML() } return css }