forked from gitea/gitea
		
	 fb42972c05
			
		
	
	
		fb42972c05
		
			
		
	
	
	
	
		
			
			Str2html was abused a lot. So use a proper name for it: SanitizeHTML And add some tests to show its behavior.
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Handlebars
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Handlebars
		
	
	
	
	
	
| {{/* This page should only depend the minimal template functions/variables, to avoid triggering new panics.
 | |
| * base template functions: AppName, AssetUrlPrefix, AssetVersion, AppSubUrl, ThemeName, SanitizeHTML
 | |
| * 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>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="{{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 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>
 | |
| 			<p class="gt-mt-5 center"><img src="{{AssetUrlPrefix}}/img/500.png" alt="Internal Server Error"></p>
 | |
| 			<div class="divider"></div>
 | |
| 			<div class="ui container gt-my-5">
 | |
| 				{{if .ErrorMsg}}
 | |
| 					<p>{{ctx.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>{{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>
 |