mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-30 22:39:58 +02:00
Add render template hooks for links and images
This commit also * revises the change detection for templates used by content files in server mode. * Adds a Page.RenderString method Fixes #6545 Fixes #4663 Closes #6043
This commit is contained in:
@@ -16,6 +16,8 @@ package converter
|
||||
import (
|
||||
"github.com/gohugoio/hugo/common/loggers"
|
||||
"github.com/gohugoio/hugo/config"
|
||||
"github.com/gohugoio/hugo/identity"
|
||||
"github.com/gohugoio/hugo/markup/converter/hooks"
|
||||
"github.com/gohugoio/hugo/markup/markup_config"
|
||||
"github.com/gohugoio/hugo/markup/tableofcontents"
|
||||
"github.com/spf13/afero"
|
||||
@@ -67,6 +69,7 @@ func (n newConverter) Name() string {
|
||||
// another format, e.g. Markdown to HTML.
|
||||
type Converter interface {
|
||||
Convert(ctx RenderContext) (Result, error)
|
||||
Supports(feature identity.Identity) bool
|
||||
}
|
||||
|
||||
// Result represents the minimum returned from Convert.
|
||||
@@ -94,6 +97,7 @@ func (b Bytes) Bytes() []byte {
|
||||
|
||||
// DocumentContext holds contextual information about the document to convert.
|
||||
type DocumentContext struct {
|
||||
Document interface{} // May be nil. Usually a page.Page
|
||||
DocumentID string
|
||||
DocumentName string
|
||||
ConfigOverrides map[string]interface{}
|
||||
@@ -101,6 +105,11 @@ type DocumentContext struct {
|
||||
|
||||
// RenderContext holds contextual information about the content to render.
|
||||
type RenderContext struct {
|
||||
Src []byte
|
||||
RenderTOC bool
|
||||
Src []byte
|
||||
RenderTOC bool
|
||||
RenderHooks *hooks.Render
|
||||
}
|
||||
|
||||
var (
|
||||
FeatureRenderHooks = identity.NewPathIdentity("markup", "renderingHooks")
|
||||
)
|
||||
|
57
markup/converter/hooks/hooks.go
Normal file
57
markup/converter/hooks/hooks.go
Normal file
@@ -0,0 +1,57 @@
|
||||
// Copyright 2019 The Hugo Authors. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package hooks
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"github.com/gohugoio/hugo/identity"
|
||||
)
|
||||
|
||||
type LinkContext interface {
|
||||
Page() interface{}
|
||||
Destination() string
|
||||
Title() string
|
||||
Text() string
|
||||
}
|
||||
|
||||
type Render struct {
|
||||
LinkRenderer LinkRenderer
|
||||
ImageRenderer LinkRenderer
|
||||
}
|
||||
|
||||
func (r *Render) Eq(other interface{}) bool {
|
||||
ro, ok := other.(*Render)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
if r == nil || ro == nil {
|
||||
return r == nil
|
||||
}
|
||||
|
||||
if r.ImageRenderer.GetIdentity() != ro.ImageRenderer.GetIdentity() {
|
||||
return false
|
||||
}
|
||||
|
||||
if r.LinkRenderer.GetIdentity() != ro.LinkRenderer.GetIdentity() {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
type LinkRenderer interface {
|
||||
Render(w io.Writer, ctx LinkContext) error
|
||||
identity.Provider
|
||||
}
|
Reference in New Issue
Block a user