func (con App) Handler(c context.Context) http.Handler { cfg := readeef.GetConfig(c) rnd := webfw.GetRenderer(c) if cfg.Logger.Level == "debug" { rnd.SkipCache(true) } return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { action := webfw.GetMultiPatternIdentifier(c, r) data := renderer.RenderData{} if action == "history" { params := webfw.GetParams(c, r) data["history"] = "/web/" + params["history"] } if r.Method != "HEAD" { err := rnd.Render(w, data, c.GetAll(r), "app.tmpl") if err != nil { webfw.GetLogger(c).Print(err) } } w.Header().Set("X-Readeef", "1") }) }
func (con App) Handler(c context.Context) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { rnd := webfw.GetRenderer(c) err := rnd.Render(w, nil, c.GetAll(r), "app.tmpl") if err != nil { webfw.GetLogger(c).Print(err) } } }
func (con App) Handler(c context.Context) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { rnd := webfw.GetRenderer(c) action := webfw.GetMultiPatternIdentifier(c, r) data := renderer.RenderData{} if action == "history" { params := webfw.GetParams(c, r) data["history"] = "/web/" + params["history"] } err := rnd.Render(w, data, c.GetAll(r), "app.tmpl") if err != nil { webfw.GetLogger(c).Print(err) } }) }
func (mw Url) Handler(ph http.Handler, c context.Context) http.Handler { renderer := webfw.GetRenderer(c) renderer.Funcs(mw.TemplateFuncMap(c)) return ph }
func (imw I18N) Handler(ph http.Handler, c context.Context) http.Handler { for _, l := range imw.Languages { file, err := fs.DefaultFS.OpenRoot(imw.Dir, l+".all.json") if err == nil { var b []byte if b, err = ioutil.ReadAll(file); err == nil { err = i18n.ParseTranslationFileBytes(l+".all.json", b) } } if err != nil { panic(fmt.Sprintf("Error opening locale file '%s.all.json': %v\n", l, err)) } } renderer := webfw.GetRenderer(c) renderer.Funcs(imw.TemplateFuncMap()) handler := func(w http.ResponseWriter, r *http.Request) { c.Set(r, context.BaseCtxKey("langs"), imw.Languages) if len(imw.Languages) == 0 { c.Set(r, context.BaseCtxKey("lang"), "") ph.ServeHTTP(w, r) return } found := false uriParts := strings.SplitN(r.RequestURI, "?", 2) if uriParts[0] == "" { uriParts[0] = r.URL.Path } for _, prefix := range imw.IgnoreURLPrefix { if prefix[0] == '/' { prefix = prefix[1:] } if strings.HasPrefix(uriParts[0], imw.Pattern+prefix+"/") { found = true break } if uriParts[0] == imw.Pattern+prefix { found = true break } } if !found { for _, language := range imw.Languages { if uriParts[0] == imw.Pattern+language { url := uriParts[0] + "/" if len(uriParts) > 1 && uriParts[1] != "" { url += "?" + uriParts[1] } http.Redirect(w, r, url, http.StatusFound) return } if strings.HasPrefix(uriParts[0], imw.Pattern+language+"/") { r.URL.Path = imw.Pattern + r.URL.Path[len(imw.Pattern+language+"/"):] uriParts[0] = imw.Pattern + uriParts[0][len(imw.Pattern+language+"/"):] r.RequestURI = strings.Join(uriParts, "?") c.Set(r, context.BaseCtxKey("lang"), language) found = true s := webfw.GetSession(c, r) s.Set("language", language) break } } } if !found { fallback := webfw.GetFallbackLanguage(c, r, imw.FallbackLanguage) index := strings.Index(fallback, "-") short := fallback if index > -1 { short = fallback[:index] } foundShort := false for _, language := range imw.Languages { if language == fallback { found = true break } if language == short { foundShort = true } } var language string if found { language = fallback } else if foundShort { language = short } else { language = imw.FallbackLanguage } url := imw.Pattern + language + uriParts[0][len(imw.Pattern)-1:] if len(uriParts) > 1 && uriParts[1] != "" { url += "?" + uriParts[1] } http.Redirect(w, r, url, http.StatusFound) return } ph.ServeHTTP(w, r) } return http.HandlerFunc(handler) }