diff options
author | Duco van Amstel <helcaraxan@gmail.com> | 2018-11-18 17:55:05 +0000 |
---|---|---|
committer | Wim <wim@42.be> | 2018-11-25 21:21:04 +0100 |
commit | 09875fe1603307080f3a4172985c5dca3bd9912d (patch) | |
tree | a23220772f6f6597d509ca71b2df3480a77b8076 /vendor/github.com/labstack/echo/middleware/static.go | |
parent | f716b8fc0ff90f47b61e218ef34019b38bd70e0d (diff) | |
download | matterbridge-msglm-09875fe1603307080f3a4172985c5dca3bd9912d.tar.gz matterbridge-msglm-09875fe1603307080f3a4172985c5dca3bd9912d.tar.bz2 matterbridge-msglm-09875fe1603307080f3a4172985c5dca3bd9912d.zip |
Update direct dependencies where possible
Diffstat (limited to 'vendor/github.com/labstack/echo/middleware/static.go')
-rw-r--r-- | vendor/github.com/labstack/echo/middleware/static.go | 119 |
1 files changed, 99 insertions, 20 deletions
diff --git a/vendor/github.com/labstack/echo/middleware/static.go b/vendor/github.com/labstack/echo/middleware/static.go index 7208c3a2..55485f34 100644 --- a/vendor/github.com/labstack/echo/middleware/static.go +++ b/vendor/github.com/labstack/echo/middleware/static.go @@ -2,13 +2,16 @@ package middleware import ( "fmt" + "html/template" "net/http" + "net/url" "os" "path" "path/filepath" "strings" "github.com/labstack/echo" + "github.com/labstack/gommon/bytes" ) type ( @@ -36,6 +39,78 @@ type ( } ) +const html = ` +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta http-equiv="X-UA-Compatible" content="ie=edge"> + <title>{{ .Name }}</title> + <style> + body { + font-family: Menlo, Consolas, monospace; + padding: 48px; + } + header { + padding: 4px 16px; + font-size: 24px; + } + ul { + list-style-type: none; + margin: 0; + padding: 20px 0 0 0; + display: flex; + flex-wrap: wrap; + } + li { + width: 300px; + padding: 16px; + } + li a { + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + text-decoration: none; + transition: opacity 0.25s; + } + li span { + color: #707070; + font-size: 12px; + } + li a:hover { + opacity: 0.50; + } + .dir { + color: #E91E63; + } + .file { + color: #673AB7; + } + </style> +</head> +<body> + <header> + {{ .Name }} + </header> + <ul> + {{ range .Files }} + <li> + {{ if .Dir }} + {{ $name := print .Name "/" }} + <a class="dir" href="{{ $name }}">{{ $name }}</a> + {{ else }} + <a class="file" href="{{ .Name }}">{{ .Name }}</a> + <span>{{ .Size }}</span> + {{ end }} + </li> + {{ end }} + </ul> +</body> +</html> +` + var ( // DefaultStaticConfig is the default Static middleware config. DefaultStaticConfig = StaticConfig{ @@ -66,6 +141,12 @@ func StaticWithConfig(config StaticConfig) echo.MiddlewareFunc { config.Index = DefaultStaticConfig.Index } + // Index template + t, err := template.New("index").Parse(html) + if err != nil { + panic(fmt.Sprintf("echo: %v", err)) + } + return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) (err error) { if config.Skipper(c) { @@ -76,7 +157,7 @@ func StaticWithConfig(config StaticConfig) echo.MiddlewareFunc { if strings.HasSuffix(c.Path(), "*") { // When serving from a group, e.g. `/static*`. p = c.Param("*") } - p, err = echo.PathUnescape(p) + p, err = url.PathUnescape(p) if err != nil { return } @@ -103,7 +184,7 @@ func StaticWithConfig(config StaticConfig) echo.MiddlewareFunc { if err != nil { if config.Browse { - return listDir(name, c.Response()) + return listDir(t, name, c.Response()) } if os.IsNotExist(err) { return next(c) @@ -119,32 +200,30 @@ func StaticWithConfig(config StaticConfig) echo.MiddlewareFunc { } } -func listDir(name string, res *echo.Response) (err error) { - dir, err := os.Open(name) +func listDir(t *template.Template, name string, res *echo.Response) (err error) { + file, err := os.Open(name) if err != nil { return } - dirs, err := dir.Readdir(-1) + files, err := file.Readdir(-1) if err != nil { return } - // Create a directory index + // Create directory index res.Header().Set(echo.HeaderContentType, echo.MIMETextHTMLCharsetUTF8) - if _, err = fmt.Fprintf(res, "<pre>\n"); err != nil { - return + data := struct { + Name string + Files []interface{} + }{ + Name: name, } - for _, d := range dirs { - name := d.Name() - color := "#212121" - if d.IsDir() { - color = "#e91e63" - name += "/" - } - if _, err = fmt.Fprintf(res, "<a href=\"%s\" style=\"color: %s;\">%s</a>\n", name, color, name); err != nil { - return - } + for _, f := range files { + data.Files = append(data.Files, struct { + Name string + Dir bool + Size string + }{f.Name(), f.IsDir(), bytes.Format(f.Size())}) } - _, err = fmt.Fprintf(res, "</pre>\n") - return + return t.Execute(res, data) } |