URI: 
       Add absURL template func - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit be0cbeee7fb9b6e8af12745971ff80e86e0d3d32
   DIR parent bec90e085055ef96cbd6a17604cf1020c2c82f24
  HTML Author: bep <bjorn.erik.pedersen@gmail.com>
       Date:   Mon, 11 May 2015 12:28:44 +0200
       
       Add absURL template func
       
       Fixes #1106
       
       Diffstat:
         M helpers/url.go                      |      11 ++++++++++-
         M helpers/url_test.go                 |      23 +++++++++++++++++++++++
         M tpl/template_funcs.go               |       1 +
       
       3 files changed, 34 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/helpers/url.go b/helpers/url.go
       @@ -138,13 +138,22 @@ func MakePermalink(host, plink string) *url.URL {
                base.Path = path.Join(base.Path, p.Path)
        
                // path.Join will strip off the last /, so put it back if it was there.
       -        if strings.HasSuffix(p.Path, "/") && !strings.HasSuffix(base.Path, "/") {
       +        hadTrailingSlash := (plink == "" && strings.HasSuffix(host, "/")) || strings.HasSuffix(p.Path, "/")
       +        if hadTrailingSlash && !strings.HasSuffix(base.Path, "/") {
                        base.Path = base.Path + "/"
                }
        
                return base
        }
        
       +// AbsURL creates a absolute URL from the relative path given and the BaseURL set in config.
       +func AbsURL(path string) string {
       +        if strings.HasPrefix(path, "http") || strings.HasPrefix(path, "//") {
       +                return path
       +        }
       +        return MakePermalink(string(viper.GetString("BaseURL")), path).String()
       +}
       +
        // AddContextRoot adds the context root to an URL if it's not already set.
        // For relative URL entries on sites with a base url with a context root set (i.e. http://example.com/mysite),
        // relative URLs must not include the context root if canonifyURLs is enabled. But if it's disabled, it must be set.
   DIR diff --git a/helpers/url_test.go b/helpers/url_test.go
       @@ -1,6 +1,7 @@
        package helpers
        
        import (
       +        "github.com/spf13/viper"
                "github.com/stretchr/testify/assert"
                "strings"
                "testing"
       @@ -26,6 +27,28 @@ func TestURLize(t *testing.T) {
                }
        }
        
       +func TestAbsURL(t *testing.T) {
       +        tests := []struct {
       +                input    string
       +                baseURL  string
       +                expected string
       +        }{
       +                {"/test/foo", "http://base/", "http://base/test/foo"},
       +                {"", "http://base/ace/", "http://base/ace/"},
       +                {"/test/2/foo/", "http://base", "http://base/test/2/foo/"},
       +                {"http://abs", "http://base/", "http://abs"},
       +                {"//schemaless", "http://base/", "//schemaless"},
       +        }
       +
       +        for _, test := range tests {
       +                viper.Set("BaseURL", test.baseURL)
       +                output := AbsURL(test.input)
       +                if output != test.expected {
       +                        t.Errorf("Expected %#v, got %#v\n", test.expected, output)
       +                }
       +        }
       +}
       +
        func TestSanitizeURL(t *testing.T) {
                tests := []struct {
                        input    string
   DIR diff --git a/tpl/template_funcs.go b/tpl/template_funcs.go
       @@ -1196,6 +1196,7 @@ func init() {
                        "safeHTML":    SafeHTML,
                        "safeCSS":     SafeCSS,
                        "safeURL":     SafeURL,
       +                "absURL":      func(a string) template.HTML { return template.HTML(helpers.AbsURL(a)) },
                        "markdownify": Markdownify,
                        "first":       First,
                        "where":       Where,