Disabled unfinished projects and tools, Removed unused section, Improved readability, publish first public version

Update Dockerfile, app.py, and 38 more files...
This commit is contained in:
2025-03-30 14:52:48 +02:00
parent 374e6d018b
commit 5b4edda381
35 changed files with 853 additions and 670 deletions

View File

@@ -3,8 +3,8 @@ FROM python:alpine
WORKDIR /www WORKDIR /www
ADD ./ ./ ADD ./ ./
RUN apk add --no-cache cargo #RUN apk add --no-cache cargo
RUN pip install -r requirements.txt RUN pip install -r requirements.txt
RUN pip install gunicorn RUN pip install gunicorn
ENTRYPOINT ["top", "-b"] ENTRYPOINT ["python", "-u", "/www/app.py"]

17
app.py
View File

@@ -176,6 +176,7 @@ def route_root(lang: Optional[str]):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
)).replace("> <", "><") )).replace("> <", "><")
@@ -191,6 +192,7 @@ def route_contact(lang: Optional[str]):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
)).replace("> <", "><") )).replace("> <", "><")
@@ -211,6 +213,7 @@ def route_content(lang: Optional[str]):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
requested_tags=requested_tags, requested_tags=requested_tags,
)).replace("> <", "><") )).replace("> <", "><")
@@ -237,6 +240,7 @@ def route_content_project(lang: Optional[str], project_id: str):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
error_key=error_key, error_key=error_key,
error_code=error_code, error_code=error_code,
)).replace("> <", "><"), error_code )).replace("> <", "><"), error_code
@@ -247,6 +251,7 @@ def route_content_project(lang: Optional[str], project_id: str):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
project_data=get_projects().get(project_id), project_data=get_projects().get(project_id),
project_id=project_id, project_id=project_id,
)).replace("> <", "><") )).replace("> <", "><")
@@ -269,6 +274,7 @@ def route_tools_index(lang: Optional[str]):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
requested_tags=requested_tags, requested_tags=requested_tags,
)).replace("> <", "><") )).replace("> <", "><")
@@ -295,6 +301,7 @@ def route_tools_page(lang: Optional[str], tool_id: str):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
error_key=error_key, error_key=error_key,
error_code=error_code, error_code=error_code,
)).replace("> <", "><"), error_code )).replace("> <", "><"), error_code
@@ -305,6 +312,7 @@ def route_tools_page(lang: Optional[str], tool_id: str):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
tool_data=get_tools().get(tool_id), tool_data=get_tools().get(tool_id),
tool_id=tool_id, tool_id=tool_id,
applet_data=get_applets().get(get_tools().get(tool_id).applet_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, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
)).replace("> <", "><") )).replace("> <", "><")
@@ -336,6 +345,7 @@ def route_privacy(lang: Optional[str]):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
)).replace("> <", "><") )).replace("> <", "><")
@@ -350,6 +360,7 @@ def route_links(lang: Optional[str]):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
)).replace("> <", "><") )).replace("> <", "><")
@@ -364,6 +375,7 @@ def route_debug(lang: Optional[str]):
raw_lang=lang, raw_lang=lang,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
)).replace("> <", "><") )).replace("> <", "><")
@@ -383,6 +395,7 @@ def handle_exception(e: Exception):
raw_lang=DEFAULT_LANG, raw_lang=DEFAULT_LANG,
request_path=request.path, request_path=request.path,
is_standalone="standalone" in request.args, is_standalone="standalone" in request.args,
is_brandless="brandless" in request.args,
error_key=str(e.code), error_key=str(e.code),
error_code=e.code, error_code=e.code,
)).replace("> <", "><"), error_code )).replace("> <", "><"), error_code
@@ -398,12 +411,12 @@ if __name__ == '__main__':
if os.environ.get('NP_FLASK_WAITRESS', "0") == "1": if os.environ.get('NP_FLASK_WAITRESS', "0") == "1":
print("Serving app using waitress.") print("Serving app using waitress.")
from waitress import serve 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: else:
print("Serving app using default development server.") print("Serving app using default development server.")
app.run( app.run(
host="0.0.0.0", host="0.0.0.0",
port=5000, port=int(os.environ.get('NP_FLASK_PORT', "5000")),
debug=True, debug=True,
# debug=False, # debug=False,
load_dotenv=False load_dotenv=False

View File

@@ -6,13 +6,13 @@
- -
- title_key: text.articles #- title_key: text.articles
abs_href: "/articles/" # abs_href: "/articles/"
icon: fad fa-newspaper # icon: fad fa-newspaper
active_id: articles # active_id: articles
has_new_until_utc: 0 # has_new_until_utc: 0
#
- #-
- title_key: text.applications - title_key: text.applications
abs_href: "/content/?tags=application;web" abs_href: "/content/?tags=application;web"

View File

@@ -1,10 +1,16 @@
# ??? # Sitemap definition
- "/" - "/"
- "/about/" - "/about/"
- "/articles/" #- "/articles/"
- "/contact/" - "/contact/"
- "/content/" - "/content/"
- "/content/circuitpython-ebyte-e32/" - "/content/circuitpython-ebyte-e32/"
- "/content/docker-mini-cctv-nvr/"
- "/content/lscom-cli-dotnet/"
- "/links/" - "/links/"
- "/privacy/" - "/privacy/"
- "/tools/"
- "/tools/iban-generator/"
- "/tools/excel-password-remover/"
- "/tools/uuid-generator/"

View File

@@ -1,6 +1,6 @@
# EN - Excel Password Remover # EN - Excel Password Remover
meta.title: Excel Worksheet Password Remover meta.title: Excel Password Remover
meta.description: >- meta.description: >-
Small web page from which you can easily remove a password from an Excel 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 worksheet. It works by leaving the task of editing the XML files on an Excel

View File

@@ -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"
}

View File

@@ -1,6 +1,6 @@
# FR - Excel Password Remover # FR - Excel Password Remover
_meta.title: '' meta.title: Excel Password Remover
meta.description: >- meta.description: >-
Petite application web qui permet de facilement retirer le mot de passe d'une 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 feuille de calcul Excel depuis votre navigateur web sans avoir à uploader le

View File

@@ -11,7 +11,7 @@ tools:
description_key: "meta.description" description_key: "meta.description"
type: null type: null
url: 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 image_type: null
twitter: twitter:
title_key: "meta.title" title_key: "meta.title"
@@ -21,11 +21,12 @@ tools:
enable: true enable: true
title_key: "meta.title" title_key: "meta.title"
preamble_key: "meta.description" 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: "" image_alt_key: ""
general: general:
icon: "fad fa-table-cells-column-unlock" icon: "fad fa-table-cells-column-unlock"
title_key: "meta.title" title_key: "meta.title"
subtitle_key: "article.subtitle" subtitle_key: "article.subtitle"
tags: tags:
- "undefined" - "office"
- "utility"

View File

@@ -28,4 +28,5 @@ tools:
title_key: "meta.title" title_key: "meta.title"
subtitle_key: "article.subtitle" subtitle_key: "article.subtitle"
tags: tags:
- "undefined" - "generator"
- "finance"

View File

@@ -11,7 +11,7 @@ tools:
description_key: "meta.description" description_key: "meta.description"
type: null type: null
url: 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 image_type: null
twitter: twitter:
title_key: "meta.title" title_key: "meta.title"
@@ -21,11 +21,11 @@ tools:
enable: true enable: true
title_key: "meta.title" title_key: "meta.title"
preamble_key: "meta.description" 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: "" image_alt_key: ""
general: general:
icon: "fab fa-python" icon: "fab fa-python"
title_key: "meta.title" title_key: "meta.title"
subtitle_key: "article.subtitle" subtitle_key: "article.subtitle"
tags: tags:
- "undefined" - "generator"

View File

@@ -1,14 +1,17 @@
services: services:
www_nibblepoker_lu: www_nibblepoker_lu:
container_name: www-nibblepoker-python container_name: www-nibblepoker-python
#image: python:alpine
build: build:
context: . context: .
ports: ports:
- 5001:5000 - 5001:5000
volumes: environment:
- ./app/:/app:ro - TZ=Europe/Brussels
tty: true - NP_HTML_POST_PROCESS=MINIFY
- NP_FLASK_WAITRESS=1
- NP_FLASK_PORT=80
#volumes:
# - ./app/:/app:ro
restart: unless-stopped restart: unless-stopped
stop_grace_period: 1s stop_grace_period: 1s
labels: labels:
@@ -17,4 +20,3 @@ services:
driver: "json-file" driver: "json-file"
options: options:
max-size: "16m" max-size: "16m"
#command: ["/bin/sh", "-c", "/app/MainWebsite"]

View File

@@ -13,24 +13,26 @@ TODO
## Local Setup ## Local Setup
Follow these steps to setup a local version of this website: Follow these steps to setup a local version of this website:
1. Install Python 3.13 1. Install Python 3.13
2. Install Node JS v? 2. Install Node JS 20+
3. Install Python Modules \ 3. Install Python Modules \
`pip install --upgrade -r requirements.txt` `pip install --upgrade -r requirements.txt`
4. Install NPM modules \ 4. Install NPM modules \
`.\scripts\nodejs-setup.cmd` `.\scripts\nodejs-setup.cmd`
5. Compile the `.mjs` files into `.js` and `.min.js` \ 5. Compile the `.mjs` files into `.js` and `.min.js` \
`.\scripts\compile-js-site.cmd` `.\scripts\compile-js-site.cmd`
6. [Install static files] 6. [TODO: Install static files]
7. Setup environment variables: 7. Setup environment variables:
```batch ```batch
:: Batch :: Batch
set NP_HTML_POST_PROCESS=MINIFY set NP_HTML_POST_PROCESS=MINIFY
set NP_FLASK_WAITRESS=1 set NP_FLASK_WAITRESS=1
set NP_FLASK_PORT=80
``` ```
```bash ```bash
# Bash # Bash
NP_HTML_POST_PROCESS=MINIFY NP_HTML_POST_PROCESS=MINIFY
NP_FLASK_WAITRESS=1 NP_FLASK_WAITRESS=1
NP_FLASK_PORT=80
``` ```
8. Run [app.py](app.py) \ 8. Run [app.py](app.py) \
`python ./app.py` `python ./app.py`

View File

@@ -1,3 +1,4 @@
/* File inputs with drop thingy */
.np-file-input-drop-container { .np-file-input-drop-container {
position: relative; position: relative;
} }
@@ -13,3 +14,34 @@ input[type=file].np-file-input-drop {
opacity: 0; opacity: 0;
cursor: pointer; 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);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -39,11 +39,15 @@
</main> </main>
<footer class="d-flex flex-align-center p-s py-xs"> <footer class="d-flex flex-align-center p-s py-xs">
{% if not is_brandless %}
<a href="{{ l10n_url_abs('/', raw_lang) }}"> <a href="{{ l10n_url_abs('/', raw_lang) }}">
<img id="logo-footer" <img id="logo-footer"
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjczIiBoZWlnaHQ9IjUxMiIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMzkyLjUgNTEyYy02LjYgMC0xMC4xLTUuMDYtNy43OS0xMS4yNEw1NTYuMjkgNDMuMjRjMi4zMS02LjE4IDYuMTEtNi4xOCA4LjQyIDBsNTUuNTggMTQ4LjE5YzIuMzEgNi4xOCAyLjMxIDE2LjI5IDAgMjIuNDdsLTIzLjU4IDYyLjg2Yy0yLjMxIDYuMTggMS4xOSAxMS4yNCA3Ljc5IDExLjI0aDQwYzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwzOS41OCAxMDUuNTJjMi4zMSA2LjE4LTEuMTkgMTEuMjQtNy43OSAxMS4yNGgtMTM2Yy02LjYgMC0xMy45IDUuMDYtMTYuMjEgMTEuMjRsLTI3LjU4IDczLjUyQzUxMC40IDUwNi45NCA1MDMuMSA1MTIgNDk2LjUgNTEyek01NzYuNzEgMTEuMjRDNTc0LjQgNS4wNiA1NzcuOSAwIDU4NC41IDBoMTA0YzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwxODMuNTggNDg5LjUyYzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzNlMzU0NiIvPjxwYXRoIGQ9Ik0xMjguNzEgNTAwLjc2QzEyNi40IDUwNi45NCAxMTkuMSA1MTIgMTEyLjUgNTEySDguNWMtNi42IDAtMTAuMS01LjA2LTcuNzktMTEuMjRsMTMxLjIxLTM0OS44OWMyLjMyLTYuMTggOS4yNy0xMy4xMyAxNS40NS0xNS40NUwyNzMuODUgODhjNi4xOC0yLjMyIDkuMzQuODQgNyA3eiIgZmlsbD0iIzkwNWVhOSIvPjxwYXRoIGQ9Ik0yMDAuNSA1MTJjLTYuNiAwLTEwLjEtNS4wNi03Ljc5LTExLjI0TDM1NS4zNCA2Ny4wOWMyLjMyLTYuMTggOS4yNy0xMy4wOSAxNS40NS0xNS40NUw0OTcuMjYgNC4yMWM2LjE4LTIuMzEgOS4zNC44NSA3IDdMMzIwLjcxIDUwMC43NkMzMTguNCA1MDYuOTQgMzExLjEgNTEyIDMwNC41IDUxMnpNNzY4LjcxIDExLjI0Yy0yLjMxLTYuMTguODUtOS4zNCA3LTdsMTI2LjUgNDcuNGM2LjE4IDIuMzIgMTMuMTMgOS4yNyAxNS40NSAxNS40NWwxNjIuNjMgNDMzLjY3YzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzZiM2U3NSIvPjxwYXRoIGQ9Ik05OTIuMTMgOTVjLTIuMzItNi4xOC44NC05LjM0IDctN2wxMjYuNDggNDcuNDJjNi4xOCAyLjMyIDEzLjEzIDkuMjcgMTUuNDUgMTUuNDVsMTMxLjIzIDM0OS44OWMyLjMxIDYuMTgtMS4xOSAxMS4yNC03Ljc5IDExLjI0aC0xMDRjLTYuNiAwLTEzLjktNS4wNi0xNi4yMS0xMS4yNHoiIGZpbGw9IiM5MDVlYTkiLz48L3N2Zz4=" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjczIiBoZWlnaHQ9IjUxMiIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMzkyLjUgNTEyYy02LjYgMC0xMC4xLTUuMDYtNy43OS0xMS4yNEw1NTYuMjkgNDMuMjRjMi4zMS02LjE4IDYuMTEtNi4xOCA4LjQyIDBsNTUuNTggMTQ4LjE5YzIuMzEgNi4xOCAyLjMxIDE2LjI5IDAgMjIuNDdsLTIzLjU4IDYyLjg2Yy0yLjMxIDYuMTggMS4xOSAxMS4yNCA3Ljc5IDExLjI0aDQwYzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwzOS41OCAxMDUuNTJjMi4zMSA2LjE4LTEuMTkgMTEuMjQtNy43OSAxMS4yNGgtMTM2Yy02LjYgMC0xMy45IDUuMDYtMTYuMjEgMTEuMjRsLTI3LjU4IDczLjUyQzUxMC40IDUwNi45NCA1MDMuMSA1MTIgNDk2LjUgNTEyek01NzYuNzEgMTEuMjRDNTc0LjQgNS4wNiA1NzcuOSAwIDU4NC41IDBoMTA0YzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwxODMuNTggNDg5LjUyYzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzNlMzU0NiIvPjxwYXRoIGQ9Ik0xMjguNzEgNTAwLjc2QzEyNi40IDUwNi45NCAxMTkuMSA1MTIgMTEyLjUgNTEySDguNWMtNi42IDAtMTAuMS01LjA2LTcuNzktMTEuMjRsMTMxLjIxLTM0OS44OWMyLjMyLTYuMTggOS4yNy0xMy4xMyAxNS40NS0xNS40NUwyNzMuODUgODhjNi4xOC0yLjMyIDkuMzQuODQgNyA3eiIgZmlsbD0iIzkwNWVhOSIvPjxwYXRoIGQ9Ik0yMDAuNSA1MTJjLTYuNiAwLTEwLjEtNS4wNi03Ljc5LTExLjI0TDM1NS4zNCA2Ny4wOWMyLjMyLTYuMTggOS4yNy0xMy4wOSAxNS40NS0xNS40NUw0OTcuMjYgNC4yMWM2LjE4LTIuMzEgOS4zNC44NSA3IDdMMzIwLjcxIDUwMC43NkMzMTguNCA1MDYuOTQgMzExLjEgNTEyIDMwNC41IDUxMnpNNzY4LjcxIDExLjI0Yy0yLjMxLTYuMTguODUtOS4zNCA3LTdsMTI2LjUgNDcuNGM2LjE4IDIuMzIgMTMuMTMgOS4yNyAxNS40NSAxNS40NWwxNjIuNjMgNDMzLjY3YzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzZiM2U3NSIvPjxwYXRoIGQ9Ik05OTIuMTMgOTVjLTIuMzItNi4xOC44NC05LjM0IDctN2wxMjYuNDggNDcuNDJjNi4xOCAyLjMyIDEzLjEzIDkuMjcgMTUuNDUgMTUuNDVsMTMxLjIzIDM0OS44OWMyLjMxIDYuMTgtMS4xOSAxMS4yNC03Ljc5IDExLjI0aC0xMDRjLTYuNiAwLTEzLjktNS4wNi0xNi4yMS0xMS4yNHoiIGZpbGw9IiM5MDVlYTkiLz48L3N2Zz4="
alt="{{ l10n("alt.logo", "footer", user_lang) }}" draggable="false"> alt="{{ l10n("alt.logo", "footer", user_lang) }}" draggable="false">
</a> </a>
{% else %}
<p>&nbsp;</p>
{% endif %}
</footer> </footer>
{% block extra_scripts %}{% endblock %} {% block extra_scripts %}{% endblock %}

View File

@@ -1,7 +1,7 @@
{% if code_language is none %} {% 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 %} {% 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 %} {% endif %}
{% for code_line in code_lines %} {% for code_line in code_lines %}
<span class="code-line t-nowrap">{{ code_line }}</span><br> <span class="code-line t-nowrap">{{ code_line }}</span><br>

View File

@@ -13,16 +13,22 @@
{% block main_content %} {% block main_content %}
<section>
{{ render_h1(l10n("introduction.title", "privacy", user_lang), "fad fa-info") }} {{ 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.1", "privacy", user_lang)) }}
{{ render_paragraph(l10n("introduction.text.2", "privacy", user_lang) + {{ render_paragraph(l10n("introduction.text.2", "privacy", user_lang) +
'<br><i class="fad fa-globe ml-s t-size-8"></i> '<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> <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> <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>')}} <a href="https://eur-lex.europa.eu/legal-content/ALL/?uri=CELEX%3A32016R0679" class="ml-xs">https://eur-lex.europa.eu/</a>')}}
</div>
</section>
<section>
{{ render_h1(l10n("v2.data.title", "privacy", user_lang), "fad fa-database") }} {{ 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) + {{ render_paragraph(l10n("v2.data.intro.1", "privacy", user_lang) +
'<br>' + l10n("v2.data.intro.2", "privacy", user_lang)) }} '<br>' + l10n("v2.data.intro.2", "privacy", user_lang)) }}
{{ render_paragraph(l10n('v2.data.private.1', "privacy", user_lang) + {{ render_paragraph(l10n('v2.data.private.1', "privacy", user_lang) +
@@ -41,134 +47,133 @@
{{ render_paragraph(l10n("v2.data.end.4", "privacy", user_lang)) }} {{ render_paragraph(l10n("v2.data.end.4", "privacy", user_lang)) }}
{{ render_paragraph(l10n("v2.data.end.5", "privacy", user_lang) + {{ render_paragraph(l10n("v2.data.end.5", "privacy", user_lang) +
'<br>' + l10n("v2.data.end.6", "privacy", user_lang)) }} '<br>' + l10n("v2.data.end.6", "privacy", user_lang)) }}
</div>
</section>
<section>
{{ render_h1(l10n("v2.data_dns.title", "privacy", user_lang), "fad fa-database") }} {{ 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) + {{ render_paragraph(l10n("v2.data_dns.intro.1", "privacy", user_lang) +
'<br>' + l10n("v2.data_dns.intro.2", "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) + {{ render_paragraph(l10n('v2.data_dns.private.1', "privacy", user_lang)) }}
'</li></ul>') }} {{ render_list_ul([
{{ render_paragraph(l10n('v2.data_dns.non_private.1', "privacy", user_lang) + l10n('v2.data_dns.private_list.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.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)) }} {{ render_paragraph(l10n("v2.data_dns.end.1", "privacy", user_lang)) }}
</div>
</section>
<section>
{{ render_h1(l10n("v2.third.title", "privacy", user_lang), "fad fa-handshake") }} {{ 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) + {{ render_paragraph(l10n("v2.third.intro.1", "privacy", user_lang) +
'<br>' + l10n("v2.third.intro.2", "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.3", "privacy", user_lang)) }}
{{ render_paragraph(l10n('v2.third.intro.4', "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' + '<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/">' + '<a class="ml-s" href="https://www.ionos.fr/terms-gtc/clause-de-confidentialite/">' +
l10n('french', "langs", user_lang) + '</a>' + l10n('french', "langs", user_lang) + '</a>' +
'<a class="ml-s" href="https://www.ionos.com/terms-gtc/privacy-policy/">' + '<a class="ml-s" href="https://www.ionos.com/terms-gtc/privacy-policy/">' +
l10n('english', "langs", user_lang) + '</a>' + l10n('english', "langs", user_lang) + '</a>' +
'<br><i class="fad fa-globe ml-s t-size-8"></i>ChicagoVPS' + '<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">' + '<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>') }} l10n('english', "langs", user_lang) + '</a>') }}
</div>
</section>
<section>
{{ render_h1(l10n("v2.cookies.title", "privacy", user_lang), "fad fa-cookie-bite") }} {{ 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)) }} {{ render_paragraph(l10n("v2.cookies.intro.1", "privacy", user_lang)) }}
</div>
</section>
<!--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>&nbsp&nbsp print(l10n('v2.personal.disabled.list.1'))
</span>
<br>
<span class="ml-s">
<i class="fad fa-circle t-size-6"></i>&nbsp&nbsp print(l10n('v2.personal.disabled.list.2'))
</span>
<br>
<span class="ml-s">
<i class="fad fa-circle t-size-6"></i>&nbsp&nbsp 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>-->
<section>
{{ render_h1(l10n("v2.update.title", "privacy", user_lang), "fad fa-sync-alt") }} {{ 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(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) + {{ 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"></i><a href="/privacy/privacy_2021-12-04_en.txt">' + '<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>' + 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">' + '<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>' + l10n('french', "langs", user_lang) + '</a></span>' )}}
'<br><ul>' + {{ render_list_ul([
'<li>' + l10n('v2.update.history.1.desc.1', "privacy", user_lang) + '</li>' + l10n('v2.update.history.1.desc.1', "privacy", user_lang)
'</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">' + {{ 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>' + 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">' + '<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>' + l10n('french', "langs", user_lang) + '</a></span>' )}}
'<br><ul>' + {{ render_list_ul([
'<li>' + l10n('v2.update.history.2.desc.1', "privacy", user_lang) + '</li>' + l10n('v2.update.history.2.desc.1', "privacy", user_lang),
'<li>' + l10n('v2.update.history.2.desc.2', "privacy", user_lang) + '</li>' + l10n('v2.update.history.2.desc.2', "privacy", user_lang),
'<li>' + l10n('v2.update.history.2.desc.3', "privacy", user_lang) + '</li>' + l10n('v2.update.history.2.desc.3', "privacy", user_lang)
'</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">' + {{ 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>' + 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">' + '<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>' + l10n('french', "langs", user_lang) + '</a></span>' )}}
'<br><ul>' + {{ render_list_ul([
'<li>' + l10n('v2.update.history.3.desc.1', "privacy", user_lang) + '</li>' + l10n('v2.update.history.3.desc.1', "privacy", user_lang),
'<li><ul>' + l10n('v2.update.history.3.desc.1.1', "privacy", user_lang),
'<li>' + l10n('v2.update.history.3.desc.1.1', "privacy", user_lang) + '</li>' + l10n('v2.update.history.3.desc.1.2', "privacy", user_lang),
'<li>' + l10n('v2.update.history.3.desc.1.2', "privacy", user_lang) + '</li>' + l10n('v2.update.history.3.desc.2', "privacy", user_lang)
'</ul></li>' + ]) }}
'<li>' + l10n('v2.update.history.3.desc.2', "privacy", user_lang) + '</li>' +
'</ul>' )}} {{ render_paragraph('<i class="fad fa-calendar-alt mr-xs"></i>' + l10n("v2.update.history.4.date", "privacy", user_lang) +
{{ 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 mr-xxs"></i><a href="/privacy/privacy_2023-11-11_en.txt">' +
'<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>' + 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">' + '<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>' + l10n('french', "langs", user_lang) + '</a></span>' )}}
'<br><ul>' + {{ render_list_ul([
'<li>' + l10n('v2.update.history.4.desc.1', "privacy", user_lang) + '</li>' + l10n('v2.update.history.4.desc.1', "privacy", user_lang),
'<li><ul>' + l10n('v2.update.history.4.desc.1.1', "privacy", user_lang),
'<li>' + l10n('v2.update.history.4.desc.1.1', "privacy", user_lang) + '</li>' + l10n('v2.update.history.4.desc.2', "privacy", user_lang)
'</ul></li>' + ]) }}
'<li>' + l10n('v2.update.history.4.desc.2', "privacy", user_lang) + '</li>' +
'</ul>' )}} {{ render_paragraph('<i class="fad fa-calendar-alt mr-xs"></i>' + l10n("v2.update.history.5.date", "privacy", user_lang) +
{{ 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 mr-xxs"></i><a href="/privacy/privacy_2023-11-30_en.txt">' +
'<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>' + 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">' + '<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>' + l10n('french', "langs", user_lang) + '</a></span>' )}}
'<br><ul>' + {{ render_list_ul([
'<li>' + l10n('v2.update.history.5.desc.1', "privacy", user_lang) + '</li>' + l10n('v2.update.history.5.desc.1', "privacy", user_lang),
'<li>' + l10n('v2.update.history.5.desc.2', "privacy", user_lang) + '</li>' + l10n('v2.update.history.5.desc.2', "privacy", user_lang)
'</ul>' )}} ]) }}
{{ render_paragraph(l10n("v2.update.end.2", "privacy", user_lang)) }} {{ render_paragraph(l10n("v2.update.end.2", "privacy", user_lang)) }}
</div>
</section>
<section>
{{ render_h1(l10n("contact.title", "privacy", user_lang), "fad fa-mailbox") }} {{ render_h1(l10n("contact.title", "privacy", user_lang), "fad fa-mailbox") }}
<div class="content-spacer">
{{ render_paragraph(l10n("contact.text.1", "privacy", user_lang) + {{ 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>') }} '<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") }} {{ 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.1", "privacy", user_lang)) }}
{{ render_paragraph(l10n('complaint.text.2', "privacy", user_lang) + {{ render_paragraph(l10n('complaint.text.2', "privacy", user_lang) +
'<br><i class="fad fa-globe ml-s t-size-8"></i>' + '<br><i class="fad fa-globe ml-s t-size-8"></i>' +
@@ -177,6 +182,8 @@
'<br><i class="fad fa-globe ml-s t-size-8"></i>' + '<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>' + '<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>' ) }} '<span class="ml-s">(' + l10n('french', "langs", user_lang) + ')</span>' ) }}
</div>
</section>
{% endblock %} {% endblock %}

View File

@@ -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> <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> <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 %} {% 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 %} {% endif %}
{% endblock %} {% endblock %}

View File

@@ -1,10 +1,16 @@
{% extends "projects/_project.jinja" %} {% extends "projects/_project.jinja" %}
{% block project_content %} {% block project_content %}
<section>
{{ render_h2(l10n("intro.title", project_id, user_lang)) }} {{ 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.p1", project_id, user_lang)) }}
</div>
</section>
<section>
{{ render_h2(l10n("features.title", project_id, user_lang)) }} {{ render_h2(l10n("features.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
l10n("features.1", project_id, user_lang), l10n("features.1", project_id, user_lang),
l10n("features.2", project_id, user_lang), l10n("features.2", project_id, user_lang),
@@ -19,8 +25,12 @@
l10n("features.3.2", project_id, user_lang), l10n("features.3.2", project_id, user_lang),
], ],
]) }} ]) }}
</div>
</section>
<section>
{{ render_h2(l10n("limitations.title", project_id, user_lang)) }} {{ render_h2(l10n("limitations.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
l10n("limitations.1", project_id, user_lang), l10n("limitations.1", project_id, user_lang),
[ [
@@ -37,11 +47,19 @@
l10n("limitations.3.1", project_id, user_lang), l10n("limitations.3.1", project_id, user_lang),
], ],
]) }} ]) }}
</div>
</section>
<section>
{{ render_h2(l10n("doc.title", project_id, user_lang)) }} {{ render_h2(l10n("doc.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_paragraph(l10n("doc.p1", project_id, user_lang)) }} {{ render_paragraph(l10n("doc.p1", project_id, user_lang)) }}
</div>
</section>
<section>
{{ render_h2(l10n("usage.title", project_id, user_lang)) }} {{ 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.p1", project_id, user_lang)) }}
{{ render_paragraph(l10n("usage.p2", project_id, user_lang)) }} {{ render_paragraph(l10n("usage.p2", project_id, user_lang)) }}
{{ {{
@@ -78,8 +96,12 @@
"# Please check the documentation for more information !" "# Please check the documentation for more information !"
], "python") ], "python")
}} }}
</div>
</section>
<section>
{{ render_h2(l10n("demo.title", project_id, user_lang)) }} {{ 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.p1", project_id, user_lang)) }}
{{ render_paragraph(l10n("demo.p3", project_id, user_lang)) }} {{ render_paragraph(l10n("demo.p3", project_id, user_lang)) }}
{{ render_paragraph(l10n("demo.p4", project_id, user_lang)) }} {{ render_paragraph(l10n("demo.p4", project_id, user_lang)) }}
@@ -89,8 +111,12 @@
'<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-03.jpg") + '">',
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-04.jpg") + '">', '<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-04.jpg") + '">',
]) }} ]) }}
</div>
</section>
<section>
{{ render_h2(l10n("downloads.title", project_id, user_lang)) }} {{ 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"> <table class="table-stylish table-p-xs table-v-center border r-l">
<thead> <thead>
<tr> <tr>
@@ -178,15 +204,23 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div>
</section>
<section>
{{ render_h2(l10n("license.title", project_id, user_lang)) }} {{ render_h2(l10n("license.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_paragraph( {{ render_paragraph(
"<a href=\"https://github.com/aziascreations/CircuitPython-Ebyte-E32/blob/master/LICENSE\">" + "<a href=\"https://github.com/aziascreations/CircuitPython-Ebyte-E32/blob/master/LICENSE\">" +
l10n("license.mit.single", "commons", user_lang)) + l10n("license.mit.single", "commons", user_lang)) +
"</a>" "</a>"
}} }}
</div>
</section>
<section>
{{ render_h2(l10n("links.title", project_id, user_lang)) }} {{ render_h2(l10n("links.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
"<a href=\"https://github.com/aziascreations/CircuitPython-Ebyte-E32\">" + "<a href=\"https://github.com/aziascreations/CircuitPython-Ebyte-E32\">" +
l10n("github", "commons", user_lang) + "</a>", l10n("github", "commons", user_lang) + "</a>",
@@ -194,5 +228,7 @@
"<a href=\"https://aziascreations.github.io/CircuitPython-Ebyte-E32/\">" + "<a href=\"https://aziascreations.github.io/CircuitPython-Ebyte-E32/\">" +
l10n("doc.online", "commons", user_lang) + "</a>", l10n("doc.online", "commons", user_lang) + "</a>",
]) }} ]) }}
</div>
</section>
{% endblock %} {% endblock %}

View File

@@ -1,19 +1,33 @@
{% extends "projects/_project.jinja" %} {% extends "projects/_project.jinja" %}
{% block project_content %} {% block project_content %}
<section>
{{ render_h2(l10n("intro.title", project_id, user_lang)) }} {{ 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.1", project_id, user_lang)) }}
{{ render_paragraph(l10n("intro.2", project_id, user_lang)) }} {{ render_paragraph(l10n("intro.2", project_id, user_lang)) }}
</div>
</section>
<section>
{{ render_h2(l10n("preamble.title", project_id, user_lang)) }} {{ 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.1", project_id, user_lang)) }}
{{ render_paragraph(l10n("preamble.2", project_id, user_lang)) }} {{ render_paragraph(l10n("preamble.2", project_id, user_lang)) }}
</div>
</section>
<section>
{{ render_h2(l10n("setup.title", project_id, user_lang)) }} {{ 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.1", project_id, user_lang)) }}
{{ render_paragraph(l10n("setup.2", project_id, user_lang)) }} {{ render_paragraph(l10n("setup.2", project_id, user_lang)) }}
</div>
</section>
<section>
{{ render_h3(l10n("setup.camera.title", project_id, user_lang)) }} {{ 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.1", project_id, user_lang)) }}
{{ render_paragraph(l10n("setup.camera.2", project_id, user_lang)) }} {{ render_paragraph(l10n("setup.camera.2", project_id, user_lang)) }}
{{ render_h4(l10n("commons.example", project_id, user_lang)) }} {{ render_h4(l10n("commons.example", project_id, user_lang)) }}
@@ -34,8 +48,12 @@
], "yaml") ], "yaml")
}} }}
{{ render_paragraph(l10n("setup.camera.3", project_id, user_lang)) }} {{ render_paragraph(l10n("setup.camera.3", project_id, user_lang)) }}
</div>
</section>
<section>
{{ render_h3(l10n("setup.cleaner.title", project_id, user_lang)) }} {{ 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.1", project_id, user_lang)) }}
{{ render_paragraph(l10n("setup.cleaner.2", project_id, user_lang)) }} {{ render_paragraph(l10n("setup.cleaner.2", project_id, user_lang)) }}
{{ render_h4(l10n("commons.example", project_id, user_lang)) }} {{ render_h4(l10n("commons.example", project_id, user_lang)) }}
@@ -56,8 +74,12 @@
" restart: unless-stopped", " restart: unless-stopped",
], "yaml") ], "yaml")
}} }}
</div>
</section>
<section>
{{ render_h3(l10n("setup.web.title", project_id, user_lang)) }} {{ 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.1", project_id, user_lang)) }}
{{ render_paragraph(l10n("setup.web.2", 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_paragraph(l10n("setup.web.3", project_id, user_lang)) }}
@@ -84,22 +106,34 @@
" restart: unless-stopped", " restart: unless-stopped",
], "yaml") ], "yaml")
}} }}
</div>
</section>
<section>
{{ render_h2(l10n("startup.title", project_id, user_lang)) }} {{ render_h2(l10n("startup.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_paragraph(l10n("startup.1", project_id, user_lang)) }} {{ render_paragraph(l10n("startup.1", project_id, user_lang)) }}
{{ {{
render_code_block([ render_code_block([
"docker-compose up --build -d", "docker-compose up --build -d",
], "bash") ], "bash")
}} }}
</div>
</section>
<section>
{{ render_h2(l10n("screenshots.title", project_id, user_lang)) }} {{ render_h2(l10n("screenshots.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_splide([ {{ 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 + "/home.png") + '">',
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/" + project_id + "/cam.png") + '">', '<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/" + project_id + "/cam.png") + '">',
]) }} ]) }}
</div>
</section>
<section>
{{ render_h2(l10n("statistics.title", project_id, user_lang)) }} {{ render_h2(l10n("statistics.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
l10n("statistics.1", project_id, user_lang), l10n("statistics.1", project_id, user_lang),
[ [
@@ -125,13 +159,23 @@
l10n("statistics.4.2", project_id, user_lang), l10n("statistics.4.2", project_id, user_lang),
], ],
]) }} ]) }}
</div>
</section>
<section>
{{ render_h2(l10n("license.title", project_id, user_lang)) }} {{ render_h2(l10n("license.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_paragraph(l10n("license.1", project_id, user_lang)) }} {{ render_paragraph(l10n("license.1", project_id, user_lang)) }}
</div>
</section>
<section>
{{ render_h2(l10n("links.title", project_id, user_lang)) }} {{ render_h2(l10n("links.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
"<a href=\"https://github.com/aziascreations/Docker-Mini-CCTV-NVR\">" + "<a href=\"https://github.com/aziascreations/Docker-Mini-CCTV-NVR\">" +
l10n("github", "commons", user_lang) + "</a>", l10n("github", "commons", user_lang) + "</a>",
]) }} ]) }}
</div>
</section>
{% endblock %} {% endblock %}

View File

@@ -1,12 +1,18 @@
{% extends "projects/_project.jinja" %} {% extends "projects/_project.jinja" %}
{% block project_content %} {% block project_content %}
<section>
{{ render_h2(l10n("intro.title", project_id, user_lang)) }} {{ 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.p1", project_id, user_lang)) }}
{{ render_paragraph(l10n("intro.p2", project_id, user_lang)) }} {{ render_paragraph(l10n("intro.p2", project_id, user_lang)) }}
{{ render_paragraph(l10n("intro.p3", project_id, user_lang)) }} {{ render_paragraph(l10n("intro.p3", project_id, user_lang)) }}
</div>
</section>
<section>
{{ render_h2(l10n("requirements.title", project_id, user_lang)) }} {{ render_h2(l10n("requirements.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
l10n("requirements.1", project_id, user_lang), l10n("requirements.1", project_id, user_lang),
[ [
@@ -17,8 +23,12 @@
l10n("requirements.4", project_id, user_lang), l10n("requirements.4", project_id, user_lang),
], ],
]) }} ]) }}
</div>
</section>
<section>
{{ render_h2(l10n("improvements.title", project_id, user_lang)) }} {{ render_h2(l10n("improvements.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
l10n("improvements.1", project_id, user_lang), l10n("improvements.1", project_id, user_lang),
l10n("improvements.2", project_id, user_lang), l10n("improvements.2", project_id, user_lang),
@@ -26,15 +36,23 @@
l10n("improvements.4", project_id, user_lang), l10n("improvements.4", project_id, user_lang),
l10n("improvements.5", project_id, user_lang), l10n("improvements.5", project_id, user_lang),
]) }} ]) }}
</div>
</section>
<section>
{{ render_h2(l10n("screenshots.title", project_id, user_lang)) }} {{ render_h2(l10n("screenshots.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_splide([ {{ 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-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-csv-2x-xBR.png") + '">',
'<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/lscom/screen-cli-full-2x-xBR.png") + '">', '<img src="' + url_for("static", filename="/resources/NibblePoker/images/content/lscom/screen-cli-full-2x-xBR.png") + '">',
]) }} ]) }}
</div>
</section>
<section>
{{ render_h2(l10n("usage.title", project_id, user_lang)) }} {{ render_h2(l10n("usage.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ {{
render_code_block([ render_code_block([
"lscom.exe [-a|--show-all] [-d|--show-device] [-D <str>|--divider <str>] [-f|--show-friendly]", "lscom.exe [-a|--show-all] [-d|--show-device] [-D <str>|--divider <str>] [-f|--show-friendly]",
@@ -57,8 +75,12 @@
" -V, --version-only Shows the utility's version number only (Overrides '-v')" " -V, --version-only Shows the utility's version number only (Overrides '-v')"
], None) ], None)
}} }}
</div>
</section>
<section>
{{ render_h2(l10n("formatting.title", project_id, user_lang)) }} {{ render_h2(l10n("formatting.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ {{
render_code_block([ render_code_block([
" *┬> No launch arguments:", " *┬> No launch arguments:",
@@ -80,16 +102,24 @@
" └──> ${Raw name};${Friendly name};${Device name} => COM1;Communications Port;\\Device\\Serial1" " └──> ${Raw name};${Friendly name};${Device name} => COM1;Communications Port;\\Device\\Serial1"
], None) ], None)
}} }}
</div>
</section>
<section>
{{ render_h2(l10n("packages.title", project_id, user_lang)) }} {{ 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.title", project_id, user_lang)) }}
{{ render_paragraph(l10n("packages.single.1", 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.title", project_id, user_lang)) }}
{{ render_paragraph(l10n("packages.self.1", 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.title", project_id, user_lang)) }}
{{ render_paragraph(l10n("packages.msi.1", project_id, user_lang)) }} {{ render_paragraph(l10n("packages.msi.1", project_id, user_lang)) }}
</div>
</section>
<section>
{{ render_h2(l10n("version.current", "commons", user_lang)) }} {{ render_h2(l10n("version.current", "commons", user_lang)) }}
<div class="content-spacer">
<table class="table-stylish table-p-s border r-l"> <table class="table-stylish table-p-s border r-l">
<thead> <thead>
<tr> <tr>
@@ -142,8 +172,12 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div>
</section>
<section>
{{ render_h2(l10n("source.code", "commons", user_lang)) }} {{ render_h2(l10n("source.code", "commons", user_lang)) }}
<div class="content-spacer">
<table class="table-stylish table-p-s border r-l"> <table class="table-stylish table-p-s border r-l">
<thead> <thead>
<tr> <tr>
@@ -158,12 +192,18 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div>
</section>
<section>
{{ render_h2(l10n("links.title", project_id, user_lang)) }} {{ render_h2(l10n("links.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
"<a href='https://github.com/aziascreations/DotNet-ListComPort'>" + "<a href='https://github.com/aziascreations/DotNet-ListComPort'>" +
l10n("github", "commons", user_lang) + l10n("github", "commons", user_lang) +
"</a>", "</a>",
]) }} ]) }}
</div>
</section>
{% endblock %} {% endblock %}

View File

@@ -3,4 +3,6 @@ def get_standalone_common_headers() -> str:
_html = "" _html = ""
with open("./static/resources/Standalone/nibblepoker.min.css", encoding='utf-8') as f: with open("./static/resources/Standalone/nibblepoker.min.css", encoding='utf-8') as f:
_html += "<style>" + f.read() + "</style>" _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 return _html

View File

@@ -13,11 +13,15 @@ def reload_sitemap_entries(definition_file: str) -> None:
with open(definition_file, 'r') as f: with open(definition_file, 'r') as f:
raw_sitemap_entries = yaml.safe_load(f) raw_sitemap_entries = yaml.safe_load(f)
for allowed_lang in [""] + ALLOWED_LANGS:
for sitemap_entry in raw_sitemap_entries: for sitemap_entry in raw_sitemap_entries:
__SITEMAP_ENTRIES.append(sitemap_entry) __SITEMAP_ENTRIES.append(
("/" + str(allowed_lang) + "/" + str(sitemap_entry))
for allowed_lang in ALLOWED_LANGS: .replace("//", "/")
__SITEMAP_ENTRIES.append(("/" + allowed_lang + "/" + sitemap_entry).replace("//", "/")) .replace("//", "/")
)
# __SITEMAP_ENTRIES.append(sitemap_entry)
# for allowed_lang in ALLOWED_LANGS:
def get_sitemap_entries() -> list[str]: def get_sitemap_entries() -> list[str]: