|
|
|
|
@ -1,6 +1,7 @@ |
|
|
|
|
package models |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"encoding/base64" |
|
|
|
|
"errors" |
|
|
|
|
"fmt" |
|
|
|
|
"strings" |
|
|
|
|
@ -189,7 +190,18 @@ func (dash *Dashboard) UpdateSlug() { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func SlugifyTitle(title string) string { |
|
|
|
|
return slug.Make(strings.ToLower(title)) |
|
|
|
|
s := slug.Make(strings.ToLower(title)) |
|
|
|
|
if s == "" { |
|
|
|
|
// If the dashboard name is only characters outside of the
|
|
|
|
|
// sluggable characters, the slug creation will return an
|
|
|
|
|
// empty string which will mess up URLs. This failsafe picks
|
|
|
|
|
// that up and creates the slug as a base64 identifier instead.
|
|
|
|
|
s = base64.RawURLEncoding.EncodeToString([]byte(title)) |
|
|
|
|
if slug.MaxLength != 0 && len(s) > slug.MaxLength { |
|
|
|
|
s = s[:slug.MaxLength] |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return s |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// GetUrl return the html url for a folder if it's folder, otherwise for a dashboard
|
|
|
|
|
|