فهرست منبع

New path() template function, used in footer.

Frederic G. MARAND 5 سال پیش
والد
کامیت
d628cd1fc8

+ 1 - 2
go.mod

@@ -6,12 +6,11 @@ require (
 	github.com/gorilla/mux v1.6.2
 	github.com/gorilla/sessions v1.1.3
 	github.com/inconshreveable/mousetrap v1.0.0 // indirect
-	github.com/pmezard/go-difflib v1.0.0 // indirect
 	github.com/pressly/goose v2.4.3+incompatible
+	github.com/spf13/cast v1.3.0
 	github.com/spf13/cobra v0.0.3
 	github.com/spf13/pflag v1.0.3 // indirect
 	github.com/spf13/viper v1.2.1
-	github.com/stretchr/testify v1.2.2 // indirect
 	google.golang.org/appengine v1.3.0 // indirect
 	gopkg.in/yaml.v2 v2.2.1
 )

+ 2 - 0
go.sum

@@ -33,6 +33,8 @@ github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
 github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
 github.com/spf13/cast v1.2.0 h1:HHl1DSRbEQN2i8tJmtS6ViPyHx35+p51amrdsiTCrkg=
 github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
+github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=

+ 0 - 1
web/gorilla_imported.go

@@ -12,4 +12,3 @@ func mapToPairs(m map[string]string) []string {
 	}
 	return p
 }
-

+ 2 - 2
web/templates/201.gohtml

@@ -15,13 +15,13 @@
         <h1>Plus vite !</h1>
         <p>Vous pouvez dorénavant aller plus vite vers</p>
         <pre><a href="{{.FullyQualifiedTargetURL}}" class="url-source">{{.FullyQualifiedTargetURL}}</a></pre>
-        <p>en utilisant l'URL court déjà existant</p>
+        <p>en utilisant le nouvel URL court</p>
         <pre><a href="{{.FullyQualifiedShortURL}}">{{.FullyQualifiedShortURL}}</a></pre>
         <p>pour y faire référence.</p>
         <p><a href="{{.SiteBaseURL}}">Retour</a></p>
     </div>
 
-    {{template "footer"}}
+    {{template "footer" .}}
 </body>
 </html>
 {{end}}

+ 1 - 1
web/templates/403.gohtml

@@ -19,7 +19,7 @@
         <p><a href="{{.SiteBaseURL}}">Retour</a></p>
     </div>
 
-    {{template "footer"}}
+    {{template "footer" .}}
 </body>
 </html>
 {{end}}

+ 1 - 1
web/templates/404.gohtml

@@ -19,7 +19,7 @@
         <p><a href="{{.SiteBaseURL}}">Retour</a></p>
     </div>
 
-    {{template "footer"}}
+    {{template "footer" .}}
 </body>
 </html>
 {{end}}

+ 2 - 2
web/templates/409.gohtml

@@ -16,13 +16,13 @@
         {{template "flashes" .}}
         <p>Vous pouvez dorénavant aller plus vite vers</p>
         <pre><a href="{{.FullyQualifiedTargetURL}}" class="url-source">{{.FullyQualifiedTargetURL}}</a></pre>
-        <p>en utilisant le nouvel URL</p>
+        <p>en utilisant l'URL court déjà existant</p>
         <pre><a href="{{.FullyQualifiedShortURL}}">{{.FullyQualifiedShortURL}}</a></pre>
         <p>pour y faire référence.</p>
         <p><a href="{{.SiteBaseURL}}">Retour</a></p>
     </div>
 
-    {{template "footer"}}
+    {{template "footer" .}}
 </body>
 </html>
 {{end}}

+ 1 - 1
web/templates/451.gohtml

@@ -19,7 +19,7 @@
         <p><a href="{{.SiteBaseURL}}">Retour</a></p>
     </div>
 
-    {{template "footer"}}
+    {{template "footer" .}}
 </body>
 </html>
 {{end}}

+ 2 - 2
web/templates/home.gohtml

@@ -23,7 +23,7 @@
             <div id="form">
                 <div>
                     <label accesskey="U" for="form_url" class="required">L&#039;URL à transformer :</label>
-                    <input type="url" id="form_url" name="{{ .InputName }}" zrequired="required" placeholder="http://www.osinet.fr" size="60" maxlength="240" />
+                    <input type="url" id="form_url" name="{{ .InputName }}" required="required" placeholder="http://www.osinet.fr" size="60" maxlength="240" />
                 </div>
             </div>
             <input type="submit" name="{{ .SubmitName }}" value="Envoyer" />
@@ -52,7 +52,7 @@
         </div>
     </div>
 
-    {{template "footer"}}
+    {{template "footer" .}}
 </body>
 </html>
 {{end}}

+ 3 - 3
web/templates/layout/footer.gohtml

@@ -5,15 +5,15 @@
                 <td class="tdStats">&copy; 2003-2018
                     <a href="http://www.osinet.fr/">Ouest Systèmes Informatiques</a>
                     Tous droits réservés.<br />
-                    <a href="http://plusvite.net/">Plus Vite sur le Net</a> est un site Mediacore, soumis aux
+                    <a href="{{ path "kurz.web.get_root" }}">Plus Vite sur le Net</a> est un site Mediacore, soumis aux
                     <a href="http://www.osinet.fr/osi/orders.htm">conditions d'utilisation OSInet</a>
                     et réservée à un usage individuel.<br />
                     Toute soumission ou interrogation en masse est interdite et pourra donner lieu à des poursuites légales.
                     <!-- Version du 11/28/18 -->
                 </td>
                 <td class="tdStats invisible">
-                    <a href="http://validator.w3.org/check/referer"><img src="http://plusvite-cdn.osinet.eu/images/valid-xhtml10.gif?v=1" alt="Valid XHTML 1.0!" width="88" height="31" /></a>
-                    <a href="http://jigsaw.w3.org/css-validator/check/referer?warning=0"><img src="http://plusvite-cdn.osinet.eu/images/vcss.gif?v=1" alt="Valid CSS1!" width="88" height="31" /></a>
+                    <a href="http://validator.w3.org/check/referer"><img src="{{ asset "images" "valid-xhtml10.gif"}}" alt="Valid XHTML 1.0!" width="88" height="31" /></a>
+                    <a href="http://jigsaw.w3.org/css-validator/check/referer?warning=0"><img src="{{ asset "images" "vcss.gif"}}" alt="Valid CSS1!" width="88" height="31" /></a>
                 </td>
                 <td class="tdStats">
                     <a href="http://ac.audean.com/sc.php" title="Compteur Audean"><img src="http://ac.audean.com/pc.php" alt="Compteur Audean" style="border-bottom: solid silver 1px" /></a>

+ 30 - 7
web/web.go

@@ -21,6 +21,7 @@ import (
 
 	"github.com/gorilla/mux"
 	"github.com/gorilla/sessions"
+	"github.com/spf13/cast"
 )
 
 // Route names.
@@ -53,6 +54,7 @@ type Globals struct {
 }
 
 var globals Globals
+var router mux.Router
 var store *sessions.CookieStore
 var tmpl *template.Template
 
@@ -77,21 +79,22 @@ func setupAssetRoutes(configAssetsPath string, router *mux.Router) {
 	}
 }
 
-func setupControllerRoutes(router *mux.Router) {
+func setupControllerRoutes(gmux *mux.Router) {
+	router = *gmux
 	// BUG(fgm): improve Accept header matchers once https://github.com/golang/go/issues/19307 is completed.
-	router.HandleFunc("/{short}", func(w http.ResponseWriter, r *http.Request) {
-		handleGetShort(w, r, router)
+	gmux.HandleFunc("/{short}", func(w http.ResponseWriter, r *http.Request) {
+		handleGetShort(w, r, gmux)
 	}).
 		Methods("GET", "HEAD").
 		Name(RouteGetShort)
-	router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
-		handlePostTarget(w, r, router)
+	gmux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
+		handlePostTarget(w, r, gmux)
 	}).
 		HeadersRegexp("Accept", HtmlTypeRegex).
 		Headers("Content-Type", HtmlFormType).
 		Methods("POST").
 		Name(RoutePostTarget)
-	router.HandleFunc("/", handleGetRoot).
+	gmux.HandleFunc("/", handleGetRoot).
 		Methods("GET", "HEAD").
 		Name(RouteGetRoot)
 }
@@ -101,6 +104,7 @@ func setupTemplates(configAssetsPath string) {
 	layout := base + "/layout"
 	funcMap := template.FuncMap{
 		"asset": URLForAsset,
+		"path":  urlFromRouteVariadic,
 	}
 	tmpl = template.Must(template.New("kurz").
 		Funcs(funcMap).
@@ -158,8 +162,27 @@ func URLFromRoute(router *mux.Router, name string, params map[string]string) (st
 	return fqsu, nil
 }
 
+func urlFromRouteVariadic(name string, paramPairs ...interface{}) (string, error) {
+	if len(paramPairs)%2 != 0 {
+		return "", errors.New("needs an even number of arguments")
+	}
+	var params = make(map[string]string, len(paramPairs)/2)
+	var k string
+	for i, r := range paramPairs {
+		if i%2 == 0 {
+			// If i is even, this is the key for the next value.
+			k = r.(string)
+		} else {
+			// Else it is a value, so store it with the key we just got previously.
+			params[k] = cast.ToString(r)
+		}
+	}
+
+	return URLFromRoute(&router, name, params)
+}
+
 /*
-URLFromRoute generates absolute URLs for assets.
+URLForAsset generates absolute URLs for assets.
 
 To build URLs for routes, use URLFromRoute().