client_extended.go (1850B)
1 // Copyright 2018 The Hugo Authors. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13
14 //go:build extended
15 // +build extended
16
17 package scss
18
19 import (
20 "github.com/bep/golibsass/libsass"
21 "github.com/gohugoio/hugo/resources"
22 "github.com/gohugoio/hugo/resources/internal"
23 "github.com/gohugoio/hugo/resources/resource"
24 )
25
26 type options struct {
27 // The options we receive from the end user.
28 from Options
29
30 // The options we send to the SCSS library.
31 to libsass.Options
32 }
33
34 func (c *Client) ToCSS(res resources.ResourceTransformer, opts Options) (resource.Resource, error) {
35 internalOptions := options{
36 from: opts,
37 }
38
39 // Transfer values from client.
40 internalOptions.to.Precision = opts.Precision
41 internalOptions.to.OutputStyle = libsass.ParseOutputStyle(opts.OutputStyle)
42
43 if internalOptions.to.Precision == 0 {
44 // bootstrap-sass requires 8 digits precision. The libsass default is 5.
45 // https://github.com/twbs/bootstrap-sass/blob/master/README.md#sass-number-precision
46 internalOptions.to.Precision = 8
47 }
48
49 return res.Transform(&toCSSTransformation{c: c, options: internalOptions})
50
51 }
52
53 type toCSSTransformation struct {
54 c *Client
55 options options
56 }
57
58 func (t *toCSSTransformation) Key() internal.ResourceTransformationKey {
59 return internal.NewResourceTransformationKey(transformationName, t.options.from)
60 }