Add support for Blasta to operate as a desktop software.

This commit is contained in:
Schimon Jehudah, Adv. 2024-09-04 17:31:52 +03:00
parent 667cf12d56
commit a4c4bccc4b
35 changed files with 498 additions and 72 deletions

View file

@ -38,6 +38,7 @@ import tomli_w
from typing import Optional
import urllib.parse
import uvicorn
import webbrowser
import xml.etree.ElementTree as ET
@ -266,6 +267,7 @@ class HttpInstance:
self.app.mount('/data', StaticFiles(directory='data'), name='data')
self.app.mount('/export', StaticFiles(directory='export'), name='export')
self.app.mount('/graphic', StaticFiles(directory='graphic'), name='graphic')
self.app.mount('/script', StaticFiles(directory='script'), name='script')
self.app.mount('/stylesheet', StaticFiles(directory='stylesheet'), name='stylesheet')
filename_configuration = 'configuration.toml'
@ -5318,7 +5320,11 @@ def main():
return http_instance.app
app = main()
webbrowser.open('http://localhost:8000/help/about')
# TODO Check first time
webbrowser.open_new_tab('http://localhost:8000')
# FIXME
if __name__ == '__main__':
uvicorn.run(app, host='127.0.0.1', port=8000, reload=True)
uvicorn.run(app, host='localhost', port=8000, reload=True)

39
blasta_client.py Normal file
View file

@ -0,0 +1,39 @@
import webview
import subprocess
import sys
class HtmlView:
def __init__(self, url_instance):
self.url_instance = url_instance
def regulator(self, uri):
# Check if the URL is not from url_instance
if not uri.startswith(self.url_instance):
try:
# Open the link using xdg-open
subprocess.run(['xdg-open', uri], check=True)
except subprocess.CalledProcessError as e:
print(f"Failed to open URL: {uri}. Error: {e}")
else:
# If it is from url_instance, just load it in the webview
#webview.load_url(uri)
#webview.evaluate(f"window.location.href = '{uri}';")
webview.windows[0].load_url(uri)
def setup(self):
# Create a webview window
window = webview.create_window('Blasta', self.url_instance)
# Bind the link click event to the regulator function
window.expose(self.regulator)
# Start the webview application
webview.start()
if __name__ == '__main__':
if len(sys.argv) != 2:
print('Usage: {} <URL_OF_A_BLASTA_INSTANCE>'.format(sys.argv[0]))
sys.exit(1)
url_instance = sys.argv[1]
html_view = HtmlView(url_instance)
html_view.setup()

4
blasta_client.sh Executable file
View file

@ -0,0 +1,4 @@
#!/bin/sh
unset http_proxy
WEBKIT_DISABLE_DMABUF_RENDERER=1 python blasta_client.py http://localhost:8000

20
script/regulator.js Normal file
View file

@ -0,0 +1,20 @@
document.addEventListener('DOMContentLoaded', () => {
window.addEventListener('pywebviewready', () => {
// Attach event listeners to all anchor elements
document.querySelectorAll('a').forEach(element => {
element.addEventListener('click', regulator);
});
});
});
// This function will be called when an anchor is clicked
function regulator(event) {
event.preventDefault(); // Prevent the default link behavior
const url = this.href; // Get the URL from the clicked link
// Call the exposed Python function
window.pywebview.api.regulator(url)
.catch(error => {
console.error("Error calling regulator:", error);
});
}

View file

@ -58,8 +58,9 @@ xmlns:atom='http://www.w3.org/2005/Atom'>
<title>
<xsl:value-of select='atom:title'/>
</title>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id='header'>
@ -239,7 +240,7 @@ xmlns:atom='http://www.w3.org/2005/Atom'>
<p>
Congratulations! You have reached to the final
frontier that the XML technology has to offer to
date, and as of yet!
date, and as of yet.
</p>
<p>
This is an automated Blasta Syndication Feed
@ -249,7 +250,7 @@ xmlns:atom='http://www.w3.org/2005/Atom'>
<p>
<a href='/help/syndication#software'>Click
here</a> for a selection of software and pick
the ones that would fit to you best!
the ones that would fit to you best.
</p>
</td>
</table>
@ -417,7 +418,7 @@ xmlns:atom='http://www.w3.org/2005/Atom'>
<dd>
<small>
<h4 class='title'>
Technical information. Please, read it!
Technical information. Please, read it.
</h4>
<p>
This ASF (Atom Syndication Format) document is

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,21 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / about
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/ about
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / {{path}}
<a href="/">
Blasta
</a>
/ {{path}}
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,29 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / <a href="/help/about/xmpp">xmpp</a> / atomsub
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/
<a href="/help/about/xmpp">
xmpp
</a>
/ atomsub
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="stylesheet/stylesheet.xsl"?>
<?xml-stylesheet type="text/xsl" href="/stylesheet/stylesheet.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<generator uri="https://git.xmpp-it.net/sch/Blasta" version="0.1">Blasta</generator>
<id>{{request.url}}</id>
<icon>/graphic/blasta.svg</icon>
<link href="{{request.url}}"
rel="self"
type="text/html" />
type="application/atom+xml" />
<link href="{{request.url.__str__().replace('mode=feed&', '', 1).replace('?mode=feed', '', 1)}}"
rel="alternate"
type="text/html" />
@ -21,11 +22,11 @@
<entry>
<author>
<name>{{entry['name']}}</name>
<uri>/jid/{{entry['jid']}}</uri>
<uri>xmpp:{{entry['jid']}}</uri>
<xmpp>{{entry['jid']}}</xmpp>
<!-- uri>/jid/{{entry['jid']}}</uri -->
<!-- xmpp>{{entry['jid']}}</xmpp -->
</author>
<id>{{entry['url_hash']}}</id>
<id>md5:{{entry['url_hash']}}</id>
<link href="{{entry['link']}}"
rel="alternate" />
<link href="xmpp:{{pubsub_jid}}?pubsub;action=subscribe;node=hash:{{entry['url_hash']}}"

View file

@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/graphic/blasta.svg" />
<link rel="stylesheet" type="text/css" media="screen"
href="/stylesheet/stylesheet.css" />
<script src="/script/regulator.js" />
<link rel="alternate" type="application/atom+xml"
title="Follow updates on /{% if jid %}jid/{% endif %}{{syndicate}}{% if param_tags %} for Tag: #{{param_tags}}{% endif %}{% if param_url %} for URL: {{param_url}}{% endif %}{% if param_hash %} for hash: {{param_hash}}{% endif %}"
href="/{% if jid %}jid/{% endif %}{{syndicate}}?mode=feed{% if param_tags %}&amp;tags={{param_tags}}{% endif %}{% if param_url %}&amp;url={{param_url}}{% endif %}{% if param_hash %}&amp;hash={{param_hash}}{% endif %}" />
@ -23,11 +24,23 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / {{path}}{% if jid and jid != jabber_id %} / <a href="/jid/{{jid}}">{{jid}}</a>{% endif %}
<a href="/">
Blasta
</a>
/ {{path}}
{% if jid and jid != jabber_id %}
/
<a href="/jid/{{jid}}">
{{jid}}
</a>
{% endif %}
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / connect
<a href="/">
Blasta
</a>
/ connect
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
<dd>
<a href="/search">Search</a>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / contact
<a href="/">
Blasta
</a>
/ contact
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / {{path}}
<a href="/">
Blasta
</a>
/ {{path}}
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>
@ -135,7 +142,7 @@
id="summary"
name="summary"
placeholder="Enter a summary (recommended)."
rows="5">{{summary}}</textarea>
rows="10">{{summary}}</textarea>
{% endif %}
</td>
</tr>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,21 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / feeds
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/ feeds
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,25 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / folksonomy
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/ folksonomy
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / help
<a href="/">
Blasta
</a>
/ help
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,25 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / ideas
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/ ideas
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,29 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / <a href="/help/about/xmpp">xmpp</a> / libervia
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/
<a href="/help/about/xmpp">
xmpp
</a>
/ libervia
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>
@ -360,8 +379,8 @@
</p>
<br/>
<p class="quote bottom">
"Salut a Toi" is the name of the association which manages
Libervia.
"Salut a Toi", which means Greetings to you (French), is the
name of the association which manages Libervia.
</p>
</div>
</div>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,29 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / <a href="/help/about/xmpp">xmpp</a> / movim
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/
<a href="/help/about/xmpp">
xmpp
</a>
/ movim
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / now
<a href="/">
Blasta
</a>
/ now
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -10,6 +10,7 @@
<link rel="icon" type="image/svg+xml" href="/graphic/blasta.svg" />
<link rel="stylesheet" type="text/css" media="screen"
href="/stylesheet/stylesheet.css" />
<script src="/script/regulator.js" />
<link rel="alternate" type="application/atom+xml"
title="Follow updates on /{% if jid %}jid/{% endif %}{{syndicate}}{% if param_tags %} for Tag: #{{param_tags}}{% endif %}{% if param_url %} for URL: {{param_url}}{% endif %}{% if param_hash %} for hash: {{param_hash}}{% endif %}"
href="/{% if jid %}jid/{% endif %}{{syndicate}}?mode=feed{% if param_tags %}&amp;tags={{param_tags}}{% endif %}{% if param_url %}&amp;url={{param_url}}{% endif %}{% if param_hash %}&amp;hash={{param_hash}}{% endif %}" />
@ -23,11 +24,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / {{path}}
<a href="/">
Blasta
</a>
/ {{path}}
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,25 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / philosophy
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/ philosophy
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / profile
<a href="/">
Blasta
</a>
/ profile
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,25 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / projects
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/ projects
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,29 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / <a href="/help/about/xmpp">xmpp</a> / pubsub
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/
<a href="/help/about/xmpp">
xmpp
</a>
/ pubsub
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,21 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / questions
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/ questions
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>
@ -297,8 +308,14 @@
Does Blasta deploy ECMAScript (JavaScript)
</h4>
<p>
Blasta does not make any use of ECMAScript.
Yes. Blasta utilizes ECMAScript in order to confine the
client version activity to itself. This will be changed in
near future, once pywebview will have a more extensive
support for intercepting HTTP requests.
</p>
<!-- p>
Blasta does not make any use of ECMAScript.
</p -->
<p>
We have decided not to use unecessary components nor "toxic"
features that would compromise the intended experience that

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / register
<a href="/">
Blasta
</a>
/ register
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / {{path}}
<a href="/">
Blasta
</a>
/ {{path}}
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / search / {{path}}
<a href="/">
Blasta
</a>
/ search / {{path}}
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,25 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / software
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/ software
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>
@ -103,6 +118,22 @@
Python is a computer language that lets you work quickly and
integrate systems more effectively.
</p>
<h4>
<a href="https://pywebview.flowrl.com">
pywebview - Build a graphical interface for your Python
software with ECMAScript, HTML, and CSS.
</a>
</h4>
<p>
pywebview is a lightweight cross-platform wrapper around an
htmlview component that allows to display HTML content in
its own native interface window. It gives you power of HTML
technologies in your desktop application, hiding the fact
that the interface is HTML based. You can use pywebview
either with a lightweight HTML framework like Flask (opens
new window) or on its own with a two way bridge between
Python and DOM.
</p>
<h4>
<a href="https://slixmpp.readthedocs.io">
Slixmpp - A modern python XMPP library using asyncio.

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,21 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / syndication
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/ syndication
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,17 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / tag
<a href="/">
Blasta
</a>
/ tag
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,25 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / thanks
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/ thanks
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,21 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / utilities
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/ utilities
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>

View file

@ -9,6 +9,7 @@
<link rel="shortcut icon" href="/graphic/blasta.svg"/>
<link rel='icon' type='image/svg+xml' href='/graphic/blasta.svg'/>
<link rel='stylesheet' type='text/css' media='screen' href='/stylesheet/stylesheet.css'/>
<script src="/script/regulator.js" />
</head>
<body>
<div id="container">
@ -16,11 +17,25 @@
<h1>
<img src="/graphic/blasta.svg"/>
&nbsp;
<a href="/">Blasta</a> / <a href="/help">help</a> / <a href="/help/about">about</a> / xmpp
<a href="/">
Blasta
</a>
/
<a href="/help">
help
</a>
/
<a href="/help/about">
about
</a>
/ xmpp
</h1>
<dl id="navigation">
<dd>
<img src="/graphic/blasta.svg"/>
<a href="/">
<img alt="Main"
src="/graphic/blasta.svg"/>
</a>
</dd>
{% if jabber_id %}
<dd>