Skip to content

longbridge/html-pipeline

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HTML Pipeline for Go

Go

This is go version of html-pipeline

Other versions

Usage

package main import ( "fmt" "github.com/PuerkitoBio/goquery"	pipeline "github.com/longbridgeapp/html-pipeline" ) // ImageMaxWidthFilter a custom filter example type ImageMaxWidthFilter struct{} func (f ImageMaxWidthFilter) Call(doc *goquery.Document) (err error) { doc.Find("img").Each(func(i int, node *goquery.Selection) { node.SetAttr("style", `max-width: 100%`)	}) return } func main() { pipe := pipeline.NewPipeline([]pipeline.Filter{	pipeline.MarkdownFilter{},	pipeline.SanitizationFilter{}, ImageMaxWidthFilter{},	pipeline.MentionFilter{ Prefix: "#", Format: func(name string) string { return fmt.Sprintf(`<a href="https://github.com/topic/%s">#%s</a>`, name, name)	},	},	pipeline.MentionFilter{ Prefix: "@", Format: func(name string) string { return fmt.Sprintf(`<a href="https://github.com/%s">@%s</a>`, name, name)	},	},	}) markdown := `# Hello world  ![](javascript:alert) [Click me](javascript:alert)  This is #html-pipeline example, @huacnlee created.` out, _ := pipe.Call(markdown) fmt.Println(out) /* <h1>Hello world</h1>  <p><img alt="" style="max-width: 100%"/> Click me</p>  <p>This is <a href="https://github.com/topic/html-pipeline">#html-pipeline</a> example, <a href="https://github.com/huacnlee">@huacnlee</a> created.</p> */ }

https://play.golang.org/p/zB0T7KczdB4

Use for Plain Text case

Sometimes, you may want use html-pipeline to manage the Plain Text process.

For example:

  • Match mentions, and then send notifications.
  • Convert Mention / HashTag or other text into other format.

But in HTML mode, it will escape some chars (", ', &) ... We don't wants that.

So, there have NewPlainPipeline method for you to create a plain mode pipeline without any escape.

NOTE: For secruity, this pipeline will remove all HTML tags <.+?>

package main import ( "fmt" "github.com/longbridgeapp/html-pipeline" ) func main() { pipe := pipeline.NewPlainPipeline([]pipeline.Filter{	pipeline.MentionFilter{ Prefix: "#", Format: func(name string) string { return fmt.Sprintf(`[hashtag name="%s"]%s[/hashtag]`, name, name)	},	},	pipeline.MentionFilter{ Prefix: "@", Format: func(name string) string { return fmt.Sprintf(`[mention name="%s"]@%s[/mention]`, name, name)	},	},	}) text := `"Hello" & 'world' this <script>danger</script> is #html-pipeline created by @huacnlee.` out, _ := pipe.Call(text) fmt.Println(out) // "Hello" & 'world' this danger is [hashtag name="html-pipeline"]html-pipeline[/hashtag] created by [mention name="huacnlee"]@huacnlee[/mention]. }

https://play.golang.org/p/vxKZU9jJi3u

Built-in filters

License

MIT License

About

HTML processing filters and utilities in Go version

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •  

Languages