forked from Shiloh/githaven
e24f651c86
So I found this [linter](https://github.com/Riverside-Healthcare/djlint) which features a mode for go templates, so I gave it a try and it did find a number of valid issue, like unbalanced tags etc. It also has a number of bugs, I had to disable/workaround many issues. Given that this linter is written in python, this does add a dependency on `python` >= 3.8 and `poetry` to the development environment to be able to run this linter locally. - `e.g.` prefixes on placeholders are removed because the linter had a false-positive on `placeholder="e.g. cn=Search"` for the `attr=value` syntax and it's not ideal anyways to write `e.g.` into a placeholder because a placeholder is meant to hold a sample value. - In `templates/repo/settings/options.tmpl` I simplified the logic to not conditionally create opening tags without closing tags because this stuff confuses the linter (and possibly the reader as well).
63 lines
2.8 KiB
Handlebars
63 lines
2.8 KiB
Handlebars
{{/* This page should only depend the minimal template functions/variables, to avoid triggering new panics.
|
|
* base template functions: AppName, AssetUrlPrefix, AssetVersion, AppSubUrl, DefaultTheme, Str2html
|
|
* locale
|
|
* ErrorMsg
|
|
* SignedUser (optional)
|
|
*/}}
|
|
<!DOCTYPE html>
|
|
<html lang="{{.locale.Lang}}" class="theme-{{if .SignedUser.Theme}}{{.SignedUser.Theme}}{{else}}{{DefaultTheme}}{{end}}">
|
|
<head>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Internal Server Error - {{AppName}}</title>
|
|
<link rel="icon" href="{{AssetUrlPrefix}}/img/favicon.svg" type="image/svg+xml">
|
|
<link rel="alternate icon" href="{{AssetUrlPrefix}}/img/favicon.png" type="image/png">
|
|
{{template "base/head_style" .}}
|
|
</head>
|
|
<body>
|
|
<div class="full height">
|
|
<nav class="ui secondary menu gt-border-secondary-bottom">
|
|
<div class="ui container gt-df">
|
|
<div class="item gt-f1">
|
|
<a href="{{AppSubUrl}}/" aria-label="{{.locale.Tr "home"}}">
|
|
<img width="30" height="30" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{.locale.Tr "logo"}}" aria-hidden="true">
|
|
</a>
|
|
</div>
|
|
<div class="item">
|
|
<button class="ui icon button disabled">{{svg "octicon-three-bars"}}</button>{{/* a fake button to make the UI looks better*/}}
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
<div role="main" class="page-content status-page-500">
|
|
<p class="gt-mt-5 center"><img src="{{AssetUrlPrefix}}/img/500.png" alt="Internal Server Error"></p>
|
|
<div class="ui divider"></div>
|
|
<div class="ui container gt-my-5">
|
|
{{if .ErrorMsg}}
|
|
<p>{{.locale.Tr "error.occurred"}}:</p>
|
|
<pre class="gt-whitespace-pre-wrap gt-break-all">{{.ErrorMsg}}</pre>
|
|
{{end}}
|
|
<div class="center gt-mt-5">
|
|
{{if or .SignedUser.IsAdmin .ShowFooterVersion}}<p>{{.locale.Tr "admin.config.app_ver"}}: {{AppVer}}</p>{{end}}
|
|
{{if .SignedUser.IsAdmin}}<p>{{.locale.Tr "error.report_message" | Str2html}}</p>{{end}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{{/* When a sub-template triggers an 500 error, its parent template has been partially rendered, then the 500 page
|
|
will be rendered after that partially rendered page, the HTML/JS are totally broken. Use this inline script to try to move it to main viewport.
|
|
And this page shouldn't include any other JS file, avoid duplicate JS execution (still due to the partial rendering).*/}}
|
|
<script type="module">
|
|
const embedded = document.querySelector('.page-content .page-content.status-page-500');
|
|
if (embedded) {
|
|
// move the 500 error page content to main view
|
|
const embeddedParent = embedded.parentNode;
|
|
let main = document.querySelector('.page-content');
|
|
main = main ?? document.querySelector('body');
|
|
main.prepend(document.createElement('hr'));
|
|
main.prepend(embedded);
|
|
embeddedParent.remove(); // remove the unrelated 500-page elements (eg: the duplicate nav bar)
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|