Compare commits

..

8 Commits

Author SHA1 Message Date
1f352de8c6 Updated license text in IBAN and UUID generators to be in line with new ones
Update .gitignore, iban-generator.yml, uuid-generator.yml, and 4 more files
2025-09-21 23:06:17 +02:00
fbd844523c Updated about page and its strings, Updated readme, Updated sitemap
Update app.py - BS4.run.xml, sidebar.yml, and 6 more files...
2025-09-14 22:05:05 +02:00
9add4e5171 Updated robot files for XML sitemap
Update robots.txt and robots.jinja
2025-09-14 21:01:17 +02:00
8c51b2b8b3 Added licenses to Excel Password Remover, Filed file input on standalone, Added auto-clear to file input
Update excel-password-remover.yml, excel-password-remover.yml, and 3 more files...
2025-09-14 02:12:04 +02:00
1f249206e7 Added PEArch page, Added strings, Updated readme
Update .dockerignore, .gitignore, and 11 more files...
2025-09-14 00:00:22 +02:00
1612416d9d Revamped XML sitemap, Added run configs, Added release script, Removed commented HTML
Update .gitignore, app.py - Minify.run.xml, and 11 more files...
2025-09-13 18:13:24 +02:00
abd7046fe2 Fixed broken upload buttons by changing ID in JS
Update nibblepoker-core.mjs and file-input.jinja
2025-09-13 16:24:29 +02:00
2eb9d5c7a5 Updated file input, Updated heading spacing globally, Fixed lscom downloads, Updated contact info
Update .gitignore, home.yml, and 13 more files...
2025-09-13 16:19:20 +02:00
54 changed files with 1795 additions and 811 deletions

View File

@@ -11,3 +11,8 @@ scripts/
# Docker # Docker
docker-compose.yml docker-compose.yml
Dockerfile Dockerfile
# Internal stuff
*.pdn
*.ai
*.private.*

6
.gitignore vendored
View File

@@ -8,19 +8,21 @@ __pycache__/
# NodeJS' BS # NodeJS' BS
node_modules/ node_modules/
scripts/package-lock.json
# Internal stuff # Internal stuff
*.pdn *.pdn
*.ai *.ai
*.private.*
tests/
# Temp # Temp
static/resources/DecimalJs* static/resources/DecimalJs*
static/resources/SortableJS static/resources/SortableJS
static/resources/Standalone static/resources/Standalone
# Secrets # Golang revamp
src/ src/
bin/ bin/
app/ app/
.run/
*.tmpl *.tmpl

26
.run/app.py - BS4.run.xml Normal file
View File

@@ -0,0 +1,26 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app.py - BS4" type="PythonConfigurationType" factoryName="Python">
<module name="Web-NibblePoker" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
<env name="NP_HTML_POST_PROCESS" value="BS4" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/app.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@@ -0,0 +1,26 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app.py - Minify" type="PythonConfigurationType" factoryName="Python">
<module name="Web-NibblePoker" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
<env name="NP_HTML_POST_PROCESS" value="MINIFY" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/app.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@@ -0,0 +1,11 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="compile-js-site" type="BatchConfigurationType" factoryName="Batch">
<module name="Web-NibblePoker" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="WORKING_DIRECTORY" value="./scripts" />
<option name="PARENT_ENVS" value="true" />
<option name="SCRIPT_NAME" value="compile-js-site.cmd" />
<option name="PARAMETERS" value="" />
<method v="2" />
</configuration>
</component>

View File

@@ -0,0 +1,11 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="delete-minified-js" type="BatchConfigurationType" factoryName="Batch">
<module name="Web-NibblePoker" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="WORKING_DIRECTORY" value="./scripts" />
<option name="PARENT_ENVS" value="true" />
<option name="SCRIPT_NAME" value="delete-minified-js.cmd" />
<option name="PARAMETERS" value="" />
<method v="2" />
</configuration>
</component>

View File

@@ -0,0 +1,11 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="delete-pycache" type="BatchConfigurationType" factoryName="Batch">
<module name="Web-NibblePoker" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="WORKING_DIRECTORY" value="./scripts" />
<option name="PARENT_ENVS" value="true" />
<option name="SCRIPT_NAME" value="delete-pycache.cmd" />
<option name="PARAMETERS" value="" />
<method v="2" />
</configuration>
</component>

View File

@@ -0,0 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="go build np_web_main" type="GoApplicationRunConfiguration" factoryName="Go Application" nameIsGenerated="true">
<module name="Web-NibblePoker" />
<working_directory value="$PROJECT_DIR$" />
<go_parameters value="-ldflags=&quot;-s -w -extldflags '-static'&quot;" />
<kind value="PACKAGE" />
<package value="np_web_main" />
<directory value="$PROJECT_DIR$" />
<filePath value="$PROJECT_DIR$/app/main.go" />
<output_directory value="$PROJECT_DIR$/bin" />
<method v="2" />
</configuration>
</component>

11
.run/nodejs-setup.run.xml Normal file
View File

@@ -0,0 +1,11 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="nodejs-setup" type="BatchConfigurationType" factoryName="Batch">
<module name="Web-NibblePoker" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="WORKING_DIRECTORY" value="./scripts" />
<option name="PARENT_ENVS" value="true" />
<option name="SCRIPT_NAME" value="nodejs-setup.cmd" />
<option name="PARAMETERS" value="" />
<method v="2" />
</configuration>
</component>

View File

@@ -0,0 +1,11 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="package-for-release" type="BatchConfigurationType" factoryName="Batch">
<module name="Web-NibblePoker" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="WORKING_DIRECTORY" value="./scripts" />
<option name="PARENT_ENVS" value="true" />
<option name="SCRIPT_NAME" value="package-for-release.cmd" />
<option name="PARAMETERS" value="" />
<method v="2" />
</configuration>
</component>

10
app.py
View File

@@ -24,7 +24,7 @@ from website.renderers.lists import render_list_ul
from website.renderers.splide import render_splide from website.renderers.splide import render_splide
from website.renderers.standalone import get_standalone_common_headers from website.renderers.standalone import get_standalone_common_headers
from website.sidebar import reload_sidebar_entries, get_sidebar_entries from website.sidebar import reload_sidebar_entries, get_sidebar_entries
from website.sitemap import reload_sitemap_entries, get_sitemap_entries from website.sitemap import reload_sitemap_entries, get_sitemap_entries, get_sitemap_xml
try: try:
from rich import print from rich import print
@@ -164,11 +164,15 @@ def route_robots_txt():
@app.route('/sitemap.txt') @app.route('/sitemap.txt')
def route_sitemap(): def route_sitemap_txt():
# FIXME: Add the domain !!!
return Response("\n".join(get_sitemap_entries()), mimetype="") return Response("\n".join(get_sitemap_entries()), mimetype="")
@app.route('/sitemap.xml')
def route_sitemap_xml():
return Response(get_sitemap_xml(request.headers['Host']), mimetype="application/xml")
@app.route('/', defaults={'lang': None}) @app.route('/', defaults={'lang': None})
@app.route('/en/', defaults={'lang': "en"}) @app.route('/en/', defaults={'lang': "en"})
@app.route('/fr/', defaults={'lang': "fr"}) @app.route('/fr/', defaults={'lang': "fr"})

View File

@@ -28,7 +28,7 @@ projects:
subtitle_key: "article.subtitle" subtitle_key: "article.subtitle"
tags: tags:
- "application" - "application"
- "tool" - "cli"
- "windows" - "windows"
languages: languages:
- "dotnet" - "dotnet"

36
data/projects/pearch.yml Normal file
View File

@@ -0,0 +1,36 @@
projects:
- id: "pearch"
metadata:
head:
title_key: "meta.title"
description_key: "meta.description"
opengraph:
title_key: "meta.title"
description_key: "meta.description"
type: null
url: null
image_url: "/resources/NibblePoker/images/content/pearch/main.png"
image_type: null
twitter:
title_key: "meta.title"
description_key: "meta.description"
index:
priority: 2000
enable: true
title_key: "meta.title"
preamble_key: "meta.description"
image_url: "/resources/NibblePoker/images/content/pearch/main.png"
image_alt_key: ""
general:
icon: "fad fa-terminal"
title_key: "meta.title"
subtitle_key: "article.subtitle"
tags:
- "application"
- "cli"
- "windows"
- "windows-pe"
- "cpu-arch"
languages:
- "purebasic"

View File

@@ -58,11 +58,11 @@
- {} - {}
#- title_key: text.about - title_key: text.about
# abs_href: "/about" abs_href: "/about"
# icon: fad fa-user icon: fad fa-user
# active_id: about active_id: about
# has_new_until_utc: 0 has_new_until_utc: 0
- title_key: text.contact - title_key: text.contact
abs_href: "/contact" abs_href: "/contact"

View File

@@ -1,17 +1,71 @@
# Sitemap definition # Sitemap definition
- "/" # changefreq: "monthly" is implied unless specified
- "/about/"
#- "/articles/" sitemap:
- "/contact/" "/":
- "/content/" lastmod: "2025-03-30T00:00:00+01:00"
- "/content/circuitpython-ebyte-e32/" priority: "1"
- "/content/docker-mini-cctv-nvr/"
- "/content/lscom-cli-dotnet/" "/about/":
- "/links/" lastmod: "2025-09-14T22:04:00+01:00"
- "/privacy/" priority: "0.2"
- "/tools/"
- "/tools/iban-generator/" "/contact/":
- "/tools/excel-password-remover/" lastmod: "2025-03-01T07:40:00+01:00"
- "/tools/uuid-generator/" priority: "0.5"
- "/tools/vat-calculator/"
"/content/":
lastmod: "2025-09-13T16:19:00+02:00"
priority: "0.2"
"/content/circuitpython-ebyte-e32/":
lastmod: "2025-03-30T14:52:00+02:00"
priority: "0.5"
"/content/docker-mini-cctv-nvr/":
lastmod: "2025-03-30T14:52:00+02:00"
priority: "0.3"
"/content/lscom-cli-dotnet/":
lastmod: "2025-09-13T16:19:00+02:00"
priority: "0.6"
"/content/pearch/":
lastmod: "2025-09-14T00:15:00+02:00"
priority: "0.6"
"/links/":
lastmod: "2025-03-01T07:40:00+01:00"
priority: "0.6"
"/privacy/":
lastmod: "2025-03-30T00:00:00+01:00"
priority: "0.4"
"/tools/":
lastmod: "2025-09-13T16:19:00+02:00"
priority: "0.2"
"/tools/iban-generator/":
lastmod: "2025-08-28T21:23:00+02:00"
priority: "0.6"
"/tools/excel-password-remover/":
lastmod: "2025-09-13T16:19:00+02:00"
priority: "0.9"
"/tools/uuid-generator/":
lastmod: "2025-08-28T21:23:00+02:00"
priority: "0.3"
"/tools/vat-calculator/":
lastmod: "2025-09-18T00:15:00+02:00"
priority: "0.6"
#"/about/":
# lastmod: ""
# priority: ""
#"/articles/":
# lastmod: ""
# priority: ""

View File

@@ -1,80 +1,93 @@
# EN - About # EN - About
head.title: About - NibblePoker head:
head.description: 'TODO: description' title: About - NibblePoker
og.title: NibblePoker - About description: 'TODO: description'
og.description: 'TODO: description'
header.title: About og:
intro.title: Introduction title: NibblePoker - About
intro.text.01: My name is Herwin Bozet, I'm an experienced developer with extensive description: 'TODO: description'
experience in PureBasic, Python, Java, VBA; and intermediate knowledge in C, Win32
header:
title: About
intro:
title: Introduction
text:
p1:
l1: My name is Herwin Bozet, I'm an experienced developer with extensive
experience in PureBasic, Python, .NET, Java; and intermediate knowledge in C, Win32
APIs, embedded systems and general web development. APIs, embedded systems and general web development.
intro.text.02: I've been programming for about 10 years now, and for the last # l2: I've been programming for about 10 years now, and for the last
5 years I've been actively working on applying that experience to a variety of projects # 5 years I've been actively working on applying that experience to a variety of projects
with the aim of helping programmers and people in their day-to-day life. # with the aim of helping programmers and people in their day-to-day life.
intro.text.10: NibblePoker is, in essence, a simple moniker and the front-end #p2:
for most of my public-focused work. # l1: NibblePoker is, in essence, a simple moniker and the front-end
intro.text.11: It houses all my work made and tailored for usage by other people. # for most of my public-focused work.
intro.text.20: This entire website, as well as all my work for it and other # l2: It houses all my work made and tailored for usage by other people.
p3:
l1: This entire website, as well as all my work for it and other
personal projects, is completely open-source and available under permissive <abbr personal projects, is completely open-source and available under permissive <abbr
title="Open Source Initiative">OSI</abbr> approved licenses. title="Open Source Initiative">OSI</abbr> approved licenses.
intro.text.21: All of it is maintained, developed and expanded in my free time l2: All of it is maintained, developed and expanded in my free time
with the occasional help from people in the open-source community. with the occasional help from people in the open-source community.
tenets.title: Core tenets
tenets.text.01: '' future:
tenets.text.02: '' title: Future plans
future.title: Future plans text:
future.text.01: It is planned to turn NibblePoker into a <abbr title="Private p1:
l1: It is planned to turn NibblePoker into a <abbr title="Private
company with limited liability">SPRL</abbr> in a couple years if everything goes company with limited liability">SPRL</abbr> in a couple years if everything goes
as planned. as planned.
future.text.02: This would allow me to centralize many things and invest properly l2: This would allow me to centralize many things and invest properly
in my targetted fields to achieve my goals. in my targeted fields to achieve my goals.
future.text.10: The goal would be to create a small sustainable local business p2:
l1: The goal would be to create a small sustainable local business
that offers a wide range of products and solutions covering <abbr title="Internet that offers a wide range of products and solutions covering <abbr title="Internet
of things">IoT</abbr> devices, programming, and technological independence ; All of things">IoT</abbr> devices, programming, and technological independence ; All
while including the required software and hardware components often lacking in such while including the required software and hardware components often lacking in such
products and solutions. products and solutions.
future.text.20: Ultimately, all this work and research would be made available p3:
l1: Ultimately, all this work and research would be made available
to the public under open-source licenses, enabling anyone who wishes to learn, reuse, to the public under open-source licenses, enabling anyone who wishes to learn, reuse,
and resell open-source products, to do so in a similar way as companies like Adafruit and resell open-source products, to do so in a similar way as companies like Adafruit
do. do.
_nibblepoker.title: The 'NibblePoker' name
_nibblepoker.text.01: TODO financing:
_nibblepoker.text.10: TODO title: Financing
_nibblepoker.text.11: TODO text:
_nibblepoker.text.20: TODO p1:
financing.title: Financing l1: This website, as well as the surrounding infrastructure,
financing.text.01: This website, as well as the surrounding infrastructure,
was made to cost as little as possible while not being reliant on any censor-happy was made to cost as little as possible while not being reliant on any censor-happy
companies. companies.
financing.text.02: Following my core tenets, I also wanted to retain some sort l2: Following my core tenets, I also wanted to retain some sort
of "technological sovereignty", and therefore refuse to support or use companies of "technological sovereignty", and therefore refuse to support or use companies
that actively fight against legal free speech. that actively fight against legal free speech.
financing.text.10: The details of the operating costs are provided below to p2:
l1: The details of the operating costs are provided below to
illustrate the low price of such independence. illustrate the low price of such independence.
financing.text.20: And for those of you who are more motivated, I hope to inspire p3:
l1: And for those of you who are more motivated, I hope to inspire
you to at least try this kind of activity. you to at least try this kind of activity.
financing.text.21: It may seem daunting at first, but for a fraction of the l2: It may seem daunting at first, but for a fraction of the
cost presented here, <b>and with a bit of motivation</b>, you can already accomplish cost presented here, <b>and with a bit of motivation</b>, you can already accomplish
a lot of things and gain valuable knowledge for a world as interconnected as ours. a lot of things and gain valuable knowledge for a world as interconnected as ours.
financing.text.isp: The main ISP bill isn't accounted for since this could run isp: The main ISP bill isn't accounted for since this could run
off some random public Wi-Fi. off some random public Wi-Fi.
financing.part.service: Service part:
financing.part.cost: Cost service: Service
financing.part.cost.total: Total Cost equipment: Equipment
financing.part.equipment: Equipment cost: Cost
financing.part.cost.yearly: Yearly Cost cost.total: Total Cost
financing.part.cost.yearly.total: Yearly Cost cost.yearly: Yearly Cost
financing.part.domain.lu: "<i>.lu</i> domain" cost.yearly.total: Yearly Cost
financing.part.domain.com: "<i>.com</i> domain" domain.lu: "<i>.lu</i> domain"
financing.part.proxy.europe: European reverse-proxy domain.com: "<i>.com</i> domain"
financing.part.proxy.america: American reverse-proxy proxy.europe: European reverse-proxy
financing.part.proxy.asia: Asian reverse-proxy proxy.america: American reverse-proxy
financing.part.emails: Emails proxy.asia: Asian reverse-proxy
financing.part.electricity: Electricity emails: Emails
financing.part.nanopir4s: NanoPi R4S electricity: Electricity
financing.part.nanopir4s.desc: Handles all non public-facing tasks and services. nanopir4s: NanoPi R4S
financing.part.storage: Local storage nanopir4s.desc: Handles all non public-facing tasks and services.
aziascreations.title: The 'AziasCreations' name storage: Local storage
_aziascreations.text.01: TODO
_aziascreations.text.10: TODO

View File

@@ -22,6 +22,18 @@ user-agent: User-Agent
server: Server server: Server
windows:
95: "Windows 95"
98: "Windows 98"
2000: "Windows 2000"
xp: "Windows XP"
vista: "Windows Vista"
7: "Windows 7"
8: "Windows 8"
81: "Windows 8.1"
10: "Windows 10"
11: "Windows 11"
cpu.architecture: CPU Architecture cpu.architecture: CPU Architecture
cpu.responsive: "CPU<span class=\"mobile-hide\"> Architecture</span>" cpu.responsive: "CPU<span class=\"mobile-hide\"> Architecture</span>"
cpu.any: "Any architecture" cpu.any: "Any architecture"
@@ -34,6 +46,87 @@ cpu.arm64: "ARM64"
#cpu.arm64: "<p>ARM64<br>ARMv8<br>AArch64</p>" #cpu.arm64: "<p>ARM64<br>ARMv8<br>AArch64</p>"
cpu.risc-v: "RISC-V" cpu.risc-v: "RISC-V"
cpu:
human:
unknown: The content of this field is assumed to be applicable to any machine type
alpha: Alpha AXP, 32-bit address space
alpha64: Alpha 64, 64-bit address space
am33: Matsushita AM33
amd64: x64
any: Any architecture
arm: ARM little endian
arm64: ARM64 little endian
arm64ec: ABI that enables interoperability between native ARM64 and emulated x64 code.
arm64x: Binary format that allows both native ARM64 and ARM64EC code to coexist in the same file.
armnt: ARM Thumb-2 little endian
axp64: AXP 64 (Same as Alpha 64)
ebc: EFI byte code
i386: Intel 386 or later processors and compatible processors
ia64: Intel Itanium processor family
loongarch32: LoongArch 32-bit processor family
loongarch64: LoongArch 64-bit processor family
m32r: Mitsubishi M32R little endian
mips16: MIPS16
mipsfpu: MIPS with FPU
mipsfpu16: MIPS16 with FPU
powerpc: Power PC little endian
powerpcfp: Power PC with floating point support
r3000be: MIPS I compatible 32-bit big endian
r3000: MIPS I compatible 32-bit little endian
r4000: MIPS III compatible 64-bit little endian
r10000: MIPS IV compatible 64-bit little endian
riscv32: RISC-V 32-bit address space
riscv64: RISC-V 64-bit address space
riscv128: RISC-V 128-bit address space
sh3: Hitachi SH3
sh3dsp: Hitachi SH3 DSP
sh4: Hitachi SH4
sh5: Hitachi SH5
thumb: Thumb
wcemipsv2: MIPS little-endian WCE v2v2
code:
unknown: UNKNOWN
alpha: ALPHA
alpha64: ALPHA64
am33: AM33
amd64: AMD64
any: ANY
arm: ARM
arm32: "ARM32"
arm64: ARM64
arm64ec: ARM64EC
arm64x: ARM64X
armnt: ARMNT
axp64: AXP64
ebc: EBC
i386: I386
ia64: IA64
loongarch32: LOONGARCH32
loongarch64: LOONGARCH64
m32r: M32R
mips16: MIPS16
mipsfpu: MIPSFPU
mipsfpu16: MIPSFPU16
powerpc: POWERPC
powerpcfp: POWERPCFP
r3000be: R3000BE
r3000: R3000
r4000: R4000
r10000: R10000
riscv: RISC-V
riscv32: RISCV32
riscv64: RISCV64
riscv128: RISCV128
sh3: SH3
sh3dsp: SH3DSP
sh4: SH4
sh5: SH5
thumb: THUMB
wcemipsv2: WCEMIPSV2
x64: "x64"
x86: "x86"
requirements: Requirements requirements: Requirements
python: Python python: Python
@@ -92,47 +185,48 @@ format.yaml: "YAML"
action.generate: "Generate" action.generate: "Generate"
country.afghanistan: "Afghanistan" country:
country.albania: "Albania" afghanistan: "Afghanistan"
country.algeria: "Algeria" albania: "Albania"
country.andorra: "Andorra" algeria: "Algeria"
country.angola: "Angola" andorra: "Andorra"
country.anguilla: "Anguilla" angola: "Angola"
country.argentina: "Argentina" anguilla: "Anguilla"
country.australia: "Australia" argentina: "Argentina"
country.austria: "Austria" australia: "Australia"
country.azerbaijan: "Azerbaijan" austria: "Austria"
country.azores: "Azores" azerbaijan: "Azerbaijan"
country.bahamas: "Bahamas" azores: "Azores"
country.belgium: "Belgium" bahamas: "Bahamas"
country.bulgaria: "Bulgaria" belgium: "Belgium"
country.corsica: "Corsica" bulgaria: "Bulgaria"
country.croatia: "Croatia" corsica: "Corsica"
country.cyprus: "Cyprus" croatia: "Croatia"
country.czechia: "Czechia" cyprus: "Cyprus"
country.denmark: "Denmark" czechia: "Czechia"
country.estonia: "Estonia" denmark: "Denmark"
country.finland: "Finland" estonia: "Estonia"
country.france: "France" finland: "Finland"
country.france.corsica: "France - Corsica" france: "France"
country.germany: "Germany" france.corsica: "France - Corsica"
country.greece: "Greece" germany: "Germany"
country.hungary: "Hungary" greece: "Greece"
country.ireland: "Ireland" hungary: "Hungary"
country.italy: "Italy" ireland: "Ireland"
country.latvia: "Latvia" italy: "Italy"
country.lithuania: "lithuania" latvia: "Latvia"
country.luxembourg: "Luxembourg" lithuania: "lithuania"
country.madeira: "Madeira" luxembourg: "Luxembourg"
country.malta: "Malta" madeira: "Madeira"
country.monaco: "Monaco" malta: "Malta"
country.netherlands: "Netherlands" monaco: "Monaco"
country.poland: "Poland" netherlands: "Netherlands"
country.portugal: "Portugal" poland: "Poland"
country.portugal.azores: "Portugal - Azores" portugal: "Portugal"
country.portugal.madeira: "Portugal - Madeira" portugal.azores: "Portugal - Azores"
country.romania: "Romania" portugal.madeira: "Portugal - Madeira"
country.slovenia: "Slovenia" romania: "Romania"
country.slovakia: "Slovakia" slovenia: "Slovenia"
country.spain: "Spain" slovakia: "Slovakia"
country.sweden: "Sweden" spain: "Spain"
sweden: "Sweden"

View File

@@ -1,58 +1,43 @@
# EN - Excel Password Remover # EN - Excel Password Remover
meta.title: Excel Password Remover meta:
meta.description: >- title: Excel Password Remover
description: >-
Small web application from which you can easily remove a password from an Excel Small web application 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
document to your browser instead to keep everything local. document to your browser instead to keep everything local.
meta.description.light: >- description.light: >-
Small web application from which you can easily remove a password from an Excel Small web application from which you can easily remove a password from an Excel
worksheet directly in your browser. worksheet directly in your browser.
#article.subtitle: >- eula:
# <a 1: "This tool should only be used with files you have the express permission to unlock."
# href="https://github.com/aziascreations/Excel-Worksheet-Password-Remover"><i 2: "All password removal is done locally in your browser, and <span class='t-bold'>no data is sent online</span>.<br>
# class="fab fa-github"></i> View on GitHub</a>
#intro.title: Introduction
#intro.p1: >-
# This project aims to simplify the removal of passwords on Excel's Worksheet by
# leaving the task of editing the XML files on an Excel document to your
# browser.
#working.title: Security & Internal workings
#working.p1: >-
# In terms of security, your browser handles all the data without sending any of
# it to a central server like many web apps do.<br>This makes it, and your data,
# as safe as your browser can be since it is the only potential point of failure
# here.
#working.p2: >-
# As for the internal workings, the only thing this tool does is extract the
# content of the <code>.xlsx</code> file you gave it and removes the passwords
# on any worksheets and makes a new file with all the changes.<br>Once all of
# that is done, the file is downloaded via a <a
# href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs">data
# URL</a>.
#usage.title: Usage
#usage.p1: >-
# To use this tool you can either visit "<a
# href="https://aziascreations.github.io/Excel-Worksheet-Password-Remover">aziascreations.github.io/Excel-Worksheet-Password-Remover</a>"
# or download the repository and host the web page yourself.
#demo.title: Demonstration video
#links.title: Links
#content.link.demo: Demo hosted on GitHub
eula.1: "This tool should only be used with files you have the express permission to unlock."
eula.2: "All password removal is done locally in your browser, and <span class='t-bold'>no data is sent online</span>.<br>
The original password cannot be revealed as its secure by design and not stored in plain text; it simply gets removed." The original password cannot be revealed as its secure by design and not stored in plain text; it simply gets removed."
eula.3: "By using this tool, you accept full responsibility, and that it is provided “as is” without any warranty." 3: "By using this tool, you accept full responsibility, and that it is provided “as is” without any warranty."
file.selection.title: "File Selection" file:
file.selection.1: "Drop your excel file(s) here or click on the buttons." selection:
title: "File Selection"
1: "Drop your excel file(s) here or click on the buttons."
details.title : "Result(s)" details:
details.empty.1 : "Your Excel files with their password removed will end up here." title : "Result(s)"
empty:
1 : "Your Excel files with their password removed will end up here."
result.success.count: "Removed <span id=\"tmpl-success-password-count\">???</span> password(s)" result:
result.warning.extension: "The file doesn't appear to be an Excel Worksheet !" success:
result.warning.password: "The Excel Worksheet didn't contain any password !" count: "Removed <span id=\"tmpl-success-password-count\">???</span> password(s)"
result.error.jszip: "JSZip was unable to open the file !" warning:
extension: "The file doesn't appear to be an Excel Worksheet !"
password: "The Excel Worksheet didn't contain any password !"
error:
jszip: "JSZip was unable to open the file !"
license:
title: "Licenses"
text:
1: "This tool uses the <a href=\"https://stuk.github.io/jszip/\">JSZip</a>
library, which is licensed under the <a href=\"https://github.com/Stuk/jszip/blob/main/LICENSE.markdown\">MIT license</a>."
2: "The rest of this tool's code is released in the <a href=\"https://github.com/aziascreations/Web-NibblePoker\">public domain</a>."

View File

@@ -10,22 +10,25 @@ og:
description: Collection of free and open-source handmade utilities and libraries description: Collection of free and open-source handmade utilities and libraries
ranging from a simple COM port lister to password remover and autonomous video archivers. ranging from a simple COM port lister to password remover and autonomous video archivers.
header.title: Homepage header:
title: Homepage
intro.title: Welcome to %0 intro:
intro.text.1: This website contains a collection of my personal work through title: Welcome to %0
text:
1: This website contains a collection of my personal work through
blog posts, software releases and other forms of media, all of which is accessible blog posts, software releases and other forms of media, all of which is accessible
for free and under open-source friendly licenses. for free and under open-source friendly licenses.
intro.text.2: If you wish to contact me, you can do so through the contact form 2: If you wish to contact me, you can do so through the contact form
linked in the sidebar or via the email address present on that page. linked in the sidebar or via the email address present on that page.
showcase.title: Showcase showcase:
title: Showcase
updates.title: Updates
updates.text.privacy: Updated our privacy policy.
updates: updates:
title: Updates
text:
privacy: Updated our privacy policy.
5: 5:
date: March 30 2025 date: March 30 2025
text: text:

View File

@@ -21,8 +21,7 @@ option.human.format.none: "No formatting"
option.human.format.standard: "Use recommended spacing" option.human.format.standard: "Use recommended spacing"
option.human.format.4by4: "Use 4 character-wide spacing" option.human.format.4by4: "Use 4 character-wide spacing"
license.1: "The code for this project is released in the public domain." license.1: "The code for this project is released in the <a href=\"https://github.com/aziascreations/Web-NibblePoker\">public domain</a>."
license.2: "The original source code can be found on <a href=\"https://github.com/aziascreations/Web-NibblePoker\">GitHub</a>." license.2: "Data from Swift's
license.3: "Data from Swift's
<a href=\"https://www.swift.com/standards/data-standards/iban-international-bank-account-number\">IBAN Registry</a> <a href=\"https://www.swift.com/standards/data-standards/iban-international-bank-account-number\">IBAN Registry</a>
was also used and may be licensed under different terms." was also used and may be licensed under different terms."

View File

@@ -0,0 +1,48 @@
# PEArch - EN
meta:
title: "PEArch"
description: "CLI tool that tells you which CPU architecture a given Windows PE is made for."
intro:
title: "Introduction"
text:
p1:
l1: A small tool that tells you which
<a href="https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#machine-types">CPU architecture</a>
a given <a href="https://learn.microsoft.com/en-us/windows/win32/debug/pe-format">Windows PE</a> is made for.
p2:
l1: A total of 35 architectures are supported by this tool.
usage:
title: "Usage"
text:
p1:
l1: "This tool can either be used in a command prompt with the options below."
l2: "Or, you can simply drop a file onto the <span class=\"code\">.exe</span> or a shortcut to get the same result."
details:
#disclaimer: The architecture codes, as well as their descriptions, are taken from Microsoft's
# <a href="https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#machine-types">MSDN</a>.
title: "Click here to show/hide the architecture and return codes"
thead:
code: "<span class=\"t-monospace\">STDOUT</span>"
hex: "<span class=\"t-monospace\">STDOUT</span> with <span class=\"t-monospace\">/AsHex</span>"
dec: "<span class=\"t-monospace\">STDERR</span> with <span class=\"t-monospace\">/AsError</span>"
description: "Description <i>(Source: <a href=\"https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#machine-types\">MSDN</a>)</i>"
output:
title: "Output examples"
default:
title: "Without options:"
options:
title: "With <span class=\"code\">/AsHex</span> and <span class=\"code\">/AsError</span>:"
downloads:
title: "Downloads"
license:
title: "License"
text: "This software and its source code is released in the Public Domain (CC0 1.0 Universal)."
links:
title: "Links"

View File

@@ -17,3 +17,5 @@ generate: "Generate"
download.raw: "Raw" download.raw: "Raw"
download.json: "JSON" download.json: "JSON"
download.yaml: "YAML" download.yaml: "YAML"
license.1: "This tool and its code are released in the <a href=\"https://github.com/aziascreations/Web-NibblePoker\">public domain</a>."

View File

@@ -1,94 +1,96 @@
# FR - About # FR - About
head.title: À-propos - NibblePoker head:
head.description: 'TODO: description' title: À-propos - NibblePoker
og.title: NibblePoker - À-propos description: 'TODO: description'
og.description: 'TODO: description'
header.title: À-propos og:
intro.title: Introduction title: NibblePoker - À-propos
intro.text.01: Je m'appelle Herwin Bozet, et je suis un développeur expérimenté description: 'TODO: description'
header:
title: À-propos
intro:
title: Introduction
text:
p1:
l1: Je m'appelle Herwin Bozet, et je suis un développeur expérimenté
en PureBasic, Python, Java, VBA ; et de manière plus modérée en C, API Win32, systèmes en PureBasic, Python, Java, VBA ; et de manière plus modérée en C, API Win32, systèmes
embarqués et le développement web général. embarqués et le développement web général.
intro.text.02: Je programme depuis environ 10 ans, et au cours des 5 dernières # l2: Je programme depuis environ 10 ans, et au cours des 5 dernières
années, j'ai activement travaillé à l'application de cette expérience à divers projets # années, j'ai activement travaillé à l'application de cette expérience à divers projets
dans le but d'aider les programmeurs et les gens dans leur vie quotidienne. # dans le but d'aider les programmeurs et les gens dans leur vie quotidienne.
intro.text.10: NibblePoker est, en essence, un simple pseudonyme et une ombrelle #p2:
sous laquelle la majeure partie de mon travail axé sur le public sera présente. # l1: NibblePoker est, en essence, un simple pseudonyme et une ombrelle
intro.text.11: Il abrite l'ensemble de mon travail créé et adapté pour être # sous laquelle la majeure partie de mon travail axé sur le public sera présente.
utilisé par d'autres personnes. # l2: Il abrite l'ensemble de mon travail créé et adapté pour être
intro.text.20: L'ensemble de ce site web, ainsi que l'ensemble de mon travail # utilisé par d'autres personnes.
p3:
l1: L'ensemble de ce site web, ainsi que l'ensemble de mon travail
et autres projets personnels réalisés pour lui, sont entièrement open-source et et autres projets personnels réalisés pour lui, sont entièrement open-source et
disponibles sous des licences permissives approuvées par l'<abbr title="Open Source disponibles sous des licences permissives approuvées par l'<abbr title="Open Source
Initiative">OSI</abbr>. Initiative">OSI</abbr>.
intro.text.21: Tout cela est maintenu, développé et étendu pendant mon temps l2: Tout cela est maintenu, développé et étendu pendant mon temps
libre, avec l'aide occasionnelle de personnes de la communauté open source. libre, avec l'aide occasionnelle de personnes de la communauté open source.
tenets.title: Principes fondamentaux
tenets.text.01: ''
tenets.text.02: ''
future.title: Projet d'avenir
future.text.01: 'Il est prévu que je décline NibblePoker en une petite <abbr
title="Societé privée à responsibilité limitée">SPRL</abbr> d''ici quelques années
si tout se déroule comme prévu.
' future:
future.text.02: Cela aura pour but de me permettre de centraliser plein de choses title: Projet d'avenir
text:
p1:
l1: 'Il est prévu que je décline NibblePoker en une petite <abbr
title="Societé privée à responsibilité limitée">SPRL</abbr> d''ici quelques années
si tout se déroule comme prévu.'
l2: Cela aura pour but de me permettre de centraliser plein de choses
et d'investir correctement dans mes domaines de prédilection. et d'investir correctement dans mes domaines de prédilection.
future.text.10: La finalité serait de pouvoir créer un petit projet local d'entreprise p2:
l1: La finalité serait de pouvoir créer un petit projet local d'entreprise
durable, ainsi que de proposer une large gamme de produits et solutions couvrant durable, ainsi que de proposer une large gamme de produits et solutions couvrant
les domaines de l'électronique connectée et intelligente, la programmation et lindépendance les domaines de l'électronique connectée et intelligente, la programmation et lindépendance
technologique tout en incluant les composantes logicielles et physiques souvent technologique tout en incluant les composantes logicielles et physiques souvent
manquantes dans de tels produits et solutions. manquantes dans de tels produits et solutions.
future.text.20: Finalement tout ce travail et recherches seraient mis à disposition p3:
l1: Finalement tout ce travail et recherches seraient mis à disposition
du public sous des licences open-source afin de permettre permettant à quiconque du public sous des licences open-source afin de permettre permettant à quiconque
le souhaite dapprendre, réutiliser et revendre des produits ouverts tels que le le souhaite dapprendre, réutiliser et revendre des produits ouverts tels que le
font des compagnies comme Adafruit. font des compagnies comme Adafruit.
_nibblepoker.title: Le nom 'NibblePoker'
_nibblepoker.text.01: Le surnom '<i>NibblePoker</i>' est un mot composé de plusieurs financing:
termes [techniques] plus anciens. title: Financement
_nibblepoker.text.10: "●&nbsp;&nbsp;'<i>Nibble</i>' est un terme technique anglais text:
historiquement utilisé pour décrire décrit un demi-octet, ou 4 bits d'information." p1:
_nibblepoker.text.11: "●&nbsp;&nbsp;'<i>Poker</i>' viens du verbe anglais '<i>to l1: Ce site web, ainsi que son infrastructure environnante, ont
poke</i>' qui, dans le domaine rétro-informatique, décrit le fait d'écrire des données
dans la mémoire d'un ordinateur."
_nibblepoker.text.20: Finalement, lors de la création de ce surnom, je travaillais
depuis quelques temps sur d'anciennes machines telle la Commodore64, Acorn Electron
et [???]ironique.
financing.title: Financement
financing.text.01: Ce site web, ainsi que son infrastructure environnante, ont
été conçus pour coûter le moins possible tout en étant indépendants d'entreprises été conçus pour coûter le moins possible tout en étant indépendants d'entreprises
qui se prennent pour des censeurs. qui se prennent pour des censeurs.
financing.text.02: Et en suivant mes principes fondamentaux, je souhaitais également l2: Et en suivant mes principes fondamentaux, je souhaitais également
conserver une "souveraineté technologique", et, par conséquent, refuse de soutenir conserver une "souveraineté technologique", et, par conséquent, refuse de soutenir
ou d'utiliser des entreprises qui luttent activement contre la liberté d'expression. ou d'utiliser des entreprises qui luttent activement contre la liberté d'expression.
financing.text.10: Le détail des coûts opérationnels sont présents ci-dessous p2:
l1: Le détail des coûts opérationnels sont présents ci-dessous
afin d'illustrer le faible prix d'une telle indépendance. afin d'illustrer le faible prix d'une telle indépendance.
financing.text.20: Et pour les plus motivés d'entre-vous, j'espère pouvoir vous p3:
l1: Et pour les plus motivés d'entre-vous, j'espère pouvoir vous
motiver à au moins tester ce genre d'activités. motiver à au moins tester ce genre d'activités.
financing.text.21: C'est un domaine qui peut paraître intimidant de prime abord, l2: C'est un domaine qui peut paraître intimidant de prime abord,
mais pour une fraction du coût présenté ici, <b>et avec un rien de motivation</b>, mais pour une fraction du coût présenté ici, <b>et avec un rien de motivation</b>,
vous pouvez déjà accomplir énormément de choses et acquérir des connaissances essentielles vous pouvez déjà accomplir énormément de choses et acquérir des connaissances essentielles
dans un monde aussi connecté que le nôtre. dans un monde aussi connecté que le nôtre.
financing.text.isp: Le coût de la connexion internet n'est pas compté car elle isp: Le coût de la connexion internet n'est pas compté car elle
pourrait être remplacée par un Wi-Fi public lambda. pourrait être remplacée par un Wi-Fi public lambda.
financing.part.service: Service part:
financing.part.cost: Coût service: Service
financing.part.cost.total: Coût Total equipment: Matériel
financing.part.equipment: Matériel cost: Coût
financing.part.cost.yearly: Coût Annuel cost.total: Coût Total
financing.part.cost.yearly.total: Coût Annuel cost.yearly: Coût Annuel
financing.part.domain.lu: Domaine en <i>.lu</i> cost.yearly.total: Coût Annuel
financing.part.domain.com: Domaine en <i>.com</i> domain.lu: Domaine en <i>.lu</i>
financing.part.proxy.europe: Reverse-proxy en Europe domain.com: Domaine en <i>.com</i>
financing.part.proxy.america: Reverse-proxy en Amérique proxy.europe: Reverse-proxy en Europe
financing.part.proxy.asia: Reverse-proxy en Asie proxy.america: Reverse-proxy en Amérique
financing.part.emails: Adresses email proxy.asia: Reverse-proxy en Asie
financing.part.electricity: Électricité emails: Adresses email
financing.part.nanopir4s: NanoPi R4S electricity: Électricité
financing.part.nanopir4s.desc: Gère tous les services et programmes internes. nanopir4s: NanoPi R4S
financing.part.storage: Stockage local nanopir4s.desc: Gère tous les services et programmes internes.
aziascreations.title: Le nom 'AziasCreations' storage: Stockage local
aziascreations.text.01: L'ancien surnom 'AziasCreations' était utilisé entre
2013 et 2020 et est à présent abandonné au profit de <i>NibblePoker</i>.
aziascreations.text.10: Cependant, il reste utilisé sur GitHub et Gitea à cause
de certaines limitations concernant les changements de pseudonyme qui m'ont empèché
de faire un changement complet.

View File

@@ -22,6 +22,18 @@ user-agent: User-Agent
server: Serveur server: Serveur
windows:
95: "Windows 95"
98: "Windows 98"
2000: "Windows 2000"
xp: "Windows XP"
vista: "Windows Vista"
7: "Windows 7"
8: "Windows 8"
81: "Windows 8.1"
10: "Windows 10"
11: "Windows 11"
cpu.architecture: Architecture de CPU cpu.architecture: Architecture de CPU
cpu.responsive: "<span class=\"mobile-hide\">Architecture de </span>CPU" cpu.responsive: "<span class=\"mobile-hide\">Architecture de </span>CPU"
cpu.any: "Indépendante" cpu.any: "Indépendante"
@@ -34,6 +46,87 @@ cpu.arm64: "ARM64"
#cpu.arm64: "<p>ARM64<br>ARMv8<br>AArch64</p>" #cpu.arm64: "<p>ARM64<br>ARMv8<br>AArch64</p>"
cpu.risc-v: "RISC-V" cpu.risc-v: "RISC-V"
cpu:
human:
unknown: Le contenu de ce champ est supposé pouvoir sappliquer à nimporte quel type dordinateur
alpha: Alpha AXP, espace dadressage 32 bits
alpha64: Alpha 64, espace dadressage 64 bits
am33: Matsushita AM33
amd64: X64
any: Indépendante
arm: ARM little endian
arm64: ARM64 little endian
arm64ec: ABI permettant l'interopérabilité entre le code natif ARM64 et le code x64 émulé.
arm64x: Format binaire qui permet à la fois au code natif ARM64 et au code ARM64EC de coexister dans le même fichier.
armnt: ARM Pouce-2 petit endian
axp64: AXP 64 (identique à Alpha 64)
ebc: Code doctet EFI
i386: Processeurs Intel 386 ou ultérieurs et processeurs compatibles
ia64: Famille de processeurs Intel Itanium
loongarch32: Famille de processeurs LoongArch 32 bits
loongarch64: Famille de processeurs LoongArch 64 bits
m32r: Mitsubishi M32R petit endian
mips16: MIPS16
mipsfpu: MIPS avec FPU
mipsfpu16: MIPS16 avec FPU
powerpc: Power PC little endian
powerpcfp: Power PC avec prise en charge de la virgule flottante
r3000be: MIPS I compatible 32 bits big endian
r3000: MIPS I compatible 32 bits little endian
r4000: MIPS III compatible 64 bits petit endian
r10000: MIPS IV compatible 64 bits petit endian
riscv32: Espace dadressage RISC-V 32 bits
riscv64: Espace dadressage RISC-V 64 bits
riscv128: Espace dadressage RISC-V 128 bits
sh3: Hitachi SH3
sh3dsp: Hitachi SH3 DSP
sh4: Hitachi SH4
sh5: Hitachi SH5
thumb: Pouce
wcemipsv2: MIPS little-endian WCE v2
code:
unknown: UNKNOWN
alpha: ALPHA
alpha64: ALPHA64
am33: AM33
amd64: AMD64
any: ANY
arm: ARM
arm32: "ARM32"
arm64: ARM64
arm64ec: ARM64EC
arm64x: ARM64X
armnt: ARMNT
axp64: AXP64
ebc: EBC
i386: I386
ia64: IA64
loongarch32: LOONGARCH32
loongarch64: LOONGARCH64
m32r: M32R
mips16: MIPS16
mipsfpu: MIPSFPU
mipsfpu16: MIPSFPU16
powerpc: POWERPC
powerpcfp: POWERPCFP
r3000be: R3000BE
r3000: R3000
r4000: R4000
r10000: R10000
riscv: RISC-V
riscv32: RISCV32
riscv64: RISCV64
riscv128: RISCV128
sh3: SH3
sh3dsp: SH3DSP
sh4: SH4
sh5: SH5
thumb: THUMB
wcemipsv2: WCEMIPSV2
x64: "x64"
x86: "x86"
requirements: "Dépendances" requirements: "Dépendances"
python: Python python: Python
@@ -92,47 +185,48 @@ format.yaml: "YAML"
action.generate: "Générer" action.generate: "Générer"
country.afghanistan: "Afghanistan" country:
country.albania: "Albanie" afghanistan: "Afghanistan"
country.algeria: "Algérie" albania: "Albanie"
country.andorra: "Andorre" algeria: "Algérie"
country.angola: "Angola" andorra: "Andorre"
country.anguilla: "Anguilla" angola: "Angola"
country.argentina: "Argentine" anguilla: "Anguilla"
country.australia: "Australie" argentina: "Argentine"
country.austria: "Autriche" australia: "Australie"
country.azerbaijan: "Azerbaïdjan" austria: "Autriche"
country.azores: "Açores" azerbaijan: "Azerbaïdjan"
country.bahamas: "Bahamas" azores: "Açores"
country.belgium: "Belgique" bahamas: "Bahamas"
country.bulgaria: "Bulgarie" belgium: "Belgique"
country.corsica: "Corse" bulgaria: "Bulgarie"
country.croatia: "Croatie" corsica: "Corse"
country.cyprus: "Chypre" croatia: "Croatie"
country.czechia: "Tchéquie" cyprus: "Chypre"
country.denmark: "Danemark" czechia: "Tchéquie"
country.estonia: "Estonie" denmark: "Danemark"
country.finland: "Finlande" estonia: "Estonie"
country.france: "France" finland: "Finlande"
country.france.corsica: "France - Corse" france: "France"
country.germany: "Allemagne" france.corsica: "France - Corse"
country.greece: "Grèce" germany: "Allemagne"
country.hungary: "Hongrie" greece: "Grèce"
country.ireland: "Irlande" hungary: "Hongrie"
country.italy: "Italie" ireland: "Irlande"
country.latvia: "Lettonie" italy: "Italie"
country.lithuania: "Lituanie" latvia: "Lettonie"
country.luxembourg: "Luxembourg" lithuania: "Lituanie"
country.madeira: "Madère" luxembourg: "Luxembourg"
country.malta: "Malte" madeira: "Madère"
country.monaco: "Monaco" malta: "Malte"
country.netherlands: "Pays-Bas" monaco: "Monaco"
country.poland: "Pologne" netherlands: "Pays-Bas"
country.portugal: "Portugal" poland: "Pologne"
country.portugal.azores: "Portugal - Açores" portugal: "Portugal"
country.portugal.madeira: "Portugal - Madère" portugal.azores: "Portugal - Açores"
country.romania: "Roumanie" portugal.madeira: "Portugal - Madère"
country.slovenia: "Slovénie" romania: "Roumanie"
country.slovakia: "Slovaquie" slovenia: "Slovénie"
country.spain: "Espagne" slovakia: "Slovaquie"
country.sweden: "Suède" spain: "Espagne"
sweden: "Suède"

View File

@@ -1,53 +1,44 @@
# FR - Excel Password Remover # FR - Excel Password Remover
meta.title: Excel Password Remover meta:
meta.description: >- title: Excel Password Remover
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
fichier sur internet. Cette application laisse votre navigateur modifier les fichier sur internet. Cette application laisse votre navigateur modifier les
fichiers XML du fichier Excel afin de tout garder en local. fichiers XML du fichier Excel afin de tout garder en local.
meta.description.light: >- description.light: >-
Application web qui permet de facilement retirer le mot de passe d'un ficher Excel depuis Application web qui permet de facilement retirer le mot de passe d'un ficher Excel depuis
votre navigateur web sans avoir à uploader le fichier sur internet. votre navigateur web sans avoir à uploader le fichier sur internet.
#article.subtitle: >- eula:
# <a 1: "Cet outil ne doit être utilisé qu'avec des fichiers pour lesquels vous avez l'autorisation de les déverrouiller."
# href="https://github.com/aziascreations/Excel-Worksheet-Password-Remover"><i 2: "Toute suppression de mot de passe se fait localement dans votre navigateur, et <span class='t-bold'>aucune donnée n'est envoyée via Internet</span>.<br>
# class="fab fa-github"></i> Voir sur GitHub</a>
#intro.title: Introduction
#intro.p1: >-
# Ce projet vise à simplifier le processus de suppression des mots de passes sur
# les "worksheet" d'Excel en laissant votre navigateur web s'en charger.
#working.title: Sécurité & Fonctionnement
#working.p1: >-
# Cet outil charge le ficher que vous lui donnez en mémoire et travaille
# directement dessus dans le navigateur web sans utiliser un serveur central,
# vos données restent donc entièrement sur votre machine.
#working.p2: >-
# Par sécurité, nous vous demandons quand même de n'utiliser cet outil qu'avec
# des fichiers pour lesquels vous avez été explicitement autorisés à enlever le
# mot de passe.
#usage.title: Utilisation
#usage.p1: >-
# Vous pouvez utiliser cet outil en allant sur "<a
# href="https://aziascreations.github.io/Excel-Worksheet-Password-Remover">aziascreations.github.io/Excel-Worksheet-Password-Remover</a>"
# ou en téléchargeant le dépôt et en hébergeant la page web vous-même.
#demo.title: Vidéo de démonstration
#links.title: Liens
#content.link.demo: Démo hébergée sur GitHub
eula.1 : "Cet outil ne doit être utilisé qu'avec des fichiers pour lesquels vous avez l'autorisation de les déverrouiller."
eula.2 : "Toute suppression de mot de passe se fait localement dans votre navigateur, et <span class='t-bold'>aucune donnée n'est envoyée via Internet</span>.<br>
Le mot de passe original ne peut pas être révélé car il est sécurisé par Excel et n'est pas stocké en texte clair ; il est simplement supprimé." Le mot de passe original ne peut pas être révélé car il est sécurisé par Excel et n'est pas stocké en texte clair ; il est simplement supprimé."
eula.3 : "En utilisant cet outil, vous acceptez l'entière responsabilité de vos action, et le fait qu'il est fourni “tel quel” sans aucune garantie." 3: "En utilisant cet outil, vous acceptez l'entière responsabilité de vos action, et le fait qu'il est fourni “tel quel” sans aucune garantie."
file.selection.title : "Sélection de fichier(s)" file:
file.selection.1 : "Déposez vos fichiers Excel ici ou cliquez sur les boutons." selection:
title: "Sélection de fichier(s)"
1: "Déposez vos fichiers Excel ici ou cliquez sur les boutons."
details.title: "Résultat(s)" details:
details.empty.1 : "Vos fichiers Excel sans leurs mots de passe finiront ici." title: "Résultat(s)"
empty:
1: "Vos fichiers Excel sans leurs mots de passe finiront ici."
result.success.count: "Mot de passe(s) supprimé(s) : <span id=\"tmpl-success-password-count\">???</span>" result:
result.warning.extension: "Le fichier ne semble pas être une feuille de calcul Excel !" success:
result.warning.password: "La feuille de calcul Excel ne contenait aucun mot de passe !" count: "Mot de passe(s) supprimé(s) : <span id=\"tmpl-success-password-count\">???</span>"
result.error.jszip: "JSZip n'a pas pu ouvrir le fichier !" warning:
extension: "Le fichier ne semble pas être une feuille de calcul Excel !"
password: "La feuille de calcul Excel ne contenait aucun mot de passe !"
error:
jszip: "JSZip n'a pas pu ouvrir le fichier !"
license:
title: "Licences"
text:
1: "Cet outil utilise la bibliothèque <a href=\"https://stuk.github.io/jszip/\">JSZip</a>,
qui est distribuée sous licence <a href=\"https://github.com/Stuk/jszip/blob/main/LICENSE.markdown\">MIT</a>."
2: "Le reste du code de cet outil est placé dans le <a href=\"https://github.com/aziascreations/Web-NibblePoker\">domaine public</a>."

View File

@@ -21,8 +21,7 @@ option.human.format.none: "Aucun formatage"
option.human.format.standard: "Utiliser le format standard des pays" option.human.format.standard: "Utiliser le format standard des pays"
option.human.format.4by4: "Formater en segments de 4 caractères" option.human.format.4by4: "Formater en segments de 4 caractères"
license.1: "Le code de ce projet est publié dans le domaine public." license.1: "Le code de ce projet est publié dans le <a href=\"https://github.com/aziascreations/Web-NibblePoker\">domaine public</a>."
license.2: "Le code source original peut être trouvé sur <a href=\"https://github.com/aziascreations/Web-NibblePoker\">GitHub</a>." license.2: "Les données du
license.3: "Les données du
<a href=\"https://www.swift.com/standards/data-standards/iban-international-bank-account-number\">Registre IBAN</a> <a href=\"https://www.swift.com/standards/data-standards/iban-international-bank-account-number\">Registre IBAN</a>
de Swift ont également été utilisées et peuvent être soumises à des conditions de licence différentes." de Swift ont également été utilisées et peuvent être soumises à des conditions de licence différentes."

View File

@@ -0,0 +1,49 @@
# PEArch - FR
meta:
title: "PEArch"
description: "Outil pour invité de commande qui vous indique l'architecture de CPU pour laquelle un executable a été compilé."
intro:
title: "Introduction"
text:
p1:
l1: A small tool that tells you which
<a href="https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#machine-types">CPU architecture</a>
a given <a href="https://learn.microsoft.com/en-us/windows/win32/debug/pe-format">Windows PE</a> is made for.
p2:
l1: Un total de 35 architectures sont supportées par cet outil.
usage:
title: "Utilisation"
text:
p1:
l1: "Cet outil peut soit être utilisé dans un invité de commande avec les options ci-dessous."
l2: "Ou alors, vous pouvez simplement déposer un fichier sur le <span class=\"code\">.exe</span> ou un raccourci, et avoir le même résultat."
details:
#disclaimer: Les codes d'architecture, ainsi que leur descriptions, sont tirés de ceux de Microsoft sur
# <a href="https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#machine-types">MSDN</a>.
title: "Cliquez ici pour afficher/cacher les codes d'architecture et de retour"
thead:
code: "<span class=\"t-monospace\">STDOUT</span>"
hex: "<span class=\"t-monospace\">STDOUT</span> avec <span class=\"t-monospace\">/AsHex</span>"
dec: "<span class=\"t-monospace\">STDERR</span> avec <span class=\"t-monospace\">/AsError</span>"
description: "Description <i>(Source: <a href=\"https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#machine-types\">MSDN</a>)</i>"
output:
title: "Examples d'exécution"
default:
title: "Sans options:"
options:
title: "Avec <span class=\"code\">/AsHex</span> et <span class=\"code\">/AsError</span>:"
downloads:
title: "Téléchargements"
license:
title: "Licence"
text: "Ce programme, ainsi que son code-source sont dans le domaine public (CC0 1.0 Universal)."
links:
title: "Liens"

View File

@@ -17,3 +17,5 @@ generate: "Générer"
download.raw: "Brut" download.raw: "Brut"
download.json: "JSON" download.json: "JSON"
download.yaml: "YAML" download.yaml: "YAML"
license.1: "Cet outil et son code-source sont publié dans le <a href=\"https://github.com/aziascreations/Web-NibblePoker\">domaine public</a>."

View File

@@ -1,3 +1,5 @@
# This docker-compose file should only be used for development !
services: services:
www_nibblepoker_lu: www_nibblepoker_lu:
container_name: www-nibblepoker-python container_name: www-nibblepoker-python

View File

@@ -1,13 +1,23 @@
# Website - NibblePoker.lu # Website - NibblePoker.lu
Public repository containing the source code for the *nibblepoker.lu* & *nibblepoker.com* websites. Public repository containing the source code for [nibblepoker.lu](https://nibblepoker.lu/) &
[nibblepoker.com](https://nibblepoker.com/).
## Features ## Features
TODO * Projects
* [CircuitPython - Ebyte E32 Driver](https://nibblepoker.lu/content/circuitpython-ebyte-e32/)
* [DotNet-ListComPort](https://nibblepoker.lu/content/lscom-cli-dotnet/)
* [Mini Dockerized CCTV NVR](https://nibblepoker.lu/content/docker-mini-cctv-nvr/)
* [PEArch](https://nibblepoker.lu/content/pearch/)
* Web-based Tools
* [Excel Password Remover](https://nibblepoker.lu/tools/excel-password-remover/)
* [IBAN Generator](https://nibblepoker.lu/tools/iban-generator/)
* [UUID Generator](https://nibblepoker.lu/tools/uuid-generator/)
* [VAT Calculator](https://nibblepoker.lu/tools/vat-calculator/)
## Related Projects ## Related Projects
TODO * [aziascreations/Excel-Worksheet-Password-Remover](https://github.com/aziascreations/Excel-Worksheet-Password-Remover)
## Local Setup ## Local Setup

View File

@@ -1,23 +1,43 @@
/* File inputs with drop thingy */ /* File inputs with drop thingy */
.np-file-input-drop-container { .np-file-input-drop-container {
position: relative; position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
overflow: hidden;
} }
.np-file-drop-text { input.np-file-input-drop {
position: absolute; position: absolute;
top: 50%; width: 100%;
left: 50%; height: 100%;
transform: translate(-50%, -50%); top: 0;
} left: 0;
input[type=file].np-file-input-drop {
opacity: 0; opacity: 0;
cursor: pointer; cursor: pointer;
} }
.np-file-drop-text {
text-align: center;
pointer-events: none;
}
.np-file-drop-buttons {
display: flex;
gap: 10px;
z-index: 10;
}
/* Top margin trimmer for heading renderer */ /* Top margin trimmer for heading renderer */
.t-v-center {
vertical-align: middle;
}
/* Copy of the m*-xs classes */ /* Copy of the m*-xs classes */
/* Accommodates the paragraph renderer that has a hard-coded .mt-xs */ /* Accommodates the paragraph renderer that has a hard-coded .mt-xs */
.content-spacer { .content-spacer {
@@ -37,3 +57,7 @@ input[type=file].np-file-input-drop {
.hide-if-first:first-child { .hide-if-first:first-child {
display: none; display: none;
} }
.mt-0-if-first:first-child {
margin-top: 0;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -28,7 +28,7 @@ export function initCore() {
//showContentModal(eContentModal); //showContentModal(eContentModal);
// FIXME: Fix this shit ! // FIXME: Fix the modals, this is hindering many things !
//[eContentModal, document.getElementById("modal-content-cross"), eContentModalInner].forEach(value => { //[eContentModal, document.getElementById("modal-content-cross"), eContentModalInner].forEach(value => {
// value.onclick = function() { // value.onclick = function() {
// fadeOut(eContentModal, 175).then(r => { // fadeOut(eContentModal, 175).then(r => {
@@ -47,8 +47,7 @@ export function initCore() {
});*/ });*/
// Setting up the file drop inputs // Setting up the file drop inputs
document.querySelectorAll(".np-file-input-root-container").forEach(eRootContainer => { document.querySelectorAll(".np-file-input-drop-container").forEach(eRootContainer => {
//console.log(eRootContainer);
/** @type {HTMLInputElement} */ /** @type {HTMLInputElement} */
const eFileDropInput = eRootContainer.querySelector("input[type=file]"); const eFileDropInput = eRootContainer.querySelector("input[type=file]");
@@ -58,7 +57,6 @@ export function initCore() {
/** @type {string} */ /** @type {string} */
const inputId = eFileDropInput.getAttribute("id"); const inputId = eFileDropInput.getAttribute("id");
//console.log(inputId);
/** @type {HTMLElement} */ /** @type {HTMLElement} */
const eFileDropTextEmpty = eRootContainer.querySelector(`#${inputId}-text-drop`); const eFileDropTextEmpty = eRootContainer.querySelector(`#${inputId}-text-drop`);
@@ -78,14 +76,7 @@ export function initCore() {
/** @type {NodeListOf<HTMLElement>} */ /** @type {NodeListOf<HTMLElement>} */
const eFileDropSelectionCounts = eRootContainer.querySelectorAll(`.np-file-drop-count`); const eFileDropSelectionCounts = eRootContainer.querySelectorAll(`.np-file-drop-count`);
if(eFileDropAddButton !== null) { function handleFileDropClear() {
eFileDropAddButton.addEventListener("click", function() {
eFileDropInput.click();
});
}
if(eFileDropClearButton !== null) {
eFileDropClearButton.addEventListener("click", function() {
eFileDropInput.value = ''; eFileDropInput.value = '';
if(eFileDropTextSingle !== null) { if(eFileDropTextSingle !== null) {
eFileDropTextSingle.hidden = true; eFileDropTextSingle.hidden = true;
@@ -96,6 +87,18 @@ export function initCore() {
if(eFileDropTextEmpty !== null) { if(eFileDropTextEmpty !== null) {
eFileDropTextEmpty.hidden = false; eFileDropTextEmpty.hidden = false;
} }
}
if(eFileDropAddButton !== null) {
eFileDropAddButton.addEventListener("click", function() {
handleFileDropClear();
eFileDropInput.click();
});
}
if(eFileDropClearButton !== null) {
eFileDropClearButton.addEventListener("click", function() {
handleFileDropClear();
}); });
} }

View File

@@ -1 +0,0 @@
User-agent: * Allow: / Sitemap: https://nibblepoker.com/sitemap.txt

View File

@@ -1,26 +1,40 @@
<section id="{{ applet_data.id }}-eula"> <section id="{{ applet_data.id }}-eula" class="mt-l mt-0-if-first">
{{ render_h2(l10n("disclaimer.warning", "commons", user_lang)) }} {{ render_h2(l10n("disclaimer.warning", "commons", user_lang)) }}
<div class="content-spacer">
{{ render_paragraph(l10n("eula.1", applet_data.id, user_lang)) }} {{ render_paragraph(l10n("eula.1", applet_data.id, user_lang)) }}
{{ render_paragraph(l10n("eula.2", applet_data.id, user_lang)) }} {{ render_paragraph(l10n("eula.2", applet_data.id, user_lang)) }}
{{ render_paragraph(l10n("eula.3", applet_data.id, user_lang)) }} {{ render_paragraph(l10n("eula.3", applet_data.id, user_lang)) }}
</div>
</section> </section>
<section id="{{ applet_data.id }}-input"> <section id="{{ applet_data.id }}-input" class="mt-l mt-0-if-first">
{{ render_h2(l10n("file.selection.title", applet_data.id, user_lang)) }} {{ render_h2(l10n("file.selection.title", applet_data.id, user_lang)) }}
{{ render_paragraph(l10n("file.selection.1", applet_data.id, user_lang)) }} <div class="content-spacer mt-s">
{{ render_file_input(
{{ render_file_input(applet_data.id + "-input-file", true, ".xlsx, .xlsm", true, true, user_lang) }} applet_data.id + "-input-file", true, ".xlsx, .xlsm", true, false, user_lang,
l10n("file.selection.1", applet_data.id, user_lang)) }}
</div>
</section> </section>
<section id="{{ applet_data.id }}-details"> <section id="{{ applet_data.id }}-details" class="mt-l mt-0-if-first">
{{ render_h2(l10n("details.title", applet_data.id, user_lang)) }} {{ render_h2(l10n("details.title", applet_data.id, user_lang)) }}
<div class="content-spacer mt-s">
<div id="{{ applet_data.id }}-details-empty"> <div id="{{ applet_data.id }}-details-empty">
{{ render_paragraph(l10n("details.empty.1", applet_data.id, user_lang)) }} {{ render_paragraph(l10n("details.empty.1", applet_data.id, user_lang)) }}
</div> </div>
<div id="{{ applet_data.id }}-details-populated" hidden> <div id="{{ applet_data.id }}-details-populated" hidden>
{% if is_standalone %}
{{ render_button(
l10n("download.action.all", "commons", user_lang),
false, applet_data.id + "-files-download-all", "bkgd-green") }}
{{ render_button(
l10n("clear.all.files", "commons", user_lang),
false, applet_data.id + "-files-clear", "bkgd-orange") }}
{% else %}
{{ render_button( {{ render_button(
"<i class=\"fa-duotone fa-solid fa-floppy-disks mr-xs\"></i>" + "<i class=\"fa-duotone fa-solid fa-floppy-disks mr-xs\"></i>" +
l10n("download.action.all", "commons", user_lang), l10n("download.action.all", "commons", user_lang),
@@ -29,23 +43,33 @@
"<i class=\"fa-duotone fa-solid fa-trash mr-xs\"></i>" + "<i class=\"fa-duotone fa-solid fa-trash mr-xs\"></i>" +
l10n("clear.all.files", "commons", user_lang), l10n("clear.all.files", "commons", user_lang),
false, applet_data.id + "-files-clear", "bkgd-orange") }} false, applet_data.id + "-files-clear", "bkgd-orange") }}
{% endif %}
</div> </div>
<div id="{{ applet_data.id }}-result-container"></div> <div id="{{ applet_data.id }}-result-container" class="mt-s"></div>
</div>
</section> </section>
<template id="tmpl-success-root"> <template id="tmpl-success-root">
<div class="bkgd-grid10 w-full r-l border cursor-pointer epr-download-all-click"> <div class="bkgd-grid10 w-full r-l border cursor-pointer epr-download-all-click mt-xs">
<table class="table-p-xxs table-v-center"> <table class="table-p-xxs table-v-center">
<tr> <tr>
<td rowspan="2" class="br bkgd-green bkgd-grid30 rl-l"> <td rowspan="2" class="br bkgd-green bkgd-grid30 rl-l">
{% if is_standalone %}
<span class="mx-xxs">✅</span>
{% else %}
<i class="fa-duotone fa-solid fa-circle-check mx-s"></i> <i class="fa-duotone fa-solid fa-circle-check mx-s"></i>
{% endif %}
</td> </td>
<td class="w-full t-bold"> <td class="w-full t-bold">
<span id="tmpl-success-filename">PlaceholderSuccessName.xlsx</span> <span id="tmpl-success-filename">PlaceholderSuccessName.xlsx</span>
</td> </td>
<td rowspan="2" class="bl bkgd-blue bkgd-grid30 rr-l"> <td rowspan="2" class="bl bkgd-blue bkgd-grid30 rr-l">
{% if is_standalone %}
<span class="mx-xxs">💾</span>
{% else %}
<i class="fa-duotone fa-download mx-s"></i> <i class="fa-duotone fa-download mx-s"></i>
{% endif %}
</td> </td>
</tr> </tr>
<tr class="t-italic"> <tr class="t-italic">
@@ -56,11 +80,15 @@
</template> </template>
<template id="tmpl-warning-root"> <template id="tmpl-warning-root">
<div class="bkgd-grid10 w-full r-l border"> <div class="bkgd-grid10 w-full r-l border mt-xs">
<table class="table-p-xxs table-v-center"> <table class="table-p-xxs table-v-center">
<tr> <tr>
<td rowspan="2" class="br bkgd-orange bkgd-grid30 rl-l"> <td rowspan="2" class="br bkgd-orange bkgd-grid30 rl-l">
{% if is_standalone %}
<span class="mx-xxs">⚠️</span>
{% else %}
<i class="fa-duotone fa-solid fa-triangle-exclamation mx-s"></i> <i class="fa-duotone fa-solid fa-triangle-exclamation mx-s"></i>
{% endif %}
</td> </td>
<td class="w-full t-bold"> <td class="w-full t-bold">
<span id="tmpl-warning-filename">PlaceholderWarningName.xlsx</span> <span id="tmpl-warning-filename">PlaceholderWarningName.xlsx</span>
@@ -81,11 +109,15 @@
</template> </template>
<template id="tmpl-error-root"> <template id="tmpl-error-root">
<div class="bkgd-grid10 w-full r-l border"> <div class="bkgd-grid10 w-full r-l border mt-xs">
<table class="table-p-xxs table-v-center"> <table class="table-p-xxs table-v-center">
<tr> <tr>
<td rowspan="2" class="br bkgd-red bkgd-grid30 rl-l"> <td rowspan="2" class="br bkgd-red bkgd-grid30 rl-l">
{% if is_standalone %}
<span class="mx-xxs">❌</span>
{% else %}
<i class="fa-duotone fa-solid fa-hexagon-exclamation mx-s"></i> <i class="fa-duotone fa-solid fa-hexagon-exclamation mx-s"></i>
{% endif %}
</td> </td>
<td class="w-full t-bold"> <td class="w-full t-bold">
<span id="tmpl-error-filename">PlaceholderErrorName.xlsx</span> <span id="tmpl-error-filename">PlaceholderErrorName.xlsx</span>
@@ -103,8 +135,13 @@
</template> </template>
{% if is_standalone %} {% if is_standalone %}
<section id="{{ applet_data.id }}-licenses"> <section id="{{ applet_data.id }}-licenses" class="mt-l mt-0-if-first">
{{ render_h2(l10n("licenses.title", applet_data.id, user_lang)) }} {{ render_h2(l10n("license.title", applet_data.id, user_lang)) }}
<p>123</p>
<div class="content-spacer">
{{ render_paragraph(
l10n("license.text.1", applet_data.id, user_lang) + "<br>" + l10n("license.text.2", applet_data.id, user_lang)
) }}
</div>
</section> </section>
{% endif %} {% endif %}

View File

@@ -192,7 +192,4 @@
{{ l10n("license.1", "iban-generator", user_lang) }}<br> {{ l10n("license.1", "iban-generator", user_lang) }}<br>
{{ l10n("license.2", "iban-generator", user_lang) }} {{ l10n("license.2", "iban-generator", user_lang) }}
</p> </p>
<p class="mt-xs t-muted">
{{ l10n("license.3", "iban-generator", user_lang) }}
</p>
{% endif %} {% endif %}

View File

@@ -27,13 +27,21 @@
<hr class="subtle"> <hr class="subtle">
<button id="uuid-generator-generate" class="p-xs r-s border b-light success"> <button id="uuid-generator-generate" class="p-xs r-s border b-light success">
<i class="fa-duotone fa-solid fa-gears mr-xs"></i>{{ l10n("action.generate", "commons", user_lang) }} {% if not is_standalone %}
<i class="fa-duotone fa-solid fa-gears mr-xs"></i>
{% endif %}
{{ l10n("action.generate", "commons", user_lang) }}
</button> </button>
{% if not is_standalone %}
<button class="p-xs r-s border b-light primary rr-0 br-0"> <button class="p-xs r-s border b-light primary rr-0 br-0">
<i class="fa-duotone fa-solid fa-download"></i> <i class="fa-duotone fa-solid fa-download"></i>
</button> </button>
<button id="uuid-generator-download-raw" class="p-xs r-s border b-light primary ml-0 r-0 br-0"> {% else %}
<span class="t-w-500 ml-m mr-xxs">{{ l10n("format.download.as", "commons", user_lang) }} :</span>
{% endif %}
<button id="uuid-generator-download-raw" class="p-xs r-s border b-light primary ml-0
{% if not is_standalone %}r-0{% else %}rr-0{% endif %} br-0">
{{ l10n("format.raw", "commons", user_lang) }} {{ l10n("format.raw", "commons", user_lang) }}
</button> </button>
<button id="uuid-generator-download-json" class="p-xs r-s border b-light primary ml-0 r-0 br-0"> <button id="uuid-generator-download-json" class="p-xs r-s border b-light primary ml-0 r-0 br-0">
@@ -47,3 +55,12 @@
<label for="uuid-generator-preview" class="d-none">{{ l10n("preview.label", "uuid-generator", user_lang) }}:</label> <label for="uuid-generator-preview" class="d-none">{{ l10n("preview.label", "uuid-generator", user_lang) }}:</label>
<textarea name="uuid-generator-preview" id="uuid-generator-preview" rows="16" class="w-full border r-s ta-resize-v"></textarea> <textarea name="uuid-generator-preview" id="uuid-generator-preview" rows="16" class="w-full border r-s ta-resize-v"></textarea>
{% if is_standalone %}
<hr class="subtle">
<p class="t-muted">
{{ l10n("license.1", "uuid-generator", user_lang) }}
</p>
{% endif %}

View File

@@ -11,7 +11,8 @@
<link rel="alternate icon" href="/favicon.ico"> <link rel="alternate icon" href="/favicon.ico">
<meta name="theme-color" content="#6F2F65"> <meta name="theme-color" content="#6F2F65">
<!--<link rel="dns-prefetch" href="https://cdn.nibblepoker.lu/"/>--> <link rel="dns-prefetch" href="https://cdn.nibblepoker.lu/"/>
<link rel="dns-prefetch" href="https://files.nibblepoker.lu/"/>
<link rel="preconnect" href="https://cdn.nibblepoker.{{ domain_tld }}/"/> <link rel="preconnect" href="https://cdn.nibblepoker.{{ domain_tld }}/"/>
<link rel="prefetch" href="https://cdn.nibblepoker.{{ domain_tld }}/FontAwesomePro/6.7.2/webfonts/fa-brands-400.woff2" as="font" /> <link rel="prefetch" href="https://cdn.nibblepoker.{{ domain_tld }}/FontAwesomePro/6.7.2/webfonts/fa-brands-400.woff2" as="font" />
@@ -21,7 +22,6 @@
<link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/FontAwesomePro/6.7.2/css/all.min.css"> <link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/FontAwesomePro/6.7.2/css/all.min.css">
<link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/NibblePoker/StandardCSS/nibblepoker.min.css"> <link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/NibblePoker/StandardCSS/nibblepoker.min.css">
<!--<link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/Quantum/Quantum.min.css">-->
<link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/FamFamFam/FlagsExtended/famfamfam-flags.min.css"> <link rel="stylesheet" href="https://cdn.nibblepoker.{{ domain_tld }}/FamFamFam/FlagsExtended/famfamfam-flags.min.css">
<link rel="stylesheet" href="{{ url_for("static", filename="resources/NibblePoker/css/extra.css") }}"> <link rel="stylesheet" href="{{ url_for("static", filename="resources/NibblePoker/css/extra.css") }}">

View File

@@ -1,8 +1,32 @@
<div class="np-file-input-root-container"> <div class="np-file-input-drop-container border r-m">
<!-- FIXME: Use the common renderer ! --> <input type="file"
id="{{ file_input_id }}"
name="{{ file_input_id }}"
{% if file_accept is not none %}accept="{{ file_accept }}"{% endif %}
class="np-file-input-drop w-full p-xl"
{% if file_multiple %}multiple{% endif %}>
{% if file_upload_button or file_clear_button %}
<p id="{{ file_input_id }}-text-drop"
class="np-file-drop-text pt-s mb-s">
{% if text_override == "" %}
{% if file_multiple %}
{{ l10n("file.drop.select.multiple", "commons", user_lang) }}
{% else %}
{{ l10n("file.drop.select.single", "commons", user_lang) }}
{% endif %}
{% else %}
{{ text_override }}
{% endif %}
</p>
<div class="np-file-drop-buttons pb-s">
{% if file_upload_button %} {% if file_upload_button %}
<button id="{{ file_input_id }}-add" class="p-xs r-s border btn-primary"> <button id="{{ file_input_id }}-add" class="p-xs r-s border btn-primary np-file-drop-button">
{% if not is_standalone %}
<i class="fa-duotone fa-solid fa-cloud-arrow-up mr-xxs"></i> <i class="fa-duotone fa-solid fa-cloud-arrow-up mr-xxs"></i>
{% endif %}
{% if file_multiple %} {% if file_multiple %}
{{ l10n("file.drop.upload.multiple", "commons", user_lang) }} {{ l10n("file.drop.upload.multiple", "commons", user_lang) }}
{% else %} {% else %}
@@ -12,52 +36,26 @@
{% endif %} {% endif %}
{% if file_clear_button %} {% if file_clear_button %}
<button id="{{ file_input_id }}-reset" class="p-xs r-s border btn-warning"> <button id="{{ file_input_id }}-reset" class="p-xs r-s border btn-warning np-file-drop-button">
{{ "<i class=\"fa-duotone fa-solid fa-trash mr-xs\"></i>" + l10n("file.drop.clear", "commons", user_lang) }} {% if not is_standalone %}
<i class="fa-duotone fa-solid fa-trash mr-xs"></i>
{% endif %}
{{ l10n("file.drop.clear", "commons", user_lang) }}
</button> </button>
{% endif %} {% endif %}
</div>
{% if file_upload_button or file_clear_button %} {% else %}
<br> <p class="np-file-drop-text py-l">
{% endif %} {% if text_override == "" %}
<div class="np-file-input-drop-container border r-s bkgd-blank">
<p class="np-file-drop-text"
id="{{ file_input_id }}-text-drop">
{% if file_multiple %} {% if file_multiple %}
{{ l10n("file.drop.select.multiple", "commons", user_lang) }} {{ l10n("file.drop.select.multiple", "commons", user_lang) }}
{% else %} {% else %}
{{ l10n("file.drop.select.single", "commons", user_lang) }} {{ l10n("file.drop.select.single", "commons", user_lang) }}
{% endif %} {% endif %}
</p>
<p class="np-file-drop-text"
id="{{ file_input_id }}-text-file-single"
hidden>
{{ l10n("file.drop.selected.single", "commons", user_lang) }}
</p>
<p class="np-file-drop-text"
id="{{ file_input_id }}-text-file-multiple"
hidden>
{{ l10n("file.drop.selected.multiple", "commons", user_lang) }}
</p>
<label for="{{ file_input_id }}"
hidden>
{% if file_multiple %}
{{ l10n("file.drop.label.multiple", "commons", user_lang) }}
{% else %} {% else %}
{{ l10n("file.drop.label.single", "commons", user_lang) }} {{ text_override }}
{% endif %}
</p>
{% endif %} {% endif %}
</label>
<input type="file"
id="{{ file_input_id }}"
name="{{ file_input_id }}"
{% if file_accept is not none %}accept="{{ file_accept }}"{% endif %}
class="np-file-input-drop w-full p-l"
{% if file_multiple %}multiple{% endif %}
/>
</div>
</div> </div>

View File

@@ -8,7 +8,7 @@
{% elif heading_level == 4 %} {% elif heading_level == 4 %}
mt-m mt-m
{% endif %} {% endif %}
{{ heading_background_class }}"> {{ heading_background_class }} mt-0-if-first">
<h{{ heading_level }} class="t-w-500 <h{{ heading_level }} class="t-w-500
{% if heading_level == 2 %} {% if heading_level == 2 %}
@@ -28,7 +28,7 @@
{{ heading_inner_html }} {{ heading_inner_html }}
{% if heading_right_html is not none %} {% if heading_right_html is not none %}
<span class="ml-auto mobile-hide t-size-10 t-muted">{{ heading_right_html }}</span> <!--<span class="ml-auto mobile-hide t-size-10 t-muted">{{ heading_right_html }}</span>-->
{% endif %} {% endif %}
</h{{ heading_level }}> </h{{ heading_level }}>

View File

@@ -9,32 +9,39 @@
{% block main_content %} {% block main_content %}
<section class="mt-l mt-0-if-first">
{{ render_h1(l10n("intro.title", "about", user_lang)) }} {{ render_h1(l10n("intro.title", "about", user_lang)) }}
<div class="content-spacer">
<img src="/resources/NibblePoker/images/about/profile-pic.jpg" <img src="/resources/NibblePoker/images/about/profile-pic.jpg"
alt="" class="r-r img-profile f-right m-xs ml-xxs" alt="" class="r-r img-profile f-right m-xs ml-xxs"
draggable="false"> draggable="false">
{{ render_paragraph(l10n("intro.text.01", "about", user_lang) + l10n("intro.text.02", "about", user_lang)) }} {{ render_paragraph(l10n("intro.text.p1.l1", "about", user_lang)) }}
{{ render_paragraph(l10n("intro.text.10", "about", user_lang) + l10n("intro.text.11", "about", user_lang)) }} {{ render_paragraph(l10n("intro.text.p3.l1", "about", user_lang) + "<br>" + l10n("intro.text.p3.l2", "about", user_lang)) }}
{{ render_paragraph(l10n("intro.text.20", "about", user_lang) + l10n("intro.text.21", "about", user_lang)) }} </div>
</section>
<!--{{ render_h1(l10n("tenets.title", "about", user_lang)) }}
<p class="mt-xs ml-s t-bold">
TODO
</p>-->
<section class="mt-l mt-0-if-first">
{{ render_h1(l10n("future.title", "about", user_lang)) }} {{ render_h1(l10n("future.title", "about", user_lang)) }}
{{ render_paragraph(l10n("future.text.01", "about", user_lang) + l10n("future.text.02", "about", user_lang)) }} <div class="content-spacer">
{{ render_paragraph(l10n("future.text.10", "about", user_lang)) }} {{ render_paragraph(l10n("future.text.p1.l1", "about", user_lang) + "<br>" + l10n("future.text.p1.l2", "about", user_lang)) }}
{{ render_paragraph(l10n("future.text.20", "about", user_lang)) }} {{ render_paragraph(l10n("future.text.p2.l1", "about", user_lang)) }}
{{ render_paragraph(l10n("future.text.p3.l1", "about", user_lang)) }}
</div>
</section>
<section class="mt-l mt-0-if-first">
{{ render_h1(l10n("financing.title", "about", user_lang)) }} {{ render_h1(l10n("financing.title", "about", user_lang)) }}
{{ render_paragraph(l10n("financing.text.01", "about", user_lang) + l10n("financing.text.02", "about", user_lang)) }} <div class="content-spacer">
{{ render_paragraph(l10n("financing.text.10", "about", user_lang)) }} {{ render_paragraph(l10n("financing.text.p1.l1", "about", user_lang) + "<br>" + l10n("financing.text.p1.l2", "about", user_lang)) }}
{{ render_paragraph(l10n("financing.text.20", "about", user_lang) + l10n("financing.text.21", "about", user_lang)) }} {{ render_paragraph(l10n("financing.text.p2.l1", "about", user_lang)) }}
{{ render_paragraph(l10n("financing.text.p3.l1", "about", user_lang) + "<br>" + l10n("financing.text.p3.l2", "about", user_lang)) }}
</div>
</section>
<section class="mt-l mt-0-if-first">
<div class="grid col-2 col-medium-1"> <div class="grid grid-col-2 grid-col-medium-1 grid-gap-m">
<table class="stylish r-s border o-hidden table-p-xs table-h-p-s table-v-center mt-s mx-s"> <div>
<table class="table-stylish table-p-xs border r-l w-full">
<thead> <thead>
<tr> <tr>
<th>{{ l10n("financing.part.service", "about", user_lang) }}</th> <th>{{ l10n("financing.part.service", "about", user_lang) }}</th>
@@ -44,15 +51,15 @@
<tbody> <tbody>
<tr> <tr>
<td>{{ l10n("financing.part.domain.lu", "about", user_lang) }}</td> <td>{{ l10n("financing.part.domain.lu", "about", user_lang) }}</td>
<td>17,00 €</td> <td>19,99 €</td>
</tr> </tr>
<tr> <tr>
<td>{{ l10n("financing.part.domain.com", "about", user_lang) }}</td> <td>{{ l10n("financing.part.domain.com", "about", user_lang) }}</td>
<td>14,50 €</td> <td>13,49 €</td>
</tr> </tr>
<tr> <tr>
<td>{{ l10n("financing.part.proxy.europe", "about", user_lang) }}</td> <td>{{ l10n("financing.part.proxy.europe", "about", user_lang) }}</td>
<td>14,50 €</td> <td>348 PLN / &pm;81,84 €</td>
</tr> </tr>
<tr> <tr>
<td>{{ l10n("financing.part.proxy.america", "about", user_lang) }}</td> <td>{{ l10n("financing.part.proxy.america", "about", user_lang) }}</td>
@@ -64,11 +71,13 @@
</tr> </tr>
<tr> <tr>
<td><b class="f-right">{{ l10n("financing.part.cost.yearly.total", "about", user_lang) }}:</b></td> <td><b class="f-right">{{ l10n("financing.part.cost.yearly.total", "about", user_lang) }}:</b></td>
<td>&pm;89,00 €</td> <td>&pm;160,32 €</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<table class="stylish r-s border o-hidden table-p-xs table-h-p-s table-v-center mt-s mx-s"> </div>
<div>
<table class="table-stylish table-p-xs border r-l w-full">
<thead> <thead>
<tr> <tr>
<th>{{ l10n("financing.part.equipment", "about", user_lang) }}</th> <th>{{ l10n("financing.part.equipment", "about", user_lang) }}</th>
@@ -92,10 +101,13 @@
</tbody> </tbody>
</table> </table>
</div> </div>
</div>
<p class="mt-xs ml-s t-super-muted t-center"> <p class="mt-xs ml-s t-super-muted t-center">
{{ l10n("financing.text.isp", "about", user_lang) }} {{ l10n("financing.text.isp", "about", user_lang) }}
</p> </p>
</section>
{% endblock %} {% endblock %}
{% block extra_scripts %} {% block extra_scripts %}

View File

@@ -8,24 +8,23 @@
{% endblock %} {% endblock %}
{% block main_content %} {% block main_content %}
{{ render_h1(l10n("email.title", "contact", user_lang), "fad fa-mail-bulk", "herwin.bozet@gmail.com") }} <section class="mt-l mt-0-if-first">
{{ render_h1(l10n("email.title", "contact", user_lang), "fad fa-mail-bulk", "herwin.bozet@nibblepoker.lu") }}
<p class="m-s"> <p class="m-s">
<a href="mailto:Herwin Bozet<herwin.bozet@nibblepoker.lu>?subject=Contact%20via%20NibblePoker.lu" class="a-hidden button-link"> <a href="mailto:Herwin Bozet<herwin.bozet@nibblepoker.lu>?subject=Contact%20via%20NibblePoker.lu" class="a-hidden button-link">
<button class="p-xs r-s border b-light success"><i class="fad fa-external-link-alt mr-xs"></i>{{ l10n("email.compose.nibblepoker", "contact", user_lang) }}</button> <button class="p-xs r-s border b-light success"><i class="fad fa-external-link-alt mr-xs"></i>{{ l10n("email.compose.nibblepoker", "contact", user_lang) }}</button>
</a> </a>
</p> </p>
<!--<p class="m-s"> </section>
<a href="mailto:Herwin Bozet<herwin.bozet@gmail.com>?subject=Contact%20via%20NibblePoker.lu" class="a-hidden button-link">
<button class="p-xs r-s border b-light success"><i class="fad fa-external-link-alt mr-xs"></i>{{ l10n("email.compose", "contact", user_lang) }}</button>
</a>
</p>-->
{{ render_h1(l10n("twitter.title", "contact", user_lang), "fab fa-twitter", "@NibblePoker") }} <section class="mt-l mt-0-if-first">
{{ render_h1(l10n("twitter.title", "contact", user_lang), "fab fa-x-twitter", "@NibblePoker") }}
<p class="m-s"> <p class="m-s">
<a href="https://twitter.com/messages/compose?recipient_id=937370791334895616" class="a-hidden button-link"> <a href="https://twitter.com/messages/compose?recipient_id=937370791334895616" class="a-hidden button-link">
<button class="p-xs r-s border b-light primary"><i class="fad fa-external-link-alt mr-xs"></i>{{ l10n("twitter.compose", "contact", user_lang) }}</button> <button class="p-xs r-s border b-light primary"><i class="fad fa-external-link-alt mr-xs"></i>{{ l10n("twitter.compose", "contact", user_lang) }}</button>
</a> </a>
</p> </p>
</section>
{% endblock %} {% endblock %}

View File

@@ -12,6 +12,7 @@
{% endblock %} {% endblock %}
{% block main_content %} {% block main_content %}
<section class="mt-l mt-0-if-first">
{{ render_h1(l10n("social.title", "links", user_lang )) }} {{ render_h1(l10n("social.title", "links", user_lang )) }}
<p class="mt-s ml-s t-w-600 t-size-12"> <p class="mt-s ml-s t-w-600 t-size-12">
@@ -31,8 +32,10 @@
<a href="https://github.com/NibblePoker">{{ l10n("github_pro.title", "links", user_lang ) }}</a> <a href="https://github.com/NibblePoker">{{ l10n("github_pro.title", "links", user_lang ) }}</a>
</p> </p>
<p class="mt-xxs ml-l">{{ l10n("github_pro.text.1", "links", user_lang ) }}</p> <p class="mt-xxs ml-l">{{ l10n("github_pro.text.1", "links", user_lang ) }}</p>
</section>
<section class="mt-l mt-0-if-first">
{{ render_h1(l10n("work.title", "links", user_lang )) }} {{ render_h1(l10n("work.title", "links", user_lang )) }}
<p class="mt-s ml-s t-w-600 t-size-12"> <p class="mt-s ml-s t-w-600 t-size-12">
@@ -40,8 +43,10 @@
<a href="https://www.linkedin.com/in/herwin-bozet/">{{ l10n("linkedin.title", "links", user_lang ) }}</a> <a href="https://www.linkedin.com/in/herwin-bozet/">{{ l10n("linkedin.title", "links", user_lang ) }}</a>
</p> </p>
<p class="mt-xxs ml-l">{{ l10n("linkedin.text.1", "links", user_lang ) }}</p> <p class="mt-xxs ml-l">{{ l10n("linkedin.text.1", "links", user_lang ) }}</p>
</section>
<section class="mt-l mt-0-if-first">
{{ render_h1(l10n("misc.title", "links", user_lang )) }} {{ render_h1(l10n("misc.title", "links", user_lang )) }}
<p class="mt-s ml-s t-w-600 t-size-12"> <p class="mt-s ml-s t-w-600 t-size-12">
@@ -61,6 +66,7 @@
<a href="https://git.nibblepoker.lu/">{{ l10n("gitea.title", "links", user_lang ) }}</a> <a href="https://git.nibblepoker.lu/">{{ l10n("gitea.title", "links", user_lang ) }}</a>
</p> </p>
<p class="mt-xxs ml-l">{{ l10n("gitea.text.1", "links", user_lang ) }}</p> <p class="mt-xxs ml-l">{{ l10n("gitea.text.1", "links", user_lang ) }}</p>
</section>
{% endblock %} {% endblock %}
{% block extra_scripts %} {% block extra_scripts %}

View File

@@ -13,7 +13,7 @@
{% block main_content %} {% block main_content %}
<section> <section class="mt-l mt-0-if-first">
{{ 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"> <div class="content-spacer">
{{ render_paragraph(l10n("introduction.text.1", "privacy", user_lang)) }} {{ render_paragraph(l10n("introduction.text.1", "privacy", user_lang)) }}
@@ -26,7 +26,7 @@
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ 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"> <div class="content-spacer">
{{ render_paragraph(l10n("v2.data.intro.1", "privacy", user_lang) + {{ render_paragraph(l10n("v2.data.intro.1", "privacy", user_lang) +
@@ -51,7 +51,7 @@
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ 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"> <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) +
@@ -73,7 +73,7 @@
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ 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"> <div class="content-spacer">
{{ render_paragraph(l10n("v3.third.intro.1", "privacy", user_lang)) }} {{ render_paragraph(l10n("v3.third.intro.1", "privacy", user_lang)) }}
@@ -81,7 +81,7 @@
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ 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"> <div class="content-spacer">
{{ render_paragraph(l10n("v2.cookies.intro.1", "privacy", user_lang)) }} {{ render_paragraph(l10n("v2.cookies.intro.1", "privacy", user_lang)) }}
@@ -89,7 +89,7 @@
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ 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"> <div class="content-spacer">
{{ render_paragraph(l10n("v2.update.intro.1", "privacy", user_lang)) }} {{ render_paragraph(l10n("v2.update.intro.1", "privacy", user_lang)) }}
@@ -161,7 +161,7 @@
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ 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"> <div class="content-spacer">
{{ render_paragraph(l10n("contact.text.1", "privacy", user_lang) + {{ render_paragraph(l10n("contact.text.1", "privacy", user_lang) +
@@ -170,7 +170,7 @@
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ 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"> <div class="content-spacer">
{{ render_paragraph(l10n("complaint.text.1", "privacy", user_lang)) }} {{ render_paragraph(l10n("complaint.text.1", "privacy", user_lang)) }}

View File

@@ -12,7 +12,7 @@
{% endblock %} {% endblock %}
{% block main_content %} {% block main_content %}
<section> <section class="mt-l mt-0-if-first">
{{ render_h1(l10n("intro.title", "home", user_lang, ["NibblePoker." + domain_tld] )) }} {{ render_h1(l10n("intro.title", "home", user_lang, ["NibblePoker." + domain_tld] )) }}
<div class="content-spacer"> <div class="content-spacer">
@@ -21,7 +21,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("updates.title", "home", user_lang)) }} {{ render_h2(l10n("updates.title", "home", user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">

View File

@@ -45,7 +45,7 @@
l10n(project_data.metadata.general.title_key, project_id, user_lang) l10n(project_data.metadata.general.title_key, project_id, user_lang)
) }} ) }}
<div class="px-xxs"> <div class="px-xxs mt-m">
{% block project_content %}{% endblock %} {% block project_content %}{% endblock %}
</div> </div>

View File

@@ -1,14 +1,14 @@
{% extends "projects/_project.jinja" %} {% extends "projects/_project.jinja" %}
{% block project_content %} {% block project_content %}
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("intro.title", project_id, user_lang)) }} {{ render_h2(l10n("intro.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("intro.p1", project_id, user_lang)) }} {{ render_paragraph(l10n("intro.p1", project_id, user_lang)) }}
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("features.title", project_id, user_lang)) }} {{ render_h2(l10n("features.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
@@ -28,7 +28,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("limitations.title", project_id, user_lang)) }} {{ render_h2(l10n("limitations.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
@@ -50,14 +50,14 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("doc.title", project_id, user_lang)) }} {{ render_h2(l10n("doc.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("doc.p1", project_id, user_lang)) }} {{ render_paragraph(l10n("doc.p1", project_id, user_lang)) }}
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("usage.title", project_id, user_lang)) }} {{ render_h2(l10n("usage.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("usage.p1", project_id, user_lang)) }} {{ render_paragraph(l10n("usage.p1", project_id, user_lang)) }}
@@ -99,7 +99,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("demo.title", project_id, user_lang)) }} {{ render_h2(l10n("demo.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("demo.p1", project_id, user_lang)) }} {{ render_paragraph(l10n("demo.p1", project_id, user_lang)) }}
@@ -114,7 +114,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("downloads.title", project_id, user_lang)) }} {{ render_h2(l10n("downloads.title", project_id, user_lang)) }}
<div class="content-spacer"> <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">
@@ -207,7 +207,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("license.title", project_id, user_lang)) }} {{ render_h2(l10n("license.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph( {{ render_paragraph(
@@ -218,7 +218,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("links.title", project_id, user_lang)) }} {{ render_h2(l10n("links.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([

View File

@@ -1,7 +1,7 @@
{% extends "projects/_project.jinja" %} {% extends "projects/_project.jinja" %}
{% block project_content %} {% block project_content %}
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("intro.title", project_id, user_lang)) }} {{ render_h2(l10n("intro.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("intro.1", project_id, user_lang)) }} {{ render_paragraph(l10n("intro.1", project_id, user_lang)) }}
@@ -9,7 +9,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("preamble.title", project_id, user_lang)) }} {{ render_h2(l10n("preamble.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("preamble.1", project_id, user_lang)) }} {{ render_paragraph(l10n("preamble.1", project_id, user_lang)) }}
@@ -17,7 +17,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("setup.title", project_id, user_lang)) }} {{ render_h2(l10n("setup.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("setup.1", project_id, user_lang)) }} {{ render_paragraph(l10n("setup.1", project_id, user_lang)) }}
@@ -25,7 +25,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h3(l10n("setup.camera.title", project_id, user_lang)) }} {{ render_h3(l10n("setup.camera.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("setup.camera.1", project_id, user_lang)) }} {{ render_paragraph(l10n("setup.camera.1", project_id, user_lang)) }}
@@ -51,7 +51,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h3(l10n("setup.cleaner.title", project_id, user_lang)) }} {{ render_h3(l10n("setup.cleaner.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("setup.cleaner.1", project_id, user_lang)) }} {{ render_paragraph(l10n("setup.cleaner.1", project_id, user_lang)) }}
@@ -77,7 +77,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h3(l10n("setup.web.title", project_id, user_lang)) }} {{ render_h3(l10n("setup.web.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("setup.web.1", project_id, user_lang)) }} {{ render_paragraph(l10n("setup.web.1", project_id, user_lang)) }}
@@ -109,7 +109,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("startup.title", project_id, user_lang)) }} {{ render_h2(l10n("startup.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("startup.1", project_id, user_lang)) }} {{ render_paragraph(l10n("startup.1", project_id, user_lang)) }}
@@ -121,7 +121,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("screenshots.title", project_id, user_lang)) }} {{ render_h2(l10n("screenshots.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_splide([ {{ render_splide([
@@ -131,7 +131,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("statistics.title", project_id, user_lang)) }} {{ render_h2(l10n("statistics.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
@@ -162,14 +162,14 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("license.title", project_id, user_lang)) }} {{ render_h2(l10n("license.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("license.1", project_id, user_lang)) }} {{ render_paragraph(l10n("license.1", project_id, user_lang)) }}
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("links.title", project_id, user_lang)) }} {{ render_h2(l10n("links.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([

View File

@@ -1,7 +1,7 @@
{% extends "projects/_project.jinja" %} {% extends "projects/_project.jinja" %}
{% block project_content %} {% block project_content %}
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("intro.title", project_id, user_lang)) }} {{ render_h2(l10n("intro.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("intro.p1", project_id, user_lang)) }} {{ render_paragraph(l10n("intro.p1", project_id, user_lang)) }}
@@ -10,7 +10,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("requirements.title", project_id, user_lang)) }} {{ render_h2(l10n("requirements.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
@@ -26,7 +26,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("improvements.title", project_id, user_lang)) }} {{ render_h2(l10n("improvements.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([
@@ -39,7 +39,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("screenshots.title", project_id, user_lang)) }} {{ render_h2(l10n("screenshots.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_splide([ {{ render_splide([
@@ -50,7 +50,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("usage.title", project_id, user_lang)) }} {{ render_h2(l10n("usage.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ {{
@@ -78,7 +78,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("formatting.title", project_id, user_lang)) }} {{ render_h2(l10n("formatting.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ {{
@@ -105,7 +105,7 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("packages.title", project_id, user_lang)) }} {{ render_h2(l10n("packages.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_paragraph(l10n("packages.single.title", project_id, user_lang)) }} {{ render_paragraph(l10n("packages.single.title", project_id, user_lang)) }}
@@ -117,10 +117,10 @@
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("version.current", "commons", user_lang)) }} {{ render_h2(l10n("version.current", "commons", user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
<table class="table-stylish table-p-s border r-l"> <table class="table-stylish table-p-xs table-v-center border r-l">
<thead> <thead>
<tr> <tr>
<th>{{ l10n("cpu.architecture", "commons", user_lang) }}</th> <th>{{ l10n("cpu.architecture", "commons", user_lang) }}</th>
@@ -132,53 +132,134 @@
<tr> <tr>
<td>{{ l10n("cpu.any", "commons", user_lang) }}</td> <td>{{ l10n("cpu.any", "commons", user_lang) }}</td>
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td> <td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
<td>...</td> <td>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_AnyCPU.zip" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>ZIP - 120.36 KiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
</td>
</tr> </tr>
<tr> <tr>
<td rowspan="2">{{ l10n("cpu.x64", "commons", user_lang) }}</td> <td rowspan="2">{{ l10n("cpu.x64", "commons", user_lang) }}</td>
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td> <td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
<td>...</td> <td>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64_Single.zip" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>ZIP - 138.9 KiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
</td>
</tr> </tr>
<tr> <tr>
<td>{{ l10n("none.fs", "commons", user_lang) }}</td> <td>{{ l10n("none.fs", "commons", user_lang) }}</td>
<td>...</td> <td>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64_SelfContained.zip" class="a-hidden mr-s">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>ZIP - 7.35 MiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64.msi" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>MSI - 10.51 MiB<i class=\"fas fa-download ml-xs\"></i>",
False, None, "btn-primary")
}}
</a>
</td>
</tr> </tr>
<tr> <tr>
<td rowspan="2">{{ l10n("cpu.x86", "commons", user_lang) }}</td> <td rowspan="2">{{ l10n("cpu.x86", "commons", user_lang) }}</td>
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td> <td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
<td>...</td> <td>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86_Single.zip" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>ZIP - 123.56 KiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
</td>
</tr> </tr>
<tr> <tr>
<td>{{ l10n("none.fs", "commons", user_lang) }}</td> <td>{{ l10n("none.fs", "commons", user_lang) }}</td>
<td>...</td> <td>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86_SelfContained.zip" class="a-hidden mr-s">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>ZIP - 6.64 MiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86.msi" class="a-hidden mr-s">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>MSI - 9.79 MiB<i class=\"fas fa-download ml-xs\"></i>",
False, None, "btn-primary")
}}
</a>
</td>
</tr> </tr>
<tr> <tr>
<td rowspan="2">{{ l10n("cpu.arm64", "commons", user_lang) }}</td> <td rowspan="2">{{ l10n("cpu.arm64", "commons", user_lang) }}</td>
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td> <td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
<td>...</td> <td>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm64_Single.zip" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>ZIP - 130.34 KiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
</td>
</tr> </tr>
<tr> <tr>
<td>{{ l10n("none.fs", "commons", user_lang) }}</td> <td>{{ l10n("none.fs", "commons", user_lang) }}</td>
<td>...</td> <td>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm64_SelfContained.zip" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>ZIP - 7.04 MiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
</td>
</tr> </tr>
<tr>
<!--<tr>
<td rowspan="2">{{ l10n("cpu.arm32", "commons", user_lang) }}</td> <td rowspan="2">{{ l10n("cpu.arm32", "commons", user_lang) }}</td>
<td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td> <td>{{ l10n("requirements.text.dotnet", project_id, user_lang) }}</td>
<td>...</td> <td>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm_Single.zip" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>ZIP - 127.57 KiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
</td>
</tr> </tr>
<tr> <tr>
<td>{{ l10n("none.fs", "commons", user_lang) }}</td> <td>{{ l10n("none.fs", "commons", user_lang) }}</td>
<td>...</td> <td>
</tr> <a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm_SelfContained.zip" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>ZIP - 6.68 MiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
</td>
</tr>-->
</tbody> </tbody>
</table> </table>
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("source.code", "commons", user_lang)) }} {{ render_h2(l10n("source.code", "commons", user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
<table class="table-stylish table-p-s border r-l"> <table class="table-stylish table-p-xs table-v-center border r-l">
<thead> <thead>
<tr> <tr>
<th>{{ l10n("version", "commons", user_lang) }}</th> <th>{{ l10n("version", "commons", user_lang) }}</th>
@@ -188,14 +269,27 @@
<tbody> <tbody>
<tr> <tr>
<td>v3.0.0</td> <td>v3.0.0</td>
<td>...</td> <td>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/DotNet-ListComPort-3.0.0.tar.gz" class="a-hidden mr-s">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>TAR.GZ - 4.22 MiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
<a href="https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/DotNet-ListComPort-3.0.0.zip" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>ZIP - 4.23 MiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</section> </section>
<section> <section class="mt-l mt-0-if-first">
{{ render_h2(l10n("links.title", project_id, user_lang)) }} {{ render_h2(l10n("links.title", project_id, user_lang)) }}
<div class="content-spacer"> <div class="content-spacer">
{{ render_list_ul([ {{ render_list_ul([

View File

@@ -0,0 +1,214 @@
{% extends "projects/_project.jinja" %}
{% block project_content %}
<section class="mt-l mt-0-if-first">
{{ render_h2(l10n("intro.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_paragraph(l10n("intro.text.p1.l1", project_id, user_lang)) }}
{{ render_paragraph(l10n("intro.text.p2.l1", project_id, user_lang)) }}
</div>
</section>
<section class="mt-l mt-0-if-first">
{{ render_h2(l10n("usage.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_paragraph(
l10n("usage.text.p1.l1", project_id, user_lang) +
"<br>" +
l10n("usage.text.p1.l2", project_id, user_lang)
)}}
{{ render_code_block([
"PEArch.exe [/?] [/E|/AsError] [/H|/AsHex] [/F|/FullText] <File>",
"",
"Options:",
" /? Prints this help text, and some additional details.",
" /E, /AsError Gives out the result as an error code.",
" /H, /AsHex Prints the architecture as a hex number.",
" /F, /FullText Prints a longer description of the architecture.",
]) }}
<details class="border bkgd-dark r-m mt-s">
<summary class="p-xs">{{ l10n("usage.details.title", project_id, user_lang) }}</summary>
<div class="bt ox-auto">
<table class="table-stylish table-p-xs table-v-center table-no-wrap w-full rb-m">
<thead>
<tr>
<th class="t-left">{{ l10n("usage.details.thead.code", project_id, user_lang) }}</th>
<th class="t-left">{{ l10n("usage.details.thead.hex", project_id, user_lang) }}</th>
<th class="t-left">{{ l10n("usage.details.thead.dec", project_id, user_lang) }}</th>
<th class="t-left">{{ l10n("usage.details.thead.description", project_id, user_lang) }}</th>
</tr>
</thead>
<tbody>
<tr><td>{{ l10n("cpu.code.unknown", "commons", user_lang) }}</td><td><span class="code">0x0</span></td><td><span class="code">0</span></td><td>{{ l10n("cpu.human.unknown", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.alpha", "commons", user_lang) }}</td><td><span class="code">0x184</span></td><td><span class="code">388</span></td><td>{{ l10n("cpu.human.alpha", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.alpha64", "commons", user_lang) }}</td><td><span class="code">0x284</span></td><td><span class="code">644</span></td><td>{{ l10n("cpu.human.alpha64", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.am33", "commons", user_lang) }}</td><td><span class="code">0x1d3</span></td><td><span class="code">467</span></td><td>{{ l10n("cpu.human.am33", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.amd64", "commons", user_lang) }}</td><td><span class="code">0x8664</span></td><td><span class="code">34404</span></td><td>{{ l10n("cpu.human.amd64", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.arm", "commons", user_lang) }}</td><td><span class="code">0x1c0</span></td><td><span class="code">448</span></td><td>{{ l10n("cpu.human.arm", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.arm64", "commons", user_lang) }}</td><td><span class="code">0xaa64</span></td><td><span class="code">43620</span></td><td>{{ l10n("cpu.human.arm64", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.arm64ec", "commons", user_lang) }}</td><td><span class="code">0xA641</span></td><td><span class="code">42561</span></td><td>{{ l10n("cpu.human.arm64ec", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.arm64x", "commons", user_lang) }}</td><td><span class="code">0xA64E</span></td><td><span class="code">42574</span></td><td>{{ l10n("cpu.human.arm64x", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.armnt", "commons", user_lang) }}</td><td><span class="code">0x1c4</span></td><td><span class="code">452</span></td><td>{{ l10n("cpu.human.armnt", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.axp64", "commons", user_lang) }}</td><td><span class="code">0x284</span></td><td><span class="code">644</span></td><td>{{ l10n("cpu.human.axp64", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.ebc", "commons", user_lang) }}</td><td><span class="code">0xebc</span></td><td><span class="code">3772</span></td><td>{{ l10n("cpu.human.ebc", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.i386", "commons", user_lang) }}</td><td><span class="code">0x14c</span></td><td><span class="code">332</span></td><td>{{ l10n("cpu.human.i386", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.ia64", "commons", user_lang) }}</td><td><span class="code">0x200</span></td><td><span class="code">512</span></td><td>{{ l10n("cpu.human.ia64", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.loongarch32", "commons", user_lang) }}</td><td><span class="code">0x6232</span></td><td><span class="code">25138</span></td><td>{{ l10n("cpu.human.loongarch32", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.loongarch64", "commons", user_lang) }}</td><td><span class="code">0x6264</span></td><td><span class="code">25188</span></td><td>{{ l10n("cpu.human.loongarch64", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.m32r", "commons", user_lang) }}</td><td><span class="code">0x9041</span></td><td><span class="code">36929</span></td><td>{{ l10n("cpu.human.m32r", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.mips16", "commons", user_lang) }}</td><td><span class="code">0x266</span></td><td><span class="code">614</span></td><td>{{ l10n("cpu.human.mips16", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.mipsfpu", "commons", user_lang) }}</td><td><span class="code">0x366</span></td><td><span class="code">870</span></td><td>{{ l10n("cpu.human.mipsfpu", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.mipsfpu16", "commons", user_lang) }}</td><td><span class="code">0x466</span></td><td><span class="code">1126</span></td><td>{{ l10n("cpu.human.mipsfpu16", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.powerpc", "commons", user_lang) }}</td><td><span class="code">0x1f0</span></td><td><span class="code">496</span></td><td>{{ l10n("cpu.human.powerpc", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.powerpcfp", "commons", user_lang) }}</td><td><span class="code">0x1f1</span></td><td><span class="code">497</span></td><td>{{ l10n("cpu.human.powerpcfp", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.r3000be", "commons", user_lang) }}</td><td><span class="code">0x160</span></td><td><span class="code">352</span></td><td>{{ l10n("cpu.human.r3000be", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.r3000", "commons", user_lang) }}</td><td><span class="code">0x162</span></td><td><span class="code">354</span></td><td>{{ l10n("cpu.human.r3000", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.r4000", "commons", user_lang) }}</td><td><span class="code">0x166</span></td><td><span class="code">358</span></td><td>{{ l10n("cpu.human.r4000", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.r10000", "commons", user_lang) }}</td><td><span class="code">0x168</span></td><td><span class="code">360</span></td><td>{{ l10n("cpu.human.r10000", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.riscv32", "commons", user_lang) }}</td><td><span class="code">0x5032</span></td><td><span class="code">20530</span></td><td>{{ l10n("cpu.human.riscv32", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.riscv64", "commons", user_lang) }}</td><td><span class="code">0x5064</span></td><td><span class="code">20580</span></td><td>{{ l10n("cpu.human.riscv64", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.riscv128", "commons", user_lang) }}</td><td><span class="code">0x5128</span></td><td><span class="code">20776</span></td><td>{{ l10n("cpu.human.riscv128", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.sh3", "commons", user_lang) }}</td><td><span class="code">0x1a2</span></td><td><span class="code">418</span></td><td>{{ l10n("cpu.human.sh3", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.sh3dsp", "commons", user_lang) }}</td><td><span class="code">0x1a3</span></td><td><span class="code">419</span></td><td>{{ l10n("cpu.human.sh3dsp", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.sh4", "commons", user_lang) }}</td><td><span class="code">0x1a6</span></td><td><span class="code">422</span></td><td>{{ l10n("cpu.human.sh4", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.sh5", "commons", user_lang) }}</td><td><span class="code">0x1a8</span></td><td><span class="code">424</span></td><td>{{ l10n("cpu.human.sh5", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.thumb", "commons", user_lang) }}</td><td><span class="code">0x1c2</span></td><td><span class="code">450</span></td><td>{{ l10n("cpu.human.thumb", "commons", user_lang) }}</td></tr>
<tr><td>{{ l10n("cpu.code.wcemipsv2", "commons", user_lang) }}</td><td><span class="code">0x169</span></td><td><span class="code">361</span></td><td>{{ l10n("cpu.human.wcemipsv2", "commons", user_lang) }}</td></tr>
</tbody>
</table>
</div>
</details>
</div>
</section>
<section class="mt-l mt-0-if-first">
{{ render_h2(l10n("output.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_paragraph("<b>" + l10n("output.default.title", project_id, user_lang) + "</b>")}}
<div class="ml-s">
{{ render_code_block([
"Command: pearch \"C:\\Windows\\explorer.exe\"",
"> STDOUT: AMD64",
"> STDERR:",
"> ERRORLEVEL: 0",
], "bash") }}
{{ render_code_block([
"Command: pearch \"C:\\Windows\\non-existant-file.exe\"",
"> STDOUT:",
"> STDERR: Cannot open file !",
"> ERRORLEVEL: 12",
], "bash") }}
</div>
</div>
<div class="content-spacer">
{{ render_paragraph("<b>" + l10n("output.options.title", project_id, user_lang) + "</b>")}}
<div class="ml-s">
{{ render_code_block([
"Command: pearch /AsHex \"C:\\Windows\\explorer.exe\"",
"> STDOUT: 8664",
"> STDERR:",
"> ERRORLEVEL: 0",
], "bash") }}
{{ render_code_block([
"Command: pearch /AsError \"C:\\Windows\\explorer.exe\"",
"> STDOUT:",
"> STDERR:",
"> ERRORLEVEL: 34404",
], "bash") }}
{{ render_code_block([
"Command: pearch /AsError /AsHex \"C:\\Windows\\explorer.exe\"",
"> STDOUT: 8664",
"> STDERR:",
"> ERRORLEVEL: 34404",
], "bash") }}
{{ render_code_block([
"Command: pearch /AsError /AsHex \"C:\\Windows\\non-existant-file.exe\"",
"> STDOUT:",
"> STDERR: Cannot open file !",
"> ERRORLEVEL: 0",
], "bash") }}
</div>
</div>
</section>
<section class="mt-l mt-0-if-first">
{{ 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("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.x64", "commons", user_lang) }}</td>
<td rowspan="2">{{ l10n("windows.7", "commons", user_lang) }}</td>
<td>
<a href="https://files.nibblepoker.lu/downloads/PEArch/1.1.0/x64-msvcrt/pearch-x64-msvcrt.7z" class="a-hidden mr-s">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>"+
"7Zip - 14.49 KiB<i class=\"fas fa-download ml-xs\"></i>",
False, None, "btn-primary")
}}
</a>
<a href="https://files.nibblepoker.lu/downloads/PEArch/1.1.0/x64-msvcrt/pearch.exe" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>"+
"Exe - 43.5 KiB<i class=\"fas fa-download ml-xs\"></i>",
False, None, "btn-primary")
}}
</a>
</td>
</tr>
<tr>
<td>{{ l10n("cpu.x86", "commons", user_lang) }}</td>
<td>
<a href="https://files.nibblepoker.lu/downloads/PEArch/1.1.0/x86-msvcrt/pearch-x86-msvcrt.7z" class="a-hidden mr-s">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>"+
"7Zip - 10.36 KiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
<a href="https://files.nibblepoker.lu/downloads/PEArch/1.1.0/x86-msvcrt/pearch.exe" class="a-hidden">
{{ render_button(
"<span class=\"text-monospace\"><i class=\"fad fa-file-archive mr-xs\"></i>"+
"Exe - 31 KiB<i class=\"fas fa-download ml-xs\"></i>",
False, None)
}}
</a>
</td>
</tr>
</tbody>
</table>
</div>
</section>
<section class="mt-l mt-0-if-first">
{{ render_h2(l10n("license.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_paragraph(l10n("license.text", project_id, user_lang)) }}
</div>
</section>
<section class="mt-l mt-0-if-first">
{{ render_h2(l10n("links.title", project_id, user_lang)) }}
<div class="content-spacer">
{{ render_list_ul([
"<a href=\"https://github.com/aziascreations/PEArch\">" +
l10n("github", "commons", user_lang) + "</a>",
]) }}
</div>
</section>
{% endblock %}

View File

@@ -1,3 +1,3 @@
User-agent: * User-agent: *
Allow: / Allow: /
Sitemap: https://nibblepoker.{{ domain_tld }}/sitemap.txt Sitemap: https://nibblepoker.{{ domain_tld }}/sitemap.xml

31
update.sh Normal file
View File

@@ -0,0 +1,31 @@
#!/bin/bash
cd "$(dirname "$0")"
EXCLUDE=("release.tar" "docker-compose.yml" "update.sh")
for item in * .*; do
# Skip current and parent directory entries
[[ "$item" == "." || "$item" == ".." ]] && continue
delete=true
for pattern in "${EXCLUDE[@]}"; do
if [[ "$item" == $pattern ]]; then
delete=false
break
fi
done
if [ "$delete" = true ]; then
echo "Deleting '$item'"
rm -rf "$item"
fi
done
tar -xvf release.tar
rm data/tools/ico-maker.yml
rm data/tools/png-analyser.yml
docker-compose up --build --force-recreate -d

View File

@@ -2,7 +2,8 @@ from flask import render_template
def render_file_input(input_id: str, multiple: bool, accept: str = None, def render_file_input(input_id: str, multiple: bool, accept: str = None,
upload_button: bool = False, clear_button: bool = False, user_lang: str = "") -> str: upload_button: bool = False, clear_button: bool = False,
user_lang: str = "", text_override: str = "") -> str:
return render_template( return render_template(
"elements/file-input.jinja", "elements/file-input.jinja",
file_input_id=input_id, file_input_id=input_id,
@@ -11,4 +12,5 @@ def render_file_input(input_id: str, multiple: bool, accept: str = None,
file_upload_button=upload_button, file_upload_button=upload_button,
file_clear_button=clear_button, file_clear_button=clear_button,
user_lang=user_lang, user_lang=user_lang,
text_override=text_override,
) )

View File

@@ -1,28 +1,65 @@
from dataclasses import dataclass
from .l10n.utils import ALLOWED_LANGS from .l10n.utils import ALLOWED_LANGS
import yaml import yaml
__SITEMAP_ENTRIES: list[str] = list()
@dataclass
class SitemapEntry:
lastmod: str
priority: str
changefreq: str = "monthly"
__SITEMAP_ENTRIES: dict[str, SitemapEntry] = dict()
__XML_SITEMAP_CACHE = None
def reload_sitemap_entries(definition_file: str) -> None: def reload_sitemap_entries(definition_file: str) -> None:
global __SITEMAP_ENTRIES global __SITEMAP_ENTRIES
__SITEMAP_ENTRIES = list() __SITEMAP_ENTRIES = dict()
with open(definition_file, 'r') as f: with open(definition_file, 'r') as f:
raw_sitemap_entries = yaml.safe_load(f) raw_sitemap_entries: dict = yaml.safe_load(f)["sitemap"]
for allowed_lang in [""] + ALLOWED_LANGS: for allowed_lang in [""] + ALLOWED_LANGS:
for sitemap_entry in raw_sitemap_entries: for sitemap_entry_path in raw_sitemap_entries:
__SITEMAP_ENTRIES.append(
("/" + str(allowed_lang) + "/" + str(sitemap_entry)) entry = SitemapEntry(**raw_sitemap_entries[sitemap_entry_path])
if not(allowed_lang == ""):
entry.priority = "0.0"
__SITEMAP_ENTRIES[
("/" + str(allowed_lang) + "/" + str(sitemap_entry_path))
.replace("//", "/") .replace("//", "/")
.replace("//", "/") .replace("//", "/")
) ] = entry
# __SITEMAP_ENTRIES.append(sitemap_entry)
# for allowed_lang in ALLOWED_LANGS:
def get_sitemap_entries() -> list[str]: def get_sitemap_entries() -> list[str]:
return __SITEMAP_ENTRIES return list(__SITEMAP_ENTRIES.keys())
def get_sitemap_xml(domain) -> str:
global __XML_SITEMAP_CACHE
if __XML_SITEMAP_CACHE is None:
__XML_SITEMAP_CACHE = (
"""<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">""" +
"".join([
f"""
<url>
<loc>https://{domain}{k}</loc>
<lastmod>{v.lastmod}</lastmod>
<priority>{v.priority}</priority>
<changefreq>{v.changefreq}</changefreq>
</url>"""
for k, v in __SITEMAP_ENTRIES.items()
]) +
"\n</urlset>").replace(" <priority>0.0</priority>\n ", "")
return __XML_SITEMAP_CACHE