diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2024-04-11 17:46:18 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2024-04-15 09:49:57 +0200 |
commit | df11327ba90179747be2b25574ac48c2f336b298 (patch) | |
tree | 70f7487cee6815109fc325ed0619130bb29834ca /markup/goldmark/internal/render/context.go | |
parent | a18e2bcb9a2c556e03dc7e790b0343c83163877a (diff) |
Pass .RenderShortcodes' Page to render hooks as .PageInner
The main use case for this is to resolve links and resources (e.g. images) relative to the included `Page`.
A typical `include` would similar to this:
```handlebars
{{ with site.GetPage (.Get 0) }}
{{ .RenderShortcodes }}
{{ end }}
```
And when used in a Markdown file:
```markdown
{{% include "/posts/p1" %}}
```
Any render hook triggered while rendering `/posts/p1` will get `/posts/p1` when calling `.PageInner`.
Note that
* This is only relevant for shortcodes included with `{{%` that calls `.RenderShortcodes`.
* `.PageInner` is available in all render hooks that, before this commit, received `.Page`.
* `.PageInner` will fall back to the value of `.Page` if not relevant and will always have a value.
Fixes #12356
Diffstat (limited to 'markup/goldmark/internal/render/context.go')
-rw-r--r-- | markup/goldmark/internal/render/context.go | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/markup/goldmark/internal/render/context.go b/markup/goldmark/internal/render/context.go index 578714339..306d26748 100644 --- a/markup/goldmark/internal/render/context.go +++ b/markup/goldmark/internal/render/context.go @@ -41,6 +41,7 @@ func (b *BufWriter) Flush() error { type Context struct { *BufWriter positions []int + pids []uint64 ContextData } @@ -55,6 +56,30 @@ func (ctx *Context) PopPos() int { return p } +// PushPid pushes a new page ID to the stack. +func (ctx *Context) PushPid(pid uint64) { + ctx.pids = append(ctx.pids, pid) +} + +// PeekPid returns the current page ID without removing it from the stack. +func (ctx *Context) PeekPid() uint64 { + if len(ctx.pids) == 0 { + return 0 + } + return ctx.pids[len(ctx.pids)-1] +} + +// PopPid pops the last page ID from the stack. +func (ctx *Context) PopPid() uint64 { + if len(ctx.pids) == 0 { + return 0 + } + i := len(ctx.pids) - 1 + p := ctx.pids[i] + ctx.pids = ctx.pids[:i] + return p +} + type ContextData interface { RenderContext() converter.RenderContext DocumentContext() converter.DocumentContext |