Disabled unfinished projects and tools, Removed unused section, Improved readability, publish first public version
Update Dockerfile, app.py, and 38 more files...
@@ -3,8 +3,8 @@ FROM python:alpine
|
||||
WORKDIR /www
|
||||
ADD ./ ./
|
||||
|
||||
RUN apk add --no-cache cargo
|
||||
#RUN apk add --no-cache cargo
|
||||
RUN pip install -r requirements.txt
|
||||
RUN pip install gunicorn
|
||||
|
||||
ENTRYPOINT ["top", "-b"]
|
||||
ENTRYPOINT ["python", "-u", "/www/app.py"]
|
||||
|
17
app.py
@@ -176,6 +176,7 @@ def route_root(lang: Optional[str]):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
)).replace("> <", "><")
|
||||
|
||||
|
||||
@@ -191,6 +192,7 @@ def route_contact(lang: Optional[str]):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
)).replace("> <", "><")
|
||||
|
||||
|
||||
@@ -211,6 +213,7 @@ def route_content(lang: Optional[str]):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
requested_tags=requested_tags,
|
||||
)).replace("> <", "><")
|
||||
|
||||
@@ -237,6 +240,7 @@ def route_content_project(lang: Optional[str], project_id: str):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
error_key=error_key,
|
||||
error_code=error_code,
|
||||
)).replace("> <", "><"), error_code
|
||||
@@ -247,6 +251,7 @@ def route_content_project(lang: Optional[str], project_id: str):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
project_data=get_projects().get(project_id),
|
||||
project_id=project_id,
|
||||
)).replace("> <", "><")
|
||||
@@ -269,6 +274,7 @@ def route_tools_index(lang: Optional[str]):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
requested_tags=requested_tags,
|
||||
)).replace("> <", "><")
|
||||
|
||||
@@ -295,6 +301,7 @@ def route_tools_page(lang: Optional[str], tool_id: str):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
error_key=error_key,
|
||||
error_code=error_code,
|
||||
)).replace("> <", "><"), error_code
|
||||
@@ -305,6 +312,7 @@ def route_tools_page(lang: Optional[str], tool_id: str):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
tool_data=get_tools().get(tool_id),
|
||||
tool_id=tool_id,
|
||||
applet_data=get_applets().get(get_tools().get(tool_id).applet_id),
|
||||
@@ -322,6 +330,7 @@ def route_about(lang: Optional[str]):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
)).replace("> <", "><")
|
||||
|
||||
|
||||
@@ -336,6 +345,7 @@ def route_privacy(lang: Optional[str]):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
)).replace("> <", "><")
|
||||
|
||||
|
||||
@@ -350,6 +360,7 @@ def route_links(lang: Optional[str]):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
)).replace("> <", "><")
|
||||
|
||||
|
||||
@@ -364,6 +375,7 @@ def route_debug(lang: Optional[str]):
|
||||
raw_lang=lang,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
)).replace("> <", "><")
|
||||
|
||||
|
||||
@@ -383,6 +395,7 @@ def handle_exception(e: Exception):
|
||||
raw_lang=DEFAULT_LANG,
|
||||
request_path=request.path,
|
||||
is_standalone="standalone" in request.args,
|
||||
is_brandless="brandless" in request.args,
|
||||
error_key=str(e.code),
|
||||
error_code=e.code,
|
||||
)).replace("> <", "><"), error_code
|
||||
@@ -398,12 +411,12 @@ if __name__ == '__main__':
|
||||
if os.environ.get('NP_FLASK_WAITRESS', "0") == "1":
|
||||
print("Serving app using waitress.")
|
||||
from waitress import serve
|
||||
serve(app, host='0.0.0.0', port=5000, threads=64)
|
||||
serve(app, host='0.0.0.0', port=int(os.environ.get('NP_FLASK_PORT', "5000")), threads=64)
|
||||
else:
|
||||
print("Serving app using default development server.")
|
||||
app.run(
|
||||
host="0.0.0.0",
|
||||
port=5000,
|
||||
port=int(os.environ.get('NP_FLASK_PORT', "5000")),
|
||||
debug=True,
|
||||
# debug=False,
|
||||
load_dotenv=False
|
||||
|
@@ -6,13 +6,13 @@
|
||||
|
||||
-
|
||||
|
||||
- title_key: text.articles
|
||||
abs_href: "/articles/"
|
||||
icon: fad fa-newspaper
|
||||
active_id: articles
|
||||
has_new_until_utc: 0
|
||||
|
||||
-
|
||||
#- title_key: text.articles
|
||||
# abs_href: "/articles/"
|
||||
# icon: fad fa-newspaper
|
||||
# active_id: articles
|
||||
# has_new_until_utc: 0
|
||||
#
|
||||
#-
|
||||
|
||||
- title_key: text.applications
|
||||
abs_href: "/content/?tags=application;web"
|
||||
|
@@ -1,10 +1,16 @@
|
||||
# ???
|
||||
# Sitemap definition
|
||||
|
||||
- "/"
|
||||
- "/about/"
|
||||
- "/articles/"
|
||||
#- "/articles/"
|
||||
- "/contact/"
|
||||
- "/content/"
|
||||
- "/content/circuitpython-ebyte-e32/"
|
||||
- "/content/docker-mini-cctv-nvr/"
|
||||
- "/content/lscom-cli-dotnet/"
|
||||
- "/links/"
|
||||
- "/privacy/"
|
||||
- "/tools/"
|
||||
- "/tools/iban-generator/"
|
||||
- "/tools/excel-password-remover/"
|
||||
- "/tools/uuid-generator/"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# EN - Excel Password Remover
|
||||
|
||||
meta.title: Excel Worksheet Password Remover
|
||||
meta.title: Excel Password Remover
|
||||
meta.description: >-
|
||||
Small web page from which you can easily remove a password from an Excel
|
||||
worksheet. It works by leaving the task of editing the XML files on an Excel
|
||||
|
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"contact.head.title": "Contact - NibblePoker",
|
||||
"contact.head.description": "TODO: description",
|
||||
"contact.og.title": "NibblePoker - Contact",
|
||||
"contact.og.description": "TODO: description",
|
||||
"contact.header.title": "Contact",
|
||||
|
||||
"contact.email.title": "Courriel",
|
||||
"contact.email.compose": "Envoyer un courriel à <i>herwin.bozet@gmail.com</i>",
|
||||
|
||||
"contact.twitter.title": "Twitter",
|
||||
"contact.twitter.compose": "Composer un message privé pour @NibblePoker sur Twitter"
|
||||
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
# FR - Excel Password Remover
|
||||
|
||||
_meta.title: ''
|
||||
meta.title: Excel Password Remover
|
||||
meta.description: >-
|
||||
Petite application web qui permet de facilement retirer le mot de passe d'une
|
||||
feuille de calcul Excel depuis votre navigateur web sans avoir à uploader le
|
||||
|
@@ -11,7 +11,7 @@ tools:
|
||||
description_key: "meta.description"
|
||||
type: null
|
||||
url: null
|
||||
image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png"
|
||||
image_url: "/resources/NibblePoker/images/tools/excel-password-remover/main.png"
|
||||
image_type: null
|
||||
twitter:
|
||||
title_key: "meta.title"
|
||||
@@ -21,11 +21,12 @@ tools:
|
||||
enable: true
|
||||
title_key: "meta.title"
|
||||
preamble_key: "meta.description"
|
||||
image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png"
|
||||
image_url: "/resources/NibblePoker/images/tools/excel-password-remover/main.png"
|
||||
image_alt_key: ""
|
||||
general:
|
||||
icon: "fad fa-table-cells-column-unlock"
|
||||
title_key: "meta.title"
|
||||
subtitle_key: "article.subtitle"
|
||||
tags:
|
||||
- "undefined"
|
||||
- "office"
|
||||
- "utility"
|
||||
|
@@ -28,4 +28,5 @@ tools:
|
||||
title_key: "meta.title"
|
||||
subtitle_key: "article.subtitle"
|
||||
tags:
|
||||
- "undefined"
|
||||
- "generator"
|
||||
- "finance"
|
||||
|
@@ -11,7 +11,7 @@ tools:
|
||||
description_key: "meta.description"
|
||||
type: null
|
||||
url: null
|
||||
image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png"
|
||||
image_url: "/resources/NibblePoker/images/tools/uuid-generator/main.png"
|
||||
image_type: null
|
||||
twitter:
|
||||
title_key: "meta.title"
|
||||
@@ -21,11 +21,11 @@ tools:
|
||||
enable: true
|
||||
title_key: "meta.title"
|
||||
preamble_key: "meta.description"
|
||||
image_url: "/resources/NibblePoker/images/tools/excel-password-remover/excel-password-remover.png"
|
||||
image_url: "/resources/NibblePoker/images/tools/uuid-generator/main.png"
|
||||
image_alt_key: ""
|
||||
general:
|
||||
icon: "fab fa-python"
|
||||
title_key: "meta.title"
|
||||
subtitle_key: "article.subtitle"
|
||||
tags:
|
||||
- "undefined"
|
||||
- "generator"
|
||||
|
@@ -1,14 +1,17 @@
|
||||
services:
|
||||
www_nibblepoker_lu:
|
||||
container_name: www-nibblepoker-python
|
||||
#image: python:alpine
|
||||
build:
|
||||
context: .
|
||||
ports:
|
||||
- 5001:5000
|
||||
volumes:
|
||||
- ./app/:/app:ro
|
||||
tty: true
|
||||
environment:
|
||||
- TZ=Europe/Brussels
|
||||
- NP_HTML_POST_PROCESS=MINIFY
|
||||
- NP_FLASK_WAITRESS=1
|
||||
- NP_FLASK_PORT=80
|
||||
#volumes:
|
||||
# - ./app/:/app:ro
|
||||
restart: unless-stopped
|
||||
stop_grace_period: 1s
|
||||
labels:
|
||||
@@ -17,4 +20,3 @@ services:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-size: "16m"
|
||||
#command: ["/bin/sh", "-c", "/app/MainWebsite"]
|
||||
|
@@ -13,24 +13,26 @@ TODO
|
||||
## Local Setup
|
||||
Follow these steps to setup a local version of this website:
|
||||
1. Install Python 3.13
|
||||
2. Install Node JS v?
|
||||
2. Install Node JS 20+
|
||||
3. Install Python Modules \
|
||||
`pip install --upgrade -r requirements.txt`
|
||||
4. Install NPM modules \
|
||||
`.\scripts\nodejs-setup.cmd`
|
||||
5. Compile the `.mjs` files into `.js` and `.min.js` \
|
||||
`.\scripts\compile-js-site.cmd`
|
||||
6. [Install static files]
|
||||
6. [TODO: Install static files]
|
||||
7. Setup environment variables:
|
||||
```batch
|
||||
:: Batch
|
||||
set NP_HTML_POST_PROCESS=MINIFY
|
||||
set NP_FLASK_WAITRESS=1
|
||||
set NP_FLASK_PORT=80
|
||||
```
|
||||
```bash
|
||||
# Bash
|
||||
NP_HTML_POST_PROCESS=MINIFY
|
||||
NP_FLASK_WAITRESS=1
|
||||
NP_FLASK_PORT=80
|
||||
```
|
||||
8. Run [app.py](app.py) \
|
||||
`python ./app.py`
|
||||
|
@@ -1,3 +1,4 @@
|
||||
/* File inputs with drop thingy */
|
||||
.np-file-input-drop-container {
|
||||
position: relative;
|
||||
}
|
||||
@@ -13,3 +14,34 @@ input[type=file].np-file-input-drop {
|
||||
opacity: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* Nicer checkboxes, move to CSS 8 */
|
||||
input[type=checkbox] {
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
|
||||
&:before {
|
||||
content: "✘";
|
||||
}
|
||||
|
||||
&:checked {
|
||||
&:before {
|
||||
content: "✔";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Top margin trimmer for heading renderer */
|
||||
|
||||
|
||||
/* Copy of the m*-xs classes */
|
||||
/* Accommodates the paragraph renderer that has a hard-coded .mt-xs */
|
||||
.content-spacer {
|
||||
margin: calc(1rem* 0.5);
|
||||
/*margin-bottom: 0;*/
|
||||
}
|
||||
|
||||
.content-spacer-vertical {
|
||||
margin-top: calc(1rem* 0.5);
|
||||
margin-bottom: calc(1rem* 0.5);
|
||||
}
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 24 KiB |
@@ -39,11 +39,15 @@
|
||||
</main>
|
||||
|
||||
<footer class="d-flex flex-align-center p-s py-xs">
|
||||
<a href="{{ l10n_url_abs('/', raw_lang) }}">
|
||||
<img id="logo-footer"
|
||||
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjczIiBoZWlnaHQ9IjUxMiIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMzkyLjUgNTEyYy02LjYgMC0xMC4xLTUuMDYtNy43OS0xMS4yNEw1NTYuMjkgNDMuMjRjMi4zMS02LjE4IDYuMTEtNi4xOCA4LjQyIDBsNTUuNTggMTQ4LjE5YzIuMzEgNi4xOCAyLjMxIDE2LjI5IDAgMjIuNDdsLTIzLjU4IDYyLjg2Yy0yLjMxIDYuMTggMS4xOSAxMS4yNCA3Ljc5IDExLjI0aDQwYzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwzOS41OCAxMDUuNTJjMi4zMSA2LjE4LTEuMTkgMTEuMjQtNy43OSAxMS4yNGgtMTM2Yy02LjYgMC0xMy45IDUuMDYtMTYuMjEgMTEuMjRsLTI3LjU4IDczLjUyQzUxMC40IDUwNi45NCA1MDMuMSA1MTIgNDk2LjUgNTEyek01NzYuNzEgMTEuMjRDNTc0LjQgNS4wNiA1NzcuOSAwIDU4NC41IDBoMTA0YzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwxODMuNTggNDg5LjUyYzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzNlMzU0NiIvPjxwYXRoIGQ9Ik0xMjguNzEgNTAwLjc2QzEyNi40IDUwNi45NCAxMTkuMSA1MTIgMTEyLjUgNTEySDguNWMtNi42IDAtMTAuMS01LjA2LTcuNzktMTEuMjRsMTMxLjIxLTM0OS44OWMyLjMyLTYuMTggOS4yNy0xMy4xMyAxNS40NS0xNS40NUwyNzMuODUgODhjNi4xOC0yLjMyIDkuMzQuODQgNyA3eiIgZmlsbD0iIzkwNWVhOSIvPjxwYXRoIGQ9Ik0yMDAuNSA1MTJjLTYuNiAwLTEwLjEtNS4wNi03Ljc5LTExLjI0TDM1NS4zNCA2Ny4wOWMyLjMyLTYuMTggOS4yNy0xMy4wOSAxNS40NS0xNS40NUw0OTcuMjYgNC4yMWM2LjE4LTIuMzEgOS4zNC44NSA3IDdMMzIwLjcxIDUwMC43NkMzMTguNCA1MDYuOTQgMzExLjEgNTEyIDMwNC41IDUxMnpNNzY4LjcxIDExLjI0Yy0yLjMxLTYuMTguODUtOS4zNCA3LTdsMTI2LjUgNDcuNGM2LjE4IDIuMzIgMTMuMTMgOS4yNyAxNS40NSAxNS40NWwxNjIuNjMgNDMzLjY3YzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzZiM2U3NSIvPjxwYXRoIGQ9Ik05OTIuMTMgOTVjLTIuMzItNi4xOC44NC05LjM0IDctN2wxMjYuNDggNDcuNDJjNi4xOCAyLjMyIDEzLjEzIDkuMjcgMTUuNDUgMTUuNDVsMTMxLjIzIDM0OS44OWMyLjMxIDYuMTgtMS4xOSAxMS4yNC03Ljc5IDExLjI0aC0xMDRjLTYuNiAwLTEzLjktNS4wNi0xNi4yMS0xMS4yNHoiIGZpbGw9IiM5MDVlYTkiLz48L3N2Zz4="
|
||||
alt="{{ l10n("alt.logo", "footer", user_lang) }}" draggable="false">
|
||||
</a>
|
||||
{% if not is_brandless %}
|
||||
<a href="{{ l10n_url_abs('/', raw_lang) }}">
|
||||
<img id="logo-footer"
|
||||
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjczIiBoZWlnaHQ9IjUxMiIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMzkyLjUgNTEyYy02LjYgMC0xMC4xLTUuMDYtNy43OS0xMS4yNEw1NTYuMjkgNDMuMjRjMi4zMS02LjE4IDYuMTEtNi4xOCA4LjQyIDBsNTUuNTggMTQ4LjE5YzIuMzEgNi4xOCAyLjMxIDE2LjI5IDAgMjIuNDdsLTIzLjU4IDYyLjg2Yy0yLjMxIDYuMTggMS4xOSAxMS4yNCA3Ljc5IDExLjI0aDQwYzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwzOS41OCAxMDUuNTJjMi4zMSA2LjE4LTEuMTkgMTEuMjQtNy43OSAxMS4yNGgtMTM2Yy02LjYgMC0xMy45IDUuMDYtMTYuMjEgMTEuMjRsLTI3LjU4IDczLjUyQzUxMC40IDUwNi45NCA1MDMuMSA1MTIgNDk2LjUgNTEyek01NzYuNzEgMTEuMjRDNTc0LjQgNS4wNiA1NzcuOSAwIDU4NC41IDBoMTA0YzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwxODMuNTggNDg5LjUyYzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzNlMzU0NiIvPjxwYXRoIGQ9Ik0xMjguNzEgNTAwLjc2QzEyNi40IDUwNi45NCAxMTkuMSA1MTIgMTEyLjUgNTEySDguNWMtNi42IDAtMTAuMS01LjA2LTcuNzktMTEuMjRsMTMxLjIxLTM0OS44OWMyLjMyLTYuMTggOS4yNy0xMy4xMyAxNS40NS0xNS40NUwyNzMuODUgODhjNi4xOC0yLjMyIDkuMzQuODQgNyA3eiIgZmlsbD0iIzkwNWVhOSIvPjxwYXRoIGQ9Ik0yMDAuNSA1MTJjLTYuNiAwLTEwLjEtNS4wNi03Ljc5LTExLjI0TDM1NS4zNCA2Ny4wOWMyLjMyLTYuMTggOS4yNy0xMy4wOSAxNS40NS0xNS40NUw0OTcuMjYgNC4yMWM2LjE4LTIuMzEgOS4zNC44NSA3IDdMMzIwLjcxIDUwMC43NkMzMTguNCA1MDYuOTQgMzExLjEgNTEyIDMwNC41IDUxMnpNNzY4LjcxIDExLjI0Yy0yLjMxLTYuMTguODUtOS4zNCA3LTdsMTI2LjUgNDcuNGM2LjE4IDIuMzIgMTMuMTMgOS4yNyAxNS40NSAxNS40NWwxNjIuNjMgNDMzLjY3YzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzZiM2U3NSIvPjxwYXRoIGQ9Ik05OTIuMTMgOTVjLTIuMzItNi4xOC44NC05LjM0IDctN2wxMjYuNDggNDcuNDJjNi4xOCAyLjMyIDEzLjEzIDkuMjcgMTUuNDUgMTUuNDVsMTMxLjIzIDM0OS44OWMyLjMxIDYuMTgtMS4xOSAxMS4yNC03Ljc5IDExLjI0aC0xMDRjLTYuNiAwLTEzLjktNS4wNi0xNi4yMS0xMS4yNHoiIGZpbGw9IiM5MDVlYTkiLz48L3N2Zz4="
|
||||
alt="{{ l10n("alt.logo", "footer", user_lang) }}" draggable="false">
|
||||
</a>
|
||||
{% else %}
|
||||
<p> </p>
|
||||
{% endif %}
|
||||
</footer>
|
||||
|
||||
{% block extra_scripts %}{% endblock %}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
{% if code_language is none %}
|
||||
<code class="code ox-auto w-full d-inline-block position-relative">
|
||||
<code class="code ox-auto w-full d-inline-block position-relative content-spacer-vertical">
|
||||
{% else %}
|
||||
<code class="code ox-auto w-full d-inline-block position-relative language-{{ code_language }}">
|
||||
<code class="code ox-auto w-full d-inline-block position-relative content-spacer-vertical language-{{ code_language }}">
|
||||
{% endif %}
|
||||
{% for code_line in code_lines %}
|
||||
<span class="code-line t-nowrap">{{ code_line }}</span><br>
|
||||
|
@@ -13,170 +13,177 @@
|
||||
|
||||
{% block main_content %}
|
||||
|
||||
{{ render_h1(l10n("introduction.title", "privacy", user_lang), "fad fa-info") }}
|
||||
{{ render_paragraph(l10n("introduction.text.1", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n("introduction.text.2", "privacy", user_lang) +
|
||||
'<br><i class="fad fa-globe ml-s t-size-8"></i>
|
||||
<a href="https://gdpr.eu/privacy-notice/" class="ml-xs">https://gdpr.eu/</a><br>
|
||||
<i class="fad fa-globe ml-s t-size-8"></i>
|
||||
<a href="https://eur-lex.europa.eu/legal-content/ALL/?uri=CELEX%3A32016R0679" class="ml-xs">https://eur-lex.europa.eu/</a>')}}
|
||||
<section>
|
||||
{{ render_h1(l10n("introduction.title", "privacy", user_lang), "fad fa-info") }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("introduction.text.1", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n("introduction.text.2", "privacy", user_lang) +
|
||||
'<br><i class="fad fa-globe ml-s t-size-8"></i>
|
||||
<a href="https://gdpr.eu/privacy-notice/" class="ml-xs">https://gdpr.eu/</a><br>
|
||||
<i class="fad fa-globe ml-s t-size-8"></i>
|
||||
<a href="https://eur-lex.europa.eu/legal-content/ALL/?uri=CELEX%3A32016R0679" class="ml-xs">https://eur-lex.europa.eu/</a>')}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
{{ render_h1(l10n("v2.data.title", "privacy", user_lang), "fad fa-database") }}
|
||||
{{ render_paragraph(l10n("v2.data.intro.1", "privacy", user_lang) +
|
||||
'<br>' + l10n("v2.data.intro.2", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n('v2.data.private.1', "privacy", user_lang) +
|
||||
render_list_ul([
|
||||
l10n('v2.data.private_list.1', "privacy", user_lang),
|
||||
l10n('v2.data.private_list.2', "privacy", user_lang),
|
||||
])
|
||||
) }}
|
||||
{{ render_paragraph(l10n('v2.data.non_private.1', "privacy", user_lang) +
|
||||
'<ul><li>' + l10n('v2.data.non_private_list.1', "privacy", user_lang) +
|
||||
'</li><li>' + l10n('v2.data.non_private_list.2', "privacy", user_lang) +
|
||||
'</li></ul>') }}
|
||||
{{ render_paragraph(l10n("v2.data.end.1", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n("v2.data.end.2", "privacy", user_lang) +
|
||||
'<br>' + l10n("v2.data.end.3", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n("v2.data.end.4", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n("v2.data.end.5", "privacy", user_lang) +
|
||||
'<br>' + l10n("v2.data.end.6", "privacy", user_lang)) }}
|
||||
<section>
|
||||
{{ render_h1(l10n("v2.data.title", "privacy", user_lang), "fad fa-database") }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("v2.data.intro.1", "privacy", user_lang) +
|
||||
'<br>' + l10n("v2.data.intro.2", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n('v2.data.private.1', "privacy", user_lang) +
|
||||
render_list_ul([
|
||||
l10n('v2.data.private_list.1', "privacy", user_lang),
|
||||
l10n('v2.data.private_list.2', "privacy", user_lang),
|
||||
])
|
||||
) }}
|
||||
{{ render_paragraph(l10n('v2.data.non_private.1', "privacy", user_lang) +
|
||||
'<ul><li>' + l10n('v2.data.non_private_list.1', "privacy", user_lang) +
|
||||
'</li><li>' + l10n('v2.data.non_private_list.2', "privacy", user_lang) +
|
||||
'</li></ul>') }}
|
||||
{{ render_paragraph(l10n("v2.data.end.1", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n("v2.data.end.2", "privacy", user_lang) +
|
||||
'<br>' + l10n("v2.data.end.3", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n("v2.data.end.4", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n("v2.data.end.5", "privacy", user_lang) +
|
||||
'<br>' + l10n("v2.data.end.6", "privacy", user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
{{ render_h1(l10n("v2.data_dns.title", "privacy", user_lang), "fad fa-database") }}
|
||||
{{ render_paragraph(l10n("v2.data_dns.intro.1", "privacy", user_lang) +
|
||||
'<br>' + l10n("v2.data_dns.intro.2", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n('v2.data_dns.private.1', "privacy", user_lang) +
|
||||
'<ul><li>' + l10n('v2.data_dns.private_list.1', "privacy", user_lang) +
|
||||
'</li></ul>') }}
|
||||
{{ render_paragraph(l10n('v2.data_dns.non_private.1', "privacy", user_lang) +
|
||||
'<ul><li>' + l10n('v2.data_dns.non_private_list.1', "privacy", user_lang) +
|
||||
'</li><li>' + l10n('v2.data_dns.non_private_list.2', "privacy", user_lang) +
|
||||
'</li></ul>') }}
|
||||
{{ render_paragraph(l10n("v2.data_dns.end.1", "privacy", user_lang)) }}
|
||||
<section>
|
||||
{{ render_h1(l10n("v2.data_dns.title", "privacy", user_lang), "fad fa-database") }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("v2.data_dns.intro.1", "privacy", user_lang) +
|
||||
'<br>' + l10n("v2.data_dns.intro.2", "privacy", user_lang)) }}
|
||||
|
||||
{{ render_paragraph(l10n('v2.data_dns.private.1', "privacy", user_lang)) }}
|
||||
{{ render_list_ul([
|
||||
l10n('v2.data_dns.private_list.1', "privacy", user_lang)
|
||||
]) }}
|
||||
|
||||
{{ render_paragraph(l10n('v2.data_dns.non_private.1', "privacy", user_lang)) }}
|
||||
{{ render_list_ul([
|
||||
l10n('v2.data_dns.non_private_list.1', "privacy", user_lang),
|
||||
l10n('v2.data_dns.non_private_list.2', "privacy", user_lang)
|
||||
]) }}
|
||||
|
||||
{{ render_paragraph(l10n("v2.data_dns.end.1", "privacy", user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
{{ render_h1(l10n("v2.third.title", "privacy", user_lang), "fad fa-handshake") }}
|
||||
{{ render_paragraph(l10n("v2.third.intro.1", "privacy", user_lang) +
|
||||
'<br>' + l10n("v2.third.intro.2", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n("v2.third.intro.3", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n('v2.third.intro.4', "privacy", user_lang) +
|
||||
'<br><i class="fad fa-globe ml-s t-size-8"></i>IONOS' +
|
||||
'<a class="ml-s" href="https://www.ionos.fr/terms-gtc/clause-de-confidentialite/">' +
|
||||
l10n('french', "langs", user_lang) + '</a>' +
|
||||
'<a class="ml-s" href="https://www.ionos.com/terms-gtc/privacy-policy/">' +
|
||||
l10n('english', "langs", user_lang) + '</a>' +
|
||||
'<br><i class="fad fa-globe ml-s t-size-8"></i>ChicagoVPS' +
|
||||
'<a class="ml-s" href="https://www.chicagovps.net/wp-content/uploads/2023/07/Terms-and-Conditions-ChicagoVPS.pdf">' +
|
||||
l10n('english', "langs", user_lang) + '</a>') }}
|
||||
<section>
|
||||
{{ render_h1(l10n("v2.third.title", "privacy", user_lang), "fad fa-handshake") }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("v2.third.intro.1", "privacy", user_lang) +
|
||||
'<br>' + l10n("v2.third.intro.2", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n("v2.third.intro.3", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n('v2.third.intro.4', "privacy", user_lang) +
|
||||
'<br><i class="fad fa-globe ml-s t-size-8 mr-xs"></i>IONOS' +
|
||||
'<a class="ml-s" href="https://www.ionos.fr/terms-gtc/clause-de-confidentialite/">' +
|
||||
l10n('french', "langs", user_lang) + '</a>' +
|
||||
'<a class="ml-s" href="https://www.ionos.com/terms-gtc/privacy-policy/">' +
|
||||
l10n('english', "langs", user_lang) + '</a>' +
|
||||
'<br><i class="fad fa-globe ml-s t-size-8 mr-xs"></i>ChicagoVPS' +
|
||||
'<a class="ml-s" href="https://www.chicagovps.net/wp-content/uploads/2023/07/Terms-and-Conditions-ChicagoVPS.pdf">' +
|
||||
l10n('english', "langs", user_lang) + '</a>') }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
{{ render_h1(l10n("v2.cookies.title", "privacy", user_lang), "fad fa-cookie-bite") }}
|
||||
{{ render_paragraph(l10n("v2.cookies.intro.1", "privacy", user_lang)) }}
|
||||
|
||||
<!--printMainHeader(l10n("v2.personal.title"), "fad fa-fist-raised")
|
||||
<p class="mt-xs ml-s">
|
||||
print(l10n('v2.personal.disabled.intro'))
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i>   print(l10n('v2.personal.disabled.list.1'))
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i>   print(l10n('v2.personal.disabled.list.2'))
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i>   print(l10n('v2.personal.disabled.list.3'))
|
||||
</span>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
print(l10n('v2.personal.tracking.text.1'))<br>
|
||||
print(l10n('v2.personal.tracking.text.2'))<br>
|
||||
print(l10n('v2.personal.tracking.text.3'))
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
print(l10n('v2.personal.transparency.text.1'))
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
print(l10n('v2.personal.recommendations'))
|
||||
<br>
|
||||
<i class="fad fa-globe ml-s t-size-8"></i>
|
||||
<a href="https://www.enisa.europa.eu/publications/privacy-considerations-of-online-behavioural-tracking">https://www.enisa.europa.eu/publications/privacy-considerations-of-online-behavioural-tracking</a>
|
||||
<span class="ml-s">(print(l10n('english')))</span>
|
||||
</p>-->
|
||||
|
||||
{{ render_h1(l10n("v2.update.title", "privacy", user_lang), "fad fa-sync-alt") }}
|
||||
{{ render_paragraph(l10n("v2.update.intro.1", "privacy", user_lang)) }}
|
||||
{{ render_paragraph('<i class="fad fa-calendar-alt"></i>' + l10n("v2.update.history.1.date", "privacy", user_lang) +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8"></i><a href="/privacy/privacy_2021-12-04_en.txt">' +
|
||||
l10n('english', "langs", user_lang) + '</a></span>' +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8"></i><a href="/privacy/privacy_2021-12-04_fr.txt">' +
|
||||
l10n('french', "langs", user_lang) + '</a></span>' +
|
||||
'<br><ul>' +
|
||||
'<li>' + l10n('v2.update.history.1.desc.1', "privacy", user_lang) + '</li>' +
|
||||
'</ul>' )}}
|
||||
{{ render_paragraph('<i class="fad fa-calendar-alt"></i>' + l10n("v2.update.history.2.date", "privacy", user_lang) +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8"></i><a href="/privacy/privacy_2022-03-18_en.txt">' +
|
||||
l10n('english', "langs", user_lang) + '</a></span>' +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8"></i><a href="/privacy/privacy_2022-03-18_fr.txt">' +
|
||||
l10n('french', "langs", user_lang) + '</a></span>' +
|
||||
'<br><ul>' +
|
||||
'<li>' + l10n('v2.update.history.2.desc.1', "privacy", user_lang) + '</li>' +
|
||||
'<li>' + l10n('v2.update.history.2.desc.2', "privacy", user_lang) + '</li>' +
|
||||
'<li>' + l10n('v2.update.history.2.desc.3', "privacy", user_lang) + '</li>' +
|
||||
'</ul>' )}}
|
||||
{{ render_paragraph('<i class="fad fa-calendar-alt"></i>' + l10n("v2.update.history.3.date", "privacy", user_lang) +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8"></i><a href="/privacy/privacy_2022-09-09_en.txt">' +
|
||||
l10n('english', "langs", user_lang) + '</a></span>' +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8"></i><a href="/privacy/privacy_2022-09-09_fr.txt">' +
|
||||
l10n('french', "langs", user_lang) + '</a></span>' +
|
||||
'<br><ul>' +
|
||||
'<li>' + l10n('v2.update.history.3.desc.1', "privacy", user_lang) + '</li>' +
|
||||
'<li><ul>' +
|
||||
'<li>' + l10n('v2.update.history.3.desc.1.1', "privacy", user_lang) + '</li>' +
|
||||
'<li>' + l10n('v2.update.history.3.desc.1.2', "privacy", user_lang) + '</li>' +
|
||||
'</ul></li>' +
|
||||
'<li>' + l10n('v2.update.history.3.desc.2', "privacy", user_lang) + '</li>' +
|
||||
'</ul>' )}}
|
||||
{{ render_paragraph('<i class="fad fa-calendar-alt"></i>' + l10n("v2.update.history.4.date", "privacy", user_lang) +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8"></i><a href="/privacy/privacy_2023-11-11_en.txt">' +
|
||||
l10n('english', "langs", user_lang) + '</a></span>' +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8"></i><a href="/privacy/privacy_2023-11-11_fr.txt">' +
|
||||
l10n('french', "langs", user_lang) + '</a></span>' +
|
||||
'<br><ul>' +
|
||||
'<li>' + l10n('v2.update.history.4.desc.1', "privacy", user_lang) + '</li>' +
|
||||
'<li><ul>' +
|
||||
'<li>' + l10n('v2.update.history.4.desc.1.1', "privacy", user_lang) + '</li>' +
|
||||
'</ul></li>' +
|
||||
'<li>' + l10n('v2.update.history.4.desc.2', "privacy", user_lang) + '</li>' +
|
||||
'</ul>' )}}
|
||||
{{ render_paragraph('<i class="fad fa-calendar-alt"></i>' + l10n("v2.update.history.5.date", "privacy", user_lang) +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8"></i><a href="/privacy/privacy_2023-11-30_en.txt">' +
|
||||
l10n('english', "langs", user_lang) + '</a></span>' +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8"></i><a href="/privacy/privacy_2023-11-30_fr.txt">' +
|
||||
l10n('french', "langs", user_lang) + '</a></span>' +
|
||||
'<br><ul>' +
|
||||
'<li>' + l10n('v2.update.history.5.desc.1', "privacy", user_lang) + '</li>' +
|
||||
'<li>' + l10n('v2.update.history.5.desc.2', "privacy", user_lang) + '</li>' +
|
||||
'</ul>' )}}
|
||||
{{ render_paragraph(l10n("v2.update.end.2", "privacy", user_lang)) }}
|
||||
<section>
|
||||
{{ render_h1(l10n("v2.cookies.title", "privacy", user_lang), "fad fa-cookie-bite") }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("v2.cookies.intro.1", "privacy", user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
{{ render_h1(l10n("contact.title", "privacy", user_lang), "fad fa-mailbox") }}
|
||||
{{ render_paragraph(l10n("contact.text.1", "privacy", user_lang) +
|
||||
'<br><i class="fad fa-at t-size-8 ml-s"></i><a class="ml-xs" href="mailto:herwin.bozet@gmail.com">herwin.bozet@gmail.com</a>') }}
|
||||
<section>
|
||||
{{ render_h1(l10n("v2.update.title", "privacy", user_lang), "fad fa-sync-alt") }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("v2.update.intro.1", "privacy", user_lang)) }}
|
||||
{{ render_paragraph('<i class="fad fa-calendar-alt mr-xs"></i>' + l10n("v2.update.history.1.date", "privacy", user_lang) +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8 mr-xxs"></i><a href="/privacy/privacy_2021-12-04_en.txt">' +
|
||||
l10n('english', "langs", user_lang) + '</a></span>' +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8 mr-xxs"></i><a href="/privacy/privacy_2021-12-04_fr.txt">' +
|
||||
l10n('french', "langs", user_lang) + '</a></span>' )}}
|
||||
{{ render_list_ul([
|
||||
l10n('v2.update.history.1.desc.1', "privacy", user_lang)
|
||||
]) }}
|
||||
|
||||
{{ render_paragraph('<i class="fad fa-calendar-alt mr-xs"></i>' + l10n("v2.update.history.2.date", "privacy", user_lang) +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8 mr-xxs"></i><a href="/privacy/privacy_2022-03-18_en.txt">' +
|
||||
l10n('english', "langs", user_lang) + '</a></span>' +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8 mr-xxs"></i><a href="/privacy/privacy_2022-03-18_fr.txt">' +
|
||||
l10n('french', "langs", user_lang) + '</a></span>' )}}
|
||||
{{ render_list_ul([
|
||||
l10n('v2.update.history.2.desc.1', "privacy", user_lang),
|
||||
l10n('v2.update.history.2.desc.2', "privacy", user_lang),
|
||||
l10n('v2.update.history.2.desc.3', "privacy", user_lang)
|
||||
]) }}
|
||||
|
||||
{{ render_paragraph('<i class="fad fa-calendar-alt mr-xs"></i>' + l10n("v2.update.history.3.date", "privacy", user_lang) +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8 mr-xxs"></i><a href="/privacy/privacy_2022-09-09_en.txt">' +
|
||||
l10n('english', "langs", user_lang) + '</a></span>' +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8 mr-xxs"></i><a href="/privacy/privacy_2022-09-09_fr.txt">' +
|
||||
l10n('french', "langs", user_lang) + '</a></span>' )}}
|
||||
{{ render_list_ul([
|
||||
l10n('v2.update.history.3.desc.1', "privacy", user_lang),
|
||||
l10n('v2.update.history.3.desc.1.1', "privacy", user_lang),
|
||||
l10n('v2.update.history.3.desc.1.2', "privacy", user_lang),
|
||||
l10n('v2.update.history.3.desc.2', "privacy", user_lang)
|
||||
]) }}
|
||||
|
||||
{{ render_paragraph('<i class="fad fa-calendar-alt mr-xs"></i>' + l10n("v2.update.history.4.date", "privacy", user_lang) +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8 mr-xxs"></i><a href="/privacy/privacy_2023-11-11_en.txt">' +
|
||||
l10n('english', "langs", user_lang) + '</a></span>' +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8 mr-xxs"></i><a href="/privacy/privacy_2023-11-11_fr.txt">' +
|
||||
l10n('french', "langs", user_lang) + '</a></span>' )}}
|
||||
{{ render_list_ul([
|
||||
l10n('v2.update.history.4.desc.1', "privacy", user_lang),
|
||||
l10n('v2.update.history.4.desc.1.1', "privacy", user_lang),
|
||||
l10n('v2.update.history.4.desc.2', "privacy", user_lang)
|
||||
]) }}
|
||||
|
||||
{{ render_paragraph('<i class="fad fa-calendar-alt mr-xs"></i>' + l10n("v2.update.history.5.date", "privacy", user_lang) +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8 mr-xxs"></i><a href="/privacy/privacy_2023-11-30_en.txt">' +
|
||||
l10n('english', "langs", user_lang) + '</a></span>' +
|
||||
'<span class="ml-l"><i class="fad fa-globe t-size-8 mr-xxs"></i><a href="/privacy/privacy_2023-11-30_fr.txt">' +
|
||||
l10n('french', "langs", user_lang) + '</a></span>' )}}
|
||||
{{ render_list_ul([
|
||||
l10n('v2.update.history.5.desc.1', "privacy", user_lang),
|
||||
l10n('v2.update.history.5.desc.2', "privacy", user_lang)
|
||||
]) }}
|
||||
|
||||
{{ render_paragraph(l10n("v2.update.end.2", "privacy", user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
{{ render_h1(l10n("complaint.title", "privacy", user_lang), "fad fa-gavel") }}
|
||||
{{ render_paragraph(l10n("complaint.text.1", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n('complaint.text.2', "privacy", user_lang) +
|
||||
'<br><i class="fad fa-globe ml-s t-size-8"></i>' +
|
||||
'<a class="ml-xs" href="https://ec.europa.eu/info/law/law-topic/data-protection/reform/rights-citizens/redress/what-should-i-do-if-i-think-my-personal-data-protection-rights-havent-been-respected_en">https://ec.europa.eu/</a>' +
|
||||
'<span class="ml-s">(' + l10n('english', "langs", user_lang) + ')</span>' +
|
||||
'<br><i class="fad fa-globe ml-s t-size-8"></i>' +
|
||||
'<a class="ml-xs" href="https://gegevensbeschermingsautoriteit.be/citoyen/agir/introduire-une-plainte">https://gegevensbeschermingsautoriteit.be/</a>' +
|
||||
'<span class="ml-s">(' + l10n('french', "langs", user_lang) + ')</span>' ) }}
|
||||
<section>
|
||||
{{ render_h1(l10n("contact.title", "privacy", user_lang), "fad fa-mailbox") }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("contact.text.1", "privacy", user_lang) +
|
||||
'<br><i class="fad fa-at t-size-8 ml-s"></i><a class="ml-xs" href="mailto:herwin.bozet@gmail.com">herwin.bozet@gmail.com</a>') }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<section>
|
||||
{{ render_h1(l10n("complaint.title", "privacy", user_lang), "fad fa-gavel") }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("complaint.text.1", "privacy", user_lang)) }}
|
||||
{{ render_paragraph(l10n('complaint.text.2', "privacy", user_lang) +
|
||||
'<br><i class="fad fa-globe ml-s t-size-8"></i>' +
|
||||
'<a class="ml-xs" href="https://ec.europa.eu/info/law/law-topic/data-protection/reform/rights-citizens/redress/what-should-i-do-if-i-think-my-personal-data-protection-rights-havent-been-respected_en">https://ec.europa.eu/</a>' +
|
||||
'<span class="ml-s">(' + l10n('english', "langs", user_lang) + ')</span>' +
|
||||
'<br><i class="fad fa-globe ml-s t-size-8"></i>' +
|
||||
'<a class="ml-xs" href="https://gegevensbeschermingsautoriteit.be/citoyen/agir/introduire-une-plainte">https://gegevensbeschermingsautoriteit.be/</a>' +
|
||||
'<span class="ml-s">(' + l10n('french', "langs", user_lang) + ')</span>' ) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
@@ -16,7 +16,10 @@
|
||||
<i class="fad fa-briefcase t-size-16 mr-s t-muted"></i><a href="../" class="a-hidden">{{ l10n("header.root", "projects", user_lang) }}</a>
|
||||
<span class="mobile-hide"><span class="mx-s t-size-15">❱</span>{{ l10n(tool_data.metadata.general.title_key, tool_id, user_lang) }}</span>
|
||||
{% else %}
|
||||
<span class="mobile-hide">NibblePoker<span class="mx-s t-size-15">❱</span></span>{{ l10n(tool_data.metadata.general.title_key, tool_id, user_lang) }}
|
||||
{% if not is_brandless %}
|
||||
<span class="mobile-hide">NibblePoker<span class="mx-s t-size-15">❱</span></span>
|
||||
{% endif %}
|
||||
{{ l10n(tool_data.metadata.general.title_key, tool_id, user_lang) }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
|
@@ -1,198 +1,234 @@
|
||||
{% extends "projects/_project.jinja" %}
|
||||
|
||||
{% block project_content %}
|
||||
{{ render_h2(l10n("intro.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("intro.p1", project_id, user_lang)) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("intro.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("intro.p1", project_id, user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("features.title", project_id, user_lang)) }}
|
||||
{{ render_list_ul([
|
||||
l10n("features.1", project_id, user_lang),
|
||||
l10n("features.2", project_id, user_lang),
|
||||
[
|
||||
l10n("features.2.1", project_id, user_lang),
|
||||
l10n("features.2.2", project_id, user_lang),
|
||||
l10n("features.2.3", project_id, user_lang),
|
||||
],
|
||||
l10n("features.3", project_id, user_lang),
|
||||
[
|
||||
l10n("features.3.1", project_id, user_lang),
|
||||
l10n("features.3.2", project_id, user_lang),
|
||||
],
|
||||
]) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("features.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_list_ul([
|
||||
l10n("features.1", project_id, user_lang),
|
||||
l10n("features.2", project_id, user_lang),
|
||||
[
|
||||
l10n("features.2.1", project_id, user_lang),
|
||||
l10n("features.2.2", project_id, user_lang),
|
||||
l10n("features.2.3", project_id, user_lang),
|
||||
],
|
||||
l10n("features.3", project_id, user_lang),
|
||||
[
|
||||
l10n("features.3.1", project_id, user_lang),
|
||||
l10n("features.3.2", project_id, user_lang),
|
||||
],
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("limitations.title", project_id, user_lang)) }}
|
||||
{{ render_list_ul([
|
||||
l10n("limitations.1", project_id, user_lang),
|
||||
[
|
||||
l10n("limitations.2.1", project_id, user_lang),
|
||||
l10n("limitations.2.2", project_id, user_lang),
|
||||
],
|
||||
l10n("limitations.2", project_id, user_lang),
|
||||
[
|
||||
l10n("limitations.2.1", project_id, user_lang),
|
||||
l10n("limitations.2.2", project_id, user_lang),
|
||||
],
|
||||
l10n("limitations.3", project_id, user_lang),
|
||||
[
|
||||
l10n("limitations.3.1", project_id, user_lang),
|
||||
],
|
||||
]) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("limitations.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_list_ul([
|
||||
l10n("limitations.1", project_id, user_lang),
|
||||
[
|
||||
l10n("limitations.2.1", project_id, user_lang),
|
||||
l10n("limitations.2.2", project_id, user_lang),
|
||||
],
|
||||
l10n("limitations.2", project_id, user_lang),
|
||||
[
|
||||
l10n("limitations.2.1", project_id, user_lang),
|
||||
l10n("limitations.2.2", project_id, user_lang),
|
||||
],
|
||||
l10n("limitations.3", project_id, user_lang),
|
||||
[
|
||||
l10n("limitations.3.1", project_id, user_lang),
|
||||
],
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("doc.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("doc.p1", project_id, user_lang)) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("doc.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("doc.p1", project_id, user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("usage.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("usage.p1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("usage.p2", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"import board",
|
||||
"import time",
|
||||
"",
|
||||
"import ebyte_e32",
|
||||
"",
|
||||
"PIN_M0 = board.IO13",
|
||||
"PIN_M1 = board.IO12",
|
||||
"PIN_RXD = board.IO11 # Pin marked as RX on the module",
|
||||
"PIN_TXD = board.IO10 # Pin marked as TX on the module",
|
||||
"PIN_AUX = board.IO9",
|
||||
"",
|
||||
"e32 = ebyte_e32.E32Device(PIN_M0, PIN_M1, PIN_AUX, PIN_TXD, PIN_RXD, address=0xBEEF, channel=4)",
|
||||
"",
|
||||
"# Switching to fixed transmission mode.",
|
||||
"e32.tx_mode = ebyte_e32.TransmissionMode.TRANSMISSION_FIXED",
|
||||
"",
|
||||
"# Switching to mode 0. (Normal mode)",
|
||||
"e32.mode = ebyte_e32.Modes.MODE_NORMAL",
|
||||
"",
|
||||
"# Message content:",
|
||||
"# * Receiver's address: 0x1337 (b'\\13\\x37')",
|
||||
"# * Receiver's channel: 4 (b'\\x04')",
|
||||
"# * Message: b'Hello World !'",
|
||||
"message = b'\\x13\\x37\\x04Hello World !'",
|
||||
"",
|
||||
"# Sending message with helper method",
|
||||
"e32.send(message)",
|
||||
"",
|
||||
"# The message may be truncated at specific lengths depending on the frequencies used.",
|
||||
"# Please check the documentation for more information !"
|
||||
], "python")
|
||||
}}
|
||||
<section>
|
||||
{{ render_h2(l10n("usage.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("usage.p1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("usage.p2", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"import board",
|
||||
"import time",
|
||||
"",
|
||||
"import ebyte_e32",
|
||||
"",
|
||||
"PIN_M0 = board.IO13",
|
||||
"PIN_M1 = board.IO12",
|
||||
"PIN_RXD = board.IO11 # Pin marked as RX on the module",
|
||||
"PIN_TXD = board.IO10 # Pin marked as TX on the module",
|
||||
"PIN_AUX = board.IO9",
|
||||
"",
|
||||
"e32 = ebyte_e32.E32Device(PIN_M0, PIN_M1, PIN_AUX, PIN_TXD, PIN_RXD, address=0xBEEF, channel=4)",
|
||||
"",
|
||||
"# Switching to fixed transmission mode.",
|
||||
"e32.tx_mode = ebyte_e32.TransmissionMode.TRANSMISSION_FIXED",
|
||||
"",
|
||||
"# Switching to mode 0. (Normal mode)",
|
||||
"e32.mode = ebyte_e32.Modes.MODE_NORMAL",
|
||||
"",
|
||||
"# Message content:",
|
||||
"# * Receiver's address: 0x1337 (b'\\13\\x37')",
|
||||
"# * Receiver's channel: 4 (b'\\x04')",
|
||||
"# * Message: b'Hello World !'",
|
||||
"message = b'\\x13\\x37\\x04Hello World !'",
|
||||
"",
|
||||
"# Sending message with helper method",
|
||||
"e32.send(message)",
|
||||
"",
|
||||
"# The message may be truncated at specific lengths depending on the frequencies used.",
|
||||
"# Please check the documentation for more information !"
|
||||
], "python")
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("demo.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("demo.p1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("demo.p3", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("demo.p4", project_id, user_lang)) }}
|
||||
{{ render_splide([
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-01.jpg") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-02.jpg") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-03.jpg") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-04.jpg") + '">',
|
||||
]) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("demo.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("demo.p1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("demo.p3", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("demo.p4", project_id, user_lang)) }}
|
||||
{{ render_splide([
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-01.jpg") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-02.jpg") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-03.jpg") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-04.jpg") + '">',
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("downloads.title", project_id, user_lang)) }}
|
||||
<table class="table-stylish table-p-xs table-v-center border r-l">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ l10n("version", "commons", user_lang) }}</th>
|
||||
<th><span class="code">.py</span></th>
|
||||
<th><span class="code">.min.py</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>v0.8.0</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.8.0/nibblepoker-circuitpython-e32-driver_v0.8.0_py.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>10.42 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None, "btn-primary")
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.8.0/nibblepoker-circuitpython-e32-driver_v0.8.0_py-min.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>4.79 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None, "btn-primary")
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>v0.7.0</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.7.0/nibblepoker-circuitpython-e32-driver_v0.7.0_py.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>10.51 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.7.0/nibblepoker-circuitpython-e32-driver_v0.7.0_py-min.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>4.79 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>v0.6.0</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.6.0/nibblepoker-circuitpython-e32-driver_0.6.0_py.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>10.39 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.6.0/nibblepoker-circuitpython-e32-driver_0.6.0_py-min.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>4.62 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>v0.4.0</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.4.0/nibblepoker-circuitpython-e32-driver_0.4.0_py.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>19.96 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.4.0/nibblepoker-circuitpython-e32-driver_0.4.0_py-min.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>4.18 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<section>
|
||||
{{ render_h2(l10n("downloads.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
<table class="table-stylish table-p-xs table-v-center border r-l">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ l10n("version", "commons", user_lang) }}</th>
|
||||
<th><span class="code">.py</span></th>
|
||||
<th><span class="code">.min.py</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>v0.8.0</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.8.0/nibblepoker-circuitpython-e32-driver_v0.8.0_py.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>10.42 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None, "btn-primary")
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.8.0/nibblepoker-circuitpython-e32-driver_v0.8.0_py-min.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>4.79 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None, "btn-primary")
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>v0.7.0</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.7.0/nibblepoker-circuitpython-e32-driver_v0.7.0_py.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>10.51 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.7.0/nibblepoker-circuitpython-e32-driver_v0.7.0_py-min.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>4.79 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>v0.6.0</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.6.0/nibblepoker-circuitpython-e32-driver_0.6.0_py.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>10.39 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.6.0/nibblepoker-circuitpython-e32-driver_0.6.0_py-min.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>4.62 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>v0.4.0</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.4.0/nibblepoker-circuitpython-e32-driver_0.4.0_py.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>19.96 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://files.nibblepoker.com/downloads/CircuitPython-Ebyte-E32/0.4.0/nibblepoker-circuitpython-e32-driver_0.4.0_py-min.zip" class="a-hidden">
|
||||
{{ render_button(
|
||||
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>4.18 KiB<i class=\"fas fa-download ml-xs\"></i>",
|
||||
False, None)
|
||||
}}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("license.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(
|
||||
"<a href=\"https://github.com/aziascreations/CircuitPython-Ebyte-E32/blob/master/LICENSE\">" +
|
||||
l10n("license.mit.single", "commons", user_lang)) +
|
||||
"</a>"
|
||||
}}
|
||||
<section>
|
||||
{{ render_h2(l10n("license.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(
|
||||
"<a href=\"https://github.com/aziascreations/CircuitPython-Ebyte-E32/blob/master/LICENSE\">" +
|
||||
l10n("license.mit.single", "commons", user_lang)) +
|
||||
"</a>"
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("links.title", project_id, user_lang)) }}
|
||||
{{ render_list_ul([
|
||||
"<a href=\"https://github.com/aziascreations/CircuitPython-Ebyte-E32\">" +
|
||||
l10n("github", "commons", user_lang) + "</a>",
|
||||
<section>
|
||||
{{ render_h2(l10n("links.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_list_ul([
|
||||
"<a href=\"https://github.com/aziascreations/CircuitPython-Ebyte-E32\">" +
|
||||
l10n("github", "commons", user_lang) + "</a>",
|
||||
|
||||
"<a href=\"https://aziascreations.github.io/CircuitPython-Ebyte-E32/\">" +
|
||||
l10n("doc.online", "commons", user_lang) + "</a>",
|
||||
]) }}
|
||||
"<a href=\"https://aziascreations.github.io/CircuitPython-Ebyte-E32/\">" +
|
||||
l10n("doc.online", "commons", user_lang) + "</a>",
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
|
@@ -1,137 +1,181 @@
|
||||
{% extends "projects/_project.jinja" %}
|
||||
|
||||
{% block project_content %}
|
||||
{{ render_h2(l10n("intro.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("intro.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("intro.2", project_id, user_lang)) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("intro.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("intro.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("intro.2", project_id, user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("preamble.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("preamble.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("preamble.2", project_id, user_lang)) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("preamble.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("preamble.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("preamble.2", project_id, user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("setup.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.2", project_id, user_lang)) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("setup.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("setup.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.2", project_id, user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h3(l10n("setup.camera.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.camera.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.camera.2", project_id, user_lang)) }}
|
||||
{{ render_h4(l10n("commons.example", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"nvr_stack:",
|
||||
" cctv_recorder_cam1:",
|
||||
" container_name: cctv-recorder-cam1",
|
||||
" build:",
|
||||
" context: .",
|
||||
" dockerfile: Dockerfile_recorder",
|
||||
" environment:",
|
||||
" - TZ=Europe/Brussels",
|
||||
" - \"NP_CCTV_URL=rtsp://user:password@address:554/sub-path\"",
|
||||
" volumes:",
|
||||
" - ./recordings/cam1:/data",
|
||||
" restart: unless-stopped",
|
||||
], "yaml")
|
||||
}}
|
||||
{{ render_paragraph(l10n("setup.camera.3", project_id, user_lang)) }}
|
||||
<section>
|
||||
{{ render_h3(l10n("setup.camera.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("setup.camera.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.camera.2", project_id, user_lang)) }}
|
||||
{{ render_h4(l10n("commons.example", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"nvr_stack:",
|
||||
" cctv_recorder_cam1:",
|
||||
" container_name: cctv-recorder-cam1",
|
||||
" build:",
|
||||
" context: .",
|
||||
" dockerfile: Dockerfile_recorder",
|
||||
" environment:",
|
||||
" - TZ=Europe/Brussels",
|
||||
" - \"NP_CCTV_URL=rtsp://user:password@address:554/sub-path\"",
|
||||
" volumes:",
|
||||
" - ./recordings/cam1:/data",
|
||||
" restart: unless-stopped",
|
||||
], "yaml")
|
||||
}}
|
||||
{{ render_paragraph(l10n("setup.camera.3", project_id, user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h3(l10n("setup.cleaner.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.cleaner.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.cleaner.2", project_id, user_lang)) }}
|
||||
{{ render_h4(l10n("commons.example", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"nvr_stack:",
|
||||
" cctv_cleaner:",
|
||||
" container_name: cctv-cleaner",
|
||||
" build:",
|
||||
" context: .",
|
||||
" dockerfile: Dockerfile_cleaner",
|
||||
" environment:",
|
||||
" - TZ=Europe/Brussels",
|
||||
" - \"NP_MAX_FILE_AGE_HOURS=72\"",
|
||||
" volumes:",
|
||||
" - ./recordings:/data",
|
||||
" - ./cleaner.py:/app/app.py:ro",
|
||||
" restart: unless-stopped",
|
||||
], "yaml")
|
||||
}}
|
||||
<section>
|
||||
{{ render_h3(l10n("setup.cleaner.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("setup.cleaner.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.cleaner.2", project_id, user_lang)) }}
|
||||
{{ render_h4(l10n("commons.example", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"nvr_stack:",
|
||||
" cctv_cleaner:",
|
||||
" container_name: cctv-cleaner",
|
||||
" build:",
|
||||
" context: .",
|
||||
" dockerfile: Dockerfile_cleaner",
|
||||
" environment:",
|
||||
" - TZ=Europe/Brussels",
|
||||
" - \"NP_MAX_FILE_AGE_HOURS=72\"",
|
||||
" volumes:",
|
||||
" - ./recordings:/data",
|
||||
" - ./cleaner.py:/app/app.py:ro",
|
||||
" restart: unless-stopped",
|
||||
], "yaml")
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h3(l10n("setup.web.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.web.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.web.2", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.web.3", project_id, user_lang)) }}
|
||||
{{ render_h4(l10n("commons.web.vars.title", project_id, user_lang)) }}
|
||||
{{ render_h4(l10n("commons.example", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"nvr_stack:",
|
||||
" cctv_web:",
|
||||
" container_name: cctv-web",
|
||||
" image: php:apache",
|
||||
" ports:",
|
||||
" - 26880:80",
|
||||
" environment:",
|
||||
" - TZ=Europe/Brussels",
|
||||
" - \"NP_CAM_cam1=Camera #1\"",
|
||||
" - \"NP_CAM_cam2=Camera #2\"",
|
||||
" - \"NP_TITLE=NibblePoker's Mini CCTV NVR\"",
|
||||
" - \"NP_FOOTER=Made by <i>BOZET Herwin</i>\"",
|
||||
" volumes:",
|
||||
" - ./htdocs:/var/www/html # Cannot be \":ro\" since the recordings are mounted into it.",
|
||||
" - ./apache2.conf:/etc/apache2/apache2.conf:ro",
|
||||
" - ./recordings:/var/www/html/data:ro",
|
||||
" restart: unless-stopped",
|
||||
], "yaml")
|
||||
}}
|
||||
<section>
|
||||
{{ render_h3(l10n("setup.web.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("setup.web.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.web.2", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("setup.web.3", project_id, user_lang)) }}
|
||||
{{ render_h4(l10n("commons.web.vars.title", project_id, user_lang)) }}
|
||||
{{ render_h4(l10n("commons.example", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"nvr_stack:",
|
||||
" cctv_web:",
|
||||
" container_name: cctv-web",
|
||||
" image: php:apache",
|
||||
" ports:",
|
||||
" - 26880:80",
|
||||
" environment:",
|
||||
" - TZ=Europe/Brussels",
|
||||
" - \"NP_CAM_cam1=Camera #1\"",
|
||||
" - \"NP_CAM_cam2=Camera #2\"",
|
||||
" - \"NP_TITLE=NibblePoker's Mini CCTV NVR\"",
|
||||
" - \"NP_FOOTER=Made by <i>BOZET Herwin</i>\"",
|
||||
" volumes:",
|
||||
" - ./htdocs:/var/www/html # Cannot be \":ro\" since the recordings are mounted into it.",
|
||||
" - ./apache2.conf:/etc/apache2/apache2.conf:ro",
|
||||
" - ./recordings:/var/www/html/data:ro",
|
||||
" restart: unless-stopped",
|
||||
], "yaml")
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("startup.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("startup.1", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"docker-compose up --build -d",
|
||||
], "bash")
|
||||
}}
|
||||
<section>
|
||||
{{ render_h2(l10n("startup.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("startup.1", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"docker-compose up --build -d",
|
||||
], "bash")
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("screenshots.title", project_id, user_lang)) }}
|
||||
{{ render_splide([
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/" + project_id + "/home.png") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/" + project_id + "/cam.png") + '">',
|
||||
]) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("screenshots.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_splide([
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/" + project_id + "/home.png") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/" + project_id + "/cam.png") + '">',
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("statistics.title", project_id, user_lang)) }}
|
||||
{{ render_list_ul([
|
||||
l10n("statistics.1", project_id, user_lang),
|
||||
[
|
||||
l10n("statistics.1.1", project_id, user_lang),
|
||||
],
|
||||
l10n("statistics.2", project_id, user_lang),
|
||||
[
|
||||
l10n("statistics.2.1", project_id, user_lang),
|
||||
l10n("statistics.2.2", project_id, user_lang),
|
||||
[
|
||||
l10n("statistics.2.2.1", project_id, user_lang),
|
||||
],
|
||||
],
|
||||
l10n("statistics.3", project_id, user_lang),
|
||||
[
|
||||
l10n("statistics.3.1", project_id, user_lang),
|
||||
l10n("statistics.3.2", project_id, user_lang),
|
||||
l10n("statistics.3.3", project_id, user_lang),
|
||||
],
|
||||
l10n("statistics.4", project_id, user_lang),
|
||||
[
|
||||
l10n("statistics.4.1", project_id, user_lang),
|
||||
l10n("statistics.4.2", project_id, user_lang),
|
||||
],
|
||||
]) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("statistics.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_list_ul([
|
||||
l10n("statistics.1", project_id, user_lang),
|
||||
[
|
||||
l10n("statistics.1.1", project_id, user_lang),
|
||||
],
|
||||
l10n("statistics.2", project_id, user_lang),
|
||||
[
|
||||
l10n("statistics.2.1", project_id, user_lang),
|
||||
l10n("statistics.2.2", project_id, user_lang),
|
||||
[
|
||||
l10n("statistics.2.2.1", project_id, user_lang),
|
||||
],
|
||||
],
|
||||
l10n("statistics.3", project_id, user_lang),
|
||||
[
|
||||
l10n("statistics.3.1", project_id, user_lang),
|
||||
l10n("statistics.3.2", project_id, user_lang),
|
||||
l10n("statistics.3.3", project_id, user_lang),
|
||||
],
|
||||
l10n("statistics.4", project_id, user_lang),
|
||||
[
|
||||
l10n("statistics.4.1", project_id, user_lang),
|
||||
l10n("statistics.4.2", project_id, user_lang),
|
||||
],
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("license.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("license.1", project_id, user_lang)) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("license.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("license.1", project_id, user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("links.title", project_id, user_lang)) }}
|
||||
{{ render_list_ul([
|
||||
"<a href=\"https://github.com/aziascreations/Docker-Mini-CCTV-NVR\">" +
|
||||
l10n("github", "commons", user_lang) + "</a>",
|
||||
]) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("links.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_list_ul([
|
||||
"<a href=\"https://github.com/aziascreations/Docker-Mini-CCTV-NVR\">" +
|
||||
l10n("github", "commons", user_lang) + "</a>",
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
@@ -1,169 +1,209 @@
|
||||
{% extends "projects/_project.jinja" %}
|
||||
|
||||
{% block project_content %}
|
||||
{{ render_h2(l10n("intro.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("intro.p1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("intro.p2", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("intro.p3", project_id, user_lang)) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("intro.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("intro.p1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("intro.p2", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("intro.p3", project_id, user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("requirements.title", project_id, user_lang)) }}
|
||||
{{ render_list_ul([
|
||||
l10n("requirements.1", project_id, user_lang),
|
||||
[
|
||||
l10n("requirements.2", project_id, user_lang),
|
||||
],
|
||||
l10n("requirements.3", project_id, user_lang),
|
||||
[
|
||||
l10n("requirements.4", project_id, user_lang),
|
||||
],
|
||||
]) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("requirements.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_list_ul([
|
||||
l10n("requirements.1", project_id, user_lang),
|
||||
[
|
||||
l10n("requirements.2", project_id, user_lang),
|
||||
],
|
||||
l10n("requirements.3", project_id, user_lang),
|
||||
[
|
||||
l10n("requirements.4", project_id, user_lang),
|
||||
],
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("improvements.title", project_id, user_lang)) }}
|
||||
{{ render_list_ul([
|
||||
l10n("improvements.1", project_id, user_lang),
|
||||
l10n("improvements.2", project_id, user_lang),
|
||||
l10n("improvements.3", project_id, user_lang),
|
||||
l10n("improvements.4", project_id, user_lang),
|
||||
l10n("improvements.5", project_id, user_lang),
|
||||
]) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("improvements.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_list_ul([
|
||||
l10n("improvements.1", project_id, user_lang),
|
||||
l10n("improvements.2", project_id, user_lang),
|
||||
l10n("improvements.3", project_id, user_lang),
|
||||
l10n("improvements.4", project_id, user_lang),
|
||||
l10n("improvements.5", project_id, user_lang),
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("screenshots.title", project_id, user_lang)) }}
|
||||
{{ render_splide([
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/lscom/screen-cli-stylish-2x-xBR.png") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/lscom/screen-cli-csv-2x-xBR.png") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/lscom/screen-cli-full-2x-xBR.png") + '">',
|
||||
]) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("screenshots.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_splide([
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/lscom/screen-cli-stylish-2x-xBR.png") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/lscom/screen-cli-csv-2x-xBR.png") + '">',
|
||||
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/lscom/screen-cli-full-2x-xBR.png") + '">',
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("usage.title", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
"lscom.exe [-a|--show-all] [-d|--show-device] [-D <str>|--divider <str>] [-f|--show-friendly]",
|
||||
" [-h|--help] [-H|--short-help] [-n|--show-name-raw] [-P|--no-pretty] [-s|--sort]",
|
||||
" [-S|--sort-reverse] [-t|--tab-padding] [-v|--version] [-V|--version-only]",
|
||||
"",
|
||||
"Launch arguments:",
|
||||
" -a, --show-all Display the complete port's name (Equal to '-dfn')",
|
||||
" -d, --show-device Displays the port's device name",
|
||||
" -D <str>, --divider <str> Uses the given string or char as a separator (Can be empty string !)",
|
||||
" -f, --show-friendly Displays the port's friendly name",
|
||||
" -h, --help Display this help text",
|
||||
" -H, --short-help Display the short help text",
|
||||
" -n, --show-name-raw Displays the port's raw name (See remarks section)",
|
||||
" -P, --no-pretty Disables the pretty printing format (Equal to -D \" \")",
|
||||
" -s, --sort Sorts the port based on their raw names in an ascending order",
|
||||
" -S, --sort-reverse Sorts the port based on their raw names in a descending order",
|
||||
" -t, --tab-padding Use tabs for padding between the types of names (Overrides '-D')",
|
||||
" -v, --version Shows the utility's version number and other info",
|
||||
" -V, --version-only Shows the utility's version number only (Overrides '-v')"
|
||||
], None)
|
||||
}}
|
||||
<section>
|
||||
{{ render_h2(l10n("usage.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{
|
||||
render_code_block([
|
||||
"lscom.exe [-a|--show-all] [-d|--show-device] [-D <str>|--divider <str>] [-f|--show-friendly]",
|
||||
" [-h|--help] [-H|--short-help] [-n|--show-name-raw] [-P|--no-pretty] [-s|--sort]",
|
||||
" [-S|--sort-reverse] [-t|--tab-padding] [-v|--version] [-V|--version-only]",
|
||||
"",
|
||||
"Launch arguments:",
|
||||
" -a, --show-all Display the complete port's name (Equal to '-dfn')",
|
||||
" -d, --show-device Displays the port's device name",
|
||||
" -D <str>, --divider <str> Uses the given string or char as a separator (Can be empty string !)",
|
||||
" -f, --show-friendly Displays the port's friendly name",
|
||||
" -h, --help Display this help text",
|
||||
" -H, --short-help Display the short help text",
|
||||
" -n, --show-name-raw Displays the port's raw name (See remarks section)",
|
||||
" -P, --no-pretty Disables the pretty printing format (Equal to -D \" \")",
|
||||
" -s, --sort Sorts the port based on their raw names in an ascending order",
|
||||
" -S, --sort-reverse Sorts the port based on their raw names in a descending order",
|
||||
" -t, --tab-padding Use tabs for padding between the types of names (Overrides '-D')",
|
||||
" -v, --version Shows the utility's version number and other info",
|
||||
" -V, --version-only Shows the utility's version number only (Overrides '-v')"
|
||||
], None)
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("formatting.title", project_id, user_lang)) }}
|
||||
{{
|
||||
render_code_block([
|
||||
" *┬> No launch arguments:",
|
||||
" └──> ${Raw name} => COM1",
|
||||
" *┬> '-d' or '-f'",
|
||||
" ├──> ${Device name} => \\Device\\Serial1",
|
||||
" └──> ${Friendly name} => Communications Port",
|
||||
" *┬> '-d' and '-f'",
|
||||
" └──> ${Friendly name} [${Device name}] => Communications Port [\\Device\\Serial1]",
|
||||
" *┬> '-n' and '-d'",
|
||||
" └──> ${Raw name} [$DeviceName] => COM1 [\\Device\\Serial1]",
|
||||
" *┬> '-n' and '-f'",
|
||||
" └──> ${Raw name} - ${Friendly name} => COM1 - Communications Port",
|
||||
" *┬> '-ndf' or '-a'",
|
||||
" └──> ${Raw name} - ${Friendly name} [${Device name}] => COM1 - Communications Port [\\Device\\Serial1]",
|
||||
" *┬> '-ndfp' or '-ap'",
|
||||
" └──> ${Raw name} ${Friendly name} ${Device name} => COM1 Communications Port \\Device\\Serial1",
|
||||
" *┬> '-ndfD \";\"' or '-aD \";\"'",
|
||||
" └──> ${Raw name};${Friendly name};${Device name} => COM1;Communications Port;\\Device\\Serial1"
|
||||
], None)
|
||||
}}
|
||||
<section>
|
||||
{{ render_h2(l10n("formatting.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{
|
||||
render_code_block([
|
||||
" *┬> No launch arguments:",
|
||||
" └──> ${Raw name} => COM1",
|
||||
" *┬> '-d' or '-f'",
|
||||
" ├──> ${Device name} => \\Device\\Serial1",
|
||||
" └──> ${Friendly name} => Communications Port",
|
||||
" *┬> '-d' and '-f'",
|
||||
" └──> ${Friendly name} [${Device name}] => Communications Port [\\Device\\Serial1]",
|
||||
" *┬> '-n' and '-d'",
|
||||
" └──> ${Raw name} [$DeviceName] => COM1 [\\Device\\Serial1]",
|
||||
" *┬> '-n' and '-f'",
|
||||
" └──> ${Raw name} - ${Friendly name} => COM1 - Communications Port",
|
||||
" *┬> '-ndf' or '-a'",
|
||||
" └──> ${Raw name} - ${Friendly name} [${Device name}] => COM1 - Communications Port [\\Device\\Serial1]",
|
||||
" *┬> '-ndfp' or '-ap'",
|
||||
" └──> ${Raw name} ${Friendly name} ${Device name} => COM1 Communications Port \\Device\\Serial1",
|
||||
" *┬> '-ndfD \";\"' or '-aD \";\"'",
|
||||
" └──> ${Raw name};${Friendly name};${Device name} => COM1;Communications Port;\\Device\\Serial1"
|
||||
], None)
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("packages.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.single.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.single.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.self.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.self.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.msi.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.msi.1", project_id, user_lang)) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("packages.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_paragraph(l10n("packages.single.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.single.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.self.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.self.1", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.msi.title", project_id, user_lang)) }}
|
||||
{{ render_paragraph(l10n("packages.msi.1", project_id, user_lang)) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("version.current", "commons", user_lang)) }}
|
||||
<table class="table-stylish table-p-s border r-l">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ l10n("cpu.architecture", "commons", user_lang) }}</th>
|
||||
<th>{{ l10n("requirements", "commons", user_lang) }}</th>
|
||||
<th>{{ l10n("download.multiple", "commons", user_lang) }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ l10n("cpu.any", "commons", user_lang) }}</td>
|
||||
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">{{ l10n("cpu.x64", "commons", user_lang) }}</td>
|
||||
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ l10n("none.fs", "commons", user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">{{ l10n("cpu.x86", "commons", user_lang) }}</td>
|
||||
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ l10n("none.fs", "commons", user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">{{ l10n("cpu.arm64", "commons", user_lang) }}</td>
|
||||
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ l10n("none.fs", "commons", user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">{{ l10n("cpu.arm32", "commons", user_lang) }}</td>
|
||||
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ l10n("none.fs", "commons", user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<section>
|
||||
{{ render_h2(l10n("version.current", "commons", user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
<table class="table-stylish table-p-s border r-l">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ l10n("cpu.architecture", "commons", user_lang) }}</th>
|
||||
<th>{{ l10n("requirements", "commons", user_lang) }}</th>
|
||||
<th>{{ l10n("download.multiple", "commons", user_lang) }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ l10n("cpu.any", "commons", user_lang) }}</td>
|
||||
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">{{ l10n("cpu.x64", "commons", user_lang) }}</td>
|
||||
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ l10n("none.fs", "commons", user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">{{ l10n("cpu.x86", "commons", user_lang) }}</td>
|
||||
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ l10n("none.fs", "commons", user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">{{ l10n("cpu.arm64", "commons", user_lang) }}</td>
|
||||
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ l10n("none.fs", "commons", user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="2">{{ l10n("cpu.arm32", "commons", user_lang) }}</td>
|
||||
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{{ l10n("none.fs", "commons", user_lang) }}</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("source.code", "commons", user_lang)) }}
|
||||
<table class="table-stylish table-p-s border r-l">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ l10n("version", "commons", user_lang) }}</th>
|
||||
<th>{{ l10n("download.multiple", "commons", user_lang) }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>v3.0.0</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<section>
|
||||
{{ render_h2(l10n("source.code", "commons", user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
<table class="table-stylish table-p-s border r-l">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ l10n("version", "commons", user_lang) }}</th>
|
||||
<th>{{ l10n("download.multiple", "commons", user_lang) }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>v3.0.0</td>
|
||||
<td>...</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{{ render_h2(l10n("links.title", project_id, user_lang)) }}
|
||||
{{ render_list_ul([
|
||||
"<a href='https://github.com/aziascreations/DotNet-ListComPort'>" +
|
||||
l10n("github", "commons", user_lang) +
|
||||
"</a>",
|
||||
]) }}
|
||||
<section>
|
||||
{{ render_h2(l10n("links.title", project_id, user_lang)) }}
|
||||
<div class="content-spacer">
|
||||
{{ render_list_ul([
|
||||
"<a href='https://github.com/aziascreations/DotNet-ListComPort'>" +
|
||||
l10n("github", "commons", user_lang) +
|
||||
"</a>",
|
||||
]) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% endblock %}
|
||||
|
@@ -3,4 +3,6 @@ def get_standalone_common_headers() -> str:
|
||||
_html = ""
|
||||
with open("./static/resources/Standalone/nibblepoker.min.css", encoding='utf-8') as f:
|
||||
_html += "<style>" + f.read() + "</style>"
|
||||
with open("./static/resources/NibblePoker/css/extra.css", encoding='utf-8') as f:
|
||||
_html += "<style>" + f.read() + "</style>"
|
||||
return _html
|
||||
|
@@ -13,11 +13,15 @@ def reload_sitemap_entries(definition_file: str) -> None:
|
||||
with open(definition_file, 'r') as f:
|
||||
raw_sitemap_entries = yaml.safe_load(f)
|
||||
|
||||
for sitemap_entry in raw_sitemap_entries:
|
||||
__SITEMAP_ENTRIES.append(sitemap_entry)
|
||||
|
||||
for allowed_lang in ALLOWED_LANGS:
|
||||
__SITEMAP_ENTRIES.append(("/" + allowed_lang + "/" + sitemap_entry).replace("//", "/"))
|
||||
for allowed_lang in [""] + ALLOWED_LANGS:
|
||||
for sitemap_entry in raw_sitemap_entries:
|
||||
__SITEMAP_ENTRIES.append(
|
||||
("/" + str(allowed_lang) + "/" + str(sitemap_entry))
|
||||
.replace("//", "/")
|
||||
.replace("//", "/")
|
||||
)
|
||||
# __SITEMAP_ENTRIES.append(sitemap_entry)
|
||||
# for allowed_lang in ALLOWED_LANGS:
|
||||
|
||||
|
||||
def get_sitemap_entries() -> list[str]:
|
||||
|