From f4921b9daaf7c735da2833542fad426ca28bb09d Mon Sep 17 00:00:00 2001
From: wxiaoguang <wxiaoguang@gmail.com>
Date: Mon, 24 Jun 2024 01:45:21 +0800
Subject: [PATCH] Simplify 404/500 page (#31409)

---
 public/assets/img/404.png         | Bin 4516 -> 0 bytes
 public/assets/img/500.png         | Bin 5230 -> 0 bytes
 templates/status/404.tmpl         |  14 ++++++++++----
 templates/status/500.tmpl         |  23 ++++++++++++-----------
 tests/integration/compare_test.go |   5 +++--
 tests/integration/links_test.go   |   2 --
 web_src/css/base.css              |  14 ++++++++++++++
 7 files changed, 39 insertions(+), 19 deletions(-)
 delete mode 100644 public/assets/img/404.png
 delete mode 100644 public/assets/img/500.png

diff --git a/public/assets/img/404.png b/public/assets/img/404.png
deleted file mode 100644
index 8b66c971f462dcc37c6b3f33d4a9c35c68a8979d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4516
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

diff --git a/public/assets/img/500.png b/public/assets/img/500.png
deleted file mode 100644
index dab69206ad010c4f530df93baba88ab72bf5d1b4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5230
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

diff --git a/templates/status/404.tmpl b/templates/status/404.tmpl
index 78f149e67b..6cfc88a0d7 100644
--- a/templates/status/404.tmpl
+++ b/templates/status/404.tmpl
@@ -1,10 +1,16 @@
 {{template "base/head" .}}
 <div role="main" aria-label="{{.Title}}" class="page-content {{if .IsRepo}}repository{{end}}">
 	{{if .IsRepo}}{{template "repo/header" .}}{{end}}
-	<div class="ui container tw-text-center">
-		<img class="tw-max-w-[80vw] tw-py-16" src="{{AssetUrlPrefix}}/img/404.png" alt="404">
-		<p>{{if .NotFoundPrompt}}{{.NotFoundPrompt}}{{else}}{{ctx.Locale.Tr "error404"}}{{end}}</p>
-		{{if .NotFoundGoBackURL}}<a class="ui button" href="{{.NotFoundGoBackURL}}">{{ctx.Locale.Tr "go_back"}}</a>{{end}}
+	<div class="ui container">
+		<div class="status-page-error">
+			<div class="status-page-error-title">404 Not Found</div>
+			<div class="tw-text-center">
+				<div class="tw-my-4">{{if .NotFoundPrompt}}{{.NotFoundPrompt}}{{else}}{{ctx.Locale.Tr "error404"}}{{end}}</div>
+				{{if .NotFoundGoBackURL}}
+					<a class="tw-block tw-my-4" href="{{.NotFoundGoBackURL}}">{{ctx.Locale.Tr "go_back"}}</a>
+				{{end}}
+			</div>
+		</div>
 	</div>
 </div>
 {{template "base/footer" .}}
diff --git a/templates/status/500.tmpl b/templates/status/500.tmpl
index 566fddcec1..0e8d0f6593 100644
--- a/templates/status/500.tmpl
+++ b/templates/status/500.tmpl
@@ -33,17 +33,18 @@
 			<div class="ui container" >
 				<style> .ui.message.flash-message { text-align: left; } </style>
 				{{template "base/alert" .}}
-			</div>
-			<p class="tw-mt-8 center"><img src="{{AssetUrlPrefix}}/img/500.png" alt="Internal Server Error"></p>
-			<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 class="status-page-error">
+					<div class="status-page-error-title">500 Internal Server Error</div>
+					{{if .ErrorMsg}}
+					<div class="tw-mt-8">
+						<p>{{ctx.Locale.Tr "error.occurred"}}:</p>
+						<pre class="tw-whitespace-pre-wrap tw-break-all">{{.ErrorMsg}}</pre>
+					</div>
+					{{end}}
+					<div class="tw-mt-8 tw-text-center">
+						{{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>
diff --git a/tests/integration/compare_test.go b/tests/integration/compare_test.go
index 9f73ac80e2..d960416b3a 100644
--- a/tests/integration/compare_test.go
+++ b/tests/integration/compare_test.go
@@ -13,6 +13,7 @@ import (
 	"code.gitea.io/gitea/models/db"
 	"code.gitea.io/gitea/models/unittest"
 	user_model "code.gitea.io/gitea/models/user"
+	"code.gitea.io/gitea/modules/test"
 	repo_service "code.gitea.io/gitea/services/repository"
 	"code.gitea.io/gitea/tests"
 
@@ -30,9 +31,9 @@ func TestCompareTag(t *testing.T) {
 	// A dropdown for both base and head.
 	assert.Lenf(t, selection.Nodes, 2, "The template has changed")
 
-	req = NewRequest(t, "GET", "/user2/repo1/compare/invalid")
+	req = NewRequest(t, "GET", "/user2/repo1/compare/invalid").SetHeader("Accept", "text/html")
 	resp = session.MakeRequest(t, req, http.StatusNotFound)
-	assert.False(t, strings.Contains(resp.Body.String(), "/assets/img/500.png"), "expect 404 page not 500")
+	assert.True(t, test.IsNormalPageCompleted(resp.Body.String()), "expect 404 page not 500")
 }
 
 // Compare with inferred default branch (master)
diff --git a/tests/integration/links_test.go b/tests/integration/links_test.go
index d103e2b0a9..d3b30448fc 100644
--- a/tests/integration/links_test.go
+++ b/tests/integration/links_test.go
@@ -37,8 +37,6 @@ func TestLinksNoLogin(t *testing.T) {
 		"/user2/repo1/projects",
 		"/user2/repo1/projects/1",
 		"/user2/repo1/releases/tag/delete-tag", // It's the only one existing record on release.yml which has is_tag: true
-		"/assets/img/404.png",
-		"/assets/img/500.png",
 		"/.well-known/security.txt",
 	}
 
diff --git a/web_src/css/base.css b/web_src/css/base.css
index eef4eb6eff..223d9fbad6 100644
--- a/web_src/css/base.css
+++ b/web_src/css/base.css
@@ -477,6 +477,20 @@ img.ui.avatar,
   padding-bottom: 80px;
 }
 
+.status-page-error {
+  margin-top: max(45vh - 90px, 80px);
+  margin-bottom: 80px;
+}
+
+.status-page-error-title {
+  font-size: 48px;
+  margin-bottom: 14px; /* some elements below may use tw-my-4 or tw-my-8, so use 14px as a minimal margin */
+  line-height: initial;
+  text-align: center;
+  font-weight: var(--font-weight-bold);
+  color: var(--color-text-light-2);
+}
+
 /* add margin below .secondary nav when it is the first child */
 .page-content > :first-child.secondary-nav {
   margin-bottom: 14px;