CSS : Modifications consequent to XHTML modifications;

Python : Modifications consequent to XHTML modifications;
TOML   : Various of modifications;
XHTML  : Uniform templates.
This commit is contained in:
Schimon Jehudah, Adv. 2024-11-05 10:51:28 +02:00
parent 82fb55ca1c
commit cbcf3b58d0
8 changed files with 512 additions and 289 deletions

View file

@ -6,20 +6,55 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<title>{{brand_name}}: {{action}} {% if title %}{{title}}{% else %}{{jid_bare}}{% endif %}</title>
<meta name="description" content="{{action}} {{title}}" />
<title>{{brand_name}}: {{action}} {% if alias %}{{alias}}{% else %}{{title}}{% endif %}</title>
<meta name="description" content="{{action}} {% if alias %}{{alias}}{% else %}{{title}}{% endif %}" />
<meta name="generator" content="Fast And Sleek Invite" />
<meta name="uri" content="{{xmpp_uri}}" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta property="og:description" content="{{action}} {{title}}" />
<meta property="og:description" content="{{action}} {% if alias %}{{alias}}{% else %}{{title}}{% endif %}" />
<meta property="og:image" content="/photo/{{filename}}" />
<meta property="og:site_name" content="{{brand_name}}" />
<meta property="og:title" content="{{title}}" />
<meta property="og:title" content="{% if alias %}{{alias}}{% else %}{{title}}{% endif %}" />
<meta property="og:type" content="website" />
<meta property="og:url" content="{{url}}" />
<link rel="alternate icon" href="/img/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/img/favicon.svg" type="image/svg+xml" />
<link rel="stylesheet" href="/css/stylesheet.css" media="screen" type="text/css" />
{% if selection %}
<style>
body {
/* background-repeat: no-repeat; */
background:
url(/img/background.svg),
linear-gradient(
to right,
rgba({{selection[0][2]}}, {{selection[0][1]}}, {{selection[0][0]}}, 0.7),
rgba({{selection[1][2]}}, {{selection[1][1]}}, {{selection[1][0]}}, 0.7)
);
}
@media (prefers-color-scheme: dark) {
body {
background:
url(/img/background.svg),
linear-gradient(
to right,
rgba({{selection[0][2]-50}}, {{selection[0][1]-50}}, {{selection[0][0]-50}}, 0.7),
rgba({{selection[1][2]-50}}, {{selection[1][1]-50}}, {{selection[1][0]-50}}, 0.7)
);
}
}
@media (max-width: 725px) and (prefers-color-scheme: dark) {
body {
background: #2b2a33;
}
}
@media (max-width: 725px) {
body {
background: #f5f5f5;
}
}
</style>
{% endif %}
</head>
<body>
<div id="overlay">
@ -32,9 +67,29 @@
</a>
</div>
<div id="container">
<div id="content">
<div id="profile">
<h1>{{title}}</h1>
{% if filename %}
<div id="graphics">
<!-- a href="xmpp:{{jid_bare}}" -->
<img id="photo" src="/photo/{{filename}}" />
<img id="qrcode" src="/qr/{{jid_bare}}.png" />
<!-- /a -->
</div>
{% endif %}
<div id="vcard-note">
{% if note %}{{note}}{% endif %}
</div>
<!-- div>
<pre id="xmpp-uri">{{xmpp_uri}}</pre>
</div -->
{% if exception %}
<div>
<code>{{exception}}</code>
</div>
{% endif %}
{% if links %}
<div id="action-bar">
<div id="action">
{% for link in links %}
<a href="{{link['href']}}" id="{{link['iden']}}">
{{link['name']}}
@ -42,31 +97,22 @@
{% endfor %}
</div>
{% endif %}
<div id="profile-top">
{% if filename %}
<img id="photo" src="/photo/{{filename}}" />
<div id="conference">
{% if subject %}
<div id="subject">
<strong>🗣️ Subject</strong>
<pre>{{subject}}</pre>
</div>
{% endif %}
<span id="titles">
<h1>{% if jid_title %}{{jid_title}}{% else %}Group Chat{% endif %}</h1>
<a href="/j/{{jid_bare}}">
<h2>{% if jid_note %}{{jid_note}}{% else %}{{jid_bare}}{% endif %}</h2>
</a>
</span>
<img id="qrcode" src="/qr/{{jid_bare}}.png" />
</div>
<div>
{% if subject %}
<pre id="subject">{{subject}}</pre>
{% endif %}
</div>
{% if messages %}
<div id="entries">
{% for message in messages %}
<div class="entry"
{% if messages %}
<div id="messages">
{% for message in messages %}
<div class="message"
id="{{message['id']}}">
<a href="#{{message['id']}}" title="{{message['timestamp']}}">💬️</a>
<strong>{{message['alias']}}</strong>
<div class="summary">{{message['body']}}</div>
<div class="date">{{message['timestamp']}}</div>
<div class="content">{{message['body']}}</div>
<!-- div class="date">{{message['timestamp']}}</div -->
<!--
% if reactions %
<div class="reactions">
@ -77,46 +123,59 @@
% endif %
-->
</div>
{% endfor %}
{% endfor %}
</div>
{% endif %}
</div>
{% if number_of_pages %}
<div id="number-of-pages">
{% if number_of_pages > 3 %}
{% if page_number < 2 %}
<span class="inactive" id="first">First</span>
<span class="inactive">Back</span>
{% else %}
<a href="?page=1" id="first">First</a>
<a href="?page={{page_number-1}}">Back</a>
{% endif %}
<a href="?page={{page_number}}">{{page_number}}</a>
{% if page_number == number_of_pages %}
<span class="inactive">Proceed</span>
<span class="inactive" id="last">Last</span>
{% else %}
<a href="?page={{page_number+1}}">Proceed</a>
<a href="?page={{number_of_pages}}" id="last">Last</a>
{% endif %}
{% else %}
{% for number in range(number_of_pages) %}
<a href="?page={{number+1}}">{{number+1}}</a>
{% endfor %}
{% endif %}
</div>
{% endif %}
{% if exception %}
<div>
<code id="exception">{{exception}}</code>
{% if previous %}
<div id="number-of-pages">
<a href="./">Previous</a>
</div>
{% endif %}
</div>
</div>
{% if number_of_pages %}
<div id="number-of-pages">
{% if number_of_pages > 3 %}
{% if page_number < 2 %}
<span class="inactive" id="first">First</span>
<span class="inactive">Back</span>
<div id="notice">
If you already have <strong>{% if news_client and jid_kind == 'pubsub' %}{{news_client}}{% elif chat_client %}{{chat_client}}{% else %}an XMPP Client{% endif %}</strong> you can
<br/>
{% if jid_kind in ('conference', 'mix', 'muc') %}
join to
{% elif jid_kind == 'pubsub' %}
subscribe to
{% elif jid_kind == 'bot' %}
try
{% elif jid_kind == 'server' %}
explore
{% else %}
<a href="?page=1" id="first">First</a>
<a href="?page={{page_number-1}}">Back</a>
talk with
{% endif %}
<a href="?page={{page_number}}">{{page_number}}</a>
{% if page_number == number_of_pages %}
<span class="inactive">Proceed</span>
<span class="inactive" id="last">Last</span>
{% else %}
<a href="?page={{page_number+1}}">Proceed</a>
<a href="?page={{number_of_pages}}" id="last">Last</a>
{% endif %}
{% else %}
{% for number in range(number_of_pages) %}
<a href="?page={{number+1}}">{{number+1}}</a>
{% endfor %}
{% endif %}
<strong>{{title}}</strong>
right now.
</div>
</div>
{% endif %}
{% if previous %}
<div id="number-of-pages">
<a href="./">Previous</a>
</div>
{% endif %}
{% if message %}
<div id="xmpp-message">{{message}}</div>
{% endif %}

View file

@ -36,7 +36,7 @@
<a class="system-menu" href="/selection">&lt; Systems</a>
<h1>{{title}}</h1>
{% if skipped %}
<a class="system-menu" href="/download/{{software}}/all">All clients &gt;</a>
<a class="system-menu" href="/download/{{software}}/all">Clients &gt;</a>
{% elif not featured %}
<a class="system-menu" href="/download/{{software}}">Featured &gt;</a>
{% else %}
@ -72,12 +72,12 @@
<img src="/img/fdroid.svg" />
</a>
<span>
<strong>Recommended:</strong>
We advise installing an XMPP client with the
<a href="https://f-droid.org">F-Droid</a> repository, to
ensure that you are always using the most updated and secure
version of your XMPP chat client of choice, with the latest
and best that XMPP has to offer.
<strong>(recommended)</strong>
</span>
</span>
<span class="notice">
@ -85,13 +85,13 @@
<img src="/img/plant.svg" />
</a>
<span>
<strong>Optional:</strong>
We further suggest using an updated Android system. If your
smartphone manufacturer has ceased to provide updates,
then you can install <a href="https://divestos.org">DivestOS
Mobile</a>, <a href="https://grapheneos.org/">GrapheneOS</a>
or find another custom ROM for your device at
<a href="https://customrombay.org">CustomRomBay</a>.
<strong>(optional)</strong>
</span>
</span>
</div>
@ -175,6 +175,7 @@
<dt>
<a href="{{client['href']}}" id="{{client['iden']}}">
<img class="narrow" src="/img/{{client['iden']}}.svg"/>
<!-- img class="narrow" src="/img/{{client['iden']}}-small.svg"/ -->
<strong>{{client['name']}}</strong>
</a>
</dt>

View file

@ -103,12 +103,27 @@
</a>
</div -->
<div id="count">
{% if count_item or count_message %}
<a href="{{view_href}}">{% if count_item %}{{count_item}} {{instance}}{% elif count_message %}Preview{% endif %}</a>
<span></span>
{% if jid_kind in ('conference', 'mix', 'muc') %}
{% if count_message %}
<a href="{{view_href}}">
{% if count_item %}
{{count_item}} {{instance}}
{% else %}
Preview
{% endif %}
</a>
{% else %}
<span>
{{count_item}} {{instance}}
</span>
{% endif %}
{% elif count_item %}
<a href="{{view_href}}">
{{instance}}
</a>
{% endif %}
{% if vcard4 %}
<a href="/c/{{jid_bare}}">my profile</a>
<a href="/c/{{jid_bare}}">interests</a>
{% endif %}
</div>
</div>

View file

@ -6,20 +6,55 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<title>{{brand_name}}: {{action}} {% if title %}{{title}}{% else %}{{jid_bare}}{% endif %}</title>
<meta name="description" content="{{action}} {{title}}" />
<title>{{brand_name}}: {{action}} {% if alias %}{{alias}}{% else %}{{title}}{% endif %}</title>
<meta name="description" content="{{action}} {% if alias %}{{alias}}{% else %}{{title}}{% endif %}" />
<meta name="generator" content="Fast And Sleek Invite" />
<meta name="uri" content="{{xmpp_uri}}" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta property="og:description" content="{{action}} {{title}}" />
<meta property="og:description" content="{{action}} {% if alias %}{{alias}}{% else %}{{title}}{% endif %}" />
<meta property="og:image" content="/photo/{{filename}}" />
<meta property="og:site_name" content="{{brand_name}}" />
<meta property="og:title" content="{{title}}" />
<meta property="og:title" content="{% if alias %}{{alias}}{% else %}{{title}}{% endif %}" />
<meta property="og:type" content="website" />
<meta property="og:url" content="{{url}}" />
<link rel="alternate icon" href="/img/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/img/favicon.svg" type="image/svg+xml" />
<link rel="stylesheet" href="/css/stylesheet.css" media="screen" type="text/css" />
{% if selection %}
<style>
body {
/* background-repeat: no-repeat; */
background:
url(/img/background.svg),
linear-gradient(
to right,
rgba({{selection[0][2]}}, {{selection[0][1]}}, {{selection[0][0]}}, 0.7),
rgba({{selection[1][2]}}, {{selection[1][1]}}, {{selection[1][0]}}, 0.7)
);
}
@media (prefers-color-scheme: dark) {
body {
background:
url(/img/background.svg),
linear-gradient(
to right,
rgba({{selection[0][2]-50}}, {{selection[0][1]-50}}, {{selection[0][0]-50}}, 0.7),
rgba({{selection[1][2]-50}}, {{selection[1][1]-50}}, {{selection[1][0]-50}}, 0.7)
);
}
}
@media (max-width: 725px) and (prefers-color-scheme: dark) {
body {
background: #2b2a33;
}
}
@media (max-width: 725px) {
body {
background: #f5f5f5;
}
}
</style>
{% endif %}
</head>
<body>
<div id="overlay">
@ -32,9 +67,29 @@
</a>
</div>
<div id="container">
<div id="content">
<div id="profile">
<h1>{{title}}</h1>
{% if filename %}
<div id="graphics">
<!-- a href="xmpp:{{jid_bare}}" -->
<img id="photo" src="/photo/{{filename}}" />
<img id="qrcode" src="/qr/{{jid_bare}}.png" />
<!-- /a -->
</div>
{% endif %}
<div id="vcard-note">
{% if note %}{{note}}{% endif %}
</div>
<!-- div>
<pre id="xmpp-uri">{{xmpp_uri}}</pre>
</div -->
{% if exception %}
<div>
<code>{{exception}}</code>
</div>
{% endif %}
{% if links %}
<div id="action-bar">
<div id="action">
{% for link in links %}
<a href="{{link['href']}}" id="{{link['iden']}}">
{{link['name']}}
@ -42,54 +97,38 @@
{% endfor %}
</div>
{% endif %}
<div id="profile-top">
{% if filename %}
<img id="photo" src="/photo/{{filename}}" />
{% endif %}
<span id="titles">
<h1>{{node_title}}</h1>
<a href="/j/{{jid_bare}}/{{node_name}}">
<h2>{{jid_title}}</h2>
</a>
{% if node_note %}
<h3>
{{node_note}}
</h3>
{% endif %}
</span>
<img id="qrcode" src="/qr/{{jid_bare}}.png" />
</div>
{% if entries %}
<div id="entries">
{% for entry in entries %}
<div class="entry"
id="{{entry['id']}}">
<strong>{{entry['title']}}</strong>
<div class="summary">{{entry['content'] or entry['summary']}}</div>
<div class="date">{{entry['updated'] or entry['published']}}</div>
{% if entry['tags'] %}
<div class="tags">
<span>Tags:</span>
{% for tag in entry['tags'] %}
<span>{{tag}}</span>
{% endfor %}
<div id="pubsub">
{% if entries %}
<div id="entries">
{% for entry in entries %}
<div class="entry"
id="{{entry['id']}}">
<h3>
<a href="#{{entry['id']}}" title="{{entry['updated'] or entry['published']}}">📜️</a>
<strong>{{entry['title']}}</strong>
</h3>
<div class="summary">{{entry['content'] or entry['summary']}}</div>
<!-- div class="date">{{entry['updated'] or entry['published']}}</div -->
{% if entry['tags'] %}
<div class="tags">
<span>Tags:</span>
{% for tag in entry['tags'] %}
<span>{{tag}}</span>
{% endfor %}
</div>
{% endif %}
<div class="link">
<a href="/d/{{jid_bare}}/{{node_name}}/{{entry['id']}}"
title="Permalink (i.e. permanent link)."
class="permalink">Permalink</a>
(<a href="{{entry['href']}}"
title="Source might require an XMPP client.">Source</a>)
</div>
{% endif %}
<div class="link">
<a href="{{entry['href']}}">Source</a>
<a href="/d/{{jid_bare}}/{{node_name}}/{{entry['id']}}"
title="Permalink (i.e. permanent link)"
class="permalink">Permalink</a>
</div>
</div>
{% endfor %}
</div>
{% endif %}
{% if exception %}
<div>
<code id="exception">{{exception}}</code>
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
</div>
{% if number_of_pages %}
<div id="number-of-pages">
{% if number_of_pages > 3 %}
@ -117,23 +156,26 @@
{% endif %}
{% if previous %}
<div id="number-of-pages">
<!-- a href="./">Return to {{node_title}}</a -->
<a href="./">Return</a>
<a href="./">Previous</a>
</div>
{% endif %}
<!-- div>
<a id="preview" href="/view/{{jid_bare}}">
Preview journal OR Preview group chat
</a>
</div -->
<!-- div>
<a href="{{brand_site}}">
<img id="logo-bottom" src="/img/logo-wordmark-vertical.svg" />
</a>
</div -->
<!-- div id="note">
The Universal Messaging Standard
</div -->
</div>
<div id="notice">
If you already have <strong>{% if news_client and jid_kind == 'pubsub' %}{{news_client}}{% elif chat_client %}{{chat_client}}{% else %}an XMPP Client{% endif %}</strong> you can
<br/>
{% if jid_kind in ('conference', 'mix', 'muc') %}
join to
{% elif jid_kind == 'pubsub' %}
subscribe to
{% elif jid_kind == 'bot' %}
try
{% elif jid_kind == 'server' %}
explore
{% else %}
talk with
{% endif %}
<strong>{{title}}</strong>
right now.
</div>
</div>
{% if message %}

View file

@ -20,6 +20,41 @@
<link rel="alternate icon" href="/img/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/img/favicon.svg" type="image/svg+xml" />
<link rel="stylesheet" href="/css/stylesheet.css" media="screen" type="text/css" />
{% if selection %}
<style>
body {
/* background-repeat: no-repeat; */
background:
url(/img/background.svg),
linear-gradient(
to right,
rgba({{selection[0][2]}}, {{selection[0][1]}}, {{selection[0][0]}}, 0.7),
rgba({{selection[1][2]}}, {{selection[1][1]}}, {{selection[1][0]}}, 0.7)
);
}
@media (prefers-color-scheme: dark) {
body {
background:
url(/img/background.svg),
linear-gradient(
to right,
rgba({{selection[0][2]-50}}, {{selection[0][1]-50}}, {{selection[0][0]-50}}, 0.7),
rgba({{selection[1][2]-50}}, {{selection[1][1]-50}}, {{selection[1][0]-50}}, 0.7)
);
}
}
@media (max-width: 725px) and (prefers-color-scheme: dark) {
body {
background: #2b2a33;
}
}
@media (max-width: 725px) {
body {
background: #f5f5f5;
}
}
</style>
{% endif %}
</head>
<body>
<div id="overlay">
@ -36,65 +71,26 @@
<h1>
{% if 'fn' in vcard_info and vcard_info['fn'] %}
{{vcard_info['fn']}}
{% elif title %}
{{title}}
{% else %}
{{jid_bare}}
{% endif %}
</h1>
{% if 'org' in vcard_info and vcard_info['org'] %}
<h2>{{vcard_info['org']}}</h2>
{% if filename %}
<div id="graphics">
<!-- a href="xmpp:{{jid_bare}}" -->
<img id="photo" src="/photo/{{filename}}" />
<img id="qrcode" src="/qr/{{jid_bare}}.png" />
<!-- /a -->
</div>
{% endif %}
{% if 'note' in vcard_info and vcard_info['note'] %}
<div id="vcard-note-full">{{vcard_info['note']}}</div>
{% endif %}
<div id="vcard-links">
{% if 'email' in vcard_info and vcard_info['email'] %}
<a class="vcard-link" href="mailto:{{vcard_info['email']}}">✉️</a>
{% endif %}
{% if 'impp' in vcard_info and vcard_info['impp'] %}
<a class="vcard-link" href="{{vcard_info['impp']}}">💬️</a>
{% endif %}
<a class="vcard-link" href="xmpp:{{xmpp_uri}}">💡️</a>
{% if 'url' in vcard_info and vcard_info['url'] %}
<a class="vcard-link" href="{{vcard_info['url']}}">🔗️</a>
{% endif %}
</div>
<div id="vcard-links-extra">
{% if 'movim' in vcard_info and vcard_info['movim'] %}
<h3>Movim</h3>
{% for i in vcard_info['movim'] %}
<a href="{{i['uri']}}">{{i['label']}}</a>
{% endfor %}
{% endif %}
{% if 'journal' in vcard_info and vcard_info['journal'] %}
<h3>Journal</h3>
{% for i in vcard_info['journal'] %}
<a href="{{i['uri']}}">{{i['label']}}</a>
{% endfor %}
{% endif %}
{% if 'gallery' in vcard_info and vcard_info['gallery'] %}
<h3>Gallery</h3>
{% for i in vcard_info['gallery'] %}
<a href="{{i['uri']}}">{{i['label']}}</a>
{% endfor %}
{% endif %}
{% if 'peertube' in vcard_info and vcard_info['peertube'] %}
<h3>PeerTube</h3>
{% for i in vcard_info['peertube'] %}
<a href="{{i['uri']}}">{{i['label']}}</a>
{% endfor %}
{% endif %}
{% if 'code' in vcard_info and vcard_info['code'] %}
<h3>Code</h3>
{% for i in vcard_info['code'] %}
<a href="{{i['uri']}}">{{i['label']}}</a>
{% endfor %}
{% endif %}
</div>
<div>
{% for i in vcard_info %}
<!-- a href="{{vcard_info[i]}}">{{i}}</a -->
{% endfor %}
<div id="vcard-note">
{% if note %}{{note}}{% endif %}
</div>
<!-- div>
<pre id="xmpp-uri">{{xmpp_uri}}</pre>
</div -->
{% if exception %}
<div>
<code>{{exception}}</code>
@ -109,23 +105,57 @@
{% endfor %}
</div>
{% endif %}
<!-- div>
<a id="preview" href="/view/{{jid_bare}}">
Preview journal OR Preview group chat
</a>
</div -->
{% if count or jid_kind in ('conference', 'mix', 'muc') %}
<div id="count">
<a href="{{view_href}}">
{% if count %}
{{count}} {{instance}}
{% elif jid_kind in ('conference', 'mix', 'muc') %}
Preview
{% endif %}
</a>
<div id="vcard">
{% if 'org' in vcard_info and vcard_info['org'] %}
<h2>{{vcard_info['org']}}</h2>
{% endif %}
{% if 'note' in vcard_info and vcard_info['note'] %}
<div id="vcard-note-full">{{vcard_info['note']}}</div>
{% endif %}
<div id="vcard-links">
{% if 'email' in vcard_info and vcard_info['email'] %}
<a class="vcard-link" href="mailto:{{vcard_info['email']}}">✉️</a>
{% endif %}
{% if 'impp' in vcard_info and vcard_info['impp'] %}
<a class="vcard-link" href="{{vcard_info['impp']}}">💬️</a>
{% endif %}
<a class="vcard-link" href="xmpp:{{xmpp_uri}}">💡️</a>
{% if 'url' in vcard_info and vcard_info['url'] %}
<a class="vcard-link" href="{{vcard_info['url']}}">🔗️</a>
{% endif %}
</div>
<div id="vcard-links-extra">
{% for category in vcard_info['extras'] %}
<h3>{{category.title()}}</h3>
{% for i in vcard_info['extras'][category] %}
<a href="{{i['uri']}}">{{i['label']}}</a>
{% endfor %}
{% endfor %}
</div>
</div>
{% if previous %}
<div id="number-of-pages">
<a href="./">Previous</a>
</div>
{% endif %}
</div>
<div id="notice">
If you already have <strong>{% if news_client and jid_kind == 'pubsub' %}{{news_client}}{% elif chat_client %}{{chat_client}}{% else %}an XMPP Client{% endif %}</strong> you can
<br/>
{% if jid_kind in ('conference', 'mix', 'muc') %}
join to
{% elif jid_kind == 'pubsub' %}
subscribe to
{% elif jid_kind == 'bot' %}
try
{% elif jid_kind == 'server' %}
explore
{% else %}
talk with
{% endif %}
<strong>{{title}}</strong>
right now.
</div>
</div>
{% if message %}
<div id="xmpp-message">{{message}}</div>