shithub: hugo

Download patch

ref: ad34be9d77f8abf948d36de4498e8955a02bbec6
parent: a6170154cf8b82243510682c73c55a75ff201805
author: spf13 <[email protected]>
date: Mon Apr 7 18:02:08 EDT 2014

strip trailing baseurl slash. Added a new template function "sanitizeurl" which ensures no double slashes. Fixed #221

--- a/helpers/url.go
+++ b/helpers/url.go
@@ -16,8 +16,18 @@
 import (
 	"net/url"
 	"path"
+
+	"github.com/PuerkitoBio/purell"
 )
 
+func SanitizeUrl(in string) string {
+	url, err := purell.NormalizeURLString(in, purell.FlagsUsuallySafeGreedy|purell.FlagRemoveDuplicateSlashes|purell.FlagRemoveUnnecessaryHostDots|purell.FlagRemoveEmptyPortSeparator)
+	if err != nil {
+		return in
+	}
+	return url
+}
+
 // Similar to MakePath, but with Unicode handling
 // Example:
 //     uri: Vim (text editor)
@@ -55,6 +65,7 @@
 }
 
 func UrlPrep(ugly bool, in string) string {
+	in = SanitizeUrl(in)
 	if ugly {
 		return Uglify(in)
 	} else {
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -227,7 +227,7 @@
 	}
 
 	s.Info = SiteInfo{
-		BaseUrl:    template.URL(viper.GetString("BaseUrl")),
+		BaseUrl:    template.URL(helpers.SanitizeUrl(viper.GetString("BaseUrl"))),
 		Title:      viper.GetString("Title"),
 		Recent:     &s.Pages,
 		Params:     params,
--- a/template/bundle/template.go
+++ b/template/bundle/template.go
@@ -2,8 +2,6 @@
 
 import (
 	"errors"
-	"github.com/eknkc/amber"
-	"github.com/spf13/hugo/helpers"
 	"html"
 	"html/template"
 	"io"
@@ -13,6 +11,9 @@
 	"reflect"
 	"strconv"
 	"strings"
+
+	"github.com/eknkc/amber"
+	"github.com/spf13/hugo/helpers"
 )
 
 func Gt(a interface{}, b interface{}) bool {
@@ -159,22 +160,23 @@
 	}
 
 	funcMap := template.FuncMap{
-		"urlize":    helpers.Urlize,
-		"gt":        Gt,
-		"isset":     IsSet,
-		"echoParam": ReturnWhenSet,
-		"safeHtml":  SafeHtml,
-		"first":     First,
-		"highlight": Highlight,
-		"add":       func(a, b int) int { return a + b },
-		"sub":       func(a, b int) int { return a - b },
-		"div":       func(a, b int) int { return a / b },
-		"mod":       func(a, b int) int { return a % b },
-		"mul":       func(a, b int) int { return a * b },
-		"modBool":   func(a, b int) bool { return a%b == 0 },
-		"lower":     func(a string) string { return strings.ToLower(a) },
-		"upper":     func(a string) string { return strings.ToUpper(a) },
-		"title":     func(a string) string { return strings.Title(a) },
+		"urlize":      helpers.Urlize,
+		"sanitizeurl": helpers.SanitizeUrl,
+		"gt":          Gt,
+		"isset":       IsSet,
+		"echoParam":   ReturnWhenSet,
+		"safeHtml":    SafeHtml,
+		"first":       First,
+		"highlight":   Highlight,
+		"add":         func(a, b int) int { return a + b },
+		"sub":         func(a, b int) int { return a - b },
+		"div":         func(a, b int) int { return a / b },
+		"mod":         func(a, b int) int { return a % b },
+		"mul":         func(a, b int) int { return a * b },
+		"modBool":     func(a, b int) bool { return a%b == 0 },
+		"lower":       func(a string) string { return strings.ToLower(a) },
+		"upper":       func(a string) string { return strings.ToUpper(a) },
+		"title":       func(a string) string { return strings.Title(a) },
 	}
 
 	templates.Funcs(funcMap)