html.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package gen
  2. import (
  3. "git.clearsky.net.au/cody/gex.git/gen/domquery"
  4. )
  5. func AddClassAttr(htmlStr string, className string) string {
  6. dom := domquery.LoadHTML(htmlStr)
  7. tags := dom.QuerySelectorAll("*")
  8. for _, tag := range tags {
  9. if isExcludedTag(tag.TagName()) {
  10. continue
  11. }
  12. tag.ClassListAdd(className)
  13. }
  14. return dom.InnerHTML()
  15. }
  16. func isExcludedTag(tagName string) bool {
  17. validTags := map[string]bool{
  18. "html": true,
  19. "head": true,
  20. "style": true,
  21. "script": true,
  22. "link": true,
  23. "meta": true,
  24. "title": true,
  25. "slot": true,
  26. "block": true,
  27. "layout": true,
  28. "part": true,
  29. }
  30. return validTags[tagName]
  31. }
  32. // func isTargetTag(tagName string) bool {
  33. // validTags := map[string]bool{
  34. // "a": true,
  35. // "abbr": true,
  36. // "address": true,
  37. // "area": true,
  38. // "article": true,
  39. // "aside": true,
  40. // "audio": true,
  41. // "b": true,
  42. // "blockquote": true,
  43. // "body": true,
  44. // "br": true,
  45. // "button": true,
  46. // "canvas": true,
  47. // "caption": true,
  48. // "cite": true,
  49. // "code": true,
  50. // "col": true,
  51. // "colgroup": true,
  52. // "data": true,
  53. // "datalist": true,
  54. // "dd": true,
  55. // "del": true,
  56. // "details": true,
  57. // "dialog": true,
  58. // "div": true,
  59. // "dl": true,
  60. // "dt": true,
  61. // "em": true,
  62. // "fieldset": true,
  63. // "figcaption": true,
  64. // "figure": true,
  65. // "footer": true,
  66. // "form": true,
  67. // "h1": true,
  68. // "h2": true,
  69. // "h3": true,
  70. // "h4": true,
  71. // "h5": true,
  72. // "h6": true,
  73. // "header": true,
  74. // "hr": true,
  75. // "i": true,
  76. // "iframe": true,
  77. // "img": true,
  78. // "input": true,
  79. // "ins": true,
  80. // "kbd": true,
  81. // "label": true,
  82. // "legend": true,
  83. // "li": true,
  84. // "main": true,
  85. // "map": true,
  86. // "mark": true,
  87. // "meter": true,
  88. // "nav": true,
  89. // "noscript": true,
  90. // "object": true,
  91. // "ol": true,
  92. // "option": true,
  93. // "optgroup": true,
  94. // "p": true,
  95. // "picture": true,
  96. // "pre": true,
  97. // "progress": true,
  98. // "q": true,
  99. // "samp": true,
  100. // "section": true,
  101. // "select": true,
  102. // "small": true,
  103. // "source": true,
  104. // "span": true,
  105. // "strong": true,
  106. // "sub": true,
  107. // "summary": true,
  108. // "sup": true,
  109. // "svg": true,
  110. // "table": true,
  111. // "tbody": true,
  112. // "td": true,
  113. // "textarea": true,
  114. // "tfoot": true,
  115. // "th": true,
  116. // "thead": true,
  117. // "time": true,
  118. // "tr": true,
  119. // "track": true,
  120. // "u": true,
  121. // "ul": true,
  122. // "var": true,
  123. // "video": true,
  124. // "wbr": true,
  125. // "label-wc": true,
  126. // "textarea-wc": true,
  127. // "fieldset-wc": true,
  128. // "input-wc": true,
  129. // "select-wc": true,
  130. // "button-wc": true,
  131. // }
  132. // return validTags[tagName]
  133. // }
  134. func ExtractCSS(htmlStr *string) string {
  135. document := domquery.LoadHTML(*htmlStr)
  136. styleTag := document.QuerySelector("style")
  137. css := ""
  138. if styleTag.InnerHTML() != "" {
  139. css = styleTag.InnerHTML()
  140. styleTag.SetOuterHTML("")
  141. *htmlStr = document.InnerHTML()
  142. }
  143. return css
  144. }