html: Drop trailing slash from void elements

See: https://github.com/validator/validator/wiki/Markup-%C2%BB-Void-elements

Tests:

- Fewer info messages in w3c HTML validator.

- Page loads and works as usual.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
Sunil Mohan Adapa 2026-03-10 13:34:20 -07:00 committed by James Valleroy
parent 144efd71b8
commit 4a3ca01059
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
20 changed files with 61 additions and 61 deletions

View File

@ -8,7 +8,7 @@
{% block page_head %} {% block page_head %}
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="{% static 'backups/backups.css' %}"/> href="{% static 'backups/backups.css' %}">
{% endblock %} {% endblock %}
{% block configuration %} {% block configuration %}

View File

@ -8,7 +8,7 @@
{% block page_head %} {% block page_head %}
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="{% static 'firewall/firewall.css' %}"/> href="{% static 'firewall/firewall.css' %}">
{% endblock %} {% endblock %}
{% block configuration %} {% block configuration %}

View File

@ -14,7 +14,7 @@ no-brand
{% block content %} {% block content %}
<div class="logo"> <div class="logo">
<img class="firstboot img-fluid" alt="{{ box_name }}" <img class="firstboot img-fluid" alt="{{ box_name }}"
src="{% static 'theme/img/freedombox-logo-standard.svg' %}"/> src="{% static 'theme/img/freedombox-logo-standard.svg' %}">
</div> </div>
<form class="form form-start text-center" method="post"> <form class="form form-start text-center" method="post">

View File

@ -10,7 +10,7 @@
<p class="text-center"> <p class="text-center">
<img src="{% static 'theme/img/freedombox-logo-250px.png' %}" <img src="{% static 'theme/img/freedombox-logo-250px.png' %}"
class="main-graphic" /> class="main-graphic">
</p> </p>
{% if version %} {% if version %}

View File

@ -16,7 +16,7 @@
<span class="navbar-brand"> <span class="navbar-brand">
<img src="{% static 'theme/img/freedombox-logo-32px.png' %}" <img src="{% static 'theme/img/freedombox-logo-32px.png' %}"
alt="{{ cfg.box_name }}" /> alt="{{ cfg.box_name }}">
<a href="{% url 'index' %}"> <a href="{% url 'index' %}">
{% blocktrans trimmed %}{{ box_name }} Setup{% endblocktrans %} {% blocktrans trimmed %}{{ box_name }} Setup{% endblocktrans %}
</a> </a>

View File

@ -58,7 +58,7 @@
<span class="navbar-brand"> <span class="navbar-brand">
<img src="{% static 'theme/img/freedombox-logo-32px.png' %}" <img src="{% static 'theme/img/freedombox-logo-32px.png' %}"
alt="{{ cfg.box_name }}" /> alt="{{ cfg.box_name }}">
<a href="{% url 'index' %}"> <a href="{% url 'index' %}">
{% blocktrans trimmed %}{{ box_name }} Setup{% endblocktrans %} {% blocktrans trimmed %}{{ box_name }} Setup{% endblocktrans %}
</a> </a>

View File

@ -8,7 +8,7 @@
{% block page_head %} {% block page_head %}
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="{% static 'help/help.css' %}"/> href="{% static 'help/help.css' %}">
{% endblock %} {% endblock %}
{% block content %} {% block content %}

View File

@ -25,7 +25,7 @@
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Janus Video Room</title> <title>Janus Video Room</title>
@ -42,13 +42,13 @@
<link rel="stylesheet" <link rel="stylesheet"
href="/javascript/bootstrap5/css/bootstrap.css" href="/javascript/bootstrap5/css/bootstrap.css"
type="text/css"/> type="text/css">
<link rel="stylesheet" href="/javascript/toastr/toastr.min.css" <link rel="stylesheet" href="/javascript/toastr/toastr.min.css"
type="text/css"/> type="text/css">
<link rel="stylesheet" <link rel="stylesheet"
href="{% static 'janus/janus-video-room.css' %}" type="text/css"/> href="{% static 'janus/janus-video-room.css' %}" type="text/css">
<link rel="stylesheet" <link rel="stylesheet"
href="/javascript/font-awesome/css/font-awesome.min.css" type="text/css"/> href="/javascript/font-awesome/css/font-awesome.min.css" type="text/css">
</head> </head>
<body data-user-turn-config="{{ user_turn_config }}"> <body data-user-turn-config="{{ user_turn_config }}">

View File

@ -34,17 +34,17 @@
<html> <html>
<head> <head>
<title>Jabber Chat (JSXC)</title> <title>Jabber Chat (JSXC)</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/javascript/bootstrap4/css/bootstrap.min.css" media="all" <link href="/javascript/bootstrap4/css/bootstrap.min.css" media="all"
rel="stylesheet" type="text/css" /> rel="stylesheet" type="text/css">
<link href="/javascript/jquery-ui/themes/base/jquery-ui.min.css" <link href="/javascript/jquery-ui/themes/base/jquery-ui.min.css"
media="all" rel="stylesheet" type="text/css" /> media="all" rel="stylesheet" type="text/css">
<link href="{% static 'jsxc/libjs-jsxc/jsxc.css' %}" media="all" <link href="{% static 'jsxc/libjs-jsxc/jsxc.css' %}" media="all"
rel="stylesheet" type="text/css" /> rel="stylesheet" type="text/css">
<link href="{% static 'jsxc/jsxc-plinth.css' %}" media="all" <link href="{% static 'jsxc/jsxc-plinth.css' %}" media="all"
rel="stylesheet" type="text/css" /> rel="stylesheet" type="text/css">
<script src="/javascript/jquery/jquery.min.js"></script> <script src="/javascript/jquery/jquery.min.js"></script>
<script src="/javascript/jquery-ui/jquery-ui.min.js"></script> <script src="/javascript/jquery-ui/jquery-ui.min.js"></script>

View File

@ -9,7 +9,7 @@
{% block page_head %} {% block page_head %}
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="{% static 'letsencrypt/letsencrypt.css' %}"/> href="{% static 'letsencrypt/letsencrypt.css' %}">
{% endblock %} {% endblock %}
{% block configuration %} {% block configuration %}

View File

@ -10,7 +10,7 @@
{% block page_head %} {% block page_head %}
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="{% static 'networks/networks.css' %}"/> href="{% static 'networks/networks.css' %}">
{% endblock %} {% endblock %}
{% block content %} {% block content %}

View File

@ -8,28 +8,28 @@
<div class="row connection-diagram"> <div class="row connection-diagram">
<div class="col-md-2"> <div class="col-md-2">
<img src="{% static 'theme/img/network-internet.svg' %}" <img src="{% static 'theme/img/network-internet.svg' %}"
class="col-image network-entity" alt="{% trans "Internet" %}"/> class="col-image network-entity" alt="{% trans "Internet" %}">
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<img src="{% static 'theme/img/network-spacing.svg' %}" <img src="{% static 'theme/img/network-spacing.svg' %}"
class="col-image network-spacing d-none d-md-block" class="col-image network-spacing d-none d-md-block"
alt="{% trans "Spacing" %}"/> alt="{% trans "Spacing" %}">
<img src="{% static 'theme/img/network-connection.svg' %}" <img src="{% static 'theme/img/network-connection.svg' %}"
class="col-image network-connection d-none d-md-block " class="col-image network-connection d-none d-md-block "
alt="{% trans "Connection" %}"/> alt="{% trans "Connection" %}">
<img src="{% static 'theme/img/network-connection-vertical.svg' %}" <img src="{% static 'theme/img/network-connection-vertical.svg' %}"
class="network-connection-vertical d-md-none" class="network-connection-vertical d-md-none"
alt="{% trans "Connection" %}"/> alt="{% trans "Connection" %}">
<div class="connection-list"> <div class="connection-list">
<p class="connection-list-heading">{% trans "External" %}</p> <p class="connection-list-heading">{% trans "External" %}</p>
{% for connection in connections %} {% for connection in connections %}
{% if connection.interface_name and connection.is_active and connection.zone == 'external' %} {% if connection.interface_name and connection.is_active and connection.zone == 'external' %}
{% if connection.type == '802-3-ethernet' %} {% if connection.type == '802-3-ethernet' %}
<img src="{% static 'theme/img/network-ethernet.svg' %}" <img src="{% static 'theme/img/network-ethernet.svg' %}"
class="network-type-icon" alt="{% trans "Ethernet" %}"/> class="network-type-icon" alt="{% trans "Ethernet" %}">
{% elif connection.type == '802-11-wireless' %} {% elif connection.type == '802-11-wireless' %}
<img src="{% static 'theme/img/network-wireless.svg' %}" <img src="{% static 'theme/img/network-wireless.svg' %}"
class="network-type-icon" alt="{% trans "Wi-Fi" %}"/> class="network-type-icon" alt="{% trans "Wi-Fi" %}">
{% endif %} {% endif %}
<a href="{% url 'networks:show' connection.uuid %}" <a href="{% url 'networks:show' connection.uuid %}"
title="{% blocktrans with name=connection.name %}Show connection {{ name }}{% endblocktrans %}"> title="{% blocktrans with name=connection.name %}Show connection {{ name }}{% endblocktrans %}">
@ -40,15 +40,15 @@
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
<img src="{% static 'theme/img/network-freedombox.svg' %}" <img src="{% static 'theme/img/network-freedombox.svg' %}"
class="col-image network-entity" alt="{{ box_name }}"/> class="col-image network-entity" alt="{{ box_name }}">
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<img src="{% static 'theme/img/network-spacing.svg' %}" <img src="{% static 'theme/img/network-spacing.svg' %}"
class="col-image network-spacing d-none d-md-block" class="col-image network-spacing d-none d-md-block"
alt="{% trans "Spacing" %}"/> alt="{% trans "Spacing" %}">
<img src="{% static 'theme/img/network-connection.svg' %}" <img src="{% static 'theme/img/network-connection.svg' %}"
class="col-image network-connection d-none d-md-block" class="col-image network-connection d-none d-md-block"
alt="{% trans "Connection" %}"/> alt="{% trans "Connection" %}">
<div class="connection-list"> <div class="connection-list">
<p class="connection-list-heading">{% trans "Internal" %}</p> <p class="connection-list-heading">{% trans "Internal" %}</p>
{% for connection in connections %} {% for connection in connections %}
@ -56,10 +56,10 @@
<p> <p>
{% if connection.type == '802-3-ethernet' %} {% if connection.type == '802-3-ethernet' %}
<img src="{% static 'theme/img/network-ethernet.svg' %}" <img src="{% static 'theme/img/network-ethernet.svg' %}"
class="network-type-icon" alt="{% trans "Ethernet" %}"/> class="network-type-icon" alt="{% trans "Ethernet" %}">
{% elif connection.type == '802-11-wireless' %} {% elif connection.type == '802-11-wireless' %}
<img src="{% static 'theme/img/network-wireless.svg' %}" <img src="{% static 'theme/img/network-wireless.svg' %}"
class="network-type-icon" alt="{% trans "Wi-Fi" %}"/> class="network-type-icon" alt="{% trans "Wi-Fi" %}">
{% endif %} {% endif %}
<a href="{% url 'networks:show' connection.uuid %}" <a href="{% url 'networks:show' connection.uuid %}"
title="{% blocktrans with name=connection.name %}Show connection {{ name }}{% endblocktrans %}"> title="{% blocktrans with name=connection.name %}Show connection {{ name }}{% endblocktrans %}">
@ -70,10 +70,10 @@
</div> </div>
<img src="{% static 'theme/img/network-connection-vertical.svg' %}" <img src="{% static 'theme/img/network-connection-vertical.svg' %}"
class="network-connection-vertical d-md-none" class="network-connection-vertical d-md-none"
alt="{% trans "Connection" %}"/> alt="{% trans "Connection" %}">
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
<img src="{% static 'theme/img/network-computer.svg' %}" <img src="{% static 'theme/img/network-computer.svg' %}"
class="col-image network-entity" alt="{% trans "Computer" %}"/> class="col-image network-entity" alt="{% trans "Computer" %}">
</div> </div>
</div> </div>

View File

@ -9,7 +9,7 @@
{% block page_head %} {% block page_head %}
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="{% static 'networks/networks.css' %}"/> href="{% static 'networks/networks.css' %}">
{% endblock %} {% endblock %}
{% block configuration %} {% block configuration %}

View File

@ -11,12 +11,12 @@
<div class="container narrow-container authorize-container"> <div class="container narrow-container authorize-container">
<div class="d-flex flex-row align-items-center authorize-diagram"> <div class="d-flex flex-row align-items-center authorize-diagram">
<img src="{% static 'theme/img/application.svg' %}" <img src="{% static 'theme/img/application.svg' %}"
class="col-image network-entity" alt="{% trans "Application" %}"/> class="col-image network-entity" alt="{% trans "Application" %}">
<img src="{% static 'theme/img/network-connection.svg' %}" <img src="{% static 'theme/img/network-connection.svg' %}"
class="col-image network-connection" class="col-image network-connection"
alt="{% trans "Connection" %}"/> alt="{% trans "Connection" %}">
<img src="{% static 'theme/img/network-freedombox.svg' %}" <img src="{% static 'theme/img/network-freedombox.svg' %}"
class="col-image network-entity" alt="{{ box_name }}"/> class="col-image network-entity" alt="{{ box_name }}">
</div> </div>
<h3>{% trans "Authorize App" %}</h3> <h3>{% trans "Authorize App" %}</h3>

View File

@ -10,7 +10,7 @@
{% block page_head %} {% block page_head %}
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="{% static 'samba/samba.css' %}"/> href="{% static 'samba/samba.css' %}">
{% endblock %} {% endblock %}
{% block configuration %} {% block configuration %}

View File

@ -8,7 +8,7 @@
{% block page_head %} {% block page_head %}
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="{% static 'sharing/sharing.css' %}"/> href="{% static 'sharing/sharing.css' %}">
{% endblock %} {% endblock %}
{% block configuration %} {% block configuration %}

View File

@ -9,7 +9,7 @@
{% block page_head %} {% block page_head %}
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="{% static 'storage/storage.css' %}"/> href="{% static 'storage/storage.css' %}">
{% endblock %} {% endblock %}
{% block configuration %} {% block configuration %}

View File

@ -9,30 +9,30 @@
<html class="no-js" lang="en"> <html class="no-js" lang="en">
<!-- the "no-js" class will be removed if Javascript is turned on --> <!-- the "no-js" class will be removed if Javascript is turned on -->
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8">
<!-- Always force latest IE rendering engine and Chrome Frame --> <!-- Always force latest IE rendering engine and Chrome Frame -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<!-- Mobile Viewport Fix http://j.mp/mobileviewport & http://davidbcalhoun.com/2010/viewport-metatag <!-- Mobile Viewport Fix http://j.mp/mobileviewport & http://davidbcalhoun.com/2010/viewport-metatag
device-width : Occupy full width of the screen in its current orientation device-width : Occupy full width of the screen in its current orientation
initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height
maximum-scale = 1.0 retains dimensions instead of zooming in if page width < device width maximum-scale = 1.0 retains dimensions instead of zooming in if page width < device width
--> -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- R2D2, you know better than to trust a strange computer! --> <!-- R2D2, you know better than to trust a strange computer! -->
<meta name="robots" content="noindex, nofollow, noarchive" /> <meta name="robots" content="noindex, nofollow, noarchive">
<meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noodp, noimageindex, notranslate" /> <meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noodp, noimageindex, notranslate">
<meta name="msnbot" content="noindex, nofollow, noarchive, noodp" /> <meta name="msnbot" content="noindex, nofollow, noarchive, noodp">
<meta name="slurp" content="noindex, nofollow, noarchive, noodp, noydir" /> <meta name="slurp" content="noindex, nofollow, noarchive, noodp, noydir">
<meta name="application-name" content="{{ box_name }}" /> <meta name="application-name" content="{{ box_name }}">
<meta name="description" <meta name="description"
content="{% blocktrans trimmed %} content="{% blocktrans trimmed %}
FreedomBox is a personal server designed for privacy and FreedomBox is a personal server designed for privacy and
data ownership. It is free software that lets you install data ownership. It is free software that lets you install
and manage server apps with ease. and manage server apps with ease.
{% endblocktrans %}" /> {% endblocktrans %}">
{% block title %} {% block title %}
<title> <title>
{% if title %} {{ title }} {% else %} {{ box_name }} {% endif %} {% if title %} {{ title }} {% else %} {{ box_name }} {% endif %}
@ -41,21 +41,21 @@
<!-- Favicon. Works with IE >= 11 and other GUI browsers --> <!-- Favicon. Works with IE >= 11 and other GUI browsers -->
<link rel="icon" type="image/png" <link rel="icon" type="image/png"
href="{% static 'theme/img/freedombox-logo-32px.png' %}"/> href="{% static 'theme/img/freedombox-logo-32px.png' %}">
<!-- The is the icon for iOS's Web Clip. Size: 57x57 for older iPhones, 72x72 for iPads, 114x114 for iPhone4 <!-- The is the icon for iOS's Web Clip. Size: 57x57 for older iPhones, 72x72 for iPads, 114x114 for iPhone4
- To prevent iOS from applying its styles to the icon name it thusly: apple-touch-icon-precomposed.png - To prevent iOS from applying its styles to the icon name it thusly: apple-touch-icon-precomposed.png
- Transparency is not recommended (iOS will put a black BG behind the icon) --> - Transparency is not recommended (iOS will put a black BG behind the icon) -->
<link rel="apple-touch-icon" sizes="57x57" href="{% static 'theme/img/apple-touch-icon-57px-precomposed.png' %}"/> <link rel="apple-touch-icon" sizes="57x57" href="{% static 'theme/img/apple-touch-icon-57px-precomposed.png' %}">
<link rel="apple-touch-icon" sizes="72x72" href="{% static 'theme/img/apple-touch-icon-72px-precomposed.png' %}"/> <link rel="apple-touch-icon" sizes="72x72" href="{% static 'theme/img/apple-touch-icon-72px-precomposed.png' %}">
<link rel="apple-touch-icon" sizes="114x114" href="{% static 'theme/img/apple-touch-icon-114px-precomposed.png' %}"/> <link rel="apple-touch-icon" sizes="114x114" href="{% static 'theme/img/apple-touch-icon-114px-precomposed.png' %}">
<!-- Stylesheets --> <!-- Stylesheets -->
<link rel="stylesheet" href="{% static '/javascript/bootstrap5/css/bootstrap.min.css' %}"/> <link rel="stylesheet" href="{% static '/javascript/bootstrap5/css/bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static '/javascript/fork-awesome/css/fork-awesome.css' %}"/> <link rel="stylesheet" href="{% static '/javascript/fork-awesome/css/fork-awesome.css' %}">
<link rel="stylesheet" href="{% static 'theme/css/main.css' %}"/> <link rel="stylesheet" href="{% static 'theme/css/main.css' %}">
{% if user_css %} {% if user_css %}
<link rel="stylesheet" href="{% static user_css %}"/> <link rel="stylesheet" href="{% static user_css %}">
{% endif %} {% endif %}
<!-- This script is not loaded in defer mode because it needs to run before <!-- This script is not loaded in defer mode because it needs to run before
@ -202,7 +202,7 @@
action="{% url 'users:logout' %}"> action="{% url 'users:logout' %}">
{% csrf_token %} {% csrf_token %}
<input type="submit" class="dropdown-item no-running-status" <input type="submit" class="dropdown-item no-running-status"
value="{% trans "Log out" %}"/> value="{% trans "Log out" %}">
</form> </form>
</li> </li>
</ul> </ul>
@ -240,7 +240,7 @@
method="post" action="{% url 'users:logout' %}"> method="post" action="{% url 'users:logout' %}">
{% csrf_token %} {% csrf_token %}
<input type="submit" class="nav-link no-running-status btn btn-link" <input type="submit" class="nav-link no-running-status btn btn-link"
value="{% trans "Log out" %}"/> value="{% trans "Log out" %}">
</form> </form>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -15,7 +15,7 @@ no-brand
<div class="logo"> <div class="logo">
<img class="firstboot img-fluid" alt="{{ box_name }}" <img class="firstboot img-fluid" alt="{{ box_name }}"
src="{% static 'theme/img/freedombox-logo-standard.svg' %}"/> src="{% static 'theme/img/freedombox-logo-standard.svg' %}">
</div> </div>
{% if is_first_setup_running %} {% if is_first_setup_running %}

View File

@ -63,7 +63,7 @@
{% endif %} {% endif %}
<div class="card-icon"> <div class="card-icon">
{% if shortcut.icon|first == "/" %} {% if shortcut.icon|first == "/" %}
<img src="{{ shortcut.icon }}"/> <img src="{{ shortcut.icon }}">
{% else %} {% else %}
{% if shortcut.app_id %} {% if shortcut.app_id %}
{% icon shortcut.app_id|add:'/icons/'|add:shortcut.icon|add:'.svg' class='card-icon' %} {% icon shortcut.app_id|add:'/icons/'|add:shortcut.icon|add:'.svg' class='card-icon' %}
@ -95,7 +95,7 @@
<p> <p>
<a href="{% url 'help:about' %}" title="{% trans "About" %}"> <a href="{% url 'help:about' %}" title="{% trans "About" %}">
<img class="footer-logo" alt="{{ box_name }}" <img class="footer-logo" alt="{{ box_name }}"
src="{% static 'theme/img/freedombox-logo-powered.svg' %}"/> src="{% static 'theme/img/freedombox-logo-powered.svg' %}">
</a> </a>
</p> </p>
{% endblock %} {% endblock %}