12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package template
- import (
- "fmt"
- "strings"
- )
- type PartialURL struct {
- Path string
- Query map[string]string
- }
- func LowercaseFirstChar(s string) string {
- return strings.ToLower(s[0:1]) + s[1:]
- }
- // Turn `url` into /path?other_key=other_value&`key`=
- func UnfinishedQuery(url PartialURL, key string) string {
- result := fmt.Sprintf("/%s", url.Path)
- first_query_pair := true
- for k, v := range url.Query {
- k = LowercaseFirstChar(k)
- if k == key {
- continue
- }
- if v == "" {
- // If the value is empty, ignore to not clutter the URL
- continue
- }
- if first_query_pair {
- result += "?"
- first_query_pair = false
- } else {
- result += "&"
- }
- result += fmt.Sprintf("%s=%s", k, v)
- }
- // This is to move the matched query to the end of the URL
- var t string
- if first_query_pair {
- t = "?"
- } else {
- t = "&"
- }
- result += fmt.Sprintf("%s%s=", t, key)
- return result
- }
- func ReplaceQuery(url PartialURL, key string, value string) string {
- return UnfinishedQuery(url, key) + value
- }
|