Add file PyProject;
Support display of a single pubsub node item; Update document README; Modularize code;
This commit is contained in:
parent
37aa7e8f40
commit
5e495579c2
32 changed files with 2431 additions and 2059 deletions
184
template/conference.xhtml
Normal file
184
template/conference.xhtml
Normal file
|
@ -0,0 +1,184 @@
|
|||
<?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">
|
||||
<!-- Kayla (Céile) XMPP Invite -->
|
||||
<!-- Zenya (Xenia) XMPP Invite -->
|
||||
<!-- Fast And Sleek Invite (FASI) -->
|
||||
<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 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}} {% 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="{% 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">
|
||||
<div id="bar">
|
||||
<a href="{{brand_site}}">
|
||||
<img id="logo" src="/img/logo-wordmark-horizontal.svg" />
|
||||
</a>
|
||||
<a id="download" href="/download">
|
||||
Download
|
||||
</a>
|
||||
</div>
|
||||
<div id="container">
|
||||
<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">
|
||||
{% for link in links %}
|
||||
<a href="{{link['href']}}" id="{{link['iden']}}">
|
||||
{{link['name']}}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div id="conference">
|
||||
{% if subject %}
|
||||
<div id="subject">
|
||||
<strong>🗣️ Subject</strong>
|
||||
<pre>{{subject}}</pre>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% 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="content">{{message['body']}}</div>
|
||||
<!-- div class="date">{{message['timestamp']}}</div -->
|
||||
<!--
|
||||
% if reactions %
|
||||
<div class="reactions">
|
||||
% for reaction in reactions %
|
||||
<span>{{reaction}}</span>
|
||||
% endfor %
|
||||
</div>
|
||||
% endif %
|
||||
-->
|
||||
</div>
|
||||
{% 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 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>
|
||||
{% endif %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
134
template/disco.xhtml
Normal file
134
template/disco.xhtml
Normal file
|
@ -0,0 +1,134 @@
|
|||
<?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">
|
||||
<!-- Kayla (Céile) XMPP Invite -->
|
||||
<!-- Zenya (Xenia) XMPP Invite -->
|
||||
<!-- Fast And Sleek Invite (FASI) -->
|
||||
<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}} {{title}}</title>
|
||||
<meta name="description" content="{{action}} {{title}}" />
|
||||
<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:image" content="/photo/{{filename}}" />
|
||||
<meta property="og:site_name" content="{{brand_name}}" />
|
||||
<meta property="og:title" content="{{title}}" />
|
||||
<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" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="overlay">
|
||||
<div id="bar">
|
||||
<a href="{{brand_site}}">
|
||||
<img id="logo" src="/img/logo-wordmark-horizontal.svg" />
|
||||
</a>
|
||||
<a id="download" href="/download">
|
||||
Download
|
||||
</a>
|
||||
</div>
|
||||
<div id="container">
|
||||
<div id="profile-compact">
|
||||
|
||||
</div>
|
||||
<div id="profile">
|
||||
<h1>{{title}}</h1>
|
||||
{% if note %}
|
||||
<h2>{{note}}</h2>
|
||||
{% endif %}
|
||||
{% if services %}
|
||||
<div id="services">
|
||||
{% for category in services %}
|
||||
{% if services[category] %}
|
||||
<h3>Services ({{category}})</h3>
|
||||
<dl>
|
||||
{% for service in services[category] %}
|
||||
{% if service['info']['text'] %}
|
||||
<dt>
|
||||
<h4>{{service['jid']}}</h4>
|
||||
</dt>
|
||||
<dd>
|
||||
<strong>
|
||||
<code>{{service['info']['condition']}}</code>
|
||||
</strong>
|
||||
</dd>
|
||||
<dd>
|
||||
<code>{{service['info']['text']}}</code>
|
||||
</dd>
|
||||
{% else %}
|
||||
<dt>
|
||||
<h4>
|
||||
{% if service['identity'] and service['identity'][3] %}
|
||||
{{service['identity'][3]}}
|
||||
{% else %}
|
||||
{{service['name']}}
|
||||
{% endif %}
|
||||
</h4>
|
||||
</dt>
|
||||
<dd>
|
||||
<pre>Jabber ID: <a href="/d/{{service['jid']}}">{{service['jid']}}</a></pre>
|
||||
{% if service['node'] %}
|
||||
<pre>Node Name: <a href="/d/{{service['jid']}}/{{service['node']}}">{{service['node']}}</a></pre>
|
||||
{% endif %}
|
||||
</dd>
|
||||
{% if service['kind'] %}
|
||||
<dd>
|
||||
<pre> Kind: {{service['kind']}}</pre>
|
||||
</dd>
|
||||
{% endif %}
|
||||
{% if service['identity'] %}
|
||||
<dd>
|
||||
<pre> Category: {{service['identity'][0]}}</pre>
|
||||
</dd>
|
||||
<dd>
|
||||
<pre> Type: {{service['identity'][1]}}</pre>
|
||||
</dd>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</dl>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div>
|
||||
<pre id="xmpp-uri">{{xmpp_uri}}</pre>
|
||||
</div>
|
||||
{% if exception %}
|
||||
<div>
|
||||
<code id="exception">{{exception}}</code>
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- % if mix or muc % -->
|
||||
{% if link_href %}
|
||||
<div id="action">
|
||||
<a href="{{link_href}}">
|
||||
{{link_text}}
|
||||
</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>
|
||||
{% if message %}
|
||||
<div id="message">{{message}}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
252
template/download.xhtml
Normal file
252
template/download.xhtml
Normal file
|
@ -0,0 +1,252 @@
|
|||
<?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">
|
||||
<!-- Kayla (Céile) XMPP Invite -->
|
||||
<!-- Zenya (Xenia) XMPP Invite -->
|
||||
<!-- Fast And Sleek Invite (FASI) -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||
<title>{{brand_name}}: Download</title>
|
||||
<meta name="description" content="Download an XMPP client and access to the world's foremost and premier publishing and telecommunication platform with top-tier encryption, privacy and security that are to be offered as of yet." />
|
||||
<meta name="generator" content="Fast And Sleek Invite" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta property="og:description" content="Download an XMPP client and access to the world's foremost and premier publishing and telecommunication platform with top-tier encryption, privacy and security that are to be offered as of yet." />
|
||||
<meta property="og:image" content="/photo/{{filename}}" />
|
||||
<meta property="og:site_name" content="{{brand_name}}" />
|
||||
<meta property="og:title" content="{{title}}" />
|
||||
<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" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="overlay">
|
||||
<div id="bar">
|
||||
<a href="{{brand_site}}">
|
||||
<img id="logo" src="/img/logo-wordmark-horizontal.svg" />
|
||||
</a>
|
||||
<a id="download" href="/download">
|
||||
Download
|
||||
</a>
|
||||
</div>
|
||||
<div id="container-of-selection">
|
||||
{% if client_selection %}
|
||||
<div id="system-title">
|
||||
<a class="system-menu" href="/selection">< Systems</a>
|
||||
<h1>{{title}}</h1>
|
||||
{% if skipped %}
|
||||
<a class="system-menu" href="/download/{{software}}/all">Clients ></a>
|
||||
{% elif not featured %}
|
||||
<a class="system-menu" href="/download/{{software}}">Featured ></a>
|
||||
{% else %}
|
||||
<span class="system-menu" />
|
||||
{% endif %}
|
||||
</div>
|
||||
<div id="software-menu">
|
||||
{% for client in client_selection %}
|
||||
<a class="system" href="#{{client['iden']}}">
|
||||
<img src="/img/{{client['iden']}}.svg"/>
|
||||
<div>{{client['name']}}</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if title == 'Apple' %}
|
||||
<div id="security-notices">
|
||||
<span class="notice">
|
||||
<a href="/download/haiku">
|
||||
<img src="/img/haiku.svg" />
|
||||
</a>
|
||||
<span>
|
||||
Please refer to the section
|
||||
<a href="/download/haiku">Haiku</a> for a selection of
|
||||
clients for the Haiku operating system.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if title == 'Android' %}
|
||||
<div id="security-notices">
|
||||
<span class="notice">
|
||||
<a href="https://f-droid.org">
|
||||
<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.
|
||||
</span>
|
||||
</span>
|
||||
<span class="notice">
|
||||
<a href="https://customrombay.org">
|
||||
<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>.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if title == 'Haiku' %}
|
||||
<div id="security-notices">
|
||||
<span class="notice">
|
||||
<img src="/img/haikudepot.svg" />
|
||||
<span>
|
||||
Most of the software that are listed herein should be
|
||||
available for you to install from desktop directly with
|
||||
HaikuDepot.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if title == 'Linux' %}
|
||||
<div id="security-notices">
|
||||
<span class="notice">
|
||||
<img src="/img/linux.svg" />
|
||||
<span>
|
||||
The listed XMPP clients, herein, are also usable with Linux
|
||||
systems that are designed for mobile devices, such as
|
||||
<a href="https://droidian.org">Droidian</a>,
|
||||
<a href="https://mobian.org">Mobian</a> and
|
||||
<a href="https://postmarketos.org">postmarketOS</a>.
|
||||
</span>
|
||||
</span>
|
||||
<span class="notice">
|
||||
<a href="/download/posix">
|
||||
<img src="/img/posix.svg" />
|
||||
</a>
|
||||
<span>
|
||||
Please refer to section <a href="/download/posix">POSIX</a>
|
||||
for a selection of console software with text-based interface.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if title == 'POSIX' %}
|
||||
<div id="security-notices">
|
||||
<span class="notice">
|
||||
<img src="/img/posix.svg" />
|
||||
<span>
|
||||
The software that are listed herein are intended for people
|
||||
who either want to use console interface, or remotely
|
||||
control their chat client.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if title == 'UBports' %}
|
||||
<div id="security-notices">
|
||||
<span class="notice">
|
||||
<img src="/img/openstore.svg" style="border-radius: 8px" />
|
||||
<span>
|
||||
The software that are listed herein are available for you to
|
||||
install directly with OpenStore.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if title == 'Windows' %}
|
||||
<div id="security-notices">
|
||||
<span class="notice">
|
||||
<a href="https://reactos.org">
|
||||
<img src="/img/reactos.svg" />
|
||||
</a>
|
||||
<span>
|
||||
The listed XMPP clients, herein, are also compatible with
|
||||
the <a href="https://reactos.org">ReactOS</a> operating
|
||||
system.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
<br/>
|
||||
<hr/>
|
||||
<dl id="selection">
|
||||
{% for client in client_selection %}
|
||||
<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>
|
||||
<dd>
|
||||
<span>
|
||||
<span class="text">{{client['about']}}</span>
|
||||
<div class="features">
|
||||
{% if 'adhoc' in client['properties'] %}
|
||||
<span>🪄️ Ad-Hoc Commands</span>
|
||||
{% endif %}
|
||||
{% if 'desktop' in client['properties'] %}
|
||||
<span>🖥️ Desktop</span>
|
||||
{% endif %}
|
||||
{% if 'mobile' in client['properties'] %}
|
||||
<span>📱 Mobile</span>
|
||||
{% endif %}
|
||||
{% if 'omemo' in client['properties'] %}
|
||||
<!-- img class="icon" src="/img/omemo.svg" / -->
|
||||
<span>🐟 OMEMO</span>
|
||||
{% endif %}
|
||||
{% if 'openpgp' in client['properties'] %}
|
||||
<span>🔐️ OpenPGP</span>
|
||||
{% endif %}
|
||||
{% if 'otr' in client['properties'] %}
|
||||
<span>🔏️ OTR</span>
|
||||
{% endif %}
|
||||
{% if 'plugin' in client['properties'] %}
|
||||
<span>🧩️ Plugins</span>
|
||||
{% endif %}
|
||||
{% if 'pubsub' in client['properties'] %}
|
||||
<span>📡️ PubSub</span>
|
||||
{% endif %}
|
||||
{% if 'resources' in client %}
|
||||
<input type="checkbox" id="toggle-{{client['iden']}}" />
|
||||
<label for="toggle-{{client['iden']}}" title="Click to display more information.">Details</label>
|
||||
<ul class="details">
|
||||
{% for resource in client['resources'] %}
|
||||
<li><a href="{{resource['url']}}">{{resource['txt']}}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
</span>
|
||||
<span>
|
||||
<img class="wide" src="/img/{{client['iden']}}.svg" />
|
||||
</span>
|
||||
</dd>
|
||||
{% endfor %}
|
||||
<br/>
|
||||
<hr/>
|
||||
<dt>
|
||||
<a href="https://xmpp.org/software/">
|
||||
<img class="narrow" src="/img/xmpp.svg"/>
|
||||
<strong>About XMPP</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
<span>
|
||||
XMPP is the decentralized, free, open, and private messaging
|
||||
and publishing protocol that drives the world's top-tier and
|
||||
largest open IM network which allows for end-to-end
|
||||
encrypted messaging, group chats, voice calls, video
|
||||
conferences and more. Join to the community! (est. 1999)
|
||||
</span>
|
||||
<span>
|
||||
<img class="wide" src="/img/xmpp.svg" />
|
||||
</span>
|
||||
</dd>
|
||||
</dl>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
153
template/jid.xhtml
Normal file
153
template/jid.xhtml
Normal file
|
@ -0,0 +1,153 @@
|
|||
<?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">
|
||||
<!-- Kayla (Céile) XMPP Invite -->
|
||||
<!-- Zenya (Xenia) XMPP Invite -->
|
||||
<!-- Fast And Sleek Invite (FASI) -->
|
||||
<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 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}} {% 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="{% 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">
|
||||
<div id="bar">
|
||||
<a href="{{brand_site}}">
|
||||
<img id="logo" src="/img/logo-wordmark-horizontal.svg" />
|
||||
</a>
|
||||
<a id="download" href="/download">
|
||||
Download
|
||||
</a>
|
||||
</div>
|
||||
<div id="container">
|
||||
<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">
|
||||
{% for link in links %}
|
||||
<a href="{{link['href']}}" id="{{link['iden']}}">
|
||||
{{link['name']}}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- div>
|
||||
<a id="preview" href="/view/{{jid_bare}}">
|
||||
Preview journal OR Preview group chat
|
||||
</a>
|
||||
</div -->
|
||||
<div id="count">
|
||||
{% if jid_kind in ('conference', 'mix', 'muc') %}
|
||||
{% if count_message %}
|
||||
<a href="{{view_href}}">
|
||||
{% if count_item %}
|
||||
{{count_item}} {{instance}}
|
||||
{% else %}
|
||||
Preview
|
||||
{% endif %}
|
||||
</a>
|
||||
{% elif count_item %}
|
||||
<span>
|
||||
{{count_item}} {{instance}}
|
||||
</span>
|
||||
{% endif %}
|
||||
{% elif count_item %}
|
||||
<a href="{{view_href}}">
|
||||
{{instance}}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if vcard4 %}
|
||||
<a href="/c/{{jid_bare}}">interests</a>
|
||||
{% endif %}
|
||||
</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 %}
|
||||
<div id="xmpp-message">{{message}}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
64
template/main.xhtml
Normal file
64
template/main.xhtml
Normal file
|
@ -0,0 +1,64 @@
|
|||
<?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">
|
||||
<!-- Kayla (Céile) XMPP Invite -->
|
||||
<!-- Zenya (Xenia) XMPP Invite -->
|
||||
<!-- Fast And Sleek Invite (FASI) -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||
<title>{{brand_name}} : Welcome</title>
|
||||
<meta name="description" content="This is an XMPP lookup service, powered by FASI (Fast And Sleek Invite)." />
|
||||
<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="FASI : Welcome" />
|
||||
<meta property="og:image" content="/img/logo-wordmark-vertical.svg" />
|
||||
<meta property="og:site_name" content="{{brand_name}}" />
|
||||
<meta property="og:title" content="FASI : Welcome" />
|
||||
<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" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="overlay">
|
||||
<div id="bar">
|
||||
<a href="{{brand_site}}">
|
||||
<img id="logo" src="/img/logo-wordmark-horizontal.svg" />
|
||||
</a>
|
||||
<span id="space" />
|
||||
<a id="download" href="/download">
|
||||
Download
|
||||
</a>
|
||||
</div>
|
||||
<div id="container">
|
||||
<div id="profile">
|
||||
<h1>FASI</h1>
|
||||
<h3>Fast And Sleek Invite</h3>
|
||||
<div>
|
||||
<form action="/" method="get">
|
||||
<div>
|
||||
<label for="jid">Enter a Jabber ID to create an invitation card for.</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" id="jid" name="jid" placeholder="e.g. romeo@jabber.org" />
|
||||
</div>
|
||||
<div>
|
||||
<input id="input" type="submit" value="Invite" />
|
||||
</div>
|
||||
</form>
|
||||
</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>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
186
template/node.xhtml
Normal file
186
template/node.xhtml
Normal file
|
@ -0,0 +1,186 @@
|
|||
<?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">
|
||||
<!-- Kayla (Céile) XMPP Invite -->
|
||||
<!-- Zenya (Xenia) XMPP Invite -->
|
||||
<!-- Fast And Sleek Invite (FASI) -->
|
||||
<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 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}} {% 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="{% 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">
|
||||
<div id="bar">
|
||||
<a href="{{brand_site}}">
|
||||
<img id="logo" src="/img/logo-wordmark-horizontal.svg" />
|
||||
</a>
|
||||
<a id="download" href="/download">
|
||||
Download
|
||||
</a>
|
||||
</div>
|
||||
<div id="container">
|
||||
<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">
|
||||
{% for link in links %}
|
||||
<a href="{{link['href']}}" id="{{link['iden']}}">
|
||||
{{link['name']}}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<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>
|
||||
</div>
|
||||
{% 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 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>
|
||||
{% endif %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
61
template/result.xhtml
Normal file
61
template/result.xhtml
Normal file
|
@ -0,0 +1,61 @@
|
|||
<?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">
|
||||
<!-- Kayla (Céile) XMPP Invite -->
|
||||
<!-- Zenya (Xenia) XMPP Invite -->
|
||||
<!-- Fast And Sleek Invite (FASI) -->
|
||||
<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}} {{title}}</title>
|
||||
<meta name="description" content="{{action}} {{title}}" />
|
||||
<meta name="generator" content="Fast And Sleek Invite" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta property="og:description" content="{{action}} {{title}}" />
|
||||
<meta property="og:site_name" content="{{brand_name}}" />
|
||||
<meta property="og:title" content="{{title}}" />
|
||||
<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" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="overlay">
|
||||
<div id="bar">
|
||||
<a href="{{brand_site}}">
|
||||
<img id="logo" src="/img/logo-wordmark-horizontal.svg" />
|
||||
</a>
|
||||
<a id="download" href="/download">
|
||||
Download
|
||||
</a>
|
||||
</div>
|
||||
<div id="container">
|
||||
<div id="profile">
|
||||
<h1>{{title}}</h1>
|
||||
{% if note %}
|
||||
<h3>{{note}}</h3>
|
||||
{% endif %}
|
||||
<div>
|
||||
<pre id="xmpp-uri">{{xmpp_uri}}</pre>
|
||||
</div>
|
||||
{% if exception %}
|
||||
<div>
|
||||
<code>{{exception}}</code>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div id="action">
|
||||
<a href="/">Main</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>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
52
template/software.xhtml
Normal file
52
template/software.xhtml
Normal file
|
@ -0,0 +1,52 @@
|
|||
<?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">
|
||||
<!-- Kayla (Céile) XMPP Invite -->
|
||||
<!-- Zenya (Xenia) XMPP Invite -->
|
||||
<!-- Fast And Sleek Invite (FASI) -->
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
||||
<title>{{brand_name}}: System</title>
|
||||
<meta name="description" content="Operating System Selection" />
|
||||
<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="Operating System Selection" />
|
||||
<meta property="og:image" content="/img/logo-wordmark-horizontal.svg" />
|
||||
<meta property="og:site_name" content="Operating System Selection" />
|
||||
<meta property="og:title" content="Operating System Selection" />
|
||||
<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" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="overlay">
|
||||
<div id="bar">
|
||||
<a href="{{brand_site}}">
|
||||
<img id="logo" src="/img/logo-wordmark-horizontal.svg" />
|
||||
</a>
|
||||
<a id="download" href="/download">
|
||||
Download
|
||||
</a>
|
||||
</div>
|
||||
<div id="container-of-profile">
|
||||
<div id="profile">
|
||||
<h1>Choose Your System</h1>
|
||||
<div class="plain-note">
|
||||
And find the XMPP clients that are best for you.
|
||||
</div>
|
||||
<div id="software">
|
||||
{% for system in software %}
|
||||
<a class="system" href="/download/{{system['id']}}">
|
||||
<img src="/img/{{system['id']}}.svg" />
|
||||
<div>{{system['name']}}</div>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
165
template/vcard.xhtml
Normal file
165
template/vcard.xhtml
Normal file
|
@ -0,0 +1,165 @@
|
|||
<?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">
|
||||
<!-- Kayla (Céile) XMPP Invite -->
|
||||
<!-- Zenya (Xenia) XMPP Invite -->
|
||||
<!-- Fast And Sleek Invite (FASI) -->
|
||||
<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 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}} {% 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="{% 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">
|
||||
<div id="bar">
|
||||
<a href="{{brand_site}}">
|
||||
<img id="logo" src="/img/logo-wordmark-horizontal.svg" />
|
||||
</a>
|
||||
<a id="download" href="/download">
|
||||
Download
|
||||
</a>
|
||||
</div>
|
||||
<div id="container">
|
||||
<div id="profile">
|
||||
<h1>
|
||||
{% if 'fn' in vcard_info and vcard_info['fn'] %}
|
||||
{{vcard_info['fn']}}
|
||||
{% elif title %}
|
||||
{{title}}
|
||||
{% else %}
|
||||
{{jid_bare}}
|
||||
{% endif %}
|
||||
</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">
|
||||
{% for link in links %}
|
||||
<a href="{{link['href']}}" id="{{link['iden']}}">
|
||||
{{link['name']}}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<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>
|
||||
{% endif %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue