package main import ( "fmt" "net/url" "strings" "github.com/PuerkitoBio/goquery" ) func optimizeCss(htmlContent []byte) ([]byte, error) { doc, err := goquery.NewDocumentFromReader(strings.NewReader(string(htmlContent))) if err != nil { return nil, err } originalHTMLContent := string(htmlContent) // Replace img elements doc.Find("img").Each(func(i int, s *goquery.Selection) { //For each of the image element, replace the parent from p to div orginalParent, err := s.Parent().Html() if err != nil { fmt.Println("Error getting parent HTML:", err) return } src, exists := s.Attr("src") if !exists { fmt.Println("No src attribute found for img element") return } encodedSrc := (&url.URL{Path: src}).String() //Patch the bug in the parser that converts " />" to "/>" orginalParent = strings.ReplaceAll(orginalParent, "/>", " />") fmt.Println("
") //Replace the img with ts-image originalHTMLContent = strings.Replace(originalHTMLContent, orginalParent, "
"+orginalParent+"
", 1) }) // Add "ts-text" class to each p element doc.Find("p").Each(func(i int, s *goquery.Selection) { class, exists := s.Attr("class") var newClass string if exists { newClass = fmt.Sprintf("%s ts-text", class) } else { newClass = "ts-text" } originalParagraph, _ := s.Html() originalHTMLContent = strings.ReplaceAll(originalHTMLContent, originalParagraph, fmt.Sprintf("

%s

", newClass, originalParagraph)) }) //Replace hr with ts-divider // Replace hr elements outside of code blocks doc.Find("hr").Each(func(i int, s *goquery.Selection) { parent := s.Parent() if parent.Is("code") { // Skip
inside blocks return } // Replace
with
originalHTMLContent = strings.ReplaceAll(originalHTMLContent, "
", "
") }) // Add ts-table to all table elements doc.Find("table").Each(func(i int, s *goquery.Selection) { class, exists := s.Attr("class") var newClass string if exists { newClass = fmt.Sprintf("%s ts-table", class) } else { newClass = "ts-table" } originalTable, _ := s.Html() originalHTMLContent = strings.ReplaceAll(originalHTMLContent, originalTable, fmt.Sprintf("%s
", newClass, originalTable)) }) // Replace