diff options
Diffstat (limited to 'templates/status/500.tmpl')
-rw-r--r-- | templates/status/500.tmpl | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/templates/status/500.tmpl b/templates/status/500.tmpl new file mode 100644 index 00000000..e5fdaec0 --- /dev/null +++ b/templates/status/500.tmpl @@ -0,0 +1,71 @@ +{{/* This page should only depend the minimal template functions/variables, to avoid triggering new panics. +* base template functions: AppName, AssetUrlPrefix, AssetVersion, AppSubUrl, ThemeName +* ctx.Locale +* .Flash +* .ErrorMsg +* .SignedUser (optional) +*/}} +<!DOCTYPE html> +<html lang="{{ctx.Locale.Lang}}" data-theme="{{ThemeName .SignedUser}}"> +<head> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>{{ctx.Locale.Tr "error.server_internal"}} - {{AppDisplayName}}</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"> + <div class="ui container tw-flex"> + <div class="item tw-flex-1"> + <a href="{{AppSubUrl}}/" aria-label="{{ctx.Locale.Tr "home"}}"> + <img width="30" height="30" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{ctx.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 class="divider tw-my-0"></div> + <div role="main" class="page-content status-page-500"> + <div class="ui container" > + <style> .ui.message.flash-message { text-align: left; } </style> + {{template "base/alert" .}} + </div> + <div class="ui container center"> + <h1 class="tw-mt-8 error-code">500</h1> + <p>{{ctx.Locale.Tr "error.server_internal"}}</p> + </div> + <div class="divider"></div> + <div class="ui container tw-my-8"> + {{if .ErrorMsg}} + <p>{{ctx.Locale.Tr "error.occurred"}}:</p> + <pre class="tw-whitespace-pre-wrap tw-break-all">{{.ErrorMsg}}</pre> + {{end}} + <div class="center tw-mt-8"> + {{if or .SignedUser.IsAdmin .ShowFooterVersion}}<p>{{ctx.Locale.Tr "admin.config.app_ver"}}: {{AppVer}}</p>{{end}} + {{if .SignedUser.IsAdmin}}<p>{{ctx.Locale.Tr "error.report_message"}}</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> |