jira-cli/pkg/adf/jiramarkdown.go

93 lines
2.1 KiB
Go

package adf
import (
"fmt"
"strings"
)
const (
bgColorInfo = "#deebff"
bgColorNote = "#eae6ff"
bgColorError = "#ffebe6"
bgColorSuccess = "#e3fcef"
bgColorWarning = "#fffae6"
panelTypeInfo = "info"
panelTypeNote = "note"
panelTypeError = "error"
panelTypeSuccess = "success"
panelTypeWarning = "warning"
)
// JiraMarkdownTranslator is a jira markdown translator.
type JiraMarkdownTranslator struct {
*MarkdownTranslator
}
// NewJiraMarkdownTranslator constructs jira markdown translator.
func NewJiraMarkdownTranslator() *JiraMarkdownTranslator {
openHooks := nodeTypeHook{
NodePanel: nodePanelOpenHook,
}
closeHooks := nodeTypeHook{
NodePanel: nodePanelCloseHook,
}
return &JiraMarkdownTranslator{
MarkdownTranslator: NewMarkdownTranslator(
WithMarkdownOpenHooks(openHooks),
WithMarkdownCloseHooks(closeHooks),
),
}
}
// Open implements TagOpener interface.
func (tr *JiraMarkdownTranslator) Open(n Connector, d int) string {
return tr.MarkdownTranslator.Open(n, d)
}
// Close implements TagCloser interface.
func (tr *JiraMarkdownTranslator) Close(n Connector) string {
return tr.MarkdownTranslator.Close(n)
}
func nodePanelOpenHook(n Connector) string {
attrs := n.GetAttributes()
var tag strings.Builder
tag.WriteString("\n{panel")
if attrs != nil {
a := attrs.(map[string]interface{})
if len(a) > 0 {
tag.WriteString(":")
}
for k, v := range a {
if k == "panelType" {
switch v {
case panelTypeInfo:
tag.WriteString(fmt.Sprintf("bgColor=%s", bgColorInfo))
case panelTypeNote:
tag.WriteString(fmt.Sprintf("bgColor=%s", bgColorNote))
case panelTypeError:
tag.WriteString(fmt.Sprintf("bgColor=%s", bgColorError))
case panelTypeSuccess:
tag.WriteString(fmt.Sprintf("bgColor=%s", bgColorSuccess))
case panelTypeWarning:
tag.WriteString(fmt.Sprintf("bgColor=%s", bgColorWarning))
}
} else {
tag.WriteString(fmt.Sprintf("|%s=%s", k, v))
}
}
}
tag.WriteString("}\n")
return tag.String()
}
func nodePanelCloseHook(Connector) string {
return "{panel}\n"
}