This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/comdev-people.git


The following commit(s) were added to refs/heads/main by this push:
     new ea6ffd7  HTML validator fixups
ea6ffd7 is described below

commit ea6ffd732de640b5bee225e96ac5f56a5e1df279
Author: Sebb <[email protected]>
AuthorDate: Sun Nov 30 15:31:03 2025 +0000

    HTML validator fixups
---
 html/foaf/foafamatic.html       |  4 +-
 html/foaf/index.html            |  8 ++--
 html/index.html                 | 12 +++---
 html/js/phonebook.js            | 84 ++++++++++++++++++++---------------------
 html/keys/index.html            | 23 +++++------
 html/phonebook-about.html       | 16 ++++----
 html/phonebook.html             | 16 ++++----
 html/unlistedclas.html          |  2 +-
 tools/committer-index.ezt       | 11 +++---
 tools/committers-by-project.ezt |  7 ++--
 tools/committers.py             |  2 +-
 tools/pgp.py                    |  3 +-
 12 files changed, 96 insertions(+), 92 deletions(-)

diff --git a/html/foaf/foafamatic.html b/html/foaf/foafamatic.html
index a6d76d0..ba0cc55 100644
--- a/html/foaf/foafamatic.html
+++ b/html/foaf/foafamatic.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-<html>
+<html lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Foaf-A-Matic - Generate your Apache FOAF file</title>
@@ -90,7 +90,7 @@
 <div id="content">
  <div id="title">
   <a href="http://www.apache.org";>
-   <img alt="ASF Logo" title="ASF Logo" src="../img/asf_logo_small.png"/>
+   <img alt="ASF Logo" title="ASF Logo" src="../img/asf_logo_small.png">
   </a>
   <h1 id="top">Foaf-A-Matic - Generate your Apache FOAF file</h1>
  </div>
diff --git a/html/foaf/index.html b/html/foaf/index.html
index d81bc27..a1a0e88 100644
--- a/html/foaf/index.html
+++ b/html/foaf/index.html
@@ -1,16 +1,16 @@
 <?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";>
-<html xmlns="http://www.w3.org/1999/xhtml";>
+<html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
   <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
     <title>Manage your public details with FOAF files</title>
-    <link rel="stylesheet" type="text/css" href="../css/community.css" />
+    <link rel="stylesheet" type="text/css" href="../css/community.css" >
   </head>
   <body>
     <div id="content">
       <div id="title">
         <a href="http://www.apache.org";>
-          <img alt="ASF Logo" title="ASF Logo" 
src="../img/asf_logo_small.png"/>
+          <img alt="ASF Logo" title="ASF Logo" src="../img/asf_logo_small.png">
         </a>
         <h1 id="top">Managing Your Public Details with FOAF</h1>
       </div>
diff --git a/html/index.html b/html/index.html
index f19e319..29600bb 100644
--- a/html/index.html
+++ b/html/index.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml";>
+<html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
   <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
     <title>people.apache.org</title>
     <style>
   * {
@@ -185,11 +185,11 @@
     </style>
   </head>
   <body>
-    <img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='text-align:center;'/><br/>
+    <img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='text-align:center;'><br>
     <h2>Welcome to people.apache.org</h2>
     <p style='text-align: center;'>We're working on a new front page for this 
machine, stay tuned!</p>
     <p>In the meantime, you can check out:</p>
-    <br/>
+    <br>
     <ul>
     <li><a href="phonebook.html">Apache Phone Book</a></li>
     <li>Whimsy tool to <a 
href="https://whimsy.apache.org/officers/unlistedclas.cgi";>check if a CLA has 
been recorded. (officers and members only)</a></li>
@@ -205,8 +205,8 @@
 <div id="footer">
   Managed by the <a href="http://community.apache.org/";>Apache Community 
Development Project</a>.
   Here is the <a href="https://github.com/apache/comdev-people";>code</a>.
-  <br/>
-  Copyright&copy; 2024, the Apache Software Foundation. Licensed under the <a 
rel="license" href="http://www.apache.org/licenses/LICENSE-2.0";>Apache License, 
Version 2.0</a><br/>
+  <br>
+  Copyright&copy; 2024, the Apache Software Foundation. Licensed under the <a 
rel="license" href="http://www.apache.org/licenses/LICENSE-2.0";>Apache License, 
Version 2.0</a><br>
   Apache&reg; and the Apache logo are <a 
href="https://www.apache.org/foundation/marks/list/";>trademarks</a> of The 
Apache Software Foundation.
 </div>
   </body>
diff --git a/html/js/phonebook.js b/html/js/phonebook.js
index 357426f..25db549 100644
--- a/html/js/phonebook.js
+++ b/html/js/phonebook.js
@@ -223,24 +223,24 @@ function showCommitter(obj, uid) {
         var pl = roles[0] // pmc membership
         var ch = roles[1] // chairs
         if (isNologin(uid)) {
-            details.innerHTML += "<b>Login is currently disabled</b><br/><br/>"
+            details.innerHTML += "<b>Login is currently disabled</b><br><br>"
         }
                if (isMember(uid)) {
-                       details.innerHTML += "<img src='img/asfmember.png' 
style='vertical-align: middle;'/> <i>Foundation member</i><br/><br/>"
+                       details.innerHTML += "<img src='img/asfmember.png' 
style='vertical-align: middle;'> <i>Foundation member</i><br><br>"
                }
         if (ch.length > 0) {
             details.innerHTML += "<b>Chair of:</b> " + linkifyList(Q_PMC, ch)
             if (!isChair(uid)) {
                 details.innerHTML += " <b>Not a member of pmc-chairs!</b>"
             }
-            details.innerHTML += "<br/><br/>"
+            details.innerHTML += "<br><br>"
         }
         var purls = urls(uid)
         if (purls.length > 0) {
-                       details.innerHTML += "<b>Personal URLs:</b> " + 
linkifyURLs(purls) + "<br/><br/>"               
+                       details.innerHTML += "<b>Personal URLs:</b> " + 
linkifyURLs(purls) + "<br><br>"         
         }
                if (cl.length > 0) {
-                       details.innerHTML += "<b>Committer on:</b> " + 
linkifyList(Q_UNIX, cl) + "<br/><br/>"
+                       details.innerHTML += "<b>Committer on:</b> " + 
linkifyList(Q_UNIX, cl) + "<br><br>"
                }
                var nc = [] // On PMC but not in LDAP unix
                var nl = [] // On PMC but not in LDAP committee
@@ -248,7 +248,7 @@ function showCommitter(obj, uid) {
                var nu = [] // In LDAP committee but not in LDAP unix
                var pn;
                if (pl.length > 0) {
-                       details.innerHTML += "<b>PMC member of:</b> " + 
linkifyList(Q_PMC, pl) + "<br/><br/>"
+                       details.innerHTML += "<b>PMC member of:</b> " + 
linkifyList(Q_PMC, pl) + "<br><br>"
                        for (p in pl) {
                            pn = pl[p]
                            // There is an LDAP PMC group but the uid is not in 
the committer(:members) group
@@ -274,34 +274,34 @@ function showCommitter(obj, uid) {
                     nu.push(pn)
                 }
             }
-            details.innerHTML += "<b>LDAP committee group membership:</b> " + 
linkifyList(Q_CTTE, cttees) + "<br/><br/>"
+            details.innerHTML += "<b>LDAP committee group membership:</b> " + 
linkifyList(Q_CTTE, cttees) + "<br><br>"
         }
 
         var services = getRoster(ldapservices, uid)
         if (services.length > 0) {
-            details.innerHTML += "<b>Service group membership:</b> " + 
linkifyList(Q_SERVICE, services) + "<br/><br/>"
+            details.innerHTML += "<b>Service group membership:</b> " + 
linkifyList(Q_SERVICE, services) + "<br><br>"
         }
         var auths = getRoster(ldapauth, uid)
         if (auths.length > 0) {
-            details.innerHTML += "<b>Auth group membership:</b> " + 
linkifyList(Q_AUTH, auths) + "<br/><br/>"
+            details.innerHTML += "<b>Auth group membership:</b> " + 
linkifyList(Q_AUTH, auths) + "<br><br>"
         }
         var pods = getRoster(podlings, uid)
         if (pods.length > 0) {
-            details.innerHTML += "<b>Podling membership:</b> " + 
linkifyList(Q_PODLING, pods) + "<br/><br/>"
+            details.innerHTML += "<b>Podling membership:</b> " + 
linkifyList(Q_PODLING, pods) + "<br><br>"
         }
 
         // Note any discrepancies
         if (np.length > 0) {
-            details.innerHTML += "<span class='error'>In LDAP committee group, 
but <b>not a PMC member</b>:</span> " + linkifyList(Q_CTTE, np) + "<br/><br/>"
+            details.innerHTML += "<span class='error'>In LDAP committee group, 
but <b>not a PMC member</b>:</span> " + linkifyList(Q_CTTE, np) + "<br><br>"
         }
         if (nc.length > 0) {
-            details.innerHTML += "<span class='error'>On PMC, but not a member 
of the committer group:</span> " + linkifyList(Q_PMC, nc) + "<br/><br/>"
+            details.innerHTML += "<span class='error'>On PMC, but not a member 
of the committer group:</span> " + linkifyList(Q_PMC, nc) + "<br><br>"
         }
         if (nl.length > 0) {
-            details.innerHTML += "<span class='error'>On PMC, but not member 
of the LDAP committee group:</span> " + linkifyList(Q_CTTE, nl) + "<br/><br/>"
+            details.innerHTML += "<span class='error'>On PMC, but not member 
of the LDAP committee group:</span> " + linkifyList(Q_CTTE, nl) + "<br><br>"
         }
         if (nu.length > 0) {
-            details.innerHTML += "<span class='error'>In LDAP committee group 
but not a member of the committer group:</span> " + linkifyList(Q_UNIX, nu) + 
"<br/><br/>"
+            details.innerHTML += "<span class='error'>In LDAP committee group 
but not a member of the committer group:</span> " + linkifyList(Q_UNIX, nu) + 
"<br><br>"
         }
                obj.appendChild(details)
        } else {
@@ -340,10 +340,10 @@ function hoverCommitter(parent, uid) {
         var pl = roles[0]
         var ch = roles[1]
                if (isMember(uid) == true) {
-                       div.innerHTML += "<img src='img/asfmember.png' 
style='vertical-align: middle;'/> <i>Foundation member</i><br/><br/>"
+                       div.innerHTML += "<img src='img/asfmember.png' 
style='vertical-align: middle;'> <i>Foundation member</i><br><br>"
                }
         if (isNologin(uid)) {
-            div.innerHTML += "<b>Login is currently disabled</b><br/><br/>"
+            div.innerHTML += "<b>Login is currently disabled</b><br><br>"
         }
         if (ch.length > 0) {
             ch.sort()
@@ -351,16 +351,16 @@ function hoverCommitter(parent, uid) {
             if (!isChair(uid)) {
                 div.innerHTML += " <b>Not a member of pmc-chairs!</b>"
             }
-            div.innerHTML += "<br/><br/>"
+            div.innerHTML += "<br><br>"
         }
                if (cl.length > 0) {
                    cl.sort()
-                       div.innerHTML += "<b>Committer on:</b> " + cl.join(", 
") + "<br/><br/>"
+                       div.innerHTML += "<b>Committer on:</b> " + cl.join(", 
") + "<br><br>"
                }
         var nc = []
                if (pl.length > 0) {
                    pl.sort()
-                       div.innerHTML += "<b>PMC member of:</b> " + pl.join(", 
") + "<br/><br/>"
+                       div.innerHTML += "<b>PMC member of:</b> " + pl.join(", 
") + "<br><br>"
             for (p in pl) {
                 var pn = pl[p]
                 if (pn != 'member' && cl.indexOf(pn) < 0) {
@@ -369,7 +369,7 @@ function hoverCommitter(parent, uid) {
             }
                }
         if (nc.length > 0) {
-            div.innerHTML += "<i>On PMC, but not a Committer on:</i> " + 
nc.join(", ") + "<br/><br/>"
+            div.innerHTML += "<i>On PMC, but not a Committer on:</i> " + 
nc.join(", ") + "<br><br>"
         }
 
 
@@ -440,13 +440,13 @@ function showProject(obj, prj) {
                }
                var chair = getChair(prj)
                if (chair) {
-            details.innerHTML += "<b>Chair:</b> " + chair + "<br/><br/>"
+            details.innerHTML += "<b>Chair:</b> " + chair + "<br><br>"
         }
         var url = committees[prj].site
         if (url) {
-            details.innerHTML += "<a href='"+url+"' 
target='_blank'><b>Description:</b></a><br/><br/>" + desc + "<br/><br/>"
+            details.innerHTML += "<a href='"+url+"' 
target='_blank'><b>Description:</b></a><br><br>" + desc + "<br><br>"
         } else {
-            details.innerHTML += "<b>Description:</b><br/><br/>" + desc + 
"<br/><br/>"
+            details.innerHTML += "<b>Description:</b><br><br>" + desc + 
"<br><br>"
         }
                var cl
                var clExists = false // Does the unix group exist?
@@ -509,42 +509,42 @@ function showProject(obj, prj) {
 
                if (pl.length > 0) {
                        if (prj == 'member') {
-                               details.innerHTML += "<b>ASF 
members</b><br><br><table>" + pl.join("\n") + "</table><br/>"
+                               details.innerHTML += "<b>ASF 
members</b><br><br><table>" + pl.join("\n") + "</table><br>"
                        } else {
-                               details.innerHTML += "<b>PMC members (also in 
the <a href='?ctte="+prj+"'>committee group</a> - unless noted below):</b> "+ 
pl.length + " <br><br><table>" + pl.join("\n") + "</table><br/>"                
            
+                               details.innerHTML += "<b>PMC members (also in 
the <a href='?ctte="+prj+"'>committee group</a> - unless noted below):</b> "+ 
pl.length + " <br><br><table>" + pl.join("\n") + "</table><br>"                 
            
                        }
                }
                
                if (cl && cl.length > 0) {
-                       details.innerHTML += "<b>Committers (i.e. <a 
href='?unix="+prj+"'>unix group</a>):</b> "+ cl.length + " <br><br><table>" + 
cl.join("\n") + "</table><br/>"
+                       details.innerHTML += "<b>Committers (i.e. <a 
href='?unix="+prj+"'>unix group</a>):</b> "+ cl.length + " <br><br><table>" + 
cl.join("\n") + "</table><br>"
             if (podlings[prj]) {
-                details.innerHTML += "<span class='error'>WARNING: <a 
href='?podling="+prj+"'>"+prj+" podling group</a> also exists - this can cause 
authentication issues</span><br/><br/>"
+                details.innerHTML += "<span class='error'>WARNING: <a 
href='?podling="+prj+"'>"+prj+" podling group</a> also exists - this can cause 
authentication issues</span><br><br>"
             }
                } else {
                    if (!clExists) {
-                details.innerHTML += "<span class='error'>LDAP unix group not 
present!</span><br/><br/>"
+                details.innerHTML += "<span class='error'>LDAP unix group not 
present!</span><br><br>"
                    }
                }
 
         if (pmcnoctte.length) {
             if (ctteeExists) {
-                details.innerHTML += "<span class='error'>PMC members not in 
LDAP committee group:</span> " + userList(pmcnoctte) + "<br/><br/>"
+                details.innerHTML += "<span class='error'>PMC members not in 
LDAP committee group:</span> " + userList(pmcnoctte) + "<br><br>"
             } else {
-                details.innerHTML += "<span class='error'>LDAP committee group 
not present!</span><br/><br/>"
+                details.innerHTML += "<span class='error'>LDAP committee group 
not present!</span><br><br>"
             }
         }
         if (pmcnounix.length) {
                if (prj == 'member') {
-                details.innerHTML += "<span class='error'>ASF members not in 
committers(unix) group:</span> " + userList(pmcnounix) + "<br/><br/>"
+                details.innerHTML += "<span class='error'>ASF members not in 
committers(unix) group:</span> " + userList(pmcnounix) + "<br><br>"
                } else {
-                details.innerHTML += "<span class='error'>PMC members not in 
committers(unix) group:</span> " + userList(pmcnounix) + "<br/><br/>"           
          
+                details.innerHTML += "<span class='error'>PMC members not in 
committers(unix) group:</span> " + userList(pmcnounix) + "<br><br>"             
          
                }
         }
         if (cttenounix.length) {
-            details.innerHTML += "<span class='error'>LDAP committee group 
members not in committers(unix) group:</span> " + userList(cttenounix) + 
"<br/><br/>"
+            details.innerHTML += "<span class='error'>LDAP committee group 
members not in committers(unix) group:</span> " + userList(cttenounix) + 
"<br><br>"
         }
         if (cttenopmc.length) {
-            details.innerHTML += "<span class='error'>LDAP committee group 
members not on PMC:</span> " + userList(cttenopmc) + "<br/><br/>"
+            details.innerHTML += "<span class='error'>LDAP committee group 
members not on PMC:</span> " + userList(cttenopmc) + "<br><br>"
         }
 
                
@@ -591,7 +591,7 @@ function showJsonRoster(obj, type, json, name, attr, 
checkUnix) {
         }
 
         if (cl && cl.length > 0) {
-            details.innerHTML += "<b>Roster:</b><br><br><table>" + 
cl.join("\n") + "</table><br/>"
+            details.innerHTML += "<b>Roster:</b><br><br><table>" + 
cl.join("\n") + "</table><br>"
         }
         obj.appendChild(details)
     } else {
@@ -628,7 +628,7 @@ function showCommittee(obj, name) {
 function searchProjects(keyword, open) {
        var obj = document.getElementById('phonebook')
        if (keyword != '') {
-          obj.innerHTML = "<h3>Search results:</h3><hr/>"
+          obj.innerHTML = "<h3>Search results:</h3><hr>"
        } else {
           obj.innerHTML = ''
        }
@@ -647,7 +647,7 @@ function searchProjects(keyword, open) {
 function searchService(keyword, open) {
        var obj = document.getElementById('phonebook')
        if (keyword != '') {
-          obj.innerHTML = "<h3>Search results:</h3><hr/>"
+          obj.innerHTML = "<h3>Search results:</h3><hr>"
        } else {
           obj.innerHTML = ''
        }
@@ -664,7 +664,7 @@ function searchService(keyword, open) {
 function searchAuth(keyword, open) {
     var obj = document.getElementById('phonebook')
     if (keyword != '') {
-       obj.innerHTML = "<h3>Search results:</h3><hr/>"
+       obj.innerHTML = "<h3>Search results:</h3><hr>"
     } else {
        obj.innerHTML = ''
     }
@@ -752,7 +752,7 @@ function showPOD(name) {
 
 function searchPodlings(keyword, open) {
        var obj = document.getElementById('phonebook')
-    obj.innerHTML = "<h3>Search results:</h3><hr/>"
+    obj.innerHTML = "<h3>Search results:</h3><hr>"
        for (var name in podlings) {
                if (name.search(keyword.toLowerCase()) != -1) {
                    var id = 'podling_' + name
@@ -792,10 +792,10 @@ function showError(error) {
         obj.innerHTML += error
     } else { // assume it's an error object
         obj.innerHTML = "<h3>Javascript Error detected</h3>"
-        obj.innerHTML += "<hr/>"
+        obj.innerHTML += "<hr>"
         obj.innerHTML += "<pre>"+ error.message + "</pre>"
         obj.innerHTML += "<pre>"+ error.stack + "</pre>"
-        obj.innerHTML += "<hr/>"
+        obj.innerHTML += "<hr>"
     }
 }
 
@@ -805,7 +805,7 @@ function searchCommitters(keyword, open) {
        }
        var n = 0
        var obj = document.getElementById('phonebook')
-       obj.innerHTML = "<h3>Search results:</h3><hr/>"
+       obj.innerHTML = "<h3>Search results:</h3><hr>"
        for (var uid in people) {
          if (!people[uid].noLogin) { // don't display disabled logins
                var name = getCommitterName(uid)
diff --git a/html/keys/index.html b/html/keys/index.html
index 4a4ef23..219c387 100644
--- a/html/keys/index.html
+++ b/html/keys/index.html
@@ -1,4 +1,5 @@
-<html>
+<!DOCTYPE html>
+<html lang="en">
 <head>
     <meta charset="utf-8"></meta>
     <meta http-equiv="X-UA-Compatible" content="IE=edge"></meta>
@@ -8,37 +9,37 @@
     <style> ul, li { cursor: default; } </style>
 </head>
 <body>
-   <h1><img src='../img/asf_logo_small.png' alt='Apache logo with text' 
style='vertical-align: middle;'/> Public key files</h1>
+   <h1><img src='../img/asf_logo_small.png' alt='Apache logo with text' 
style='vertical-align: middle;'> Public key files</h1>
 <!-- Text is difficult to read if the lines are too long -->
 <div style="max-width: 90ch;">
 <p>
 ASF committers can add key fingerprints to their LDAP record using the <a 
href="https://id.apache.org/";>SelfServe</a> or
 <a href="https://whimsy.apache.org/roster/committer/__self__";>Whimsy</a> web 
application.
-<br/>
+<br>
 Only the fingerprints are stored in the LDAP record.
-<br/>
+<br>
 The corresponding keys must be uploaded to a public key server.
 </p>
 <h1>Committer public key files</h1>
 <p>
 The files in the <a href="committer">Committer keys</a> directory are 
autogenerated once a day from LDAP records and grouped by ASF id.
-<br/>
+<br>
 (The public keys are downloaded from a public key server (default: 
keyserver.ubuntu.com) using the fingerprints from LDAP)
-<br/>
+<br>
 Note that LDAP currently contains some entries which are the short key id (8 
hex chars)
 rather than the full fingerprint (40 chars).
-<br/>
+<br>
 These <b>key id entries are ignored</b> because they are not guaranteed 
unique; and it has been shown that they can be spoofed.
-<br/>
+<br>
 If your key does not appear in your <code>.asc</code> file, check that the 
whole fingerprint is present.
-<br/>
+<br>
 Also check that there are no leading or trailing spaces (embedded spaces are 
OK) because LDAP encodes these (and some other apps may not be able to decode 
them) 
 </p>
 <h1>Project public key files</h1>
 <p>
 Project group files are no longer created.
 They are <b>not suitable</b> for use as KEYS files for authenticating releases
-<br/> 
+<br> 
 This is because:
 <ul>
 <li>The KEYS file are needed to check signatures of archived releases. 
@@ -46,7 +47,7 @@ Thus keys should only ever be added to the KEYS file, and 
never normally removed
 Now the LDAP group for a project will change over time, and a committer who 
signed one or more releases may no longer be in the group.
 Also if a project moves to the Attic, its LDAP group will be removed.</li>
 </ul>
-Individual committer key details can be copied from the committer or group 
files into the project KEYS file.<br/>
+Individual committer key details can be copied from the committer or group 
files into the project KEYS file.<br>
 To keep the KEYS file manageable, it's recommended to only add the keys of 
committers who have signed releases.
 </p>
 </div>
diff --git a/html/phonebook-about.html b/html/phonebook-about.html
index 05c9ab2..5e77391 100644
--- a/html/phonebook-about.html
+++ b/html/phonebook-about.html
@@ -10,7 +10,7 @@
   </head>
 
   <body>
-   <h1><img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='vertical-align: middle;'/><a href="phonebook.html">Apache Phone Book 
application</a></h1>
+   <h1><img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='vertical-align: middle;'><a href="phonebook.html">Apache Phone Book 
application</a></h1>
   <h2>About</h2>
   <p>
   This application shows the membership of PMCs and various LDAP groups used 
for granting karma. It can also show the groups to which a person belongs. 
@@ -24,9 +24,9 @@
   <h2>Usage</h2>
   <p>
   As well as using the search fields to find projects or people, the 
application supports direct query access in the form:
-  <br/><br/>
+  <br><br>
   <code>https://people.apache.org/phonebook.html<b>?type=name</b></code>
-  <br/><br/>
+  <br><br>
   The possible types are listed below; click on a link to run the sample query 
(opens in new tab)
   </p>
   <ul>
@@ -44,8 +44,8 @@
   </ul>
   <h2>Notes</h2>
   <p>
-  Committers may provide homepage URLs in LDAP:<br/>
-  Login to <a target="_blank" 
href="https://id.apache.org/";>https://id.apache.org/</a> and populate the 
"Homepage URL:" field.<br/> 
+  Committers may provide homepage URLs in LDAP:<br>
+  Login to <a target="_blank" 
href="https://id.apache.org/";>https://id.apache.org/</a> and populate the 
"Homepage URL:" field.<br> 
   Remember to provide your password (near the bottom of the page) before 
pressing submit
   </p>
   <p>
@@ -53,9 +53,9 @@
   </p>
   <p>
   All PMC members should be owners of the LDAP project group.
-  <br/>
+  <br>
   Membership of this LDAP group is used to grant karma for some parts of SVN 
that are private to the PMC and to give access to the PMC mail archives.
-  <br/>
+  <br>
   The LDAP project owners group should not normally contain people who are not 
on the PMC.
   </p>
   <p>
@@ -80,7 +80,7 @@
   <p>The source code is currently stored at:</p>
   <pre style="border:1px solid #999; padding: 12px; margin: 1em 7px 1em 
7px;">git clone <a 
href="https://github.com/apache/comdev-people";>https://github.com/apache/comdev-people</a></pre>
     <div id="footer">
-     Copyright&copy; 2024, the Apache Software Foundation. Licensed under the 
<a href="http://www.apache.org/licenses/LICENSE-2.0";>Apache License, Version 
2.0</a><br/>
+     Copyright&copy; 2024, the Apache Software Foundation. Licensed under the 
<a href="http://www.apache.org/licenses/LICENSE-2.0";>Apache License, Version 
2.0</a><br>
      Apache and the Apache logo are trademarks of The Apache Software 
Foundation.
     </div>
   </body>
diff --git a/html/phonebook.html b/html/phonebook.html
index 2006501..d66ffeb 100644
--- a/html/phonebook.html
+++ b/html/phonebook.html
@@ -12,7 +12,7 @@
     <link href="css/phonebook.css" rel="stylesheet" media="all">
   </head>
   <body onload="preRender()">
-   <h1><img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='vertical-align: middle;'/> Apache committer and project index</h1>
+   <h1><img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='vertical-align: middle;'> Apache committer and project index</h1>
    <div id="search">
     <table>
     <thead>
@@ -29,11 +29,11 @@
     <tbody>
     <tr>
     <td><b>Find:</b></td>
-    <td><input type="text" placeholder="Project name" size="25" 
onkeyup="searchProjects(this.value)"/></td>
-    <td><input type="text" placeholder="Committer name" size="25" 
onkeyup="searchCommitters(this.value)"/></td>
-    <td><input type="text" placeholder="Podling name" size="18" 
onkeyup="searchPodlings(this.value)"/></td>
-    <td><input type="text" placeholder="Service name" size="18" 
onkeyup="searchService(this.value)"/></td>
-    <td><input type="text" placeholder="Auth name" size="18" 
onkeyup="searchAuth(this.value)"/></td>
+    <td><input type="text" placeholder="Project name" size="25" 
onkeyup="searchProjects(this.value)"></td>
+    <td><input type="text" placeholder="Committer name" size="25" 
onkeyup="searchCommitters(this.value)"></td>
+    <td><input type="text" placeholder="Podling name" size="18" 
onkeyup="searchPodlings(this.value)"></td>
+    <td><input type="text" placeholder="Service name" size="18" 
onkeyup="searchService(this.value)"></td>
+    <td><input type="text" placeholder="Auth name" size="18" 
onkeyup="searchAuth(this.value)"></td>
     <td>&nbsp;</td>
     </tr>
     </tbody>
@@ -43,8 +43,8 @@
    <div id="phonebook">
 
    <p>
-      Loading data, please wait...<br/>
-      <img src="img/loader.gif" alt=""/>
+      Loading data, please wait...<br>
+      <img src="img/loader.gif" alt="">
    </p>
    <p id="progress"></p>
    <noscript>
diff --git a/html/unlistedclas.html b/html/unlistedclas.html
index e939c14..7d6c06c 100644
--- a/html/unlistedclas.html
+++ b/html/unlistedclas.html
@@ -12,7 +12,7 @@
     <link href="css/phonebook.css" rel="stylesheet" media="all">
   </head>
   <body>
-   <h1><img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='width: 200px; height: 61px; vertical-align: middle;'/> Persons with 
signed CLAs but who are not (yet) committers.</h1>
+   <h1><img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='width: 200px; height: 61px; vertical-align: middle;'> Persons with 
signed CLAs but who are not (yet) committers.</h1>
    <p>
    The information has moved - please see the Whimsy <a 
href="https://whimsy.apache.org/officers/unlistedclas.cgi";>unlisted CLA 
finder</a> page
    </p>
diff --git a/tools/committer-index.ezt b/tools/committer-index.ezt
index b65d6e2..7f85fa0 100644
--- a/tools/committer-index.ezt
+++ b/tools/committer-index.ezt
@@ -1,4 +1,5 @@
-<html>
+<!DOCTYPE html>
+<html lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ASF Committers by id</title>
@@ -6,11 +7,11 @@
 </head>
 <body>
 <div id="content">
-<h1><img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='vertical-align: middle;'/> ASF Committers by ID</h1>
+<h1><img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='vertical-align: middle;'> ASF Committers by ID</h1>
 <p>
       This page lists all known committers by login ID.
       Each entry shows the full name and any LDAP groups / SVN groups to which 
the committer belongs.
-      <br/>
+      <br>
       This information is derived from the <a href='public'>JSON files</a> 
       which in turn are derived from LDAP and the SVN authorization file by 
Whimsy.
 </p>
@@ -80,9 +81,9 @@ IDs must be lower-case alphanumeric (ASCII) only, with at 
least three characters
   ]<td>[if-any roster.groups][for roster.groups][#
     ]<a href='phonebook.html?[roster.groups.type]=[roster.groups.link][#
         ]'>[roster.groups.name]</a>[if-index roster.groups last][else], [end][#
-  ][end][else]&nbsp[# ";" should be here][end]</td></tr>
+  ][end][else]&nbsp;[# ";" should be here][end]</td></tr>
 [end]</table>
-<hr/>
+<hr>
 <p>Created from the following versions of the files:</p>
 <table>
 <tr>
diff --git a/tools/committers-by-project.ezt b/tools/committers-by-project.ezt
index cf93813..02db6f6 100644
--- a/tools/committers-by-project.ezt
+++ b/tools/committers-by-project.ezt
@@ -1,4 +1,5 @@
-<html>
+<!DOCTYPE html>
+<html lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>ASF Committers by auth group</title>
@@ -12,7 +13,7 @@
 </head>
 <body>
 <div id="content">
-<h1><img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='vertical-align: middle;'/> ASF Committers by auth group</h1>
+<h1><img src='img/asf_logo_small.png' alt='Apache logo with text' 
style='vertical-align: middle;'> ASF Committers by auth group</h1>
 <p>
   This page lists all LDAP groups and the SVN authorization groups found in
   the SVN authorization file, and shows the membership of the corresponding 
groups.
@@ -58,7 +59,7 @@
 <!--bodyContent-->
 <table border="0">
 [content]
-<hr/>
+<hr>
 <p>Created from the following versions of the files:</p>
 <table>
 <tr>
diff --git a/tools/committers.py b/tools/committers.py
index e2aeac3..0e56cba 100755
--- a/tools/committers.py
+++ b/tools/committers.py
@@ -253,7 +253,7 @@ for group in sorted(groupData):
     g.write("""<table><tr><th>SVN id</th><th>Name</th></tr>\n""")
     for id in groupData[group]:
         # SVN id
-        g.write("""<tr><td id='%s'><a 
href="committer-index.html#%s">%s</td>""" % (id, id, idStyle(id)))
+        g.write("""<tr><td id='%s'><a 
href="committer-index.html#%s">%s</a></td>""" % (f"{group}-{id}", id, 
idStyle(id)))
         # Name
         g.write("<td>%s</td></tr>\n" % nameStyle(id))
     g.write("""</table>\n""")
diff --git a/tools/pgp.py b/tools/pgp.py
index fb86ffe..4204721 100644
--- a/tools/pgp.py
+++ b/tools/pgp.py
@@ -234,7 +234,8 @@ log.write(time.asctime()+"\n")
 log.close()
 
 f = open(os.path.join(COMMITTER_KEYS, "index.html"), "w", encoding='utf-8')
-f.write("""<html>
+f.write("""<!DOCTYPE html>
+<html lang="en">
 <head><title>ASF PGP Keys</title>
 <link rel="stylesheet" type="text/css" href="../../css/keys.css">
 </head>

Reply via email to