]> git.ipfire.org Git - thirdparty/git.git/commitdiff
gitweb: switch to an XHTML5 DOCTYPE
authorJason Yundt <jason@jasonyundt.email>
Thu, 2 Jun 2022 11:43:05 +0000 (07:43 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 2 Jun 2022 18:51:15 +0000 (11:51 -0700)
According to the HTML Standard FAQ:

“What is the DOCTYPE for modern HTML documents?

In text/html documents:

<!DOCTYPE html>

In documents delivered with an XML media type: no DOCTYPE is required
and its use is generally unnecessary. However, you may use one if you
want (see the following question). Note that the above is well-formed
XML.”

Source: [1]

Gitweb uses an XHTML 1.0 DOCTYPE:

<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

While that DOCTYPE is still valid [2], it has several disadvantages:

1. It’s misleading. If an XML parser uses the DTD at the given link,
   then the entities &nbsp; and &sdot; won’t get declared. Instead, the
   parser has to use a DTD from the HTML Standard that has nothing to do
   with XHTML 1.0 [2].
2. It’s obsolete. XHTML 1.0 was last revised in 2002 and was superseded in
   2018 [3].
3. It’s unreliable. Gitweb uses &nbsp; and &sdot; but lets an external file
   define them. “[…U]using entity references for characters in XML documents
   is unsafe if they are defined in an external file (except for &lt;, &gt;,
   &amp;, &quot;, and &apos;).” [4]

[1]: <https://github.com/whatwg/html/blob/main/FAQ.md#what-is-the-doctype-for-modern-html-documents>
[2]: <https://html.spec.whatwg.org/multipage/xhtml.html#parsing-xhtml-documents>
[3]: <https://www.w3.org/TR/xhtml1/#xhtml>
[4]: <https://html.spec.whatwg.org/multipage/xhtml.html#writing-xhtml-documents>

Signed-off-by: Jason Yundt <jason@jasonyundt.email>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
gitweb/gitweb.perl
t/t9502-gitweb-standalone-parse-output.sh

index 606b50104c6b9b3beda8a3029fcd30dd553508d9..1835487ab2aeed33a4aa3e6dbde84df7ae7e6d1b 100755 (executable)
@@ -4219,7 +4219,10 @@ sub git_header_html {
        my $mod_perl_version = $ENV{'MOD_PERL'} ? " $ENV{'MOD_PERL'}" : '';
        print <<EOF;
 <?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!DOCTYPE html [
+       <!ENTITY nbsp "&#xA0;">
+       <!ENTITY sdot "&#x22C5;">
+]>
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
 <!-- git web interface version $version, (C) 2005-2006, Kay Sievers <kay.sievers\@vrfy.org>, Christian Gierke -->
 <!-- git core binaries version $git_version -->
index 8cb582f0e610d407ec5ba560740606629e5bc9da..81d562555799bebe80b5cf36b1063e28d377ea8c 100755 (executable)
@@ -220,4 +220,18 @@ test_expect_success 'no http-equiv="content-type" in XHTML' '
        no_http_equiv_content_type "p=.git;a=tree"
 '
 
+proper_doctype() {
+       gitweb_run "$@" &&
+       grep -F "<!DOCTYPE html [" gitweb.body &&
+       grep "<!ENTITY nbsp" gitweb.body &&
+       grep "<!ENTITY sdot" gitweb.body
+}
+
+test_expect_success 'Proper DOCTYPE with entity declarations' '
+       proper_doctype &&
+       proper_doctype "p=.git" &&
+       proper_doctype "p=.git;a=log" &&
+       proper_doctype "p=.git;a=tree"
+'
+
 test_done