Skip to content

Commit

Permalink
correctly render markdown widgets
Browse files Browse the repository at this point in the history
  • Loading branch information
ugwueze-dev committed Aug 2, 2021
1 parent 121701f commit 0f83726
Show file tree
Hide file tree
Showing 7 changed files with 1,134 additions and 99 deletions.
22 changes: 21 additions & 1 deletion ui/page/overview_page.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (

"github.com/planetdecred/dcrlibwallet"
"github.com/planetdecred/godcr/ui/decredmaterial"
"github.com/planetdecred/godcr/ui/renderers"
"github.com/planetdecred/godcr/ui/values"
"github.com/planetdecred/godcr/wallet"
)
Expand Down Expand Up @@ -141,8 +142,27 @@ func (pg *OverviewPage) loadTransactions() {
pg.transactions = transactions
}

func (pg *OverviewPage) Layout(gtx C) D {
sc := `1. First ordered list item with really long text. First ordered list item with really long text. First ordered list item with really long text. First ordered list item with really long text
2. Another item
3. Actual numbers don't matter, just that it's a number
4. And another item.
Welcome to the cong
`

m := renderers.RenderMarkdown(gtx, pg.theme, sc)
l, _ := m.Layout()

return uniformPadding(gtx, func(gtx C) D {
return pg.listContainer.Layout(gtx, len(l), func(gtx C, i int) D {
return layout.UniformInset(values.MarginPadding5).Layout(gtx, l[i])
})
})
}

// Layout lays out the entire content for overview pg.
func (pg *OverviewPage) Layout(gtx layout.Context) layout.Dimensions {
func (pg *OverviewPage) LayoutMain(gtx layout.Context) layout.Dimensions {
pg.queue = gtx
if pg.WL.Info.LoadedWallets == 0 {
return uniformPadding(gtx, func(gtx C) D {
Expand Down
23 changes: 23 additions & 0 deletions ui/renderers/const.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package renderers

const (
openTagPrefix = "[@"
openTagSuffix = "@]"
closeTag = "[/]"

italicsTagName = "i"
strongTagName = "strong"
emphTagName = "emph"
strikeTagName = "strike"
blockQuoteTagName = "blockquote"
orderedListTagName = "ol"
unorderedListTagName = "ul"
listItemTagName = "li"

h1TagName = "h1"
h2TagName = "h2"
h3TagName = "h3"
h4TagName = "h4"
h5TagName = "h5"
h6TagName = "h6"
)
120 changes: 98 additions & 22 deletions ui/renderers/html.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,12 @@ import (
md "github.com/JohannesKaufmann/html-to-markdown"
"github.com/PuerkitoBio/goquery"
"github.com/gomarkdown/markdown/ast"
"github.com/gomarkdown/markdown/parser"
//"github.com/gomarkdown/markdown/parser"
"github.com/planetdecred/godcr/ui/decredmaterial"
)

type HTMLRenderer struct {
doc ast.Node
type HTMLProvider struct {
container *layout.List
*Renderer
}

var (
Expand All @@ -30,7 +28,83 @@ const (
closeStyleTag = "{/@}"
)

func RenderHTML(html string, theme *decredmaterial.Theme) *HTMLRenderer {
func RenderHTML(html string, theme *decredmaterial.Theme) *HTMLProvider {
htmlProvider := &HTMLProvider{}

converter := md.NewConverter("", true, nil)
docStr, err := converter.ConvertString(htmlProvider.prepare(html))
if err != nil {
fmt.Println(err)
return &HTMLProvider{}
}

/**htmlProvider := &HTMLProvider{}
converter := md.NewConverter("", true, nil)
docStr, err := converter.ConvertString(docStr)
if err != nil {
fmt.Println(err)
return r
}
return newRenderer(theme, &HTMLProvider{})**/
newNodeWalker(docStr, htmlProvider)

return htmlProvider
}

func (p *HTMLProvider) prepareBlockQuote(node *ast.BlockQuote, entering bool) {

}

func (p *HTMLProvider) prepareList(node *ast.List, entering bool) {

}

func (p *HTMLProvider) prepareListItem(node *ast.ListItem, entering bool) {

}

func (p *HTMLProvider) prepareParagraph(node *ast.Paragraph, entering bool) {

}

func (p *HTMLProvider) prepareHeading(node *ast.Heading, entering bool) {

}

func (p *HTMLProvider) prepareStrong(node *ast.Strong, entering bool) {

}
func (p *HTMLProvider) prepareDel(node *ast.Del, entering bool) {

}
func (p *HTMLProvider) prepareEmph(node *ast.Emph, entering bool) {

}
func (p *HTMLProvider) prepareLink(node *ast.Link, entering bool) {

}

func (p *HTMLProvider) prepareHorizontalRule(node *ast.HorizontalRule, entering bool) {

}

func (p *HTMLProvider) prepareText(node *ast.Text, entering bool) {

}
func (p *HTMLProvider) prepareTable(node *ast.Table, entering bool) {

}
func (p *HTMLProvider) prepareTableCell(node *ast.TableCell, entering bool) {

}
func (p *HTMLProvider) prepareTableRow(node *ast.TableRow, entering bool) {

}

/**func RenderHTML(html string, theme *decredmaterial.Theme) *HTMLRenderer {
converter := md.NewConverter("", true, nil)
r := &HTMLRenderer{
Expand Down Expand Up @@ -66,8 +140,9 @@ func RenderHTML(html string, theme *decredmaterial.Theme) *HTMLRenderer {
return r
}
**/

func (r *HTMLRenderer) prepareHTML(html string) string {
func (r *HTMLProvider) prepare(html string) string {
//html = strings.Replace(html, "<br/>", " \n\n ", -1)

doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
Expand Down Expand Up @@ -100,7 +175,7 @@ func (r *HTMLRenderer) prepareHTML(html string) string {
return doc.Text()
}

func (r *HTMLRenderer) prepareItalic(node *goquery.Selection) {
func (r *HTMLProvider) prepareItalic(node *goquery.Selection) {
style, ok := node.Attr("style")
if ok {
style += "; font-style: italic"
Expand All @@ -111,7 +186,7 @@ func (r *HTMLRenderer) prepareItalic(node *goquery.Selection) {
node.ReplaceWithHtml(fmt.Sprintf(`<span style="%s">%s</span>`, style, node.Text()))
}

func (r *HTMLRenderer) prepareBold(node *goquery.Selection) {
func (r *HTMLProvider) prepareBold(node *goquery.Selection) {
style, ok := node.Attr("style")
if ok {
style += "; font-weight: bold"
Expand All @@ -122,7 +197,7 @@ func (r *HTMLRenderer) prepareBold(node *goquery.Selection) {
node.ReplaceWithHtml(fmt.Sprintf(`<span style="%s">%s</span>`, style, node.Text()))
}

func (r *HTMLRenderer) prepareFont(node *goquery.Selection) {
func (r *HTMLProvider) prepareFont(node *goquery.Selection) {
style, _ := node.Attr("style")
if style != "" {
style += "; "
Expand All @@ -139,19 +214,19 @@ func (r *HTMLRenderer) prepareFont(node *goquery.Selection) {
node.ReplaceWithHtml(fmt.Sprintf(`<span style="%s">%s</span>`, style, node.Text()))
}

func (r *HTMLRenderer) prepareBreak(node *goquery.Selection) {
func (r *HTMLProvider) prepareBreak(node *goquery.Selection) {
node.ReplaceWithHtml("\n\n")
}

func (r *HTMLRenderer) mapToString(m map[string]string) string {
func (r *HTMLProvider) mapToString(m map[string]string) string {
b := new(bytes.Buffer)
for key, value := range m {
fmt.Fprintf(b, "%s=\"%s\"\n", key, value)
}
return b.String()
}

func (r *HTMLRenderer) getStyleMap(node *goquery.Selection) map[string]string {
func (r *HTMLProvider) getStyleMap(node *goquery.Selection) map[string]string {
if styleStr, ok := node.Attr("style"); ok {
spl := strings.Split(styleStr, ";")
styleMap := map[string]string{}
Expand All @@ -169,7 +244,7 @@ func (r *HTMLRenderer) getStyleMap(node *goquery.Selection) map[string]string {
return map[string]string{}
}

func (r *HTMLRenderer) styleMapToString(m map[string]string) string {
func (r *HTMLProvider) styleMapToString(m map[string]string) string {
str := ""
for k, v := range m {
str += "##" + k + "--" + v
Expand All @@ -178,14 +253,14 @@ func (r *HTMLRenderer) styleMapToString(m map[string]string) string {
return str
}

func (r *HTMLRenderer) traverse(node *goquery.Selection, parentStyle map[string]string) {
func (r *HTMLProvider) traverse(node *goquery.Selection, parentStyle map[string]string) {
node.Children().Each(func(_ int, s *goquery.Selection) {
newStyle := r.setNodeStyle(s, parentStyle)
r.traverse(s, newStyle)
})
}

func (r *HTMLRenderer) isBlockElement(element string) bool {
func (r *HTMLProvider) isBlockElement(element string) bool {
for i := range blockEls {
if element == blockEls[i] {
return true
Expand All @@ -195,7 +270,7 @@ func (r *HTMLRenderer) isBlockElement(element string) bool {
return false
}

func (r *HTMLRenderer) setNodeStyle(node *goquery.Selection, parentStyle map[string]string) map[string]string {
func (r *HTMLProvider) setNodeStyle(node *goquery.Selection, parentStyle map[string]string) map[string]string {
styleMap := r.getStyleMap(node)
for key, val := range parentStyle {
if _, ok := styleMap[key]; !ok {
Expand All @@ -214,19 +289,20 @@ func (r *HTMLRenderer) setNodeStyle(node *goquery.Selection, parentStyle map[str
return styleMap
}

func (r *HTMLRenderer) parse() []byte {
func (r *HTMLProvider) parse() []byte {
var buf bytes.Buffer
ast.WalkFunc(r.doc, func(node ast.Node, entering bool) ast.WalkStatus {
/**ast.WalkFunc(r.doc, func(node ast.Node, entering bool) ast.WalkStatus {
return r.RenderNode(&buf, node, entering)
})
})**/

return buf.Bytes()
}

func (r *HTMLRenderer) Layout(gtx C) D {
w, _ := r.Renderer.Layout()
func (r *HTMLProvider) Layout(gtx C) D {
/**w, _ := r.Renderer.Layout()
return r.container.Layout(gtx, len(w), func(gtx C, i int) D {
return w[i](gtx)
})
})**/
return D{}
}

0 comments on commit 0f83726

Please sign in to comment.