diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-10-03 14:58:09 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-10-16 22:10:56 +0200 |
commit | 35fbfb19a173b01bc881f2bbc5d104136633a7ec (patch) | |
tree | 636d0d51fa262dc808eb3c5cc9cf92ad977a0c6a /commands/server_errors.go | |
parent | 3a3089121b852332b5744d1f566959c8cf93cef4 (diff) | |
download | hugo-35fbfb19a173b01bc881f2bbc5d104136633a7ec.tar.gz hugo-35fbfb19a173b01bc881f2bbc5d104136633a7ec.zip |
commands: Show server error info in browser
The main item in this commit is showing of errors with a file context when running `hugo server`.
This can be turned off: `hugo server --disableBrowserError` (can also be set in `config.toml`).
But to get there, the error handling in Hugo needed a revision. There are some items left TODO for commits soon to follow, most notable errors in content and config files.
Fixes #5284
Fixes #5290
See #5325
See #5324
Diffstat (limited to 'commands/server_errors.go')
-rw-r--r-- | commands/server_errors.go | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/commands/server_errors.go b/commands/server_errors.go new file mode 100644 index 000000000..1a469dac8 --- /dev/null +++ b/commands/server_errors.go @@ -0,0 +1,95 @@ +// Copyright 2018 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package commands + +import ( + "bytes" + "io" + + "github.com/gohugoio/hugo/transform" + "github.com/gohugoio/hugo/transform/livereloadinject" +) + +var buildErrorTemplate = `<!doctype html> +<html class="no-js" lang=""> + <head> + <meta charset="utf-8"> + <title>Hugo Server: Error</title> + <style type="text/css"> + body { + font-family: "Muli",avenir, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; + background-color: black; + color: rgba(255, 255, 255, 0.9); + } + main { + margin: auto; + width: 95%; + padding: 1rem; + } + .version { + color: #ccc; + padding: 1rem 0; + } + .stack { + margin-top: 6rem; + } + pre { + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word; + } + .highlight { + overflow-x: scroll; + padding: 0.75rem; + margin-bottom: 1rem; + background-color: #272822; + border: 1px solid black; + } + a { + color: #0594cb; + text-decoration: none; + } + a:hover { + color: #ccc; + } + </style> + </head> + <body> + <main> + {{ highlight .Error "apl" "noclasses=true,style=monokai" }} + {{ with .File }} + {{ $params := printf "noclasses=true,style=monokai,linenos=table,hl_lines=%d,linenostart=%d" (add .Pos 1) .LineNumber }} + {{ $lexer := .ChromaLexer | default "go-html-template" }} + {{ highlight (delimit .Lines "\n") $lexer $params }} + {{ end }} + {{ with .StackTrace }} + {{ highlight . "apl" "noclasses=true,style=monokai" }} + {{ end }} + <p class="version">{{ .Version }}</p> + <a href="">Reload Page</a> + </main> +</body> +</html> +` + +func injectLiveReloadScript(src io.Reader, port int) string { + var b bytes.Buffer + chain := transform.Chain{livereloadinject.New(port)} + chain.Apply(&b, src) + + return b.String() +} |