summaryrefslogtreecommitdiffstats
path: root/templates/status/500.tmpl
diff options
context:
space:
mode:
Diffstat (limited to 'templates/status/500.tmpl')
-rw-r--r--templates/status/500.tmpl71
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>