This commit is contained in:
parent
15af8e487c
commit
3a467134b3
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -61,3 +61,9 @@
|
||||
[submodule "vendor/github.com/ddliu/motto"]
|
||||
path = vendor/github.com/ddliu/motto
|
||||
url = https://github.com/ddliu/motto
|
||||
[submodule "vendor/github.com/disintegration/imaging"]
|
||||
path = vendor/github.com/disintegration/imaging
|
||||
url = https://github.com/disintegration/imaging
|
||||
[submodule "vendor/golang.org/x/image"]
|
||||
path = vendor/golang.org/x/image
|
||||
url = https://go.googlesource.com/image
|
||||
|
@ -27,6 +27,36 @@ func BackToRoot(curNavPath string) string {
|
||||
return tmpPath
|
||||
}
|
||||
|
||||
// ResolveNavPath fixes nav target relative to current navigation path
|
||||
func ResolveNavPath(target string) string {
|
||||
curNavPath := (*currentContext)["CurrentPath"].(string)
|
||||
if strings.HasPrefix(target, "/") {
|
||||
target = BackToRoot(curNavPath) + target
|
||||
}
|
||||
target = path.Clean(target)
|
||||
return target
|
||||
}
|
||||
|
||||
// ResolveOutputPath fixes output directory relative to current navigation path
|
||||
func ResolveOutputPath(target string) string {
|
||||
if strings.HasPrefix(target, "/") {
|
||||
target = config.Config.Directories.Output + "/" + target
|
||||
} else {
|
||||
target = currentTreeNodeConfig.OutputPath + "/" + target
|
||||
}
|
||||
return path.Clean(target)
|
||||
}
|
||||
|
||||
// ResolveInputPath fixes input directory relative to current navigation path
|
||||
func ResolveInputPath(target string) string {
|
||||
if strings.HasPrefix(target, "/") {
|
||||
target = config.Config.Directories.Input + "/" + target
|
||||
} else {
|
||||
target = currentTreeNodeConfig.InputPath + "/" + target
|
||||
}
|
||||
return path.Clean(target)
|
||||
}
|
||||
|
||||
// SetTemplateDir sets base directory for searching template files
|
||||
func SetTemplateDir(dir string) {
|
||||
templateDir = dir
|
||||
|
@ -1,11 +1,15 @@
|
||||
package helper
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/ddliu/motto"
|
||||
"github.com/disintegration/imaging"
|
||||
"github.com/flosch/pongo2"
|
||||
_ "github.com/flosch/pongo2-addons"
|
||||
_ "github.com/robertkrimen/otto/underscore"
|
||||
@ -16,6 +20,17 @@ func init() {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
newFilters := map[string]pongo2.FilterFunction{
|
||||
"image_resize": ImageResizeFilter,
|
||||
"relative_path": RelativePathFilter,
|
||||
}
|
||||
for name, fn := range newFilters {
|
||||
err := pongo2.RegisterFilter(name, fn)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MarkdownFilter is a pongo2 filter, which converts markdown to html
|
||||
@ -29,6 +44,88 @@ func MarkdownFilter(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pong
|
||||
nil
|
||||
}
|
||||
|
||||
type imageParams struct {
|
||||
width int
|
||||
height int
|
||||
filename string
|
||||
}
|
||||
|
||||
func parseImageParams(str string) (*imageParams, error) {
|
||||
if str == "" {
|
||||
return nil, errors.New("missing image parameters")
|
||||
}
|
||||
p := imageParams{}
|
||||
for _, s := range strings.Split(str, ",") {
|
||||
e := strings.Split(s, "=")
|
||||
if len(e) < 2 {
|
||||
return nil, fmt.Errorf("invalid image parameter: %s", s)
|
||||
}
|
||||
var err error
|
||||
switch e[0] {
|
||||
case "w":
|
||||
p.width, err = strconv.Atoi(e[1])
|
||||
case "h":
|
||||
p.height, err = strconv.Atoi(e[1])
|
||||
case "f":
|
||||
p.filename = e[1]
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid image parameter: %s", s)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not convert image parameter to correct value type for '%s': %s", s, err)
|
||||
}
|
||||
}
|
||||
return &p, nil
|
||||
}
|
||||
|
||||
// ImageResizeFilter read the image url and resize parameters and saves the resized image
|
||||
// param: w=WITDH,h=HEIGHT
|
||||
func ImageResizeFilter(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
|
||||
imgSource := in.String()
|
||||
p, err := parseImageParams(param.String())
|
||||
if err != nil {
|
||||
return nil, &pongo2.Error{
|
||||
Sender: "filter:image_resize",
|
||||
OrigError: err,
|
||||
}
|
||||
}
|
||||
|
||||
imgSource = ResolveInputPath(imgSource)
|
||||
if p.filename == "" {
|
||||
p.filename = fmt.Sprintf("%dx%d_%s", p.width, p.height, path.Base(imgSource))
|
||||
}
|
||||
imgTarget := ResolveOutputPath(p.filename)
|
||||
Log.Noticef("resizing image from %s to %s", imgSource, imgTarget)
|
||||
|
||||
img, err := imaging.Open(imgSource, imaging.AutoOrientation(true))
|
||||
if err != nil {
|
||||
return nil, &pongo2.Error{
|
||||
Sender: "filter:image_resize",
|
||||
OrigError: fmt.Errorf("could not open image '%s': %s", imgSource, err),
|
||||
}
|
||||
}
|
||||
img = imaging.Resize(img, p.width, p.height, imaging.Lanczos)
|
||||
|
||||
err = imaging.Save(img, imgTarget)
|
||||
if err != nil {
|
||||
return nil, &pongo2.Error{
|
||||
Sender: "filter:image_resize",
|
||||
OrigError: fmt.Errorf("could save image '%s': %s", imgTarget, err),
|
||||
}
|
||||
}
|
||||
|
||||
return pongo2.AsValue(ResolveNavPath(p.filename)), nil
|
||||
}
|
||||
|
||||
// RelativePathFilter returns the relative path to navpoint based on current nav
|
||||
func RelativePathFilter(in, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
|
||||
return pongo2.AsValue(
|
||||
ResolveNavPath(
|
||||
in.String(),
|
||||
),
|
||||
), nil
|
||||
}
|
||||
|
||||
// RegisterFilters reads a directory and register filters from files within it
|
||||
func RegisterFilters(dir string) {
|
||||
files, err := ioutil.ReadDir(dir)
|
||||
|
@ -1 +1 @@
|
||||
POST https://cockpit.basiscms.de/api/collections/get/mark2webBlog?filter[published]=true&sort[date]=-1&limit=1&skip=1
|
||||
GET https://mark2web.basiscms.de/api/collections/get/mark2webBlog?filter[published]=true&sort[date]=-1&limit=1&skip=0
|
1
vendor/github.com/disintegration/imaging
generated
vendored
Submodule
1
vendor/github.com/disintegration/imaging
generated
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 5362c131d56305ce787e79a5b94ffc956df00d62
|
1
vendor/golang.org/x/image
generated
vendored
Submodule
1
vendor/golang.org/x/image
generated
vendored
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 0694c2d4d067f97ebef574d63a763ee8ab559da7
|
BIN
website/content/de/01_Navigation/02_Installation/bild.jpg
Normal file
BIN
website/content/de/01_Navigation/02_Installation/bild.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 790 KiB |
@ -24,7 +24,10 @@ hr { display:block; height:1px; border:0; border:none; padding:0;}
|
||||
input, select {vertical-align:middle;}
|
||||
input, select, textarea {-webkit-appearance: none; border-radius: 0;}
|
||||
.clear {clear:both; margin: 0; padding:0;}
|
||||
img {line-height:0;}
|
||||
img {
|
||||
line-height:0;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------
|
||||
# General Settings
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
<header id="header">
|
||||
<div class="container">
|
||||
<div class="logo"><img src="project-files/img/logo.png" alt=""></div>
|
||||
<div class="logo"><a href="{{ "/"|relative_path }}"><img src="project-files/img/logo.png" alt=""></a></div>
|
||||
<a id="pull">
|
||||
<span class="pull_button">
|
||||
<span></span>
|
||||
|
@ -10,6 +10,6 @@
|
||||
|
||||
{% block part1 %}
|
||||
{{ Body }}
|
||||
|
||||
<img src="{{ "https://mark2web.basiscms.de/"|add:Data.details.image.path }}">
|
||||
<a href="../" class="btn">« zurück</a>
|
||||
{% endblock part1 %}
|
||||
|
Loading…
Reference in New Issue
Block a user