@@ -105,9 +105,9 @@ func CheckCascadePattern(logger loggers.Logger, m PageMatcher) {
105105 }
106106}
107107
108- func DecodeCascadeConfig (logger loggers.Logger , handleLegacyFormat bool , in any ) (* config.ConfigNamespace [[]PageMatcherParamsConfig , * maps.Ordered [PageMatcher , maps. Params ]], error ) {
109- buildConfig := func (in any ) (* maps.Ordered [PageMatcher , maps. Params ], any , error ) {
110- cascade := maps .NewOrdered [PageMatcher , maps. Params ]()
108+ func DecodeCascadeConfig (logger loggers.Logger , handleLegacyFormat bool , in any ) (* config.ConfigNamespace [[]PageMatcherParamsConfig , * maps.Ordered [PageMatcher , PageMatcherParamsConfig ]], error ) {
109+ buildConfig := func (in any ) (* maps.Ordered [PageMatcher , PageMatcherParamsConfig ], any , error ) {
110+ cascade := maps .NewOrdered [PageMatcher , PageMatcherParamsConfig ]()
111111 if in == nil {
112112 return cascade , []map [string ]any {}, nil
113113 }
@@ -124,11 +124,7 @@ func DecodeCascadeConfig(logger loggers.Logger, handleLegacyFormat bool, in any)
124124 c PageMatcherParamsConfig
125125 err error
126126 )
127- if handleLegacyFormat {
128- c , err = mapToPageMatcherParamsConfigLegacy (m )
129- } else {
130- c , err = mapToPageMatcherParamsConfig (m )
131- }
127+ c , err = mapToPageMatcherParamsConfig (m )
132128 if err != nil {
133129 return nil , nil , err
134130 }
@@ -147,23 +143,28 @@ func DecodeCascadeConfig(logger loggers.Logger, handleLegacyFormat bool, in any)
147143 if found {
148144 // Merge
149145 for k , v := range cfg .Params {
150- if _ , found := c [k ]; ! found {
151- c [k ] = v
146+ if _ , found := c .Params [k ]; ! found {
147+ c .Params [k ] = v
148+ }
149+ }
150+ for k , v := range cfg .Fields {
151+ if _ , found := c .Fields [k ]; ! found {
152+ c .Fields [k ] = v
152153 }
153154 }
154155 } else {
155- cascade .Set (m , cfg . Params )
156+ cascade .Set (m , cfg )
156157 }
157158 }
158159
159160 return cascade , cfgs , nil
160161 }
161162
162- return config .DecodeNamespace [[]PageMatcherParamsConfig , * maps.Ordered [PageMatcher , maps. Params ]](in , buildConfig )
163+ return config .DecodeNamespace [[]PageMatcherParamsConfig , * maps.Ordered [PageMatcher , PageMatcherParamsConfig ]](in , buildConfig )
163164}
164165
165166// DecodeCascade decodes in which could be either a map or a slice of maps.
166- func DecodeCascade (logger loggers.Logger , handleLegacyFormat bool , in any ) (* maps.Ordered [PageMatcher , maps. Params ], error ) {
167+ func DecodeCascade (logger loggers.Logger , handleLegacyFormat bool , in any ) (* maps.Ordered [PageMatcher , PageMatcherParamsConfig ], error ) {
167168 conf , err := DecodeCascadeConfig (logger , handleLegacyFormat , in )
168169 if err != nil {
169170 return nil , err
@@ -181,47 +182,22 @@ func mapToPageMatcherParamsConfig(m map[string]any) (PageMatcherParamsConfig, er
181182 return pcfg , err
182183 }
183184 pcfg .Target = target
184- default :
185+ case "params" :
185186 if pcfg .Params == nil {
186187 pcfg .Params = make (maps.Params )
187188 }
188- pcfg .Params [k ] = v
189- }
190- }
191- return pcfg , pcfg .init ()
192- }
193-
194- func mapToPageMatcherParamsConfigLegacy (m map [string ]any ) (PageMatcherParamsConfig , error ) {
195- var pcfg PageMatcherParamsConfig
196- for k , v := range m {
197- switch strings .ToLower (k ) {
198- case "params" :
199- // We simplified the structure of the cascade config in Hugo 0.111.0.
200- // There is a small chance that someone has used the old structure with the params keyword,
201- // those values will now be moved to the top level.
202- // This should be very unlikely as it would lead to constructs like .Params.params.foo,
203- // and most people see params as an Hugo internal keyword.
204189 params := maps .ToStringMap (v )
205- if pcfg .Params == nil {
206- pcfg .Params = params
207- } else {
208- for k , v := range params {
209- if _ , found := pcfg .Params [k ]; ! found {
210- pcfg .Params [k ] = v
211- }
190+ for k , v := range params {
191+ if _ , found := pcfg .Params [k ]; ! found {
192+ pcfg .Params [k ] = v
212193 }
213194 }
214- case "_target" , "target" :
215- var target PageMatcher
216- if err := decodePageMatcher (v , & target ); err != nil {
217- return pcfg , err
218- }
219- pcfg .Target = target
220195 default :
221- if pcfg .Params == nil {
222- pcfg .Params = make (maps.Params )
196+ if pcfg .Fields == nil {
197+ pcfg .Fields = make (maps.Params )
223198 }
224- pcfg .Params [k ] = v
199+
200+ pcfg .Fields [k ] = v
225201 }
226202 }
227203 return pcfg , pcfg .init ()
@@ -250,10 +226,14 @@ func decodePageMatcher(m any, v *PageMatcher) error {
250226type PageMatcherParamsConfig struct {
251227 // Apply Params to all Pages matching Target.
252228 Params maps.Params
229+ // Fields holds all fields but Params.
230+ Fields maps.Params
231+ // Target is the PageMatcher that this config applies to.
253232 Target PageMatcher
254233}
255234
256235func (p * PageMatcherParamsConfig ) init () error {
257236 maps .PrepareParams (p .Params )
237+ maps .PrepareParams (p .Fields )
258238 return nil
259239}
0 commit comments