@@ -112,27 +112,28 @@ func NewSpec(s *helpers.PathSpec, mimeTypes media.Types) (*Spec, error) {
112112}
113113
114114func (r * Spec ) NewResourceFromFile (
115- linker func (base string ) string ,
115+ targetPathBuilder func (base string ) string ,
116116 absPublishDir string ,
117117 file source.File , relTargetFilename string ) (Resource , error ) {
118118
119- return r .newResource (linker , absPublishDir , file .Filename (), file .FileInfo (), relTargetFilename )
119+ return r .newResource (targetPathBuilder , absPublishDir , file .Filename (), file .FileInfo (), relTargetFilename )
120120}
121121
122+ // p.s.PathSpec.URLizeFilename
122123func (r * Spec ) NewResourceFromFilename (
123- linker func (base string ) string ,
124+ targetPathBuilder func (base string ) string ,
124125 absPublishDir ,
125126 absSourceFilename , relTargetFilename string ) (Resource , error ) {
126127
127128 fi , err := r .Fs .Source .Stat (absSourceFilename )
128129 if err != nil {
129130 return nil , err
130131 }
131- return r .newResource (linker , absPublishDir , absSourceFilename , fi , relTargetFilename )
132+ return r .newResource (targetPathBuilder , absPublishDir , absSourceFilename , fi , relTargetFilename )
132133}
133134
134135func (r * Spec ) newResource (
135- linker func (base string ) string ,
136+ targetPathBuilder func (base string ) string ,
136137 absPublishDir ,
137138 absSourceFilename string , fi os.FileInfo , relTargetFilename string ) (Resource , error ) {
138139
@@ -150,7 +151,7 @@ func (r *Spec) newResource(
150151 }
151152 }
152153
153- gr := r .newGenericResource (linker , fi , absPublishDir , absSourceFilename , filepath .ToSlash (relTargetFilename ), mimeType )
154+ gr := r .newGenericResource (targetPathBuilder , fi , absPublishDir , absSourceFilename , filepath .ToSlash (relTargetFilename ), mimeType )
154155
155156 if mimeType == "image" {
156157 f , err := r .Fs .Source .Open (absSourceFilename )
@@ -203,7 +204,7 @@ func (r *Spec) CacheStats() string {
203204// genericResource represents a generic linkable resource.
204205type genericResource struct {
205206 // The relative path to this resource.
206- rel string
207+ relTargetPath string
207208
208209 // Base is set when the output format's path has a offset, e.g. for AMP.
209210 base string
@@ -214,16 +215,16 @@ type genericResource struct {
214215 resourceType string
215216 osFileInfo os.FileInfo
216217
217- spec * Spec
218- link func (rel string ) string
218+ spec * Spec
219+ targetPathBuilder func (rel string ) string
219220}
220221
221222func (l * genericResource ) Permalink () string {
222- return l .spec .PermalinkForBaseURL (l .relPermalinkForRel (l .rel , false ), l .spec .BaseURL .String ())
223+ return l .spec .PermalinkForBaseURL (l .relPermalinkForRel (l .relTargetPath , false ), l .spec .BaseURL .String ())
223224}
224225
225226func (l * genericResource ) RelPermalink () string {
226- return l .relPermalinkForRel (l .rel , true )
227+ return l .relPermalinkForRel (l .relTargetPath , true )
227228}
228229
229230// Implement the Cloner interface.
@@ -233,8 +234,12 @@ func (l genericResource) WithNewBase(base string) Resource {
233234}
234235
235236func (l * genericResource ) relPermalinkForRel (rel string , addBasePath bool ) string {
236- if l .link != nil {
237- rel = l .link (rel )
237+ return l .spec .PathSpec .URLizeFilename (l .relTargetPathForRel (rel , addBasePath ))
238+ }
239+
240+ func (l * genericResource ) relTargetPathForRel (rel string , addBasePath bool ) string {
241+ if l .targetPathBuilder != nil {
242+ rel = l .targetPathBuilder (rel )
238243 }
239244
240245 if l .base != "" {
@@ -249,7 +254,7 @@ func (l *genericResource) relPermalinkForRel(rel string, addBasePath bool) strin
249254 rel = "/" + rel
250255 }
251256
252- return l . spec . PathSpec . URLizeFilename ( rel )
257+ return rel
253258}
254259
255260func (l * genericResource ) ResourceType () string {
@@ -273,27 +278,27 @@ func (l *genericResource) Publish() error {
273278}
274279
275280func (l * genericResource ) target () string {
276- target := l .relPermalinkForRel (l .rel , false )
281+ target := l .relTargetPathForRel (l .relTargetPath , false )
277282 if l .spec .PathSpec .Languages .IsMultihost () {
278283 target = path .Join (l .spec .PathSpec .Language .Lang , target )
279284 }
280285 return target
281286}
282287
283288func (r * Spec ) newGenericResource (
284- linker func (base string ) string ,
289+ targetPathBuilder func (base string ) string ,
285290 osFileInfo os.FileInfo ,
286291 absPublishDir ,
287292 absSourceFilename ,
288293 baseFilename ,
289294 resourceType string ) * genericResource {
290295
291296 return & genericResource {
292- link : linker ,
297+ targetPathBuilder : targetPathBuilder ,
293298 osFileInfo : osFileInfo ,
294299 absPublishDir : absPublishDir ,
295300 absSourceFilename : absSourceFilename ,
296- rel : baseFilename ,
301+ relTargetPath : baseFilename ,
297302 resourceType : resourceType ,
298303 spec : r ,
299304 }
0 commit comments