From 3d92ad8eb9cc255f8153d40e5cbc6a0e9f8fc9eb Mon Sep 17 00:00:00 2001
From: silverwind <me@silverwind.io>
Date: Sun, 25 Sep 2022 16:01:05 +0200
Subject: [PATCH] Use native inputs in whitespace dropdown (#20980)

Use native `<input type="radio">` instead of fake icon font. The
`pointer-events: none` is necessary so the link click always takes
effect. Tested in Firefox, Safari and Chrome.

Before:
<img width="305" alt="Screen Shot 2022-08-27 at 20 42 11"
src="https://user-images.githubusercontent.com/115237/187044786-6655c766-c3fb-4672-9e3e-219b3ec4896c.png">

After:
<img width="298" alt="Screen Shot 2022-08-27 at 21 10 05"
src="https://user-images.githubusercontent.com/115237/187044790-33f87741-062e-4744-80b1-d3bd3fd725e3.png">
<img width="302" alt="image"
src="https://user-images.githubusercontent.com/115237/187044872-6c133cea-65ee-4ebd-b18a-a8b38c791565.png">
---
 templates/repo/diff/whitespace_dropdown.tmpl | 24 +++++++++++++-------
 web_src/less/helpers.less                    |  3 +++
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/templates/repo/diff/whitespace_dropdown.tmpl b/templates/repo/diff/whitespace_dropdown.tmpl
index 9df79dab7..47a5ab553 100644
--- a/templates/repo/diff/whitespace_dropdown.tmpl
+++ b/templates/repo/diff/whitespace_dropdown.tmpl
@@ -3,20 +3,28 @@
 	{{svg "octicon-triangle-down" 14 "dropdown icon"}}
 	<div class="menu">
 		<a class="item" href="?style={{if .IsSplitStyle}}split{{else}}unified{{end}}&whitespace=show-all">
-			<i class="circle {{if eq .WhitespaceBehavior "show-all"}}dot{{else}}outline{{end}} icon"></i>
-			{{.locale.Tr "repo.diff.whitespace_show_everything"}}
+			<label class="pointer-events-none">
+				<input class="mr-3 pointer-events-none" type="radio"{{if eq .WhitespaceBehavior "show-all"}} checked{{end}}>
+				{{.locale.Tr "repo.diff.whitespace_show_everything"}}
+			</label>
 		</a>
 		<a class="item" href="?style={{if .IsSplitStyle}}split{{else}}unified{{end}}&whitespace=ignore-all">
-			<i class="circle {{if eq .WhitespaceBehavior "ignore-all"}}dot{{else}}outline{{end}} icon"></i>
-			{{.locale.Tr "repo.diff.whitespace_ignore_all_whitespace"}}
+			<label class="pointer-events-none">
+				<input class="mr-3 pointer-events-none" type="radio"{{if eq .WhitespaceBehavior "ignore-all"}} checked{{end}}>
+				{{.locale.Tr "repo.diff.whitespace_ignore_all_whitespace"}}
+				<label>
 		</a>
 		<a class="item" href="?style={{if .IsSplitStyle}}split{{else}}unified{{end}}&whitespace=ignore-change">
-			<i class="circle {{if eq .WhitespaceBehavior "ignore-change"}}dot{{else}}outline{{end}} icon"></i>
-			{{.locale.Tr "repo.diff.whitespace_ignore_amount_changes"}}
+			<label class="pointer-events-none">
+				<input class="mr-3 pointer-events-none" type="radio"{{if eq .WhitespaceBehavior "ignore-change"}} checked{{end}}>
+				{{.locale.Tr "repo.diff.whitespace_ignore_amount_changes"}}
+			</label>
 		</a>
 		<a class="item" href="?style={{if .IsSplitStyle}}split{{else}}unified{{end}}&whitespace=ignore-eol">
-			<i class="circle {{if eq .WhitespaceBehavior "ignore-eol"}}dot{{else}}outline{{end}} icon"></i>
-			{{.locale.Tr "repo.diff.whitespace_ignore_at_eol"}}
+			<label class="pointer-events-none">
+				<input class="mr-3 pointer-events-none" type="radio"{{if eq .WhitespaceBehavior "ignore-eol"}} checked{{end}}>
+				{{.locale.Tr "repo.diff.whitespace_ignore_at_eol"}}
+			</label>
 		</a>
 	</div>
 </div>
diff --git a/web_src/less/helpers.less b/web_src/less/helpers.less
index 5510ee5b2..19477f7ec 100644
--- a/web_src/less/helpers.less
+++ b/web_src/less/helpers.less
@@ -19,6 +19,9 @@
 .h-100 { height: 100% !important; }
 .br-0 { border-radius: 0 !important; }
 
+/* below class names match Tailwind CSS */
+.pointer-events-none { pointer-events: none !important; }
+
 .mono {
   font-family: var(--fonts-monospace) !important;
   font-size: .9em !important; /* compensate for monospace fonts being usually slightly larger */