diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-08-18 11:21:27 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-08-26 15:00:44 +0200 |
commit | f9978ed16476ca6d233a89669c62c798cdf9db9d (patch) | |
tree | 02edb31008b997a3e77055060a34971fe9e8c5a4 /resources/resource_transformers/htesting | |
parent | 58d4c0a8be8beefbd7437b17bf7a9a381164d09b (diff) |
Image resource refactor
This commit pulls most of the image related logic into its own package, to make it easier to reason about and extend.
This is also a rewrite of the transformation logic used in Hugo Pipes, mostly to allow constructs like the one below:
{{ ($myimg | fingerprint ).Width }}
Fixes #5903
Fixes #6234
Fixes #6266
Diffstat (limited to 'resources/resource_transformers/htesting')
-rw-r--r-- | resources/resource_transformers/htesting/testhelpers.go | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/resources/resource_transformers/htesting/testhelpers.go b/resources/resource_transformers/htesting/testhelpers.go new file mode 100644 index 000000000..eb664ed3a --- /dev/null +++ b/resources/resource_transformers/htesting/testhelpers.go @@ -0,0 +1,80 @@ +// 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 htesting + +import ( + "path/filepath" + + "github.com/gohugoio/hugo/cache/filecache" + "github.com/gohugoio/hugo/helpers" + "github.com/gohugoio/hugo/hugofs" + "github.com/gohugoio/hugo/media" + "github.com/gohugoio/hugo/output" + "github.com/gohugoio/hugo/resources" + "github.com/spf13/afero" + "github.com/spf13/viper" +) + +func NewTestResourceSpec() (*resources.Spec, error) { + cfg := viper.New() + cfg.Set("baseURL", "https://example.org") + cfg.Set("publishDir", "public") + + imagingCfg := map[string]interface{}{ + "resampleFilter": "linear", + "quality": 68, + "anchor": "left", + } + + cfg.Set("imaging", imagingCfg) + + fs := hugofs.NewMem(cfg) + + s, err := helpers.NewPathSpec(fs, cfg, nil) + if err != nil { + return nil, err + } + + filecaches, err := filecache.NewCaches(s) + if err != nil { + return nil, err + } + + spec, err := resources.NewSpec(s, filecaches, nil, output.DefaultFormats, media.DefaultTypes) + return spec, err +} + +func NewResourceTransformer(filename, content string) (resources.ResourceTransformer, error) { + spec, err := NewTestResourceSpec() + if err != nil { + return nil, err + } + return NewResourceTransformerForSpec(spec, filename, content) +} + +func NewResourceTransformerForSpec(spec *resources.Spec, filename, content string) (resources.ResourceTransformer, error) { + filename = filepath.FromSlash(filename) + + fs := spec.Fs.Source + if err := afero.WriteFile(fs, filename, []byte(content), 0777); err != nil { + return nil, err + } + + r, err := spec.New(resources.ResourceSourceDescriptor{Fs: fs, SourceFilename: filename}) + if err != nil { + return nil, err + } + + return r.(resources.ResourceTransformer), nil +} |