renderers

package
v1.0.1-0...-39f75b5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 27, 2024 License: MIT Imports: 42 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewMarkdown

func NewMarkdown(options ...any) *_Markdown

Types

type AssetFinder

type AssetFinder func(path string) (name, url, description string, found bool)

type EnteringWalker

type EnteringWalker interface {
	WalkEntering(n ast.Node) (ast.WalkStatus, error)
}

type HTML

type HTML struct {
	Renderer
}

func (*HTML) Render

func (me *HTML) Render(source string) (string, error)

type HtmlFilter

type HtmlFilter interface {
	FilterHtml(doc *html.Node) ([]byte, error)
}

非常低效的接口。。。

type HtmlPrettifier

type HtmlPrettifier interface {
	PrettifyHtml(doc *html.Node) ([]byte, error)
}

type HtmlTransformer

type HtmlTransformer interface {
	TransformHtml(doc *goquery.Document) error
}

type OpenLinksInNewTabKind

type OpenLinksInNewTabKind int
const (
	OpenLinksInNewTabKindKeep     OpenLinksInNewTabKind = iota // 不作为。
	OpenLinksInNewTabKindNever                                 // 全部链接在当前窗口打开。
	OpenLinksInNewTabKindAll                                   // 全部链接在新窗口打开,适用于评论预览时。
	OpenLinksInNewTabKindExternal                              // 仅外站链接在新窗口打开。
)

type Option

type Option func(me *_Markdown) error

TODO 不要返回 error。 apply 的时候统一 catch 并返回初始化失败。

func Testing

func Testing() Option

func WithAssetSources

func WithAssetSources(fn AssetFinder) Option

提供文章附件的引用来源

func WithDisableHTML

func WithDisableHTML(disable bool) Option

不允许使用 HTML 标签。

func WithDisableHeadings

func WithDisableHeadings(disable bool) Option

不允许评论中存在任何级别的“标题”。

func WithModifiedAnchorReference

func WithModifiedAnchorReference(relativePath string) Option

修改锚点页内引用(#)的指向为绝对地址。 https://github.com/movsb/taoblog/blob/5c86466f3c1ab2f1543c3a5be4abc24f9c60c532/docs/TODO.md

func WithOpenLinksInNewTab

func WithOpenLinksInNewTab(kind OpenLinksInNewTabKind) Option

新窗口打开链接。 TODO 目前只能针对 Markdown 链接, HTML 标签链接不可用。 注意:锚点 (#section)这种始终不会在新窗口打开。

func WithPathResolver

func WithPathResolver(pathResolver PathResolver) Option

解析 Markdown 中的相对链接。

func WithRemoveTitleHeading

func WithRemoveTitleHeading() Option

移除 Markdown 中的标题(适用于文章)。

func WithRenderCodeAsHTML

func WithRenderCodeAsHTML() Option

渲染代码。

func WithUseAbsolutePaths

func WithUseAbsolutePaths(base string) Option

在 Tweets 页面下展示不止一篇文章的时候,文章内引用的资源的链接不能是相对链接(找不到), 必须修改成引用相对于文章的路径。 好希望有多个 <base> 支持啊,比如每个 <article> 下面有自己的 <base>。 TODO:暂时只支持 <img>, <a>。 参考 doc 中的 附件自动上传。

func WithoutRendering

func WithoutRendering() Option

不动态计算图片大小。适用于提交的时候,只会检查合法性。计算是在返回的时候进行。 不渲染,只解析,并判断合法性。不返回内容。

type Option2

type Option2 = any

后面统一改成 Option。

func WithHashTags

func WithHashTags(resolve func(tag string) string, tags *[]string) Option2

自动解析 HashTags。 tags: 包含 #。 resolve:把标签解析成链接。

func WithHtmlPrettifier

func WithHtmlPrettifier() Option2

简化并美化 Markdown 的展示。 比如: - 不显示复杂的链接、图片、表格、代码块等元素。 - 不显示脚注。

NOTE 因为 Markdown 只能解析而不能还原,所以这里处理的是 HTML 内容。 HTML 可以在 NODE 之间等价转换。 而由于 Markdown 目前在转换成 HTML 时采用了后端渲染代码。 所以 chroma 把 code 包裹在了 table 中。需要特别处理。

https://yari-demos.prod.mdn.mozit.cloud/en-US/docs/Web/HTML/Inline_elements

func WithLazyLoadingFrames

func WithLazyLoadingFrames() Option2

油管的分享视频 iframe 竟然默认不是 lazy lading 的,有点儿无语😓。 目前碎碎念是全部加载的,有好几个视频,会严重影响页面加载速度。

做法是解析 HTML Block,判断是否为 iframe,然后添加属性。

NOTE:Markdown 虽然允许 html 和 markdown 交叉混写。但是处理这种交叉的内容 非常复杂(涉及不完整 html 的解析与还原),所以暂时不支持这种情况。 这种情况很少,像是 <iframe 油管视频> 都是在一行内。就算可以多行,也不会和 markdown 交织。 虽然 iframe 是 inline 类型的元素,但是应该没人放在段落内吧?都是直接粘贴成为一段的。否则不能处理。

https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading#loading_attribute

func WithMediaDimensionLimiter

func WithMediaDimensionLimiter(max int) Option2

图片/视频/大小限制器。

func WithReserveListItemMarkerStyle

func WithReserveListItemMarkerStyle() Option2

保留列表样式。

只是增加类名,前端通过类名自行决定怎么展示。

func WithRootedPaths

func WithRootedPaths(base string) Option2

对 WithUseAbsolutePaths 的补充。 其实含义相同,只是换了个更正确的名字。 上述只能针对 md 的 img 和 a,没法针对用 html 插入的 audio / video / iframe / object。

type OptionNoError

type OptionNoError func(me *_Markdown)

func WithTitle

func WithTitle(title *string) OptionNoError

获取从 Markdown 中解析得到的一级标题。

type PathResolver

type PathResolver interface {
	Resolve(path string) string
}

解析文件系统路径为进程的相对路径。 TODO:移除,内部解析出这个路径只是为了打开文件,为啥不直接返回文件系统对象?

type Renderer

type Renderer interface {
	Render(source string) (string, error)
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL