Skip to content

Commit e428943

Browse files
committed
update
1 parent 7d898d9 commit e428943

3 files changed

Lines changed: 24 additions & 4 deletions

File tree

context_x_base.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -476,14 +476,19 @@ func (c *XContext) DispatchPath() string {
476476
// URLGenerator
477477

478478
func (c *XContext) RelativeURL(uri string) string {
479-
return c.echo.uriAddLangCode(c, c.echo.MakeRelativeURL(uri, false))
479+
uri = AddExtension(c, uri)
480+
return c.echo.wrapURI(c, c.echo.MakeRelativeURL(uri, false), true)
480481
}
481482

482483
func (c *XContext) URLFor(uri string, relative ...bool) string {
483484
if len(relative) > 0 && relative[0] {
484485
return c.RelativeURL(uri)
485486
}
486-
return c.siteRoot() + c.echo.uriAddLangCode(c, c.echo.MakeRelativeURL(uri, false))
487+
if len(uri) == 0 {
488+
return c.Site()
489+
}
490+
uri = AddExtension(c, uri)
491+
return c.siteRoot() + c.echo.wrapURI(c, c.echo.MakeRelativeURL(uri, false), true)
487492
}
488493

489494
func (c *XContext) URLByName(name string, args ...interface{}) string {

echo.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -935,8 +935,10 @@ func (e *Echo) wrapURI(c Context, uri string, withoutExt bool) string {
935935
if e.rewriter != nil {
936936
uri = e.rewriter.Rewrite(uri)
937937
}
938-
if !withoutExt && len(e.defaultExtension) > 0 && !strings.HasSuffix(uri, e.defaultExtension) {
939-
uri += e.defaultExtension
938+
if !withoutExt {
939+
if extension := c.DefaultExtension(); len(extension) > 0 && !strings.HasSuffix(uri, extension) {
940+
uri += extension
941+
}
940942
}
941943
uri = e.uriAddLangCode(c, uri)
942944
return uri

helper.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,3 +362,16 @@ func ParseTemplateError(err error, sourceContent string) *PanicError {
362362
}
363363
return p
364364
}
365+
366+
// AddExtension adds the default extension to the URI if it does not already have it.
367+
func AddExtension(c Context, uri string) string {
368+
if len(uri) == 0 || strings.HasSuffix(uri, `/`) || len(c.DefaultExtension()) == 0 {
369+
return uri
370+
}
371+
parts := strings.SplitN(uri, `?`, 2)
372+
if !strings.HasSuffix(parts[0], c.DefaultExtension()) {
373+
parts[0] += c.DefaultExtension()
374+
uri = strings.Join(parts, `?`)
375+
}
376+
return uri
377+
}

0 commit comments

Comments
 (0)