Merge pull request #1 from aziascreations/refactor-v2
33
.gitignore
vendored
@@ -1,18 +1,37 @@
|
||||
# IDE-related folders
|
||||
.idea/
|
||||
|
||||
# Node.JS
|
||||
node_modules/
|
||||
package-lock.json
|
||||
|
||||
# Static resources
|
||||
resources/DecimalJs/
|
||||
resources/DecimalJsLight/
|
||||
resources/FontAwesomePro/
|
||||
resources/HighlightJS/
|
||||
*.exe
|
||||
*.url
|
||||
resources/GliderJs/
|
||||
resources/PlotlyJs/
|
||||
|
||||
# Compiled Stuff
|
||||
*.min.php
|
||||
*.min.js
|
||||
commons/strings.json
|
||||
resources/NibblePoker/css/*.css
|
||||
tools/items/formula-wizard/*.js
|
||||
tools/items/formula-wizard/src/*.js
|
||||
|
||||
# Others
|
||||
*.pdn
|
||||
*.min.json
|
||||
*.lnk
|
||||
tmp/
|
||||
resources/Azias/css/*.css
|
||||
resources/Azias/css/*.map
|
||||
resources/Azias/sass/**.css
|
||||
resources/Azias/sass/**.map
|
||||
*.map
|
||||
*.bak
|
||||
*.exe
|
||||
*.url
|
||||
*.env
|
||||
|
||||
# Temporary
|
||||
articles/*.txt
|
||||
commons/strings/_*/
|
||||
*.ogg
|
||||
|
116
.htaccess
@@ -1,84 +1,112 @@
|
||||
# Prevent access to .htaccess
|
||||
# Preventing access to .htaccess
|
||||
<Files ~ "^.*\.([Hh][Tt][Aa]|[Pp][Yy])">
|
||||
Require all denied
|
||||
</Files>
|
||||
|
||||
|
||||
# Redirecting HTTP traffic to HTTPS. (Keep commented on localhost !)
|
||||
# This is handled by other services, but it should still be enabled in production just to be safe.
|
||||
# This is handled by reverse-proxies, but it should still be enabled in production just to be safe.
|
||||
#RewriteEngine On
|
||||
#RewriteCond %{SERVER_PORT} 80
|
||||
#RewriteRule ^(.*)$ https://nibblepoker.lu/$1 [R,L]
|
||||
|
||||
|
||||
# Fixing some encoding issues on non-HTML files.
|
||||
# Mostly affects the old privacy policies written in french. (Accents have issues in non-utf8 encodings !)
|
||||
AddCharset utf-8 .css .txt .js .md .ts .mjs
|
||||
#<Files ~ "\.txt?$">
|
||||
# Header set Content-Type "text/plain; charset=utf-8"
|
||||
#</Files>
|
||||
#AddDefaultCharset utf-8
|
||||
|
||||
|
||||
# Adding MIME types
|
||||
AddType text/typescript .ts
|
||||
AddType text/javascript .js
|
||||
AddType text/javascript .mjs
|
||||
AddType application/wasm .wasm
|
||||
AddType video/x-matroska mkv
|
||||
|
||||
|
||||
# Correcting some default options for security and language/content redirection.
|
||||
# FollowSymlinks is also on since it's required for "mod_rewrite" and the server is jailed.
|
||||
# FollowSymlinks is also on since it's required for "mod_rewrite" and the server is jailed/containerized.
|
||||
Options -Indexes +FollowSymlinks -ExecCGI
|
||||
|
||||
# Does nothing, thanks Apache...
|
||||
ServerSignature Off
|
||||
|
||||
# Custom error pages.
|
||||
ErrorDocument 403 /403.php
|
||||
ErrorDocument 404 /404.php
|
||||
|
||||
# Setting up browser's caching rules
|
||||
# Serving minified pages and/or pre-rendered ones first if available.
|
||||
DirectoryIndex index.min.html index.min.php index.php index.html
|
||||
|
||||
|
||||
# Custom error pages.
|
||||
ErrorDocument 403 /error.php
|
||||
ErrorDocument 404 /error.php
|
||||
|
||||
|
||||
# Setting up browser's caching rules.
|
||||
# See:
|
||||
# * https://stackoverflow.com/a/13029007
|
||||
# * https://www.a2hosting.com/kb/developer-corner/apache-web-server/turning-off-caching-using-htaccess
|
||||
|
||||
# Default: 12 hours
|
||||
Header set Cache-Control "max-age=43200, public, must-revalidate"
|
||||
##Header set Cache-Control "max-age=43200, public, must-revalidate"
|
||||
|
||||
<FilesMatch "\.(?i:gif|jpe?g|png|ico|svg|woff2|otf)$">
|
||||
# Static files: 1 Week
|
||||
# Static files: 1 Week
|
||||
<FilesMatch "\.(?i:gif|jpe?g|png|ico|svg|woff2|ttf|woff|otf)$">
|
||||
Header set Cache-Control "max-age=604800, public, must-revalidate"
|
||||
</FilesMatch>
|
||||
<FilesMatch "\.(?i:css|js)$">
|
||||
# Semi-static files: 1 Day
|
||||
Header set Cache-Control "max-age=86400, public, must-revalidate"
|
||||
</FilesMatch>
|
||||
|
||||
# Semi-static files: 1 Day
|
||||
##<FilesMatch "\.(?i:css|js|mjs)$">
|
||||
## Header set Cache-Control "max-age=86400, public, must-revalidate"
|
||||
##</FilesMatch>
|
||||
|
||||
# Disabling some caching rules for debugging
|
||||
#Header set Pragma "no-cache"
|
||||
#Header set Expires 0
|
||||
|
||||
|
||||
# Setting up GZIP.
|
||||
# It's optional since reverse-proxies or caching layers will usually do it for us.
|
||||
<ifModule mod_gzip.c>
|
||||
mod_gzip_on Yes
|
||||
mod_gzip_dechunk Yes
|
||||
mod_gzip_item_include file \.(html?|txt|css|js|mjs|php|pl)$
|
||||
mod_gzip_item_include handler ^cgi-script$
|
||||
mod_gzip_item_include mime ^text/.*
|
||||
mod_gzip_item_include mime ^application/x-javascript.*
|
||||
mod_gzip_item_exclude mime ^image/.*
|
||||
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
|
||||
</ifModule>
|
||||
|
||||
|
||||
# Setting some headers for security.
|
||||
Header always set X-Detected-Country "NK"
|
||||
# Will cause "fail-safe crashes" if the "headers" module isn't enabled.
|
||||
Header always set X-Frame-Options "deny"
|
||||
Header always set Content-Security-Policy "default-src 'self' files.nibblepoker.lu; object-src 'none'; child-src 'self'; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content"
|
||||
# Header always set Content-Security-Policy "default-src 'self' files.nibblepoker.lu; img-src 'self' files.nibblepoker.lu data:; object-src 'none'; child-src 'self'; frame-ancestors 'none'; upgrade-insecure-requests; block-all-mixed-content"
|
||||
Header always set X-XSS-Protection " 1; mode=block"
|
||||
Header always set Referrer-Policy "no-referrer"
|
||||
Header always set X-Content-Type-Options "nosniff"
|
||||
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
|
||||
#Header always set Cache-Control "max-age=300, public"
|
||||
Header always set Access-Control-Allow-Origin "*"
|
||||
Header always set Permissions-Policy "browsing-topics=(), interest-cohort=()"
|
||||
|
||||
# Removing some headers since they often raise BS alarms about too much back-end info being sent to clients.
|
||||
# Note: These headers can actually be removed by most reverse-proxies.
|
||||
Header unset X-Powered-By
|
||||
Header always set X-Powered-By "Amiga 1200, Kickstart 3.1"
|
||||
|
||||
|
||||
# Handling all other redirections.
|
||||
# Will cause "fail-safe crashes" if the "rewrite" module isn't enabled.
|
||||
RewriteEngine On
|
||||
|
||||
# Languages. (Does not work with a regex)
|
||||
RewriteRule ^en/(.*)$ /$1 [QSA]
|
||||
RewriteRule ^fr/(.*)$ /$1 [QSA]
|
||||
RewriteRule ^lb/(.*)$ /$1 [QSA]
|
||||
# Serving normal pages when a specific language key is at the beginning of the requested path.
|
||||
# We use a regex to match all supported languages and use the 3rd ground, `(.*)` as `$3`, as the "real" path.
|
||||
RewriteRule ^((en|fr)/)(.*)$ /$3 [QSA]
|
||||
|
||||
# Honeypots. (Just to fuck with automated scanners, gotta love those unsolicited emails tho...)
|
||||
|
||||
# Sending a 404 for git and IDEs folders just in case they ever get copied to the web server,
|
||||
# or if one of the honeypot files is acessed directly.
|
||||
# A 404 is preferred to prevent further scanning of this folder and from raising some flags.
|
||||
# FIXME: These rules break the later honeypot rules !!!
|
||||
#RedirectMatch 404 ^.*\.?(git|vs(code)|idea).*
|
||||
#RedirectMatch 404 ^.*honeypot.*
|
||||
|
||||
# Internal redirections for scanning and exploit attempts.
|
||||
# These rules are here since they're easier to implement in the .htaccess.
|
||||
#RewriteRule ^.*(install|xmlrpc)\.php.*$ /honeypot/file-php.php [QSA]
|
||||
#RewriteRule ^.*\.xml.*$ /honeypot/file-xml.php [QSA]
|
||||
#RewriteRule ^.*wlwmanifest\.xml.*$ /honeypot/file-xml-wlwmanifest.php [QSA]
|
||||
#RewriteRule ^.*\.env.*$ /honeypot/file-env.php [QSA]
|
||||
#RewriteRule ^.*(ap(i|p.*)|cms|sit[eo]|shop.*|wp.*).*$ /honeypot/folder.php [QSA]
|
||||
|
||||
# Cases left to handle:
|
||||
# * /wp-admin/post.php?id=whatever
|
||||
# * /public /vendor /storage
|
||||
# * //vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
|
||||
|
||||
# TODO: Implement bee-movie themed tarpit once I have a rate-limiting solution in place !
|
||||
# Handling requests for "robots.txt" and "sitemap.txt" via PHP.
|
||||
RewriteRule ^(en/|fr/)?robots.txt$ robots.php [L]
|
||||
RewriteRule ^(en/|fr/)?sitemap.txt$ sitemap.php [L]
|
||||
|
83
403.php
@@ -1,83 +0,0 @@
|
||||
<?php
|
||||
set_include_path('./commons/');
|
||||
include_once 'config.php';
|
||||
include_once 'langs.php';
|
||||
include_once 'modals.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo($user_language); ?>">
|
||||
<head>
|
||||
<?php include 'headers.php'; ?>
|
||||
<title><?php print(localize('error.403.title')); ?> - Nibble Poker</title>
|
||||
<meta name="description" content="<?php print(localize('error.403.description')); ?>">
|
||||
<meta property="og:title" content="Nibble Poker - <?php print(localize('error.403.title')); ?>" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="<?php echo($host_uri); ?>/" />
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/Azias/logos/opengraph.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="<?php print(localize('error.403.description')); ?>"/>
|
||||
</head>
|
||||
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-sidebar-shortcut-enabled="true">
|
||||
<?php
|
||||
$debuggingText = "Referrer: " . (
|
||||
array_key_exists('HTTP_REFERER', $_SERVER) ? htmlspecialchars($_SERVER['HTTP_REFERER']) : "<i>Not present in request !</i>"
|
||||
) . "<br>";
|
||||
$debuggingText .= "<br>TODO: Add more info once the cache is properly configured for 4xx errors !";
|
||||
add_code_modal(
|
||||
"http-error",
|
||||
localize('modal.title.debugging'),
|
||||
$debuggingText
|
||||
);
|
||||
include 'body-root.php';
|
||||
?>
|
||||
<div class="page-wrapper with-sidebar with-navbar-fixed-bottom">
|
||||
<?php include 'sidebar.php'; ?>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div id="page-title-bar" class="card p-0 pl-20 m-0 square-corners bg-very-dark title-bkgd navbar">
|
||||
<h2 class="content-title font-size-24 mt-20 text-truncate">
|
||||
<i class="fad fa-exclamation-triangle"></i> <?php print(localize('error.4xx.title')); ?>
|
||||
</h2>
|
||||
<?php include 'header-lang.php'; ?>
|
||||
</div>
|
||||
<div class="content mx-auto w-lg-p90">
|
||||
<div class="card p-0 m-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-1 text-center"><i class="fad fa-exclamation-triangle"></i></div>
|
||||
<div class="col-10 text-center">
|
||||
<h2 class="card-title font-size-18 m-0"><?php print(localize("error.403.title")); ?></h2>
|
||||
</div>
|
||||
<div class="col-1 text-center"><i class="fad fa-exclamation-triangle"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-20 bg-light-lm rounded-bottom bg-very-dark title-bkgd text-center">
|
||||
<p class="font-size-18 m-0 font-weight-semi-bold">
|
||||
<?php print(localize("error.403.description")); ?>
|
||||
</p>
|
||||
<hr class="my-15">
|
||||
<p class="font-size-14 m-0"><!--no hr => mt-lg-10 mt-lg-5-->
|
||||
<?php print(localize("error.403.explanation")); ?>
|
||||
</p>
|
||||
<!--<hr class="my-20">
|
||||
<a href="/" class="js-set-previous-url">
|
||||
<button class="btn btn-primary" type="button">Go back to previous page</button>
|
||||
</a>-->
|
||||
<a href="#<?php echo(get_modal_id("http-error")); ?>">
|
||||
<div class="container-card-fold secondary">
|
||||
<i class="fad fa-bug"></i>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include 'footer.php'; ?>
|
||||
</div>
|
||||
<script src="/resources/HalfMoon/1.1.1/js/halfmoon.min.js"></script>
|
||||
<script src="/resources/Azias/js/nibblepoker.lu.js"></script>
|
||||
</body>
|
||||
</html>
|
83
404.php
@@ -1,83 +0,0 @@
|
||||
<?php
|
||||
set_include_path('./commons/');
|
||||
include_once 'config.php';
|
||||
include_once 'langs.php';
|
||||
include_once 'modals.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo($user_language); ?>">
|
||||
<head>
|
||||
<?php include 'headers.php'; ?>
|
||||
<title><?php print(localize('error.404.title')); ?> - Nibble Poker</title>
|
||||
<meta name="description" content="<?php print(localize('error.404.description')); ?>">
|
||||
<meta property="og:title" content="Nibble Poker - <?php print(localize('error.404.title')); ?>" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="<?php echo($host_uri); ?>/" />
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/Azias/logos/opengraph.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="<?php print(localize('error.404.description')); ?>"/>
|
||||
</head>
|
||||
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-sidebar-shortcut-enabled="true">
|
||||
<?php
|
||||
$debuggingText = "Referrer: " . (
|
||||
array_key_exists('HTTP_REFERER', $_SERVER) ? htmlspecialchars($_SERVER['HTTP_REFERER']) : "<i>Not present in request !</i>"
|
||||
) . "<br>";
|
||||
$debuggingText .= "<br>TODO: Add more info once the cache is properly configured for 4xx errors !";
|
||||
add_code_modal(
|
||||
"http-error",
|
||||
localize('modal.title.debugging'),
|
||||
$debuggingText
|
||||
);
|
||||
include 'body-root.php';
|
||||
?>
|
||||
<div class="page-wrapper with-sidebar with-navbar-fixed-bottom">
|
||||
<?php include 'sidebar.php'; ?>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div id="page-title-bar" class="card p-0 pl-20 m-0 square-corners bg-very-dark title-bkgd navbar">
|
||||
<h2 class="content-title font-size-24 mt-20 text-truncate">
|
||||
<i class="fad fa-exclamation-triangle"></i> <?php print(localize('error.4xx.title')); ?>
|
||||
</h2>
|
||||
<?php include 'header-lang.php'; ?>
|
||||
</div>
|
||||
<div class="content mx-auto w-lg-p90">
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-1 text-center"><i class="fad fa-exclamation-triangle"></i></div>
|
||||
<div class="col-10 text-center">
|
||||
<h3 class="card-title font-size-18 m-0"><?php print(localize("error.404.title")); ?></h3>
|
||||
</div>
|
||||
<div class="col-1 text-center"><i class="fad fa-exclamation-triangle"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-20 bg-light-lm rounded-bottom bg-very-dark title-bkgd text-center">
|
||||
<p class="font-size-18 m-0 font-weight-semi-bold">
|
||||
<?php print(localize("error.404.description")); ?>
|
||||
</p>
|
||||
<hr class="my-15">
|
||||
<p class="font-size-14 m-0"><!--no hr => mt-lg-10 mt-lg-5-->
|
||||
<?php print(localize("error.404.explanation")); ?>
|
||||
</p>
|
||||
<!--<hr class="my-20">
|
||||
<a href="/" class="js-set-previous-url">
|
||||
<button class="btn btn-primary" type="button">Go back to previous page</button>
|
||||
</a>-->
|
||||
<a href="#<?php echo(get_modal_id("http-error")); ?>">
|
||||
<div class="container-card-fold secondary">
|
||||
<i class="fad fa-bug"></i>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include 'footer.php'; ?>
|
||||
</div>
|
||||
<script src="/resources/HalfMoon/1.1.1/js/halfmoon.min.js"></script>
|
||||
<script src="/resources/Azias/js/nibblepoker.lu.js"></script>
|
||||
</body>
|
||||
</html>
|
155
about/index.php
Normal file
@@ -0,0 +1,155 @@
|
||||
<?php
|
||||
$start_time = microtime(true);
|
||||
set_include_path('../');
|
||||
include_once 'commons/config.php';
|
||||
include_once 'commons/langs.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo($user_language); ?>">
|
||||
<head>
|
||||
<?php include 'commons/DOM/head.php'; ?>
|
||||
<title><?php print(localize('about.head.title')); ?></title>
|
||||
<meta name="description" content="<?php print(localize('about.head.description')); ?>">
|
||||
<meta property="og:title" content="<?php print(localize('about.og.title')); ?>"/>
|
||||
<meta property="og:type" content="website"/>
|
||||
<meta property="og:url" content="<?php echo($host_uri . l10n_url_abs('/about/')); ?>"/>
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/NibblePoker/images/logos/v2_opengraph_v2.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="<?php print(localize('about.og.description')); ?>"/>
|
||||
</head>
|
||||
<body>
|
||||
<?php
|
||||
include_once 'commons/DOM/utils.php';
|
||||
$SIDEBAR_IDS = ['about'];
|
||||
include 'commons/DOM/sidebar.php';
|
||||
?>
|
||||
<header class="w-full p-m pl-s">
|
||||
<h1 class="t-size-17 t-w-500">
|
||||
<i class="fad fa-user t-size-16 mr-s t-muted"></i><?php print(localize("about.header.title")); ?>
|
||||
</h1>
|
||||
<?php include 'commons/DOM/header-lang.php'; ?>
|
||||
</header>
|
||||
<main id="main" class="rl-m border border-r-0 p-l">
|
||||
|
||||
<?php printMainHeader(localize("about.intro.title")); ?>
|
||||
<img src="/resources/NibblePoker/images/about/profile-pic.jpg" alt="" class="r-r img-profile f-right m-xs ml-xxs" draggable="false">
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize("about.intro.text.01")); ?><br>
|
||||
<?php print(localize("about.intro.text.02")); ?>
|
||||
</p>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize("about.intro.text.10")); ?><br>
|
||||
<?php print(localize("about.intro.text.11")); ?>
|
||||
</p>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize("about.intro.text.20")); ?><br>
|
||||
<?php print(localize("about.intro.text.21")); ?>
|
||||
</p>
|
||||
|
||||
<?php printSubHeader(localize("about.tenets.title")); ?>
|
||||
<p class="mt-xs ml-s t-bold">
|
||||
<!-- TODO: This section -->
|
||||
TODO
|
||||
</p>
|
||||
|
||||
<?php printSubHeader(localize("about.future.title")); ?>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize("about.future.text.01")); ?><br>
|
||||
<?php print(localize("about.future.text.02")); ?>
|
||||
</p>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize("about.future.text.10")); ?>
|
||||
</p>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize("about.future.text.20")); ?>
|
||||
</p>
|
||||
|
||||
<?php printSubHeader(localize("about.financing.title")); ?>
|
||||
<p class="mt-xxs ml-s">
|
||||
<?php print(localize("about.financing.text.01")); ?><br>
|
||||
<?php print(localize("about.financing.text.02")); ?>
|
||||
</p>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize("about.financing.text.10")); ?>
|
||||
</p>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize("about.financing.text.20")); ?><br>
|
||||
<?php print(localize("about.financing.text.21")); ?>
|
||||
</p>
|
||||
<table class="stylish r-s border o-hidden table-p-xs table-h-p-s table-v-center mt-xs mx-s">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php print(localize("about.financing.part.service")); ?></th>
|
||||
<th><?php print(localize("about.financing.part.cost.yearly")); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><?php print(localize("about.financing.part.domain.lu")); ?></td>
|
||||
<td><?php print(number_format(17,2, $lang_number_decimal, $lang_number_thousands)); ?> €</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php print(localize("about.financing.part.domain.com")); ?></td>
|
||||
<td><?php print(number_format(14.5,2, $lang_number_decimal, $lang_number_thousands)); ?> €</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php print(localize("about.financing.part.proxy.europe")); ?></td>
|
||||
<td><?php print(number_format(14.5,2, $lang_number_decimal, $lang_number_thousands)); ?> €</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php print(localize("about.financing.part.emails")); ?></td>
|
||||
<td><?php print(number_format(14.4,2, $lang_number_decimal, $lang_number_thousands)); ?> €</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php print(localize("about.financing.part.electricity")); ?></td>
|
||||
<td>±<?php print(number_format(30,2, $lang_number_decimal, $lang_number_thousands)); ?> €</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b class="f-right"><?php print(localize("about.financing.part.cost.yearly.total")); ?>:</b></td>
|
||||
<td>±<?php print(number_format(
|
||||
16.93 + 14.5 + 14.52 + 14.4 + 30,
|
||||
2, $lang_number_decimal, $lang_number_thousands)
|
||||
); ?> €
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="mt-xxs ml-s t-super-muted">
|
||||
<?php print(localize("about.financing.text.isp")); ?>
|
||||
</p>
|
||||
<table class="stylish r-s border o-hidden table-p-xs table-h-p-s table-v-center mt-xxs mx-s mb-xs">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php print(localize("about.financing.part.equipment")); ?></th>
|
||||
<th><?php print(localize("about.financing.part.cost")); ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><?php print(localize("about.financing.part.nanopir4s")); ?></td>
|
||||
<td>±<?php print(number_format(80,2, $lang_number_decimal, $lang_number_thousands)); ?> €</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><?php print(localize("about.financing.part.storage")); ?></td>
|
||||
<td>±<?php print(number_format(10,2, $lang_number_decimal, $lang_number_thousands)); ?> €</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b class="f-right"><?php print(localize("about.financing.part.cost.total")); ?>:</b></td>
|
||||
<td>±<?php print(number_format(90, 2, $lang_number_decimal, $lang_number_thousands)); ?> €
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</main>
|
||||
<?php
|
||||
include 'commons/DOM/footer.php';
|
||||
include 'commons/DOM/scripts.php';
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
$end_time = microtime(true);
|
||||
if($print_execution_timer) {
|
||||
echo("<!-- PHP execution took " . round(($end_time - $start_time) * 1000, 2) . " ms -->");
|
||||
}
|
||||
?>
|
3
articles/articles.json
Normal file
@@ -0,0 +1,3 @@
|
||||
[
|
||||
|
||||
]
|
24
clean.bat
Normal file
@@ -0,0 +1,24 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
:: Going into the script's directory
|
||||
cd /D "%~dp0"
|
||||
|
||||
:main
|
||||
echo.
|
||||
echo Cleaning up the project
|
||||
echo -----------------------
|
||||
|
||||
:php-clean
|
||||
echo Clearing old minified PHP files...
|
||||
pushd %CD%
|
||||
for /r "%CD%" %%F in (*.min.php) do (
|
||||
echo ^> Deleting "%%F"
|
||||
del "%%F"
|
||||
)
|
||||
echo ^> Done ^!
|
||||
popd
|
||||
|
||||
:end
|
||||
:: FIXME: Won't this close the terminal when not called ?
|
||||
exit /b
|
23
commons/DOM/footer.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
|
||||
include_once 'commons/langs.php';
|
||||
?>
|
||||
<footer class="d-flex flex-align-center w-full p-s py-xs">
|
||||
<button id="sidebar-toggle-footer" class="p-xs border r-s t-size-10" aria-label="<?php echo(localize("footer.alt.sidebar.button")); ?>">
|
||||
<i class="fa fa-bars px-xxs" aria-hidden="true"></i>
|
||||
</button>
|
||||
<p class="flex-fill t-center t-size-10 t-w-500 t-muted">
|
||||
<a class="bland-link" href="<?php print(l10n_url_abs('/privacy/')); ?>">
|
||||
<?php print(localize('footer.text.privacy')); ?>
|
||||
</a>
|
||||
</p>
|
||||
<a href="<?php print(l10n_url_abs('/')); ?>">
|
||||
<img id="logo-footer" src="/resources/NibblePoker/images/logos/v2_full_unshaded_original.svg"
|
||||
alt="<?php echo(localize("footer.alt.logo")); ?>" draggable="false">
|
||||
</a>
|
||||
</footer>
|
6
commons/DOM/head-preloads.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
if($enable_kitty_and_doggo_sounds) {
|
||||
echo('<link rel="prefetch" as="audio" href="/resources/NibblePoker/sounds/meow-test-01.ogg">');
|
||||
echo('<link rel="prefetch" as="audio" href="/resources/NibblePoker/sounds/meow-test-02.ogg">');
|
||||
}
|
||||
?>
|
23
commons/DOM/head.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
?>
|
||||
<meta charset="utf-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
|
||||
<meta name="viewport" content="width=device-width"/>
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<link rel="alternate icon" href="/favicon.ico">
|
||||
<link rel="stylesheet" href="/resources/FontAwesomePro/5.15.3/css/all.min.css">
|
||||
<link rel="stylesheet" href="/resources/NibblePoker/css/nibblepoker.min.css?v=1">
|
||||
<?php
|
||||
if($enable_code_highlight) {
|
||||
echo('<link href="/resources/HighlightJS/11.6.0/styles/atom-one-dark.min.css" rel="stylesheet"/>');
|
||||
}
|
||||
if($enable_glider) {
|
||||
echo('<link href="/resources/GliderJs/1.7.6/glider.min.css" rel="stylesheet"/>');
|
||||
}
|
||||
?>
|
26
commons/DOM/header-lang.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
?>
|
||||
<details id="lang-selector" class="border p-mxs px-s bkgd-blank-dark r-m">
|
||||
<summary>
|
||||
<i class="fad fa-language"></i>
|
||||
<span class="mobile-hide t-w-500"> <?php print(localize("lang.menu.title")); ?></span>
|
||||
<i class="fa fa-angle-down"></i>
|
||||
</summary>
|
||||
<div class="p-xs border bkgd-surround r-m t-w-500">
|
||||
<a href="<?php echo(l10n_url_switch('en')); ?>" class="bland-link">
|
||||
<p class="mb-s px-xxs"><?php print(localize("lang.english")); ?></p>
|
||||
</a>
|
||||
<a href="<?php echo(l10n_url_switch('fr')); ?>" class="bland-link">
|
||||
<p class="my-s px-xxs"><?php print(localize("lang.french")); ?></p>
|
||||
</a>
|
||||
<hr class="subtle m-0">
|
||||
<a href="<?php echo(l10n_url_switch(NULL)); ?>" class="bland-link">
|
||||
<p class="mt-xs px-xxs"><?php print(localize("lang.automatic")); ?></p>
|
||||
</a>
|
||||
</div>
|
||||
</details>
|
29
commons/DOM/scripts.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
|
||||
if($enable_glider) {
|
||||
echo('<script src="/resources/GliderJs/1.7.6/glider.min.js"></script>');
|
||||
}
|
||||
|
||||
if($enable_code_highlight) {
|
||||
echo('<script src="/resources/HighlightJS/11.6.0/highlight.min.js"></script>');
|
||||
echo('<script src="/resources/HighlightJS/11.6.0/languages/csharp.min.js"></script>');
|
||||
}
|
||||
?>
|
||||
<script src="/resources/NibblePoker/js/nibblepoker.min.js"></script>
|
||||
<?php
|
||||
if($enable_glider) {
|
||||
// FIXME: Find out why the minified version is broken. (Only displays 1 pic per scroll position)
|
||||
echo('<script src="/resources/NibblePoker/js/nibblepoker-glider.js"></script>');
|
||||
}
|
||||
if($enable_code_highlight) {
|
||||
echo('<script src="/resources/NibblePoker/js/nibblepoker-code.min.js"></script>');
|
||||
}
|
||||
if($enable_kitty_and_doggo_sounds) {
|
||||
echo('<script src="/resources/NibblePoker/js/nibblepoker-contributors.min.js"></script>');
|
||||
}
|
||||
?>
|
68
commons/DOM/sidebar.php
Normal file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
|
||||
include_once 'commons/langs.php';
|
||||
|
||||
if(!isset($SIDEBAR_IDS)) {
|
||||
$SIDEBAR_IDS = [];
|
||||
}
|
||||
|
||||
function printSidebarEntry($url, $title, $icon, $activeId) {
|
||||
global $SIDEBAR_IDS;
|
||||
echo('<a class="' . (in_array($activeId, $SIDEBAR_IDS) ? 'text-link' : 'bland-link') . '" href="' . $url . '">');
|
||||
echo('<p class="t-size-18 t-w-500 py-xs sidebar-entry">');
|
||||
echo('<i class="' . $icon . ' pr-xs t-size-12 t-half-muted"></i><span class="t-size-12">' . $title . '</span></p></a>');
|
||||
}
|
||||
|
||||
?>
|
||||
<nav id="sidebar" class="sidebar p-m pt-l">
|
||||
<a href="<?php print(l10n_url_abs('/')); ?>" class="no-select">
|
||||
<img id="logo-sidebar" src="/resources/NibblePoker/images/logos/v2_full_unshaded_original.svg"
|
||||
alt="<?php echo(localize("sidebar.alt.logo")); ?>" draggable="false">
|
||||
</a>
|
||||
<p class="quantum t-logo-text mb-s mt-xs t-muted ucase">
|
||||
N<span class="t-super-muted">ibble</span>P<span class="t-super-muted">oker</span>
|
||||
</p>
|
||||
<hr class="subtle">
|
||||
<?php
|
||||
printSidebarEntry(l10n_url_abs('/'), localize("sidebar.text.home"), "fad fa-home", "home");
|
||||
//printSidebarEntry(l10n_url_abs('/shop'), localize("sidebar.text.shop"), "fad fa-shopping-cart", "shop");
|
||||
//printSidebarEntry(l10n_url_abs('/school'), localize("sidebar.text.school"), "fad fa-chalkboard-teacher", "school");
|
||||
?>
|
||||
<hr class="subtle">
|
||||
<?php
|
||||
printSidebarEntry(l10n_url_abs('/content/'), localize("sidebar.text.projects"), "fad fa-briefcase", "content");
|
||||
?>
|
||||
<div class="ml-m">
|
||||
<?php
|
||||
printSidebarEntry(l10n_url_abs('/content/?tags=application'), localize("sidebar.text.applications"), "fad fa-browser", "application");
|
||||
printSidebarEntry(l10n_url_abs('/content/?tags=library'), localize("sidebar.text.libraries"), "fad fa-puzzle-piece", "library");
|
||||
printSidebarEntry(l10n_url_abs('/content/?tags=electronic'), localize("sidebar.text.electronics"), "fad fa-microchip", "electronic");
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
//<hr class="subtle">
|
||||
//printSidebarEntry(l10n_url_abs('/tools/'), localize("sidebar.text.tools"), "fad fa-tools", "tools");
|
||||
?>
|
||||
<hr class="subtle">
|
||||
<?php
|
||||
printSidebarEntry(l10n_url_abs('/links/'), localize("sidebar.text.links"), "fad fa-link", "links");
|
||||
?>
|
||||
<div class="ml-m">
|
||||
<?php
|
||||
printSidebarEntry("https://files.nibblepoker.lu/", localize("sidebar.text.downloads"), "fad fa-download", "");
|
||||
printSidebarEntry("https://git.nibblepoker.lu/", localize("sidebar.text.gitea"), "fad fa-code", "");
|
||||
//printSidebarEntry("https://wiki.nibblepoker.lu/", localize("sidebar.text.wiki"), "fad fa-books", "");
|
||||
?>
|
||||
</div>
|
||||
<hr class="subtle">
|
||||
<?php
|
||||
printSidebarEntry(l10n_url_abs('/about/'), localize("sidebar.text.about"), "fad fa-user", "about");
|
||||
//printSidebarEntry(l10n_url_abs('/contributors/'), localize("sidebar.text.contributors"), "fad fa-users", "contributors");
|
||||
printSidebarEntry(l10n_url_abs('/contact/'), localize("sidebar.text.contact"), "fad fa-mailbox", "contact");
|
||||
?>
|
||||
</nav>
|
81
commons/DOM/utils.php
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if (basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
|
||||
// Used by 'printMainHeader()'.
|
||||
$_npDomUtilsHeadingCount = 0;
|
||||
|
||||
function getMainHeader(string $text, ?string $iconId = null, ?string $rightText = null, ?string $anchorId = null,
|
||||
bool $addTopMargin = true, ?string $backgroundClass = "bkgd-grid", int $hLevel = 2,
|
||||
bool $autoWidth = false, bool $chungusMode = false, bool $makeSmaller = false): string {
|
||||
if(is_null($backgroundClass)) {
|
||||
$backgroundClass = "bkgd-grid";
|
||||
}
|
||||
|
||||
$htmlCode = "";
|
||||
|
||||
if(!is_null($anchorId)) {
|
||||
$htmlCode .= '<a class="bland-link" href="#' . $anchorId . '">';
|
||||
}
|
||||
|
||||
$htmlCode .= '<div class="heading-main p-xs border r-s ' . ($addTopMargin > 0 ? "mt-l " : "") . $backgroundClass .
|
||||
($autoWidth ? " d-inline-block" : "") . '"><h' . $hLevel . ' class="t-w-500 ' .
|
||||
($chungusMode ? "t-size-16" : ($makeSmaller ? "t-size-11" : "t-size-14")) . '">';
|
||||
|
||||
// TODO: Add a simple and nicer divider.
|
||||
if(!is_null($iconId)) {
|
||||
$htmlCode .= '<i class="' . $iconId . ' t-muted ' . ($chungusMode ? "t-size-14" : "t-size-12") . '"></i>';
|
||||
}
|
||||
|
||||
$htmlCode .= $text;
|
||||
|
||||
if(!is_null($rightText)) {
|
||||
$htmlCode .= '<span class="ml-auto mobile-hide ' . ($chungusMode ? "t-size-12 mr-xs" : "t-size-10 t-muted") . '">' . $rightText . '</span>';
|
||||
}
|
||||
|
||||
$htmlCode .= '</h' . $hLevel . '></div>';
|
||||
|
||||
if(!is_null($anchorId)) {
|
||||
$htmlCode .= '</a>';
|
||||
}
|
||||
|
||||
return $htmlCode;
|
||||
}
|
||||
|
||||
function printMainHeader(string $text, ?string $iconId = null, ?string $rightText = null, ?string $anchorId = null,
|
||||
?string $backgroundClass = "bkgd-grid"): void {
|
||||
global $_npDomUtilsHeadingCount;
|
||||
$_npDomUtilsHeadingCount++;
|
||||
echo(getMainHeader(
|
||||
$text,
|
||||
$iconId,
|
||||
$rightText,
|
||||
$anchorId,
|
||||
($_npDomUtilsHeadingCount > 1),
|
||||
$backgroundClass
|
||||
));
|
||||
}
|
||||
|
||||
function printSubHeader(string $text, ?string $anchorId = null, ?string $backgroundClass = "bkgd-math"): void {
|
||||
if(is_null($backgroundClass)) {
|
||||
$backgroundClass = "bkgd-math";
|
||||
}
|
||||
$headingText = getMainHeader(
|
||||
$text,
|
||||
null,
|
||||
null,
|
||||
$anchorId,
|
||||
69, // Forcing it as a non-first of main heading.
|
||||
$backgroundClass,
|
||||
3
|
||||
);
|
||||
|
||||
$headingText = str_replace("t-size-14", "t-size-11", $headingText);
|
||||
|
||||
echo($headingText);
|
||||
}
|
||||
|
||||
?>
|
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
?>
|
||||
<div id="body-overlay"></div>
|
@@ -6,18 +6,23 @@ if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
}
|
||||
|
||||
// Including required helpers.
|
||||
include_once 'config.php';
|
||||
include_once 'langs.php';
|
||||
include_once 'commons/config.php';
|
||||
include_once 'commons/langs.php';
|
||||
include_once 'commons/content.php';
|
||||
|
||||
// Required to make headings
|
||||
include_once 'commons/DOM/utils.php';
|
||||
|
||||
// Defining some options.
|
||||
$USE_CONFIG_URI_FOR_OPENGRAPH = true;
|
||||
$AUTO_DETECT_OPENGRAPH_MIME = true;
|
||||
$LANG_FALLBACK_KEY_PREFIX = "content.fallback";
|
||||
$LANG_FALLBACK_KEY_PREFIX = "";
|
||||
|
||||
// Defining the template types.
|
||||
abstract class ComposerTemplates {
|
||||
const RAW = "raw";
|
||||
const ARTICLE = "article";
|
||||
const ARTICLE_LEGACY = "article";
|
||||
const GENERIC_PROJECT_README = "generic-project-readme";
|
||||
|
||||
/**
|
||||
* Returns all the constants present in the class.
|
||||
@@ -64,33 +69,38 @@ abstract class ComposerElementTypes {
|
||||
// Defining modifiers.
|
||||
abstract class ComposerElementModifiers {
|
||||
// Generic > Margin
|
||||
const GENERIC_MARGIN_NO_TOP = ["no-top-margin", "mt-0"];
|
||||
const GENERIC_MARGIN_NO_BOTTOM = ["no-bottom-margin", "mb-0"];
|
||||
const GENERIC_MARGIN_NO_LEFT = ["no-left-margin", "ml-0"];
|
||||
const GENERIC_MARGIN_NO_RIGHT = ["no-right-margin", "mr-0"];
|
||||
const GENERIC_MARGIN_NO_X = ["no-y-margin", "mx-0"];
|
||||
const GENERIC_MARGIN_NO_Y = ["no-x-margin", "my-0"];
|
||||
const GENERIC_MARGIN_NONE = ["no-margin", "m-0" ];
|
||||
const GENERIC_MARGIN_NO_TOP = ["mt-0", "mt-0"];
|
||||
const GENERIC_MARGIN_NO_BOTTOM = ["mb-0", "mb-0"];
|
||||
const GENERIC_MARGIN_NO_LEFT = ["ml-0", "ml-0"];
|
||||
const GENERIC_MARGIN_NO_RIGHT = ["mr-0", "mr-0"];
|
||||
const GENERIC_MARGIN_NO_X = ["mx-0", "mx-0"];
|
||||
const GENERIC_MARGIN_NO_Y = ["my-0", "my-0"];
|
||||
const GENERIC_MARGIN_NONE = ["m-0", "m-0" ];
|
||||
|
||||
// Generic > Padding
|
||||
const GENERIC_PADDING_NO_TOP = ["no-top-padding", "pt-0"];
|
||||
const GENERIC_PADDING_NO_BOTTOM = ["no-bottom-padding", "pb-0"];
|
||||
const GENERIC_PADDING_NO_LEFT = ["no-left-padding", "pl-0"];
|
||||
const GENERIC_PADDING_NO_RIGHT = ["no-right-padding", "pr-0"];
|
||||
const GENERIC_PADDING_NO_X = ["no-x-padding", "px-0"];
|
||||
const GENERIC_PADDING_NO_Y = ["no-y-padding", "py-0"];
|
||||
const GENERIC_PADDING_NONE = ["no-padding", "p-0" ];
|
||||
const GENERIC_PADDING_NO_TOP = ["pt-0", "pt-0"];
|
||||
const GENERIC_PADDING_NO_BOTTOM = ["pb-0", "pb-0"];
|
||||
const GENERIC_PADDING_NO_LEFT = ["pl-0", "pl-0"];
|
||||
const GENERIC_PADDING_NO_RIGHT = ["pr-0", "pr-0"];
|
||||
const GENERIC_PADDING_NO_X = ["px-0", "px-0"];
|
||||
const GENERIC_PADDING_NO_Y = ["py-0", "py-0"];
|
||||
const GENERIC_PADDING_NONE = ["p-0" , "p-0" ];
|
||||
|
||||
// Generic > Others
|
||||
const GENERIC_FULL_WIDTH = ["w-full", "w-full"];
|
||||
const GENERIC_BOLD = ["bold", "f-w-500"];
|
||||
|
||||
// Containers
|
||||
const CONTAINER_SCROLL_HORIZONTAL = ["horizontal-scroll", "overflow-x-scroll hide-scrollbar"];
|
||||
const CONTAINER_SCROLL_HORIZONTAL_AUTO = ["horizontal-scroll-auto", "overflow-x-auto"];
|
||||
const CONTAINER_CARD = ["card", "card"];
|
||||
|
||||
// Buttons
|
||||
const BUTTON_THIN = ["thin", "btn-sm"];
|
||||
const BUTTON_THICK = ["thick", "btn-lg"];
|
||||
const BUTTON_ROUNDED = ["rounded", "btn-rounded"];
|
||||
const BUTTON_CIRCLE = ["circle", "rounded-circle"];
|
||||
const BUTTON_DOWNLOAD_PRIMARY = ["download-primary", "btn-primary"];
|
||||
const BUTTON_THIN = ["thin", ""];
|
||||
const BUTTON_THICK = ["thick", ""];
|
||||
const BUTTON_ROUNDED = ["rounded", ""];
|
||||
const BUTTON_CIRCLE = ["circle", ""];
|
||||
const BUTTON_DOWNLOAD_PRIMARY = ["download-primary", "primary"];
|
||||
|
||||
// Horizontal ruler
|
||||
const HR_SUBTLE = ["subtle", "subtle"];
|
||||
@@ -105,6 +115,9 @@ abstract class ComposerElementModifiers {
|
||||
const TABLE_HOVER = ["hover", "table-hover"];
|
||||
const TABLE_INNER_BORDER = ["inner-bordered", "table-inner-bordered"];
|
||||
const TABLE_OUTER_BORDER = ["outer-bordered", "table-outer-bordered"];
|
||||
const TABLE_V2_STYLISH = ["stylish", "stylish r-s border o-hidden"];
|
||||
const TABLE_V2_CELL_PADDING = ["auto-cell-padding", "table-p-xs table-h-p-s"];
|
||||
const TABLE_V2_VERTICAL_ALIGN = ["v-center-cells", "table-v-center"];
|
||||
|
||||
// Code
|
||||
const CODE_BLOCK = ["code-block", "w-full d-inline-block"];
|
||||
@@ -194,7 +207,7 @@ class ComposerContent {
|
||||
public function get_html() : string {
|
||||
$htmlCode = "";
|
||||
|
||||
// FIXME: Check for the template after the loop
|
||||
// FIXME: Check for the template after the loop - Isn't it done already ?
|
||||
|
||||
foreach($this->elements as $element) {
|
||||
/** @var ComposerElement $element */
|
||||
@@ -262,7 +275,7 @@ class ComposerContentMetadata {
|
||||
$this->article = $article;
|
||||
|
||||
// Safety checks.
|
||||
if($this->template == ComposerTemplates::ARTICLE && is_null($this->article)) {
|
||||
if($this->template == ComposerTemplates::ARTICLE_LEGACY && is_null($this->article)) {
|
||||
$this->article = ComposerContentMetadataArticle::from_json([]);
|
||||
}
|
||||
}
|
||||
@@ -285,7 +298,7 @@ class ComposerContentMetadata {
|
||||
|
||||
function apply_template(ComposerContent $content_root, string $inner_html) : string {
|
||||
switch($this->template) {
|
||||
case ComposerTemplates::ARTICLE:
|
||||
case ComposerTemplates::ARTICLE_LEGACY:
|
||||
$inner_html = '<div class="card p-0 mx-0"><div class="px-card py-10 border-bottom px-20">' .
|
||||
'<div class="container-fluid"><h2 class="card-title font-size-18 m-0">' .
|
||||
'<i class="' . $this->article->icon . '"></i> ' .
|
||||
@@ -304,10 +317,50 @@ class ComposerContentMetadata {
|
||||
'" class="content-tag">#' . $tag . '</a>');
|
||||
}
|
||||
} else {
|
||||
$inner_html .= '<i>' . localize("error.content.data.no.tags") . '</i>';
|
||||
$inner_html .= '<i>' . localize("content.error.message.data.no.tags") . '</i>';
|
||||
}
|
||||
|
||||
$inner_html .= '</div></div></div>';
|
||||
break;
|
||||
case ComposerTemplates::GENERIC_PROJECT_README:
|
||||
// Prepending the heading
|
||||
$inner_html = getMainHeader(
|
||||
localize_private($this->article->title, $content_root->strings, false),
|
||||
$this->article->icon,
|
||||
localize_private($this->article->subtitle, $content_root->strings, false),
|
||||
null,
|
||||
false,
|
||||
null,
|
||||
3,
|
||||
false,
|
||||
true
|
||||
) . '<div class="px-xxs">' . $inner_html . '</div>';
|
||||
|
||||
// Grabbing the DOM for inside the tags bar
|
||||
$_template_gpr_tags_dom = '<i class="fad fa-tags t-size-10"></i>';
|
||||
if(sizeof($this->article->tags) > 0) {
|
||||
foreach($this->article->tags as $tag) {
|
||||
$_template_gpr_tags_dom .= '<a href="'.l10n_url_abs("/content/?tags=" . $tag .
|
||||
'" class="ml-xs">#' . $tag . '</a>');
|
||||
}
|
||||
} else {
|
||||
$_template_gpr_tags_dom .= '<i>' . localize("content.error.message.data.no.tags") . '</i>';
|
||||
}
|
||||
|
||||
// Printing the tags bar
|
||||
$inner_html .= getMainHeader(
|
||||
$_template_gpr_tags_dom,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
true,
|
||||
null,
|
||||
6,
|
||||
false,
|
||||
false,
|
||||
true
|
||||
);
|
||||
|
||||
break;
|
||||
case ComposerTemplates::RAW:
|
||||
default:
|
||||
@@ -381,7 +434,7 @@ class ComposerContentMetadataArticle {
|
||||
return new ComposerContentMetadataArticle(
|
||||
key_exists("icon", $json_data) ? $json_data["icon"] : "fad fa-question",
|
||||
key_exists("title", $json_data) ?
|
||||
$json_data["title"] : '<i>'.localize("error.content.data.no.title").'</i>',
|
||||
$json_data["title"] : '<i>'.localize("content.error.message.data.no.title").'</i>',
|
||||
key_exists("subtitle", $json_data) ? $json_data["subtitle"] : '',
|
||||
key_exists("tags", $json_data) ? $json_data["tags"] : [],
|
||||
);
|
||||
@@ -436,10 +489,14 @@ class ComposerElement {
|
||||
// Galleries parameters
|
||||
private array $images;
|
||||
|
||||
// Screen readers parameters
|
||||
private ?string $srTitle;
|
||||
|
||||
function __construct(string $type, ?array $modifiers, ?string $link, ?array $parts, ?string $content,
|
||||
bool $localize, ?int $padding, ?int $margin, ?int $size, ?array $head, ?array $body,
|
||||
int $colspan, int $rowspan, ?int $indent, ?array $code, ?string $codeLanguage,
|
||||
bool $codeCopyable, ?string $color, ?string $source, ?string $thumbnail, ?array $images) {
|
||||
bool $codeCopyable, ?string $color, ?string $source, ?string $thumbnail, ?array $images,
|
||||
?string $srTitle) {
|
||||
$this->type = $type;
|
||||
$this->modifiers = $modifiers;
|
||||
$this->link = $link;
|
||||
@@ -472,6 +529,7 @@ class ComposerElement {
|
||||
} else {
|
||||
$this->images = $images;
|
||||
}
|
||||
$this->srTitle = $srTitle;
|
||||
}
|
||||
|
||||
static function from_json_array(?array $json_dataArray) : array {
|
||||
@@ -507,6 +565,7 @@ class ComposerElement {
|
||||
key_exists("source", $json_data) ? $json_data["source"] : null,
|
||||
key_exists("thumbnail", $json_data) ? $json_data["thumbnail"] : null,
|
||||
key_exists("images", $json_data) ? $json_data["images"] : null,
|
||||
key_exists("sr_title", $json_data) ? $json_data["sr_title"] : null,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -602,9 +661,10 @@ class ComposerElement {
|
||||
public function get_html(ComposerContent $content_root) : string {
|
||||
$htmlCode = "";
|
||||
|
||||
// Setting up the link and its title if needed.
|
||||
if(!is_null($this->link)) {
|
||||
$htmlCode .= '<a href="' . $this->link . '"' .
|
||||
($this->type == ComposerElementTypes::BUTTON ? 'class="button-link"' : '') . '>';
|
||||
($this->type == ComposerElementTypes::BUTTON ? 'class="bland-link button-link"' : '') .'>';
|
||||
}
|
||||
|
||||
switch($this->type) {
|
||||
@@ -617,6 +677,21 @@ class ComposerElement {
|
||||
break;
|
||||
|
||||
case ComposerElementTypes::H1:
|
||||
$htmlCode .= getMainHeader(
|
||||
$this->get_inner_html($content_root),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
!ComposerElementModifiers::is_modifier_in_modifiers(
|
||||
ComposerElementModifiers::GENERIC_MARGIN_NO_TOP, $this->modifiers),
|
||||
"bkgd-math", // heading-dyn-width-1
|
||||
3,
|
||||
false,
|
||||
false,
|
||||
true
|
||||
);
|
||||
break;
|
||||
|
||||
case ComposerElementTypes::H2:
|
||||
case ComposerElementTypes::H3:
|
||||
// Defining the text's indent level.
|
||||
@@ -636,33 +711,40 @@ class ComposerElement {
|
||||
|
||||
case ComposerElementTypes::PARAGRAPH:
|
||||
// Defining the text's indent level.
|
||||
// TODO: Join with others
|
||||
$_paragraph_ident_level = is_null($this->indent) ? 0 : $this->indent;
|
||||
$_paragraph_ident_level = $_paragraph_ident_level < 0 ? 0 : $_paragraph_ident_level;
|
||||
$_paragraph_ident_level = $_paragraph_ident_level > 5 ? 5 : $_paragraph_ident_level;
|
||||
$_paragraph_ident_level = (["", "ml-xs", "ml-s", "ml-m", "ml-l", "ml-xl"])[$_paragraph_ident_level];
|
||||
|
||||
// Calculating the vertical margin modifiers
|
||||
$_paragraph_no_margin_top = ComposerElementModifiers::is_modifier_in_modifiers(
|
||||
ComposerElementModifiers::GENERIC_MARGIN_NO_TOP, $this->modifiers);
|
||||
$_paragraph_no_margin_bottom = ComposerElementModifiers::is_modifier_in_modifiers(
|
||||
ComposerElementModifiers::GENERIC_MARGIN_NO_BOTTOM, $this->modifiers);
|
||||
|
||||
if($_paragraph_no_margin_top && $_paragraph_no_margin_bottom) {
|
||||
$_paragraph_margin_modifier = 'my-0';
|
||||
} else if($_paragraph_no_margin_top) {
|
||||
$_paragraph_margin_modifier = 'mt-0 mb-10';
|
||||
} else if($_paragraph_no_margin_bottom) {
|
||||
$_paragraph_margin_modifier = 'mt-10 mb-0';
|
||||
if($_paragraph_no_margin_top) {
|
||||
$_paragraph_margin_modifier = '';
|
||||
} else {
|
||||
$_paragraph_margin_modifier = 'my-10';
|
||||
$_paragraph_margin_modifier = 'mt-xs ';
|
||||
}
|
||||
|
||||
// Adding other tags manually
|
||||
// FIXME: Use the standard functions FFS...
|
||||
$_paragraph_margin_modifier .= (
|
||||
ComposerElementModifiers::is_modifier_in_modifiers(
|
||||
ComposerElementModifiers::GENERIC_BOLD, $this->modifiers)
|
||||
) ? "t-w-500 " : "";
|
||||
|
||||
// Fixes some "overflowing" issue when indent is bigger than 2.
|
||||
$_paragraph_margin_modifier .= "mr-s ";
|
||||
|
||||
// Composing the paragraph
|
||||
$htmlCode .= '<p class="' . $_paragraph_margin_modifier. ' ml-md-' . ($_paragraph_ident_level * 5) .
|
||||
$htmlCode .= '<p class="' . $_paragraph_margin_modifier . $_paragraph_ident_level .
|
||||
'">' . $this->get_inner_html($content_root) . '</p>';
|
||||
|
||||
break;
|
||||
|
||||
case ComposerElementTypes::BUTTON:
|
||||
// Composing the button.
|
||||
$htmlCode .= '<button class="btn ' . (is_null($this->color) ? '' : 'btn-' . $this->color . ' ') .
|
||||
$htmlCode .= '<button class="p-mxs r-s border b-light ' . (is_null($this->color) ? '' : 'btn-' . $this->color . ' ') .
|
||||
$this->get_modifiers_classes() . '">' . $this->get_inner_html($content_root) . '</button>';
|
||||
|
||||
break;
|
||||
@@ -713,36 +795,15 @@ class ComposerElement {
|
||||
|
||||
case ComposerElementTypes::CONTAINER:
|
||||
// Defining the padding's size.
|
||||
$_container_padding = is_null($this->padding) ? 10 : $this->padding;
|
||||
$_container_padding = is_null($this->padding) ? 0 : $this->padding;
|
||||
$_container_padding = $_container_padding < 0 ? 0 : $_container_padding;
|
||||
$_container_padding = $_container_padding > 5 ? 5 : $_container_padding;
|
||||
$_container_padding = (["", "p-xs ", "p-s ", "p-m ", "p-l ", "p-xl "])[$_container_padding];
|
||||
|
||||
// Composing the container.
|
||||
// FIXME: Can be re-standardized if a check for the default mt-10 is added at the end after adding the mods.
|
||||
$htmlCode .= '<div class="' .
|
||||
(ComposerElementModifiers::is_modifier_in_modifiers(
|
||||
ComposerElementModifiers::CONTAINER_CARD, $this->modifiers
|
||||
) ? ComposerElementModifiers::get_modifier_classes(
|
||||
ComposerElementModifiers::CONTAINER_CARD ) . " m-0 " : "") .
|
||||
'p-' . $_container_padding .
|
||||
(ComposerElementModifiers::is_modifier_in_modifiers(
|
||||
ComposerElementModifiers::GENERIC_MARGIN_NO_TOP, $this->modifiers
|
||||
) ? "" : " mt-10") .
|
||||
(ComposerElementModifiers::is_modifier_in_modifiers(
|
||||
ComposerElementModifiers::GENERIC_PADDING_NO_X, $this->modifiers
|
||||
) ? " " . ComposerElementModifiers::get_modifier_classes(
|
||||
ComposerElementModifiers::GENERIC_PADDING_NO_X ) : "") .
|
||||
(ComposerElementModifiers::is_modifier_in_modifiers(
|
||||
ComposerElementModifiers::GENERIC_PADDING_NO_BOTTOM, $this->modifiers
|
||||
) ? " " . ComposerElementModifiers::get_modifier_classes(
|
||||
ComposerElementModifiers::GENERIC_PADDING_NO_BOTTOM ) : "") .
|
||||
(ComposerElementModifiers::is_modifier_in_modifiers(
|
||||
ComposerElementModifiers::GENERIC_PADDING_NO_TOP, $this->modifiers
|
||||
) ? " " . ComposerElementModifiers::get_modifier_classes(
|
||||
ComposerElementModifiers::GENERIC_PADDING_NO_TOP ) : "") .
|
||||
(ComposerElementModifiers::is_modifier_in_modifiers(
|
||||
ComposerElementModifiers::CONTAINER_SCROLL_HORIZONTAL, $this->modifiers
|
||||
) ? " " . ComposerElementModifiers::get_modifier_classes(
|
||||
ComposerElementModifiers::CONTAINER_SCROLL_HORIZONTAL ) : "") . '">' .
|
||||
$this->get_inner_html($content_root) . '</div>';
|
||||
$htmlCode .= '<div class="' . $_container_padding . $this->get_modifiers_classes() .
|
||||
'">' . $this->get_inner_html($content_root) . '</div>';
|
||||
|
||||
break;
|
||||
|
||||
case ComposerElementTypes::COLLAPSE:
|
||||
@@ -798,7 +859,7 @@ class ComposerElement {
|
||||
|
||||
case ComposerElementTypes::TABLE:
|
||||
// Composing table.
|
||||
$htmlCode .= '<table class="table ' . $this->get_modifiers_classes() . '">';
|
||||
$htmlCode .= '<table class="' . $this->get_modifiers_classes() . '">';
|
||||
|
||||
if(!is_null($this->head)) {
|
||||
$htmlCode .= '<thead><tr>';
|
||||
@@ -847,7 +908,7 @@ class ComposerElement {
|
||||
case ComposerElementTypes::VIDEO:
|
||||
// Composing the video element
|
||||
$htmlCode .= '<video ' . (is_null($this->source) ? '' : 'src="' . $this->source . '" ') .
|
||||
'class="' . $this->get_modifiers_classes() . '" ' .
|
||||
'class="' . $this->get_modifiers_classes() . ' r-l" ' .
|
||||
(is_null($this->thumbnail) ? '' : 'poster="' . $this->thumbnail . '" ') .
|
||||
'controls muted></video>';
|
||||
break;
|
||||
@@ -872,16 +933,6 @@ function get_content_error(string $error_title_key, string $error_description_ke
|
||||
return null;
|
||||
}
|
||||
|
||||
function get_content_file_path(string $content_id) : ?string {
|
||||
global $dir_content;
|
||||
|
||||
if(ctype_alnum(str_replace("-", "", $content_id))) {
|
||||
return realpath($dir_content . "/items/" . $content_id . ".json");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function load_content_by_file_path(string $file_path) : ?ComposerContent {
|
||||
$content_json_data = json_decode(file_get_contents($file_path), true);
|
||||
if(is_null($content_json_data)) {
|
||||
@@ -891,7 +942,9 @@ function load_content_by_file_path(string $file_path) : ?ComposerContent {
|
||||
}
|
||||
|
||||
function load_content_by_id(string $content_id) : ?ComposerContent {
|
||||
$content_file_path = get_content_file_path($content_id);
|
||||
// FIXME: Find another way to get `$config_dir_content` here !
|
||||
global $config_dir_content;
|
||||
$content_file_path = get_content_file_path($config_dir_content, $content_id);
|
||||
|
||||
if(is_null($content_file_path)) {
|
||||
return null;
|
||||
|
@@ -4,9 +4,40 @@ if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden'); die();
|
||||
}
|
||||
|
||||
$host = "nibblepoker.lu";
|
||||
$host_uri = "https://nibblepoker.lu";
|
||||
// Used for opengraph head tags.
|
||||
switch($_SERVER['SERVER_NAME']) {
|
||||
case "192.168.1.85":
|
||||
case "localhost":
|
||||
case "nibblepoker.lu":
|
||||
$host = "nibblepoker.lu";
|
||||
$host_uri = "https://nibblepoker.lu";
|
||||
$host_tld = "lu";
|
||||
break;
|
||||
case "nibblepoker.com":
|
||||
$host = "nibblepoker.com";
|
||||
$host_uri = "https://nibblepoker.com";
|
||||
$host_tld = "com";
|
||||
break;
|
||||
default:
|
||||
http_response_code(400);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$dir_commons = dirname(__FILE__);
|
||||
$dir_root = realpath($dir_commons . "/../");
|
||||
$dir_content = realpath($dir_commons . "/../" . "content/");
|
||||
$config_dir_content = realpath($dir_commons . "/../" . "content/");
|
||||
$config_dir_tools = realpath($dir_commons . "/../" . "tools/");
|
||||
|
||||
// Optional features
|
||||
$enable_grids = false;
|
||||
$enable_code_highlight = false;
|
||||
$enable_glider = false;
|
||||
$enable_kitty_and_doggo_sounds = false;
|
||||
|
||||
// Easter-egg optional features
|
||||
// > Belgium's independence day.
|
||||
$enable_waffle_iron = date('m-d') === '07-21';
|
||||
|
||||
// Debugging stuff
|
||||
$print_execution_timer = true;
|
||||
?>
|
@@ -6,183 +6,196 @@ if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
}
|
||||
|
||||
// Importing required scripts.
|
||||
include_once 'langs.php';
|
||||
include_once 'composer.php';
|
||||
include_once 'commons/langs.php';
|
||||
|
||||
// Defining some options.
|
||||
$PRINT_CONTENT_DEBUG_INFO_TEXT_ELEMENTS = true;
|
||||
$PRINT_CONTENT_DEBUG_ERROR_TEXT_ELEMENTS = true;
|
||||
|
||||
// Defining constants and enums.
|
||||
abstract class ContentDisplayType {
|
||||
const NONE = 0;
|
||||
const SEARCH = 1;
|
||||
const SEARCH = 1;
|
||||
const CONTENT = 2;
|
||||
}
|
||||
|
||||
// Preparing default variables.
|
||||
$requested_content_display_type = ContentDisplayType::NONE;
|
||||
$content_has_error = false;
|
||||
$content_error_message_key = "error.content.none";
|
||||
$content_error_message = "";
|
||||
$requested_tags = array();
|
||||
$raw_additional_tags = "";
|
||||
$filtered_content_index_data = NULL;
|
||||
$requested_item_data = NULL;
|
||||
$content = null;
|
||||
|
||||
// Detecting content display type requested.
|
||||
$content_requested_url_part = explode("?", explode("#", preg_replace("^\/(content)^", "", l10n_url_switch(NULL)))[0])[0];
|
||||
|
||||
if(strcmp($content_requested_url_part, "/") == 0) {
|
||||
$requested_content_display_type = ContentDisplayType::SEARCH;
|
||||
} else {
|
||||
$requested_content_display_type = ContentDisplayType::CONTENT;
|
||||
$content_requested_url_part = ltrim($content_requested_url_part, "/");
|
||||
class ContentIndexEntry {
|
||||
public string $id;
|
||||
public ?array $title;
|
||||
public ?array $preamble;
|
||||
public string $image;
|
||||
public array $tags;
|
||||
public int $priority;
|
||||
|
||||
function __construct(string $id, ?array $title, ?array $preamble, ?string $image, ?array $tags, ?int $priority) {
|
||||
$this->id = $id;
|
||||
$this->title = $title;
|
||||
$this->preamble = $preamble;
|
||||
$this->image = is_null($image) ? "/resources/NibblePoker/images/placeholder.png" : $image;
|
||||
$this->tags = is_null($tags) ? [] : $tags;
|
||||
$this->priority = is_null($priority) ? 0 : $priority;
|
||||
}
|
||||
|
||||
static function from_json(array $json_data): ?ContentIndexEntry {
|
||||
if(!key_exists("id", $json_data)) {
|
||||
return null;
|
||||
}
|
||||
return new ContentIndexEntry(
|
||||
$json_data["id"],
|
||||
key_exists("title", $json_data) ? $json_data["title"] : null,
|
||||
key_exists("preamble", $json_data) ? $json_data["preamble"] : null,
|
||||
key_exists("image", $json_data) ? $json_data["image"] : null,
|
||||
key_exists("tags", $json_data) ? $json_data["tags"] : null,
|
||||
key_exists("priority", $json_data) ? $json_data["priority"] : null
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if($requested_content_display_type == ContentDisplayType::SEARCH) {
|
||||
// Checking if more tags were given
|
||||
if(isset($_GET['tags'])) {
|
||||
$raw_additional_tags = htmlspecialchars($_GET['tags']);
|
||||
class ContentManager {
|
||||
public ContentDisplayType|int $displayType;
|
||||
public bool $hasError;
|
||||
public string $errorMessageKey;
|
||||
public ?string $requestedId;
|
||||
public ?array $requestedTags;
|
||||
public ?array $rootIndexEntries;
|
||||
public ?string $contentFilepath;
|
||||
|
||||
function __construct(string $contentRootPath, string $requestedUrl, ?string $urlTags) {
|
||||
// Preparing default values
|
||||
$this->displayType = ContentDisplayType::NONE;
|
||||
$this->hasError = false;
|
||||
$this->errorMessageKey = "content.error.message.none";
|
||||
$this->requestedId = NULL;
|
||||
$this->requestedTags = NULL;
|
||||
$this->rootIndexEntries = NULL;
|
||||
$this->contentFilepath = NULL;
|
||||
|
||||
// Checking the length to prevent bad requests
|
||||
if(strlen($raw_additional_tags) > 256) {
|
||||
$content_has_error = true;
|
||||
$content_error_message_key = "error.content.tags.length";
|
||||
goto content_end;
|
||||
}
|
||||
|
||||
// Extracting the additional tags safely
|
||||
$raw_additional_tags_exploded = explode(";", $raw_additional_tags);
|
||||
for($i = 0; $i < count($raw_additional_tags_exploded); $i++) {
|
||||
if(strlen($raw_additional_tags_exploded[$i]) > 0) {
|
||||
if(ctype_alnum($raw_additional_tags_exploded[$i])) {
|
||||
$requested_tags[] = $raw_additional_tags_exploded[$i];
|
||||
} else {
|
||||
$content_has_error = true;
|
||||
$content_error_message_key = "error.content.tags.alphanumeric";
|
||||
goto content_end;
|
||||
}
|
||||
// Doing some standard things
|
||||
$this->processUrl($requestedUrl, $urlTags);
|
||||
if(!$this->hasError) {
|
||||
if($this->displayType == ContentDisplayType::SEARCH) {
|
||||
$this->loadRootIndex(realpath($contentRootPath . "/index.json"));
|
||||
} elseif($this->displayType == ContentDisplayType::CONTENT) {
|
||||
$this->prepareContentFilePath($contentRootPath);
|
||||
}
|
||||
}
|
||||
unset($raw_additional_tags_exploded);
|
||||
}
|
||||
|
||||
// Loading the content index.
|
||||
$content_json = file_get_contents(realpath($dir_content . "/index.json"));
|
||||
$content_index_data = json_decode($content_json, true);
|
||||
unset($content_json);
|
||||
|
||||
// Filtering out unwanted entries.
|
||||
$filtered_content_index_data = array();
|
||||
for($i = 0; $i < count($content_index_data); $i++) {
|
||||
if(count(array_intersect($content_index_data[$i]["tags"], $requested_tags)) == count($requested_tags)) {
|
||||
$filtered_content_index_data[] = $content_index_data[$i];
|
||||
}
|
||||
}
|
||||
|
||||
// Cleaning some variables.
|
||||
unset($content_index_data);
|
||||
unset($content_json);
|
||||
|
||||
// Checking if we found content for the user.
|
||||
if(count($filtered_content_index_data) == 0) {
|
||||
// No relevant article/page were found for the given tags.
|
||||
$content_has_error = true;
|
||||
$content_error_message_key = "error.content.detect.empty";
|
||||
goto content_end;
|
||||
}
|
||||
} else if($requested_content_display_type == ContentDisplayType::CONTENT) {
|
||||
// Sanitizing the requested ID.
|
||||
if(!ctype_alnum(str_replace("-", "", $content_requested_url_part))) {
|
||||
$content_has_error = true;
|
||||
$content_error_message_key = "error.content.id.alphanumeric";
|
||||
goto content_end;
|
||||
}
|
||||
|
||||
// Loading the content's data
|
||||
$content_file_path = get_content_file_path($content_requested_url_part);
|
||||
|
||||
if(empty($content_file_path)) {
|
||||
// File doesn't exist !
|
||||
$content_has_error = true;
|
||||
$content_error_message_key = "error.content.data.not.exist";
|
||||
unset($content_file_path);
|
||||
goto content_end;
|
||||
} else {
|
||||
$content = load_content_by_file_path($content_file_path);
|
||||
function processUrl(string $requestedUrl, ?string $urlTags): void {
|
||||
// Doing some dark magic whose inner workings are lost to times...
|
||||
$requestedUrlPart = explode(
|
||||
"?",
|
||||
explode("#", preg_replace("^\/(content|tools)^", "", $requestedUrl))[0]
|
||||
)[0];
|
||||
|
||||
if(is_null($content)) {
|
||||
$content_has_error = true;
|
||||
$content_error_message_key = "error.content.cannot.load";
|
||||
unset($content_file_path);
|
||||
goto content_end;
|
||||
}
|
||||
}
|
||||
|
||||
unset($content_file_path);
|
||||
}
|
||||
|
||||
content_end:
|
||||
// TODO: Create error thingy
|
||||
$content_error_message = localize($content_error_message_key);
|
||||
|
||||
// These functions are placed here to prevent the main file from becoming impossible to read.
|
||||
function start_content_card($iconClasses, $title, $subTitle) {
|
||||
echo('<div class="card p-0 mx-0"><div class="px-card py-10 border-bottom px-20"><div class="container-fluid">');
|
||||
echo('<h2 class="card-title font-size-18 m-0"><i class="'.$iconClasses.'"></i> '.localize($title));
|
||||
echo('<span class="card-title font-size-18 m-0 text-super-muted float-right hidden-xs-and-down">'.$subTitle.'</span></h2>');
|
||||
echo('</div></div>');
|
||||
}
|
||||
|
||||
function end_content_card() {
|
||||
echo('</div>');
|
||||
}
|
||||
|
||||
/*
|
||||
switch($elementNode["type"]) {
|
||||
case "image":
|
||||
// Parsing properties.
|
||||
$_imgAlt = "";
|
||||
$_imgSource = "/resources/Azias/imgs/placeholder.png";
|
||||
if(array_key_exists("alt", $elementNode)) {
|
||||
$_imgAlt = $elementNode["alt"];
|
||||
}
|
||||
if(array_key_exists("src", $elementNode)) {
|
||||
$_imgSource = $elementNode["src"];
|
||||
if(strcmp($requestedUrlPart, "/") == 0) {
|
||||
$this->displayType = ContentDisplayType::SEARCH;
|
||||
|
||||
if(is_null($urlTags)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Reading and processing the modifiers.
|
||||
$_modFillHeight = false;
|
||||
if(array_key_exists("modifiers", $elementNode)) {
|
||||
for ($i = 0; $i < count($elementNode["modifiers"]); $i++) {
|
||||
if ($elementNode["modifiers"][$i] == "fill-height") {
|
||||
$_modFillHeight = true;
|
||||
if(strlen($urlTags) > 256) {
|
||||
$this->hasError = true;
|
||||
$this->errorMessageKey = "content.error.message.tags.length";
|
||||
return;
|
||||
}
|
||||
|
||||
$explodedTags = explode(";", $urlTags);
|
||||
$this->requestedTags = count($explodedTags) > 0 ? array() : $this->requestedTags;
|
||||
for($i = 0; $i < count($explodedTags); $i++) {
|
||||
if(strlen($explodedTags[$i]) > 0) {
|
||||
if(ctype_alnum($explodedTags[$i])) {
|
||||
$this->requestedTags[] = $explodedTags[$i];
|
||||
} else {
|
||||
$this->hasError = true;
|
||||
$this->errorMessageKey = "content.error.message.tags.alphanumeric";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Adding element.
|
||||
echo('<img class="'.($_modFillHeight?'fill-height':'').'" src="'.$_imgSource.'" alt="'.$_imgAlt.'">');
|
||||
|
||||
break;
|
||||
case "slider":
|
||||
case "glider":
|
||||
case "gallery":
|
||||
// Starting the gallery
|
||||
echo('<div class="glider-container d-flex">');
|
||||
echo('<div class="align-self-stretch font-size-40 mr-5 my-auto glider-nav" aria-label="Previous">');
|
||||
echo('<i class="fad fa-angle-left"></i></div>');
|
||||
echo('<div class="glider align-self-stretch flex-fill">');
|
||||
|
||||
// Adding content.
|
||||
processStandardContentSubNode($elementNode, "<div>", "</div>");
|
||||
} else {
|
||||
$this->displayType = ContentDisplayType::CONTENT;
|
||||
$this->requestedId = ltrim(rtrim($requestedUrlPart, "/"), "/");
|
||||
}
|
||||
}
|
||||
|
||||
function loadRootIndex(string $rootIndexFilepath): void {
|
||||
// Loading the content index.
|
||||
$rawJsonContent = file_get_contents($rootIndexFilepath);
|
||||
$jsonContent = json_decode($rawJsonContent, true);
|
||||
unset($rawJsonContent);
|
||||
|
||||
// Ending the gallery
|
||||
echo('</div><div class="align-self-stretch font-size-40 ml-5 my-auto glider-nav" aria-label="Next">');
|
||||
echo('<i class="fad fa-angle-right"></i></div></div>');
|
||||
$this->rootIndexEntries = array();
|
||||
for($i = 0; $i < count($jsonContent); $i++) {
|
||||
// Filtering out unwanted entries and putting their data in a proper class.
|
||||
if(!is_null($this->requestedTags)) {
|
||||
if(count(array_intersect($jsonContent[$i]["tags"], $this->requestedTags)) == 0) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
//if(count(array_intersect($jsonContent[$i]["tags"], $this->requestedTags)) == count($this->requestedTags)) {}
|
||||
|
||||
break;
|
||||
}/**/
|
||||
?>
|
||||
// Parsing the raw data into a structure.
|
||||
$newIndexEntry = ContentIndexEntry::from_json($jsonContent[$i]);
|
||||
|
||||
// Checking if it was parsed properly
|
||||
if(is_null($newIndexEntry)) {
|
||||
$this->hasError = true;
|
||||
$this->errorMessageKey = "content.error.message.failed.structure";
|
||||
return;
|
||||
} else {
|
||||
$this->rootIndexEntries[] = $newIndexEntry;
|
||||
}
|
||||
}
|
||||
unset($jsonContent);
|
||||
|
||||
// Checking if we found any content for the user.
|
||||
if(count($this->rootIndexEntries) == 0) {
|
||||
// No relevant article/page were found for the given tags.
|
||||
$this->hasError = true;
|
||||
$this->errorMessageKey = "content.error.message.detect.empty";
|
||||
return;
|
||||
}
|
||||
|
||||
// Sorting entries based on their priority
|
||||
usort($this->rootIndexEntries, function(ContentIndexEntry $a, ContentIndexEntry $b) {
|
||||
if($a->priority == $b->priority) {
|
||||
return 0;
|
||||
}
|
||||
return ($a->priority > $b->priority) ? -1 : 1;
|
||||
});
|
||||
}
|
||||
|
||||
function prepareContentFilePath(string $contentRootPath): void {
|
||||
// Sanitizing the requested ID.
|
||||
if(!ctype_alnum(str_replace("-", "", $this->requestedId))) {
|
||||
$this->hasError = true;
|
||||
$this->errorMessageKey = "content.error.message.id.alphanumeric";
|
||||
return;
|
||||
}
|
||||
|
||||
// Preparing and checking the content's info index file.
|
||||
$this->contentFilepath = get_content_file_path($contentRootPath, $this->requestedId);
|
||||
|
||||
if(empty($this->contentFilepath)) {
|
||||
// File doesn't exist !
|
||||
$this->hasError = true;
|
||||
$this->errorMessageKey = "content.error.message.data.not.exist";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Common utilities
|
||||
function get_content_file_path(string $contentRootPath, string $contentId): ?string {
|
||||
if(ctype_alnum(str_replace("-", "", $contentId))) {
|
||||
return realpath($contentRootPath . "/items/" . $contentId . ".json");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Functions for use in pages
|
||||
function getContentManager(string $contentRootPath): ContentManager {
|
||||
return new ContentManager(
|
||||
$contentRootPath,
|
||||
l10n_url_switch(NULL),
|
||||
isset($_GET['tags']) ? htmlspecialchars($_GET['tags']) : NULL
|
||||
);
|
||||
}
|
||||
|
||||
?>
|
||||
|
52
commons/content/opengraph.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
|
||||
// Including required helpers.
|
||||
include_once 'commons/langs.php';
|
||||
|
||||
class OpenGraphData {
|
||||
public string $title;
|
||||
public string $description;
|
||||
public string $type;
|
||||
public string $url;
|
||||
public string $image;
|
||||
public string $image_type;
|
||||
|
||||
function __construct(array $title, array $description, string $type, string $url, string $image,
|
||||
string $image_type) {
|
||||
global $default_language;
|
||||
global $user_language;
|
||||
|
||||
$this->title = array_key_exists($user_language, $title) ? $title[$user_language] :
|
||||
(array_key_exists($default_language, $title) ? $title[$default_language] : $title[0]);
|
||||
$this->description = array_key_exists($user_language, $description) ? $description[$user_language] :
|
||||
(array_key_exists($default_language, $description) ? $description[$default_language] : $description[0]);
|
||||
|
||||
$this->type = $type;
|
||||
$this->url = $url;
|
||||
$this->image = $image;
|
||||
$this->image_type = $image_type;
|
||||
}
|
||||
|
||||
static function from_json(array $json_data): ?OpenGraphData {
|
||||
foreach(["title", "description", "type", "url", "image", "image_type"] as $wantedKey) {
|
||||
if(!key_exists($wantedKey, $json_data)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return new OpenGraphData(
|
||||
$json_data["title"],
|
||||
$json_data["description"],
|
||||
$json_data["type"],
|
||||
$json_data["url"],
|
||||
$json_data["image"],
|
||||
$json_data["image_type"]
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
155
commons/content/tools.php
Normal file
@@ -0,0 +1,155 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
|
||||
// Including required helpers.
|
||||
include_once 'commons/config.php';
|
||||
include_once 'commons/langs.php';
|
||||
include_once 'commons/content.php';
|
||||
|
||||
// Required to handle opengraph data
|
||||
include_once 'commons/content/opengraph.php';
|
||||
|
||||
// Required to make headings
|
||||
include_once 'commons/DOM/utils.php';
|
||||
|
||||
// Defining the template types.
|
||||
class ToolInfoFile {
|
||||
public string $domFile;
|
||||
public ?string $langFile;
|
||||
public array $codeFilesPaths;
|
||||
public array $moduleFilesPaths;
|
||||
public array $styleFilesPaths;
|
||||
public string $icon;
|
||||
public string $titleKey;
|
||||
public ?string $subTitleKey;
|
||||
public OpenGraphData $openGraphData;
|
||||
|
||||
function __construct(string $domFile, ?string $langFile, ?array $codeFilesPaths, ?array $moduleFilesPaths,
|
||||
?array $styleFilesPaths, ?string $icon, ?string $titleKey, ?string $subTitleKey,
|
||||
array $opengraph) {
|
||||
$this->domFile = $domFile;
|
||||
$this->langFile = $langFile;
|
||||
$this->codeFilesPaths = is_null($codeFilesPaths) ? array() : $codeFilesPaths;
|
||||
$this->moduleFilesPaths = is_null($moduleFilesPaths) ? array() : $moduleFilesPaths;
|
||||
$this->styleFilesPaths = is_null($styleFilesPaths) ? array() : $styleFilesPaths;
|
||||
$this->icon = is_null($icon) ? "fad fa-question" : $icon;
|
||||
$this->titleKey = is_null($titleKey) ? "unset" : $titleKey;
|
||||
$this->subTitleKey = $subTitleKey;
|
||||
$this->openGraphData = OpenGraphData::from_json($opengraph);
|
||||
}
|
||||
|
||||
static function from_json(array $json_data): ?ToolInfoFile {
|
||||
if(!key_exists("dom", $json_data)) {
|
||||
return null;
|
||||
}
|
||||
return new ToolInfoFile(
|
||||
$json_data["dom"],
|
||||
key_exists("lang", $json_data) ? $json_data["lang"] : null,
|
||||
key_exists("code", $json_data) ? $json_data["code"] : null,
|
||||
key_exists("module", $json_data) ? $json_data["module"] : null,
|
||||
key_exists("styles", $json_data) ? $json_data["styles"] : null,
|
||||
key_exists("icon", $json_data) ? $json_data["icon"] : null,
|
||||
key_exists("title", $json_data) ? $json_data["title"] : null,
|
||||
key_exists("subtitle", $json_data) ? $json_data["subtitle"] : null,
|
||||
$json_data["opengraph"]
|
||||
);
|
||||
}
|
||||
|
||||
function validateFiles(ContentManager $contentManager): void {
|
||||
if(!(file_exists($this->domFile) && is_file($this->domFile))) {
|
||||
$contentManager->hasError = true;
|
||||
$contentManager->errorMessageKey = "content.error.message.missing.file.dom";
|
||||
return;
|
||||
}
|
||||
|
||||
if(!is_null($this->langFile)) {
|
||||
if(!(file_exists($this->langFile) && is_file($this->langFile))) {
|
||||
$contentManager->hasError = true;
|
||||
$contentManager->errorMessageKey = "content.error.message.missing.file.lang";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($this->codeFilesPaths as $codeFilePath) {
|
||||
if(!(file_exists($codeFilePath) && is_file($codeFilePath))) {
|
||||
$contentManager->hasError = true;
|
||||
$contentManager->errorMessageKey = "content.error.message.missing.file.code";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($this->moduleFilesPaths as $moduleFilePath) {
|
||||
if(!(file_exists($moduleFilePath) && is_file($moduleFilePath))) {
|
||||
$contentManager->hasError = true;
|
||||
$contentManager->errorMessageKey = "content.error.message.missing.file.module";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($this->styleFilesPaths as $styleFilePath) {
|
||||
if(!(file_exists($styleFilePath) && is_file($styleFilePath))) {
|
||||
$contentManager->hasError = true;
|
||||
$contentManager->errorMessageKey = "content.error.message.missing.file.style";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
abstract class ToolsContent {
|
||||
static function loadItemIndexFile(ContentManager $contentManager, string $contentRootPath): ?ToolInfoFile {
|
||||
// Preliminary check
|
||||
if(!$contentManager->displayType == ContentDisplayType::CONTENT) {
|
||||
$contentManager->hasError = true;
|
||||
$contentManager->errorMessageKey = "content.error.message.cannot.load.item.as.not.content";
|
||||
return null;
|
||||
}
|
||||
|
||||
// Loading the index file
|
||||
$itemIndexJsonData = json_decode(file_get_contents($contentManager->contentFilepath), true);
|
||||
if(is_null($itemIndexJsonData)) {
|
||||
return null;
|
||||
}
|
||||
$toolInfo = ToolInfoFile::from_json($itemIndexJsonData);
|
||||
unset($itemIndexJsonData);
|
||||
|
||||
// Making paths absolute
|
||||
if(!is_null($toolInfo)) {
|
||||
$toolInfo->domFile = realpath($contentRootPath . "/items/" . $toolInfo->domFile);
|
||||
if(!is_null($toolInfo->langFile)) {
|
||||
$toolInfo->langFile = realpath($contentRootPath . "/items/" . $toolInfo->langFile);
|
||||
}
|
||||
for($iCodeFilePath = 0; $iCodeFilePath < count($toolInfo->codeFilesPaths); $iCodeFilePath++) {
|
||||
$toolInfo->codeFilesPaths[$iCodeFilePath] = realpath(
|
||||
$contentRootPath . "/items/" . $toolInfo->codeFilesPaths[$iCodeFilePath]);
|
||||
$toolInfo->codeFilesPaths[$iCodeFilePath] = str_replace(
|
||||
"\\", "/", $toolInfo->codeFilesPaths[$iCodeFilePath]
|
||||
);
|
||||
}
|
||||
for($iModuleFilePath = 0; $iModuleFilePath < count($toolInfo->moduleFilesPaths); $iModuleFilePath++) {
|
||||
$toolInfo->moduleFilesPaths[$iModuleFilePath] = realpath(
|
||||
$contentRootPath . "/items/" . $toolInfo->moduleFilesPaths[$iModuleFilePath]);
|
||||
$toolInfo->moduleFilesPaths[$iModuleFilePath] = str_replace(
|
||||
"\\", "/", $toolInfo->moduleFilesPaths[$iModuleFilePath]
|
||||
);
|
||||
}
|
||||
for($iStyleFilePath = 0; $iStyleFilePath < count($toolInfo->styleFilesPaths); $iStyleFilePath++) {
|
||||
$toolInfo->styleFilesPaths[$iStyleFilePath] = realpath(
|
||||
$contentRootPath . "/items/" . $toolInfo->styleFilesPaths[$iStyleFilePath]);
|
||||
$toolInfo->styleFilesPaths[$iStyleFilePath] = str_replace(
|
||||
"\\", "/", $toolInfo->styleFilesPaths[$iStyleFilePath]
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$contentManager->hasError = true;
|
||||
$contentManager->errorMessageKey = "content.error.message.cannot.load";
|
||||
}
|
||||
|
||||
return $toolInfo;
|
||||
}
|
||||
}
|
||||
?>
|
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
?>
|
||||
<nav class="navbar navbar-fixed-bottom">
|
||||
<div class="navbar-content">
|
||||
<div class="navbar-content">
|
||||
<button id="button-sidebar" class="btn btn-action" type="button">
|
||||
<i class="fa fa-bars" aria-hidden="true"></i><span class="sr-only">Sidebar</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<span class="ml-auto">
|
||||
<div id="privacy-footer-link" class="text-muted ml-15">
|
||||
<a href="<?php print(l10n_url_abs('/privacy/')); ?>" class="text-decoration-none">
|
||||
<p class="text-muted font-weight-semi-bold"><?php print(localize('privacy.title')); ?></p>
|
||||
</a>
|
||||
</div>
|
||||
</span>
|
||||
<a href="<?php print(l10n_url_abs('/')); ?>" class="navbar-brand ml-auto">
|
||||
<span class="navbar-brand ml-auto">
|
||||
<img id="logo-footer" src="/resources/Azias/logos/v2_full_unshaded_original.svg" alt="logo" draggable="false">
|
||||
</span>
|
||||
</a>
|
||||
</nav>
|
@@ -1,30 +0,0 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
?>
|
||||
<div id="header-lang-menu" class="navbar-content ml-auto">
|
||||
<div class="dropdown with-arrow">
|
||||
<button class="btn" data-toggle="dropdown" type="button" id="navbar-lang-dropdown">
|
||||
<i class="fad fa-language"></i><span class="hidden-xs-and-down"> <?php print(localize("lang.menu.title")); ?></span>
|
||||
<i class="fa fa-angle-down" aria-hidden="true"></i>
|
||||
</button>
|
||||
<div class="dropdown-menu dropdown-menu-right w-150" aria-labelledby="navbar-lang-dropdown">
|
||||
<a href="<?php echo(l10n_url_switch('en')); ?>" class="dropdown-item">
|
||||
<?php print(localize("lang.english")); ?>
|
||||
</a>
|
||||
<a href="<?php echo(l10n_url_switch('fr')); ?>" class="dropdown-item">
|
||||
<?php print(localize("lang.french")); ?>
|
||||
</a>
|
||||
<!--<a href="<?php echo(l10n_url_switch('lb')); ?>" class="dropdown-item">
|
||||
<?php print(localize("lang.luxembourgish")); ?>
|
||||
</a>-->
|
||||
<div class="dropdown-divider mt-5 mb-5"></div>
|
||||
<a href="<?php echo(l10n_url_switch(NULL)); ?>" class="dropdown-item">
|
||||
<?php print(localize("lang.automatic")); ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
?>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta content="cache, store" http-equiv="Cache-Control">
|
||||
<meta content="cache, store" http-equiv="Pragma">
|
||||
<meta content="3600" http-equiv="Expires">
|
||||
<meta name="theme-color" content="#1D2023">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<link rel="alternate icon" href="/favicon.ico">
|
||||
<link rel="stylesheet" href="/resources/HalfMoon/1.1.1/css/halfmoon-variables.min.css" />
|
||||
<link rel="stylesheet" href="/resources/FontAwesomePro/5.15.3/css/all.min.css">
|
||||
<link rel="stylesheet" href="/resources/Azias/css/nibblepoker.lu.min.css">
|
||||
<?php
|
||||
// Causes Chrome to bitch about the cross-origin header.
|
||||
// <link rel="preload" href="/resources/Quantum/Quantum.otf" as="font">
|
||||
// <link rel="preload" href="/resources/FontAwesomePro/5.15.3/webfonts/fa-duotone-900.woff2" as="font">
|
||||
// <link rel="preload" href="/resources/FontAwesomePro/5.15.3/webfonts/fa-brands-400.woff2" as="font">
|
||||
// <link rel="preload" href="/resources/FontAwesomePro/5.15.3/webfonts/fa-solid-900.woff2" as="font">
|
||||
// <link rel="preload" href="/resources/Azias/imgs/3px-tile-0.1.png" as="image">
|
||||
// <link rel="preload" href="/resources/Azias/imgs/3px-tile.png" as="image">
|
||||
?>
|
@@ -4,7 +4,9 @@ if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
include_once 'config.php';
|
||||
|
||||
// FIXME: Make a note of which variables are being used from that file !
|
||||
include_once 'commons/config.php';
|
||||
|
||||
// This helper requires PHP 8 or newer !
|
||||
|
||||
@@ -20,15 +22,54 @@ if(str_starts_with($_SERVER['REQUEST_URI'], "/en/")) {
|
||||
} elseif(str_starts_with($_SERVER['REQUEST_URI'], "/fr/")) {
|
||||
$user_language = "fr";
|
||||
$user_uri_language = "/".$user_language;
|
||||
} elseif(str_starts_with($_SERVER['REQUEST_URI'], "/lb/")) {
|
||||
$user_language = "lb";
|
||||
$user_uri_language = "/".$user_language;
|
||||
} else {
|
||||
} elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
|
||||
// Attempting to detect the language through the browser's headers.
|
||||
// TODO: This !
|
||||
$user_uri_language = "";
|
||||
$_client_languages = [];
|
||||
|
||||
foreach(explode(",", $_SERVER["HTTP_ACCEPT_LANGUAGE"]) as $_client_lang_entry) {
|
||||
$_client_lang_entry_parts = explode(";", $_client_lang_entry);
|
||||
|
||||
// Ignoring "en-US" and similar entries
|
||||
if(count($_client_lang_entry_parts) != 2) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Only allowing supported languages
|
||||
if(!in_array($_client_lang_entry_parts[0], ["en", "fr"])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Parsing the language's weight
|
||||
$_client_lang_entry_parts[1] = str_replace("q=", "", $_client_lang_entry_parts[1]);
|
||||
$_client_lang_entry_weight = filter_var($_client_lang_entry_parts[1], FILTER_VALIDATE_FLOAT);
|
||||
if($_client_lang_entry_weight === false || !is_float($_client_lang_entry_weight)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Saving it for later
|
||||
$_client_languages[] = $_client_lang_entry_parts;
|
||||
}
|
||||
|
||||
// Sorting based on weight and selecting the preferred one.
|
||||
if(count($_client_languages) > 0) {
|
||||
usort($_client_languages, function(array $a, array $b) {
|
||||
if($a[1] == $b[1]) {
|
||||
return 0;
|
||||
}
|
||||
return ($a[1] > $b[1]) ? -1 : 1;
|
||||
});
|
||||
|
||||
$user_language = $_client_languages[0][0];
|
||||
}
|
||||
}
|
||||
|
||||
// Preparing other related variables
|
||||
$lang_number_decimal = $user_language == "en" ? "." : ",";
|
||||
$lang_number_thousands = $user_language == "en" ? "," : ".";
|
||||
|
||||
// Setting headers
|
||||
header("Content-Language: " . $user_language);
|
||||
|
||||
// Reading and parsing the strings.json file
|
||||
$lang_json = file_get_contents(realpath($dir_commons . "/strings.json"));
|
||||
$lang_data = json_decode($lang_json, true);
|
||||
@@ -52,16 +93,26 @@ function localize_private(string $string_key, array $private_lang_data, bool $fa
|
||||
}
|
||||
if($fallback_to_common) {
|
||||
// If we can attempt to fallback on the common lang file.
|
||||
return localize_private($fallback_prefix . "." . $string_key, $lang_data, false);
|
||||
return localize_private($fallback_prefix . $string_key, $lang_data, false);
|
||||
}
|
||||
|
||||
// If nothing could be done, we simply return the key.
|
||||
return $string_key;
|
||||
}
|
||||
|
||||
function localize($string_key) : string {
|
||||
function localize($string_key, ?array $param_values = null) : string {
|
||||
global $lang_data;
|
||||
return localize_private($string_key, $lang_data, false);
|
||||
if(is_null($param_values)) {
|
||||
return localize_private($string_key, $lang_data, false);
|
||||
} else {
|
||||
$localized_string = localize_private($string_key, $lang_data, false);
|
||||
|
||||
for($iStrParam = 0; $iStrParam < sizeof($param_values); $iStrParam++) {
|
||||
$localized_string = str_replace("%" . $iStrParam, $param_values[$iStrParam], $localized_string);
|
||||
}
|
||||
|
||||
return $localized_string;
|
||||
}
|
||||
}
|
||||
|
||||
function l10n_url_abs($url) : string {
|
||||
|
@@ -31,8 +31,3 @@ function add_code_modal(string $id, string $title, string $text) {
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -1,84 +0,0 @@
|
||||
<?php
|
||||
// Making sure the file is included and not accessed directly.
|
||||
if (basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
|
||||
header('HTTP/1.1 403 Forbidden');
|
||||
die();
|
||||
}
|
||||
|
||||
include_once 'langs.php';
|
||||
|
||||
if(!isset($SIDEBAR_ID)) {
|
||||
$SIDEBAR_ID = 'default';
|
||||
}
|
||||
?>
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-menu font-weight-bold">
|
||||
<a href="<?php print(l10n_url_abs('/')); ?>" class="sidebar-brand no-select">
|
||||
<img id="logo-sidebar" src="/resources/Azias/logos/v2_full_unshaded_original.svg" alt="logo" draggable="false">
|
||||
</a>
|
||||
<h4 class="text-center quantum ucase font-size-28 text-muted">N<span class="text-super-muted">ibble</span> P<span class="text-super-muted">oker</span></h4>
|
||||
<div class="sidebar-divider"></div>
|
||||
<a id="sbl-home" href="<?php print(l10n_url_abs('/')); ?>" class="sidebar-link sidebar-link-with-icon<?php if($SIDEBAR_ID=="home"){echo(" active");} ?>">
|
||||
<span class="sidebar-icon"><i class="fad fa-home" aria-hidden="true"></i></span>
|
||||
<?php print(localize("home.title.nav")); ?>
|
||||
</a>
|
||||
<div class="sidebar-divider"></div>
|
||||
<a id="sbl-programming" href="<?php print(l10n_url_abs('/content/')); ?>" class="sidebar-link sidebar-link-with-icon<?php if($SIDEBAR_ID=="blog"){echo(" active");} ?>">
|
||||
<span class="sidebar-icon"><i class="fad fa-briefcase"></i></span>
|
||||
<?php print(localize("programming.title.projects")); ?>
|
||||
</a>
|
||||
<div class="ml-20">
|
||||
<a id="sbl-projects-apps" href="<?php print(l10n_url_abs('/content/?tags=application')); ?>" class="sidebar-link sidebar-link-with-icon">
|
||||
<span class="sidebar-icon"><i class="fad fa-browser"></i></span>
|
||||
<?php print(localize("programming.apps.title")); ?>
|
||||
</a>
|
||||
<a id="sbl-projects-apps" href="<?php print(l10n_url_abs('/content/?tags=library')); ?>" class="sidebar-link sidebar-link-with-icon">
|
||||
<span class="sidebar-icon"><i class="fad fa-puzzle-piece"></i></span>
|
||||
<?php print(localize("programming.library.title")); ?>
|
||||
</a>
|
||||
<a id="sbl-projects-tutorials" href="<?php print(l10n_url_abs('/content/?tags=game')); ?>" class="sidebar-link sidebar-link-with-icon">
|
||||
<span class="sidebar-icon"><i class="fad fa-gamepad-alt"></i></span>
|
||||
<?php print(localize("programming.games.title")); ?>
|
||||
</a>
|
||||
<!--<a id="sbl-projects-tutorials" href="<?php print(l10n_url_abs('/content/?tags=tutorial')); ?>" class="sidebar-link sidebar-link-with-icon">
|
||||
<span class="sidebar-icon"><i class="fad fa-books"></i></span>
|
||||
<?php print(localize("programming.tutorials.title")); ?>
|
||||
</a>-->
|
||||
<a id="sbl-projects-tools" href="<?php print(l10n_url_abs('/content/?tags=tool')); ?>" class="sidebar-link sidebar-link-with-icon">
|
||||
<span class="sidebar-icon"><i class="fad fa-tools"></i></span>
|
||||
<?php print(localize("programming.tools.title")); ?>
|
||||
</a>
|
||||
<div class="sidebar-divider"></div>
|
||||
<a id="sbl-purebasic" href="<?php print(l10n_url_abs('/content/?tags=purebasic')); ?>" class="sidebar-link sidebar-link-with-icon">
|
||||
<span class="sidebar-icon"><i class="fad fa-microchip"></i></span>
|
||||
<?php print(localize("programming.purebasic.title")); ?>
|
||||
</a>
|
||||
<a id="sbl-python" href="<?php print(l10n_url_abs('/content/?tags=python')); ?>" class="sidebar-link sidebar-link-with-icon">
|
||||
<span class="sidebar-icon"><i class="fab fa-python"></i></span>
|
||||
<?php print(localize("programming.python.title")); ?>
|
||||
</a>
|
||||
<a id="sbl-docker" href="<?php print(l10n_url_abs('/content/?tags=docker')); ?>" class="sidebar-link sidebar-link-with-icon">
|
||||
<span class="sidebar-icon"><i class="fab fa-docker"></i></span>
|
||||
<?php print(localize("programming.docker.title")); ?>
|
||||
</a>
|
||||
<div class="sidebar-divider"></div>
|
||||
<a id="sbl-projects-downloads" href="https://files.nibblepoker.lu/" class="sidebar-link sidebar-link-with-icon">
|
||||
<span class="sidebar-icon"><i class="fad fa-download"></i></span>
|
||||
<?php print(localize("programming.downloads.title")); ?>
|
||||
</a>
|
||||
<a id="sbl-projects-downloads" href="https://git.nibblepoker.lu/" class="sidebar-link sidebar-link-with-icon">
|
||||
<span class="sidebar-icon"><i class="fad fa-code"></i></span>
|
||||
<?php print(localize("programming.git.title")); ?>
|
||||
</a>
|
||||
</div>
|
||||
<div class="sidebar-divider"></div>
|
||||
<a id="sbl-links" href="<?php print(l10n_url_abs('/links/')); ?>" class="sidebar-link sidebar-link-with-icon<?php if($SIDEBAR_ID=="links"){echo(" active");} ?>">
|
||||
<span class="sidebar-icon"><i class="fad fa-link"></i></span>
|
||||
<?php print(localize("links.title")); ?>
|
||||
</a>
|
||||
<a id="sbl-contact" href="<?php print(l10n_url_abs('/contact/')); ?>" class="sidebar-link sidebar-link-with-icon<?php if($SIDEBAR_ID=="contact"){echo(" active");} ?>">
|
||||
<span class="sidebar-icon"><i class="fad fa-mailbox"></i></span>
|
||||
<?php print(localize("contact.title")); ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
@@ -13,7 +13,10 @@ lang_data["_compile_date"] = datetime.utcnow().isoformat() + "Z"
|
||||
|
||||
|
||||
for main_dir_entry in os.listdir("./"):
|
||||
print("Checking ./{}".format(main_dir_entry))
|
||||
if main_dir_entry.startswith("_"):
|
||||
continue
|
||||
|
||||
print("> Processing ./{}".format(main_dir_entry))
|
||||
|
||||
if not os.path.isdir(os.path.join("./", main_dir_entry)):
|
||||
continue
|
||||
|
@@ -1,7 +1,75 @@
|
||||
{
|
||||
"about.biography.title": "Who am I ?",
|
||||
"about.philosophy.title": "Projects philosophy",
|
||||
"about.skills.title": "Skills",
|
||||
"about.work.title": "Professional experiences",
|
||||
"about.education.title": "TODO:SchoolAndEducation"
|
||||
"about.head.title": "About - NibblePoker",
|
||||
"about.head.description": "TODO: description",
|
||||
"about.og.title": "NibblePoker - About",
|
||||
"about.og.description": "TODO: description",
|
||||
"about.header.title": "About",
|
||||
|
||||
|
||||
"about.intro.title": "Introduction",
|
||||
|
||||
"about.intro.text.01": "My name is Herwin Bozet, I'm an experienced developer with extensive experience in PureBasic, Python, Java, VBA; and intermediate knowledge in C, Win32 APIs, embedded systems and general web development.",
|
||||
"about.intro.text.02": "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 with the aim of helping programmers and people in their day-to-day life.",
|
||||
|
||||
"about.intro.text.10": "NibblePoker is, in essence, a simple moniker and the front-end for most of my public-focused work.",
|
||||
"about.intro.text.11": "It houses all my work made and tailored for usage by other people.",
|
||||
|
||||
"about.intro.text.20": "This entire website, as well as all my work for it and other personal projects, is completely open-source and available under permissive <abbr title=\"Open Source Initiative\">OSI</abbr> approved licenses.",
|
||||
"about.intro.text.21": "All of it is maintained, developed and expanded in my free time with the occasional help from people in the open-source community.",
|
||||
|
||||
|
||||
"about.tenets.title": "Core tenets",
|
||||
|
||||
"about.tenets.text.01": "",
|
||||
"about.tenets.text.02": "",
|
||||
|
||||
|
||||
"about.future.title": "Future plans",
|
||||
|
||||
"about.future.text.01":"It is planned to turn NibblePoker into a <abbr title=\"Private company with limited liability\">SPRL</abbr> in a couple years if everything goes as planned.",
|
||||
"about.future.text.02":"This would allow me to centralize many things and invest properly in my targetted fields to achieve my goals.",
|
||||
"about.future.text.10":"The goal would be to create a small sustainable local business that offers a wide range of products and solutions covering <abbr title=\"Internet of things\">IoT</abbr> devices, programming, and technological independence ; All while including the required software and hardware components often lacking in such products and solutions.",
|
||||
"about.future.text.20":"Ultimately, all this work and research would be made available 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 do.",
|
||||
|
||||
|
||||
"_about.nibblepoker.title": "The 'NibblePoker' name",
|
||||
"_about.nibblepoker.text.01": "TODO",
|
||||
"_about.nibblepoker.text.10": "TODO",
|
||||
"_about.nibblepoker.text.11": "TODO",
|
||||
"_about.nibblepoker.text.20": "TODO",
|
||||
|
||||
|
||||
"about.financing.title": "Financing",
|
||||
|
||||
"about.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 companies.",
|
||||
"about.financing.text.02": "Following my core tenets, I also wanted to retain some sort of \"technological sovereignty\", and therefore refuse to support or use companies that actively fight against legal free speech.",
|
||||
|
||||
"about.financing.text.10": "The details of the operating costs are provided below to illustrate the low price of such independence.",
|
||||
|
||||
"about.financing.text.20": "And for those of you who are more motivated, I hope to inspire you to at least try this kind of activity.",
|
||||
"about.financing.text.21": "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 a lot of things and gain valuable knowledge for a world as interconnected as ours.",
|
||||
|
||||
"about.financing.text.isp": "The main ISP bill isn't accounted for since this could run off some random public Wi-Fi.",
|
||||
|
||||
"about.financing.part.service": "Service",
|
||||
"about.financing.part.cost": "Cost",
|
||||
"about.financing.part.cost.total": "Total Cost",
|
||||
"about.financing.part.equipment": "Equipment",
|
||||
"about.financing.part.cost.yearly": "Yearly Cost",
|
||||
"about.financing.part.cost.yearly.total": "Yearly Cost",
|
||||
|
||||
"about.financing.part.domain.lu": "<i>.lu</i> domain",
|
||||
"about.financing.part.domain.com": "<i>.com</i> domain",
|
||||
"about.financing.part.proxy.europe": "European reverse-proxy",
|
||||
"about.financing.part.proxy.america": "American reverse-proxy",
|
||||
"about.financing.part.proxy.asia": "Asian reverse-proxy",
|
||||
"about.financing.part.emails": "Emails",
|
||||
"about.financing.part.electricity": "Electricity",
|
||||
"about.financing.part.nanopir4s": "NanoPi R4S",
|
||||
"about.financing.part.storage": "Local storage",
|
||||
|
||||
|
||||
"about.aziascreations.title": "The 'AziasCreations' name",
|
||||
"_about.aziascreations.text.01": "TODO",
|
||||
"_about.aziascreations.text.10": "TODO"
|
||||
}
|
3
commons/strings/en/common.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
@@ -1,11 +1,14 @@
|
||||
{
|
||||
"contact.title": "Contact",
|
||||
"contact.email.title": "Email",
|
||||
"contact.email.name": "Sender's Name",
|
||||
"contact.email.message": "Message",
|
||||
"contact.twitter.button": "Compose DM to @NibblePoker on Twitter",
|
||||
"contact.tox.main": "Main account:",
|
||||
"contact.tox.secondary": "Backup account:",
|
||||
"contact.tox.button.open": "Open in Tox Client",
|
||||
"contact.tox.button.copy": "Copy to clipboard"
|
||||
}
|
||||
"contact.head.title": "Contact - NibblePoker",
|
||||
"contact.head.description": "TODO: description",
|
||||
"contact.og.title": "NibblePoker - Contact",
|
||||
"contact.og.description": "TODO: description",
|
||||
"contact.header.title": "Contact",
|
||||
|
||||
"contact.email.title": "Email",
|
||||
"contact.email.compose": "Send an email to <i>herwin.bozet@gmail.com</i>",
|
||||
|
||||
"contact.twitter.title": "Twitter",
|
||||
"contact.twitter.compose": "Compose DM to @NibblePoker on Twitter"
|
||||
|
||||
}
|
83
commons/strings/en/content.json
Normal file
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"content.search.head.title": "Content search - NibblePoker",
|
||||
"content.search.head.description": "TODO: description",
|
||||
"content.search.og.title": "NibblePoker - Content search",
|
||||
"content.search.og.description": "TODO: description",
|
||||
|
||||
"content.search.heading.main.single": "Search result",
|
||||
"content.search.heading.main.multiple": "Search results",
|
||||
|
||||
"content.search.count.single": "result",
|
||||
"content.search.count.multiple": "results",
|
||||
|
||||
"content.header.base" : "Projects",
|
||||
"content.search.header" : "Search",
|
||||
"content.error.header" : "Error",
|
||||
"_content.item.header" : "",
|
||||
|
||||
"content.error.head.title": "Content error - NibblePoker",
|
||||
"_content.error.head.description": "Done via the '$content_error_message' variable",
|
||||
"content.error.og.title": "NibblePoker - Content error",
|
||||
"_content.error.og.description": "Done via the '$content_error_message' variable",
|
||||
|
||||
"content.error.heading.main.search": "Search error",
|
||||
"content.error.heading.main.content": "Content error",
|
||||
"content.error.heading.main.fallback": "Unknown error",
|
||||
|
||||
"_": "Messages returned by 'commons/content.php'",
|
||||
"content.error.message.none": "No explicit error was encountered.",
|
||||
"content.error.message.tags.length": "The \"tags\" URL parameter is too long.",
|
||||
"content.error.message.tags.alphanumeric": "One of the tags given in the \"tags\" URL parameter is not a valid alphanumeric string.",
|
||||
"content.error.message.detect.empty": "No content could be found for the given tags.",
|
||||
"content.error.message.id.alphanumeric": "The requested resource's ID isn't a valid alphanumeric string.",
|
||||
"content.error.message.data.not.exist": "The requested content doesn't have an internal item file associated to it.",
|
||||
"content.error.message.cannot.load": "The requested content couldn't be loaded on our end !",
|
||||
|
||||
"__": "Messages returned by 'commons/composer.php'",
|
||||
"content.error.message.data.no.tags": "No tags found !",
|
||||
"content.error.message.data.no.title": "No title found !",
|
||||
|
||||
"___": "Messages returned by 'commons/content/tools.php'",
|
||||
"_content.error.message.cannot.load.item.as.not.content": "",
|
||||
"_content.error.message.missing.file.dom": "",
|
||||
"_content.error.message.missing.file.lang": "",
|
||||
"_content.error.message.missing.file.code": "",
|
||||
"_content.error.message.missing.file.style": "",
|
||||
|
||||
"content.item.head.title.prefix": "",
|
||||
"content.item.head.title.suffix": " - NibblePoker",
|
||||
|
||||
"content.item.og.title.prefix": "",
|
||||
"content.item.og.title.suffix": " - NibblePoker",
|
||||
|
||||
"content.commons.version.current": "Current version",
|
||||
"content.commons.version.previous.single": "Previous version",
|
||||
"content.commons.version.previous.multiple": "Previous versions",
|
||||
"content.commons.version.old.single": "Old version",
|
||||
"content.commons.version.old.multiple": "Old versions",
|
||||
"content.commons.version.source": "Source code",
|
||||
"content.commons.cpu": "CPU <span class=\"mobile-hide\">Architecture</span>",
|
||||
"content.commons.cpu.responsive": "CPU <span class=\"mobile-hide\">Architecture</span>",
|
||||
"content.commons.cpu.any": "Any architecture",
|
||||
"content.commons.cpu.x64": "x64",
|
||||
"content.commons.cpu.x86": "x86",
|
||||
"content.commons.cpu.arm": "arm",
|
||||
"content.commons.cpu.arm64": "arm64",
|
||||
"content.commons.na.italic": "<i>N/A</i>",
|
||||
"content.commons.na": "N/A",
|
||||
"content.commons.lang": "Language",
|
||||
"content.commons.download.single": "Download",
|
||||
"content.commons.download.multiple": "Downloads",
|
||||
"content.commons.version": "Version",
|
||||
"content.commons.github": "GitHub Repository",
|
||||
"content.commons.gitea": "Self-hosted Gitea Repository",
|
||||
"content.commons.nuget": "Nuget Package",
|
||||
"content.commons.license.mit.single": "MIT License",
|
||||
|
||||
"content.commons.lang.english": "English",
|
||||
"content.commons.lang.french": "French",
|
||||
"content.commons.lang.luxembourgish": "Luxembourgish",
|
||||
"content.commons.lang.english.639-3": "English (eng)",
|
||||
"content.commons.lang.french.639-3": "French (fra)",
|
||||
"content.commons.lang.luxembourgish.639-3": "Luxembourgish (ltz)"
|
||||
}
|
12
commons/strings/en/contributors.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"contributors.head.title": "Contributors - NibblePoker",
|
||||
"contributors.head.description": "TODO: description",
|
||||
"contributors.og.title": "NibblePoker - Contributors",
|
||||
"contributors.og.description": "TODO: description",
|
||||
"contributors.header.title": "Contributors",
|
||||
|
||||
"contributors.intro.title": "???",
|
||||
"contributors.sponsors.title": "Sponsors",
|
||||
"contributors.code.title": "???",
|
||||
"contributors.spiritualis.title": "Spiritual support"
|
||||
}
|
23
commons/strings/en/error.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"error.403.head.title": "403 - NibblePoker",
|
||||
"error.403.head.description": "Access to the requested resource isn't unauthorized.",
|
||||
"error.403.og.title": "NibblePoker - 403 Error",
|
||||
"error.403.og.description": "Access to the requested resource isn't unauthorized.",
|
||||
"error.403.header.title": "Error<span class=\"mx-s t-size-15\">❱</span>403 Error",
|
||||
|
||||
"error.404.head.title": "404 - NibblePoker",
|
||||
"error.404.head.description": "The server couldn't find the requested resource.",
|
||||
"error.404.og.title": "NibblePoker - 404 Error",
|
||||
"error.404.og.description": "The server couldn't find the requested resource.",
|
||||
"error.404.header.title": "Error<span class=\"mx-s t-size-15\">❱</span>404 Error",
|
||||
|
||||
"error.500.head.title": "500 - NibblePoker",
|
||||
"error.500.head.description": "The server has encountered a situation it doesn't know how to handle.",
|
||||
"error.500.og.title": "NibblePoker - 500 Error",
|
||||
"error.500.og.description": "The server has encountered a situation it doesn't know how to handle.",
|
||||
"error.500.header.title": "Error<span class=\"mx-s t-size-15\">❱</span>500 Error",
|
||||
|
||||
"error.title": "%0 Error",
|
||||
|
||||
"error.skit.pc.dead": "Drawing of an old PC with a face with crossed eyes."
|
||||
}
|
5
commons/strings/en/footer.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"footer.text.privacy": "Privacy policy",
|
||||
"footer.alt.sidebar.button": "Open and close the navigation sidebar.",
|
||||
"footer.alt.logo": "Website's logo"
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"generic.button.close": "Close",
|
||||
"generic.button.copy": "Copy to clipboard",
|
||||
"generic.button.submit": "Submit",
|
||||
"generic.button.reset": "Reset"
|
||||
}
|
@@ -1,8 +1,34 @@
|
||||
{
|
||||
"home.title.nav": "Home",
|
||||
"home.title.header": "Homepage",
|
||||
"home.intro.meta.description": "${home.intro.meta.description}",
|
||||
"home.intro.title": "Welcome",
|
||||
"home.head.title": "NibblePoker",
|
||||
"home.head.description": "TODO: description",
|
||||
"home.og.title": "NibblePoker",
|
||||
"home.og.description": "TODO: description",
|
||||
"home.header.title": "Homepage",
|
||||
|
||||
|
||||
"home.intro.title": "Welcome to %0",
|
||||
"home.intro.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 for free and under open-source friendly licenses.",
|
||||
"home.intro.text.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."
|
||||
"home.intro.text.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.",
|
||||
|
||||
|
||||
"home.showcase.title": "Showcase",
|
||||
|
||||
|
||||
"home.updates.title": "Updates",
|
||||
|
||||
"home.updates.text.privacy": "● Updated our privacy policy.",
|
||||
|
||||
"home.updates.3.date": "Novembre 12 2023",
|
||||
"home.updates.3.text.1": "● Other services are back online.",
|
||||
"home.updates.3.text.2": "● Changed our host to <a href=\"https://www.ionos.fr/\">IONOS</a>.",
|
||||
"home.updates.3.text.3": "● Finished all side pages.",
|
||||
|
||||
"home.updates.2.date": "August 15 2023",
|
||||
"home.updates.2.text.1": "● The website is back online.",
|
||||
"home.updates.2.text.2": "● New and much lighter design.",
|
||||
"home.updates.2.text.3": "● Changed our host to <a href=\"https://hostbrr.com/\">HostBrr</a>.",
|
||||
"home.updates.2.text.4": "● Added a section for web-based tools.",
|
||||
|
||||
"home.updates.1.date": "September 9 2022",
|
||||
"home.updates.1.text.1": "● Changed our host to v6Node."
|
||||
}
|
31
commons/strings/en/links.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"links.head.title": "Links - NibblePoker",
|
||||
"links.head.description": "TODO: description",
|
||||
"links.og.title": "NibblePoker - Links",
|
||||
"links.og.description": "TODO: description",
|
||||
"links.header.title": "Links",
|
||||
|
||||
"links.social.title": "Social Networks",
|
||||
"links.misc.title": "Miscellaneous",
|
||||
|
||||
"links.twitter.title": "Twitter <i>(@NibblePoker)</i>",
|
||||
"links.twitter.text.1": "???",
|
||||
|
||||
"links.github.title": "GitHub <i>(@aziascreations)</i>",
|
||||
"links.github.text.1": "Private account containing all my personal projects.",
|
||||
|
||||
"links.github_pro.title": "GitHub <i>(@NibblePoker)</i>",
|
||||
"links.github_pro.text.1": "Organization containing all the repositories related to this website.",
|
||||
|
||||
"links.linkedin.title": "LinkedIn",
|
||||
"links.linkedin.text.1": "???",
|
||||
|
||||
"links.gitea.title": "Self-hosted Gitea",
|
||||
"links.gitea.text.1": "Contains all my projects and some mirrors from various sites.",
|
||||
|
||||
"links.files.title": "Public files & downloads",
|
||||
"links.files.text.1": "Contains all files that can be downloaded on this website and other documentation.",
|
||||
|
||||
"links.archives.title": "Public archives",
|
||||
"links.archives.text.1": "Contains various public archives."
|
||||
}
|
@@ -1,18 +1,14 @@
|
||||
{
|
||||
"privacy.title": "Privacy policy",
|
||||
|
||||
"privacy.description": "Our privacy policy in a clear and easy to understand format.",
|
||||
"privacy.head.title": "Privacy policy - NibblePoker",
|
||||
"privacy.head.description": "Our privacy policy in a clear and easy to understand format.",
|
||||
"privacy.og.title": "NibblePoker - Privacy Policy",
|
||||
"privacy.og.description": "Our privacy policy in a clear and easy to understand format.",
|
||||
"privacy.header.title": "Privacy policy",
|
||||
|
||||
"privacy.introduction.title": "Introduction",
|
||||
"privacy.introduction.text.1": "This privacy policy is written in accordance with the 12th and 13th articles of the GDPR.",
|
||||
"privacy.introduction.text.2": "If you wish to consult it, you can do so on the following websites:",
|
||||
|
||||
"_privacy.data.title": "What data do we collect ?",
|
||||
"_privacy.data.text.1": "This website, does not collect any personal data, be it through access logs, cookies or any third-party services.",
|
||||
"_privacy.update.title": "Changes to our privacy policy",
|
||||
"_privacy.update.text.1": "The content of this privacy policy was written and last updated on the 4th of December 2021.",
|
||||
"_privacy.update.text.2": "In the event of a change to our privacy policy, you will be informed explicitly, and a copy of previous versions of the policy will be available on this page.",
|
||||
|
||||
"privacy.contact.title": "How to contact us ?",
|
||||
"privacy.contact.text.1": "If you wish to contact us for more information regarding our privacy policy, please contact us via the form included on the contact page, or at the following email address:",
|
||||
|
||||
@@ -22,20 +18,21 @@
|
||||
|
||||
"privacy.v2.data.title": "Data collection",
|
||||
"privacy.v2.data.intro.1": "This websites only collects data through generic access logs in order to detect and block bad actors from accessing this website.",
|
||||
"privacy.v2.data.intro.2": "None of the data collected is used for any other purpose,it is never shared with any other third-party and is never use in any sort of analytics.",
|
||||
"privacy.v2.data.intro.2": "None of the data collected is used for any other purpose, it is never shared with any other third-party and is never use in any sort of analytics.",
|
||||
"privacy.v2.data.private.1": "Here is the list of private data being collected:",
|
||||
"privacy.v2.data.private_list.1": "IP address",
|
||||
"privacy.v2.data.private_list.2": "Browser's User-Agent",
|
||||
"privacy.v2.data.non_private.1": "And here is the list of non-private data being collected:",
|
||||
"privacy.v2.data.non_private_list.1": "Requested resource' URI",
|
||||
"privacy.v2.data.non_private_list.2": "Date and time",
|
||||
"privacy.v2.data.end.1": "Once the data has been logged in the access logs, it is automatically retrieved and processed by a locally-hosted application every 30 seconds and then deleted from said logs.",
|
||||
"privacy.v2.data.end.2": "This application compares this information against a list of known threat sources, targets and behaviours and if a match is found, the private information is anonymized and stored for 7 days pending a manual review.",
|
||||
"privacy.v2.data.end.1": "Once the data has been logged in the access logs, it is automatically retrieved and processed by a locally-hosted applications every 30-60 seconds and then deleted from said logs.",
|
||||
"privacy.v2.data.end.2": "This application compares this information against a list of known threat sources, targets and behaviours and if a match is found, the private information is stored for 7 days pending a manual review.",
|
||||
"privacy.v2.data.end.3": "Once that 7 day period has elapsed, or once the report has been reviewed, all the relevant data is automatically deleted.",
|
||||
"privacy.v2.data.end.4": "If your request wasn't flagged as potentially malicious, every data collected from it is thrown out instantly.",
|
||||
"privacy.v2.data.end.5": "This process should normally never be triggered for regular traffic since most of the triggering actions are ones that should not be possible to accomplish through normal browsing.",
|
||||
"privacy.v2.data.end.6": "However, this process isn't infallible and there is always an off chance that false positives may happen.",
|
||||
|
||||
"privacy.v2.update.title": "Changes to our privacy policy",
|
||||
"privacy.v2.update.intro.1": "The content of this privacy policy was originally written on the 4th of December 2021 and was last updated on the 18th of March 2022.",
|
||||
"privacy.v2.update.history.1.date": "2021/12/04",
|
||||
"privacy.v2.update.history.1.desc.1": "Original version",
|
||||
@@ -48,14 +45,29 @@
|
||||
"privacy.v2.update.history.3.desc.1.1": "Added mention about v6Node and linked to their privacy policy.",
|
||||
"privacy.v2.update.history.3.desc.1.2": "Removed mentions of CloudFlare.",
|
||||
"privacy.v2.update.history.3.desc.2": "Changed the \"Cookies\" section to indicate that none should be used on public domains.",
|
||||
"privacy.v2.update.history.4.date": "2023/11/11",
|
||||
"privacy.v2.update.history.4.desc.1": "Changed references to external services to reflect the migration to IONOS.",
|
||||
"privacy.v2.update.history.4.desc.1.1": "Removed mentions of v6Node.",
|
||||
"privacy.v2.update.history.4.desc.2": "Changed section on data collection to reflect new timings & infrastructure.",
|
||||
"privacy.v2.update.end.2": "In the event of a change to our privacy policy, you will be informed explicitly, and a copy of previous versions of the policy will be available through this page.",
|
||||
|
||||
"privacy.v2.third.title": "Third Parties",
|
||||
"privacy.v2.third.intro.1": "Our websites uses some services provided by v6Node in order to prevent bad actors from accessing this website and in order to put in place a reverse-proxy system.",
|
||||
"privacy.v2.third.intro.1": "Our websites uses some <abbr title=\"Virtual private server\">VPS</abbr> provided by IONOS in order to put in place a reverse-proxy system.",
|
||||
"privacy.v2.third.intro.2": "The goal of this system is to improve your browsing experience with the help of a private caching service and custom traffic filtering rules.",
|
||||
"privacy.v2.third.intro.3": "None of the data that may be gathered by v6Node or the system described above is ever used or stored.",
|
||||
"privacy.v2.third.intro.3": "No data should be collected on their side due to the nature of the server leased from IONOS.",
|
||||
"privacy.v2.third.intro.4": "If you'd wish to consult their privacy policy and their partners', you can do so by using the following URLs:",
|
||||
|
||||
|
||||
"privacy.v2.cookies.title": "Cookies",
|
||||
"privacy.v2.cookies.intro.1": "Our websites doesn't use nor store any cookies in your browser."
|
||||
"privacy.v2.cookies.intro.1": "Our websites doesn't use nor store any cookies in your browser.",
|
||||
|
||||
"privacy.v2.personal.title": "Personal Measures & Convictions",
|
||||
"privacy.v2.personal.disabled.intro": "While not required by any laws, we decided to improve your online privacy by disabling some features:",
|
||||
"privacy.v2.personal.disabled.list.1": "Disabling hidden <a href=\"https://wikipedia.org/wiki/HTTP_referer\">HTTP Referer</a> system.",
|
||||
"privacy.v2.personal.disabled.list.2": "Disabling Google's predatory <i>Topics API</i> and defunct <a href=\"https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea\"><i>Cohort</i></a> ad-serving systems.",
|
||||
"privacy.v2.personal.disabled.list.3": "Preventing any external third-party code from being injected into the page.",
|
||||
"privacy.v2.personal.tracking.text.1": "It is our belief that the web and modern technology in general should never be used to track and spy on people in any way shape or form.",
|
||||
"privacy.v2.personal.tracking.text.2": "We believe that any service that is in any way trying to force you to disable any ad-blocking or privacy-enhancing extensions should be avoided at all cost and shunned for their practices.",
|
||||
"privacy.v2.personal.tracking.text.3": "Modern website should <b>never</b> break with those type of extensions unless they are purposefully built to track you to near-illegal extents, this excuse is only used to force you to accept these predatory practices.",
|
||||
"_privacy.v2.personal.transparency.text.": "Additionally, we believe in the principles of transparency and openness [???]",
|
||||
"privacy.v2.personal.recommendations": "We also strongly recommend you to read the <acronym title=\"European Union Agency for Cybersecurity\">ENISA</acronym>'s <i>Privacy considerations of online behavioural tracking report</i> in order to improve your online privacy."
|
||||
}
|
||||
|
@@ -1,109 +0,0 @@
|
||||
{
|
||||
"programming.title": "Programming",
|
||||
"programming.title.projects": "Projects",
|
||||
"programming.java.title": "Java",
|
||||
"programming.purebasic.title": "PureBasic",
|
||||
"programming.python.title": "Python",
|
||||
"programming.others.title": "Others",
|
||||
"programming.docker.title": "Docker",
|
||||
"programming.apps.title": "Applications",
|
||||
"programming.downloads.title": "Downloads",
|
||||
"programming.git.title": "Git Repos.",
|
||||
"programming.tutorials.title": "Tutorials",
|
||||
"programming.tools.title": "Tools",
|
||||
"programming.games.title": "Games & Mods",
|
||||
"programming.library.title": "Libraries",
|
||||
"electronics.title": "Electronics",
|
||||
"electronics.iot.title": "IoT",
|
||||
"electronics.experiments.title": "Experiments",
|
||||
"electronics.ham.title": "HAM",
|
||||
"links.title": "Links",
|
||||
"links.visit.button": "Visit",
|
||||
"about.title": "About",
|
||||
"contact.description": "$contact.description",
|
||||
|
||||
"error.common.details.title": "Error details",
|
||||
"error.4xx.title": "HTTP Client Error",
|
||||
"error.4xx.text": "${error.4xx.text}",
|
||||
"error.4xx.button.back": "Go back",
|
||||
"error.403.title": "403 Error",
|
||||
"error.403.description": "Access to the requested resource is forbidden !",
|
||||
"error.403.explanation": "If this problem persists, you can contact us through avenues given on the <a href=\"/contact/\">Contact</a> page.",
|
||||
"error.404.title": "404 Error",
|
||||
"error.404.description": "The requested resource couldn't be found on the server !",
|
||||
"error.404.explanation": "If this problem persists, you can contact us through avenues given on the <a href=\"/contact/\">Contact</a> page.",
|
||||
|
||||
"error.content.title.generic": "Content error",
|
||||
"error.content.title.empty": "No content found",
|
||||
"error.content.none": "No explicit error was encountered.",
|
||||
"error.content.detect.category": "Failed to detect which category of content you requested.",
|
||||
"error.content.detect.display": "Failed to detect if you requested the category's search page or a specific one.",
|
||||
"error.content.detect.subtype": "Failed to detect the sub-type of content you requested.",
|
||||
"error.content.detect.tags": "Failed to detect the basic tags for the content you requested.",
|
||||
"error.content.detect.empty": "No content could be found for the given tags.",
|
||||
"error.content.tags.length": "The \"tags\" URL parameter is too long.",
|
||||
"error.content.tags.alphanumeric": "One of the tags given in the \"tags\" URL parameter is not a valid alphanumeric string.",
|
||||
"error.content.detect.type": "The type of requested content couldn't be determined.",
|
||||
"error.content.id.alphanumeric": "The requested resource's ID isn't a valid alphanumeric string.",
|
||||
"error.content.data.not.exist": "The requested content doesn't have an internal item file associated to it.",
|
||||
"error.content.data.no.title": "No title found !",
|
||||
"error.content.data.no.description": "No description found !",
|
||||
"error.content.data.no.tags": "No tags found !",
|
||||
"error.content.data.no.parts": "No content parts were found for this content !",
|
||||
"error.content.data.no.subpart": "No sub-element were found for this element !",
|
||||
"error.content.data.part.unknown": "Unknown element: \"%s\" !",
|
||||
"error.content.cannot.load": "The requested content couldn't be loaded !",
|
||||
|
||||
"content.title.error": "Error",
|
||||
"content.title.content": "Content",
|
||||
"content.title.search.header": "Search",
|
||||
"content.title.search.card": "Content search",
|
||||
"content.title.search.card.single": "Search result",
|
||||
"content.title.search.card.multiple": "Search results",
|
||||
"content.tags.requested": "Requested tags",
|
||||
"content.search.count.single": "result",
|
||||
"content.search.count.multiple": "results",
|
||||
|
||||
"content.fallback.content.commons.version.current": "Current version",
|
||||
"content.fallback.content.commons.version.previous.single": "Previous version",
|
||||
"content.fallback.content.commons.version.previous.multiple": "Previous versions",
|
||||
"content.fallback.content.commons.version.old.single": "Old version",
|
||||
"content.fallback.content.commons.version.old.multiple": "Old versions",
|
||||
"content.fallback.content.commons.version.source": "Source code",
|
||||
"content.fallback.content.commons.cpu": "CPU <span class=\"hidden-xs-and-down\">Architecture</span>",
|
||||
"content.fallback.content.commons.cpu.responsive": "CPU <span class=\"hidden-xs-and-down\">Architecture</span>",
|
||||
"content.fallback.content.commons.cpu.any": "Any architecture",
|
||||
"content.fallback.content.commons.cpu.x64": "x64",
|
||||
"content.fallback.content.commons.cpu.x86": "x86",
|
||||
"content.fallback.content.commons.cpu.arm": "arm",
|
||||
"content.fallback.content.commons.cpu.arm64": "arm64",
|
||||
"content.fallback.content.commons.na.italic": "<i>N/A</i>",
|
||||
"content.fallback.content.commons.na": "N/A",
|
||||
"content.fallback.content.commons.lang": "Language",
|
||||
"content.fallback.content.commons.download.single": "Download",
|
||||
"content.fallback.content.commons.download.multiple": "Downloads",
|
||||
"content.fallback.content.commons.version": "Version",
|
||||
"content.fallback.content.commons.github": "GitHub Repository",
|
||||
"content.fallback.content.commons.gitea": "Self-hosted Gitea Repository",
|
||||
"content.fallback.content.commons.nuget": "Nuget Package",
|
||||
"content.fallback.content.commons.license.mit.single": "MIT License",
|
||||
|
||||
"content.fallback.content.commons.lang.english": "English",
|
||||
"content.fallback.content.commons.lang.french": "French",
|
||||
"content.fallback.content.commons.lang.luxembourgish": "Luxembourgish",
|
||||
"content.fallback.content.commons.lang.english.639-3": "English (eng)",
|
||||
"content.fallback.content.commons.lang.french.639-3": "French (fra)",
|
||||
"content.fallback.content.commons.lang.luxembourgish.639-3": "Luxembourgish (ltz)",
|
||||
|
||||
"content.default.head.title" : "No title found !",
|
||||
"content.default.head.description" : "No description found !",
|
||||
"content.default.opengraph.title" : "No title found !",
|
||||
"content.default.opengraph.description" : "No description found !",
|
||||
|
||||
"downloads.title": "Downloads",
|
||||
"downloads.description": "$downloads.description",
|
||||
"downloads.title.header": "Downloads",
|
||||
"downloads.intro.title": "Directory listing of: <i>/files/</i>",
|
||||
|
||||
"modal.title.debugging": "Debugging information"
|
||||
}
|
18
commons/strings/en/sidebar.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"sidebar.alt.logo": "Website's logo",
|
||||
"sidebar.text.home": "Home",
|
||||
"sidebar.text.shop": "Shop",
|
||||
"sidebar.text.school": "Training",
|
||||
"sidebar.text.projects": "Projects",
|
||||
"sidebar.text.applications": "Applications",
|
||||
"sidebar.text.libraries": "Libraries",
|
||||
"sidebar.text.electronics": "Electronics",
|
||||
"sidebar.text.tools": "Tools",
|
||||
"sidebar.text.links": "Links",
|
||||
"sidebar.text.downloads": "Downloads",
|
||||
"sidebar.text.gitea": "Git Repos.",
|
||||
"sidebar.text.wiki": "Wiki",
|
||||
"sidebar.text.about": "About",
|
||||
"sidebar.text.contributors": "Contributors",
|
||||
"sidebar.text.contact": "Contact"
|
||||
}
|
7
commons/strings/en/tools.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"tools.head.title": "Tools - NibblePoker",
|
||||
"tools.head.description": "TODO: description",
|
||||
"tools.og.title": "NibblePoker - Tools",
|
||||
"tools.og.description": "TODO: description",
|
||||
"tools.header.title": "Tools"
|
||||
}
|
@@ -1,7 +1,75 @@
|
||||
{
|
||||
"about.biography.title": "Qui suis-je ?",
|
||||
"about.philosophy.title": "Philosophie des projets",
|
||||
"about.skills.title": "Compétences",
|
||||
"about.work.title": "Parcours professionnel",
|
||||
"about.education.title": "Éducation"
|
||||
"about.head.title": "À-propos - NibblePoker",
|
||||
"about.head.description": "TODO: description",
|
||||
"about.og.title": "NibblePoker - À-propos",
|
||||
"about.og.description": "TODO: description",
|
||||
"about.header.title": "À-propos",
|
||||
|
||||
|
||||
"about.intro.title": "Introduction",
|
||||
|
||||
"about.intro.text.01": "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 embarqués et le développement web général.",
|
||||
"about.intro.text.02": "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 dans le but d'aider les programmeurs et les gens dans leur vie quotidienne.",
|
||||
|
||||
"about.intro.text.10": "NibblePoker est, en essence, un simple pseudonyme et une ombrelle sous laquelle la majeure partie de mon travail axé sur le public sera présente.",
|
||||
"about.intro.text.11": "Il abrite l'ensemble de mon travail créé et adapté pour être utilisé par d'autres personnes.",
|
||||
|
||||
"about.intro.text.20": "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 disponibles sous des licences permissives approuvées par l'<abbr title=\"Open Source Initiative\">OSI</abbr>.",
|
||||
"about.intro.text.21": "Tout cela est maintenu, développé et étendu pendant mon temps libre, avec l'aide occasionnelle de personnes de la communauté open source.",
|
||||
|
||||
|
||||
"about.tenets.title": "Principes fondamentaux",
|
||||
|
||||
"about.tenets.text.01": "",
|
||||
"about.tenets.text.02": "",
|
||||
|
||||
|
||||
"about.future.title": "Projet d'avenir",
|
||||
|
||||
"about.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.\n",
|
||||
"about.future.text.02":"Cela aura pour but de me permettre de centraliser plein de choses et d'investir correctement dans mes domaines de prédilection.",
|
||||
"about.future.text.10":"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 les domaines de l'électronique connectée et intelligente, la programmation et l’indépendance technologique tout en incluant les composantes logicielles et physiques souvent manquantes dans de tels produits et solutions.",
|
||||
"about.future.text.20":"Finalement tout ce travail et recherches seraient mis à disposition du public sous des licences open-source afin de permettre permettant à quiconque le souhaite d’apprendre, réutiliser et revendre des produits ouverts tels que le font des compagnies comme Adafruit.",
|
||||
|
||||
|
||||
"_about.nibblepoker.title": "Le nom 'NibblePoker'",
|
||||
"_about.nibblepoker.text.01": "Le surnom '<i>NibblePoker</i>' est un mot composé de plusieurs termes [techniques] plus anciens.",
|
||||
"_about.nibblepoker.text.10": "● '<i>Nibble</i>' est un terme technique anglais historiquement utilisé pour décrire décrit un demi-octet, ou 4 bits d'information.",
|
||||
"_about.nibblepoker.text.11": "● '<i>Poker</i>' viens du verbe anglais '<i>to 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.",
|
||||
"_about.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.",
|
||||
|
||||
|
||||
"about.financing.title": "Financement",
|
||||
|
||||
"about.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 qui se prennent pour des censeurs.",
|
||||
"about.financing.text.02": "Et en suivant mes principes fondamentaux, je souhaitais également conserver une \"souveraineté technologique\", et, par conséquent, refuse de soutenir ou d'utiliser des entreprises qui luttent activement contre la liberté d'expression.",
|
||||
|
||||
"about.financing.text.10": "Le détail des coûts opérationnels sont présents ci-dessous afin d'illustrer le faible prix d'une telle indépendance.",
|
||||
|
||||
"about.financing.text.20": "Et pour les plus motivés d'entre-vous, j'espère pouvoir vous motiver à au moins tester ce genre d'activités.",
|
||||
"about.financing.text.21": "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>, vous pouvez déjà accomplir énormément de choses et acquérir des connaissances essentielles dans un monde aussi connecté que le nôtre.",
|
||||
|
||||
"about.financing.text.isp": "Le coût de la connexion internet n'est pas compté car elle pourrait être remplacée par un Wi-Fi public lambda.",
|
||||
|
||||
"about.financing.part.service": "Service",
|
||||
"about.financing.part.cost": "Coût",
|
||||
"about.financing.part.cost.total": "Coût Total",
|
||||
"about.financing.part.equipment": "Matériel",
|
||||
"about.financing.part.cost.yearly": "Coût Annuel",
|
||||
"about.financing.part.cost.yearly.total": "Coût Annuel",
|
||||
|
||||
"about.financing.part.domain.lu": "Domaine en <i>.lu</i>",
|
||||
"about.financing.part.domain.com": "Domaine en <i>.com</i>",
|
||||
"about.financing.part.proxy.europe": "Reverse-proxy en Europe",
|
||||
"about.financing.part.proxy.america": "Reverse-proxy en Amérique",
|
||||
"about.financing.part.proxy.asia": "Reverse-proxy en Asie",
|
||||
"about.financing.part.emails": "Adresses email",
|
||||
"about.financing.part.electricity": "Électricité",
|
||||
"about.financing.part.nanopir4s": "NanoPi R4S",
|
||||
"about.financing.part.storage": "Stockage local",
|
||||
|
||||
|
||||
"about.aziascreations.title": "Le nom 'AziasCreations'",
|
||||
"about.aziascreations.text.01": "L'ancien surnom 'AziasCreations' était utilisé entre 2013 et 2020 et est à présent abandonné au profit de <i>NibblePoker</i>.",
|
||||
"about.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."
|
||||
}
|
3
commons/strings/fr/common.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
@@ -1,11 +1,14 @@
|
||||
{
|
||||
"contact.title": "Contact",
|
||||
"contact.email.title": "Courriel",
|
||||
"contact.email.name": "Nom de l'envoyeur",
|
||||
"contact.email.message": "Message",
|
||||
"contact.twitter.button": "Composer un message privé pour @NibblePoker sur Twitter",
|
||||
"contact.tox.main": "Compte principal:",
|
||||
"contact.tox.secondary": "Compte secondaire:",
|
||||
"contact.tox.button.open": "Ouvrir dans un client Tox",
|
||||
"contact.tox.button.copy": "Copier dans le presse-papier"
|
||||
}
|
||||
"contact.head.title": "Contact - NibblePoker",
|
||||
"contact.head.description": "TODO: description",
|
||||
"contact.og.title": "NibblePoker - Contact",
|
||||
"contact.og.description": "TODO: description",
|
||||
"contact.header.title": "Contact",
|
||||
|
||||
"contact.email.title": "Courriel",
|
||||
"contact.email.compose": "Envoyer un courriel à <i>herwin.bozet@gmail.com</i>",
|
||||
|
||||
"contact.twitter.title": "Twitter",
|
||||
"contact.twitter.compose": "Composer un message privé pour @NibblePoker sur Twitter"
|
||||
|
||||
}
|
75
commons/strings/fr/content.json
Normal file
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"content.search.head.title": "Recherche de contenu - NibblePoker",
|
||||
"content.search.head.description": "TODO: description",
|
||||
"content.search.og.title": "NibblePoker - Recherche de contenu",
|
||||
"content.search.og.description": "TODO: description",
|
||||
|
||||
"content.search.heading.main.single": "Résultat de recherche",
|
||||
"content.search.heading.main.multiple": "Résultats de recherche",
|
||||
|
||||
"content.search.count.single": "résultat",
|
||||
"content.search.count.multiple": "résultats",
|
||||
|
||||
"content.header.base" : "Projets",
|
||||
"content.search.header" : "Recherche",
|
||||
"content.error.header" : "Erreur",
|
||||
"_content.item.header" : "",
|
||||
|
||||
"content.error.head.title": "Erreur de contenu - NibblePoker",
|
||||
"_content.error.head.description": "Done via the '$content_error_message' variable",
|
||||
"content.error.og.title": "NibblePoker - Erreur de contenu",
|
||||
"_content.error.og.description": "Done via the '$content_error_message' variable",
|
||||
|
||||
"content.error.heading.main.search": "Erreur de recherche",
|
||||
"content.error.heading.main.content": "Erreur de contenu",
|
||||
"content.error.heading.main.fallback": "Erreur inconnue",
|
||||
|
||||
"_": "Messages returned by 'commons/content.php'",
|
||||
"content.error.message.none": "Aucune erreur n'a été détectée.",
|
||||
"content.error.message.tags.length": "Le paramètre d'URL \"tags\" est trop long.",
|
||||
"content.error.message.tags.alphanumeric": "Un des tags donné dans le paramètre d'URL \"tags\" n'est pas une chaîne de texte alphanumérique valide.",
|
||||
"content.error.message.detect.empty": "Aucun contenu en rapport avec les tags choisi n'as été trouvé.",
|
||||
"content.error.message.id.alphanumeric": "L'ID de la ressource demandée n'est pas une chaîne de texte alphanumérique valide.",
|
||||
"content.error.message.data.not.exist": "Le contenu demandée n'a pas de fichier de rendu interne associé.",
|
||||
"content.error.message.cannot.load": "Le contenu demandé n'a pas pu être chargé de notre côté !",
|
||||
|
||||
"__": "Messages returned by 'commons/composer.php'",
|
||||
"content.error.message.data.no.tags": "Aucun tag trouvé !",
|
||||
"content.error.message.data.no.title": "Aucun titre trouvé !",
|
||||
|
||||
"content.item.head.title.prefix": "",
|
||||
"content.item.head.title.suffix": " - NibblePoker",
|
||||
|
||||
"content.item.og.title.prefix": "",
|
||||
"content.item.og.title.suffix": " - NibblePoker",
|
||||
|
||||
"content.commons.version.current": "Version actuelle",
|
||||
"content.commons.version.previous.single": "Version précédente",
|
||||
"content.commons.version.previous.multiple": "Versions précédentes",
|
||||
"content.commons.version.old.single": "Ancienne version",
|
||||
"content.commons.version.old.multiple": "Anciennes versions",
|
||||
"content.commons.version.source": "Code source",
|
||||
"content.commons.cpu": "Architecture de CPU",
|
||||
"content.commons.cpu.any": "Indépendante",
|
||||
"content.commons.cpu.x64": "x64",
|
||||
"content.commons.cpu.x86": "x86",
|
||||
"content.commons.cpu.arm": "arm",
|
||||
"content.commons.cpu.arm64": "arm64",
|
||||
"content.commons.na.italic": "<i>N/A</i>",
|
||||
"content.commons.na": "N/A",
|
||||
"content.commons.lang": "Langue",
|
||||
"content.commons.download.single": "Téléchargement",
|
||||
"content.commons.download.multiple": "Téléchargements",
|
||||
"content.commons.version": "Version",
|
||||
"content.commons.github": "Dépôt GitHub",
|
||||
"content.commons.gitea": "Dépôt Gitea auto-hébergé",
|
||||
"content.commons.nuget": "Packet Nuget",
|
||||
"content.commons.license.mit.single": "License MIT",
|
||||
|
||||
"content.commons.lang.english": "Anglais",
|
||||
"content.commons.lang.french": "Français",
|
||||
"content.commons.lang.luxembourgish": "Luxembourgeois",
|
||||
"content.commons.lang.english.639-3": "Anglais (eng)",
|
||||
"content.commons.lang.french.639-3": "Français (fra)",
|
||||
"content.commons.lang.luxembourgish.639-3": "Luxembourgeois (ltz)"
|
||||
}
|
12
commons/strings/fr/contributors.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"contributors.head.title": "Contributeurs - NibblePoker",
|
||||
"contributors.head.description": "TODO: description",
|
||||
"contributors.og.title": "NibblePoker - Contributeurs",
|
||||
"contributors.og.description": "TODO: description",
|
||||
"contributors.header.title": "Contributeurs",
|
||||
|
||||
"contributors.intro.title": "???",
|
||||
"contributors.sponsors.title": "Sponsors",
|
||||
"contributors.code.title": "???",
|
||||
"contributors.spiritualis.title": "Support spirituel"
|
||||
}
|
3
commons/strings/fr/error.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
|
||||
}
|
5
commons/strings/fr/footer.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"footer.text.privacy": "Politique de confidentialité",
|
||||
"footer.alt.sidebar.button": "Ouvrir et fermer le menu latéral de navigation.",
|
||||
"footer.alt.logo": "Logo du site web"
|
||||
}
|
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"generic.button.close": "Fermer",
|
||||
"generic.button.copy": "Copier dans le presse-papier",
|
||||
"generic.button.submit": "Envoyer",
|
||||
"generic.button.reset": "Réinitialiser"
|
||||
}
|
@@ -1,8 +1,35 @@
|
||||
{
|
||||
"home.title.nav": "Accueil",
|
||||
"home.title.header": "Page d'accueil",
|
||||
"home.intro.meta.description": "${home.intro.meta.description}",
|
||||
"home.intro.title": "Bienvenue",
|
||||
"home.intro.text.1": "Ce site internet contient une collection de mon travail personnel dans le domaine de l'informatique, le tout étant rendu accessible par le biais d'articles de blog, ? et ?, le tout sous une licence ouverte et en open source.",
|
||||
"home.intro.text.2": "Si vous désirez me contacter, vous pouvez le faire via le formulaire de contact dans la page prévu à cet effet qui est liée dans le menu latéral ou via l'adresse email présente sur cette page."
|
||||
}
|
||||
"home.head.title": "NibblePoker",
|
||||
"home.head.description": "TODO: description",
|
||||
"home.og.title": "NibblePoker",
|
||||
"home.og.description": "TODO: description",
|
||||
"home.header.title": "Page d'accueil",
|
||||
|
||||
|
||||
"_home.intro.title": "Bienvenue sur '<i>%0</i>'",
|
||||
"home.intro.title": "Bienvenue sur %0",
|
||||
"home.intro.text.1": "Ce site web contient une collection de mes travaux personnels tels que des articles de blog, des logiciels utilitaires ou d'autres formes de médias.<br>Tout est accessible gratuitement et sous des licences à l'open source.",
|
||||
"home.intro.text.2": "Si vous souhaitez me contacter, vous pouvez le faire via la page de contact lié dans la barre de navigation latérale.",
|
||||
|
||||
|
||||
"home.showcase.title": "Vitrine",
|
||||
|
||||
|
||||
"home.updates.title": "Updates",
|
||||
|
||||
"home.updates.text.privacy": "● Mise-à-jour de notre politique de confidentialité.",
|
||||
|
||||
"home.updates.3.date": "12 novembre 2023",
|
||||
"home.updates.3.text.1": "● Les services annexes sont disponibles.",
|
||||
"home.updates.3.text.2": "● Changement d'hébergeur vers <a href=\"https://www.ionos.fr/\">IONOS</a>.",
|
||||
"home.updates.3.text.3": "● Finition des pages annexes.",
|
||||
|
||||
"home.updates.2.date": "15 août 2023",
|
||||
"home.updates.2.text.1": "● Le site internet est à nouveau disponible.",
|
||||
"home.updates.2.text.2": "● Mise en place d'un nouveau design plus léger.",
|
||||
"home.updates.2.text.3": "● Changement d'hébergeur vers <a href=\"https://hostbrr.com/\">HostBrr</a>.",
|
||||
"home.updates.2.text.4": "● Ajout d'une nouvelle section pour les outils.",
|
||||
|
||||
"home.updates.1.date": " 9 septembre 2022",
|
||||
"home.updates.1.text.1": "● Changement d'hébergeur vers v6Node."
|
||||
}
|
31
commons/strings/fr/links.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"links.head.title": "Liens - NibblePoker",
|
||||
"links.head.description": "TODO: description",
|
||||
"links.og.title": "NibblePoker - Liens",
|
||||
"links.og.description": "TODO: description",
|
||||
"links.header.title": "Liens",
|
||||
|
||||
"links.social.title": "Réseaux Sociaux",
|
||||
"links.misc.title": "Autres liens",
|
||||
|
||||
"links.twitter.title": "Twitter <i>(@NibblePoker)</i>",
|
||||
"links.twitter.text.1": "???",
|
||||
|
||||
"links.github.title": "GitHub <i>(@aziascreations)</i>",
|
||||
"links.github.text.1": "Compte privé contenant tous mes projets personnels.",
|
||||
|
||||
"links.github_pro.title": "GitHub <i>(@NibblePoker)</i>",
|
||||
"links.github_pro.text.1": "Organisation contenant tout les dépôts en relation avec ce site web.",
|
||||
|
||||
"links.linkedin.title": "LinkedIn",
|
||||
"links.linkedin.text.1": "???",
|
||||
|
||||
"links.gitea.title": "Gitea auto-hébergé",
|
||||
"links.gitea.text.1": "Contient tous mes projets et des miroirs provenant de divers sites.",
|
||||
|
||||
"links.files.title": "Fichiers publiques",
|
||||
"links.files.text.1": "Contient tout les fichiers pouvant être téléchargé sur ce site web et dans ma documentation.",
|
||||
|
||||
"links.archives.title": "Archives publiques",
|
||||
"links.archives.text.1": "Contient une variété d'archives publiques."
|
||||
}
|
@@ -1,18 +1,14 @@
|
||||
{
|
||||
"privacy.title": "Politique de confidentialité",
|
||||
|
||||
"privacy.description": "Notre politique de confidentialité dans un format clair et compréhensible.",
|
||||
"privacy.head.title": "Politique de confidentialité - NibblePoker",
|
||||
"privacy.head.description": "Notre politique de confidentialité dans un format clair et compréhensible.",
|
||||
"privacy.og.title": "NibblePoker - Politique de confidentialité",
|
||||
"privacy.og.description": "Notre politique de confidentialité dans un format clair et compréhensible.",
|
||||
"privacy.header.title": "Politique de confidentialité",
|
||||
|
||||
"privacy.introduction.title": "Introduction",
|
||||
"privacy.introduction.text.1": "La politique de confidentialité ci-présente a été écrite en accord avec les articles 12 et 13 de la RGPD.",
|
||||
"privacy.introduction.text.2": "Si vous souhaitez consulter le texte officiel en question, vous pouvez le faire sur les sites internet suivants :",
|
||||
|
||||
"_privacy.data.title": "Quelles données sont collectées ?",
|
||||
"_privacy.data.text.1": "Ce site web ne collecte aucune donnée personnelle, que ce soit au travers des journaux d'évènements sur nos serveurs, des cookies ou via quelconque autre tiers parti.",
|
||||
"_privacy.update.title": "Changements à notre politique de confidentialité",
|
||||
"_privacy.update.text.1": "Le contenu de notre politique de confidentialité a été écrit et modifié pour la dernière fois le 4 décembre 2021.",
|
||||
"_privacy.update.text.2": "En cas de changement, vous serez clairement informé et une copie des anciennes versions de notre politique sera disponible sur cette page.",
|
||||
|
||||
"privacy.contact.title": "Comment nous contacter ?",
|
||||
"privacy.contact.text.1": "Si vous souhaitez nous contacter afin d'obtenir plus d'informations concernant notre politique de confidentialité, nous vous recommandons d'utiliser le formulaire présent sur la page de contact, ou par courriel à l'adresse suivante:",
|
||||
|
||||
@@ -29,13 +25,14 @@
|
||||
"privacy.v2.data.non_private.1": "Et voici la liste des données non-personelles collectées:",
|
||||
"privacy.v2.data.non_private_list.1": "L'URI de la ressource demandée",
|
||||
"privacy.v2.data.non_private_list.2": "La date et l'heure",
|
||||
"privacy.v2.data.end.1": "Les données présentes dans les journaux d'évènements sont extraites et retirées pour être traitées par une application qui tourne en local toute les 30 secondes.",
|
||||
"privacy.v2.data.end.2": "L'application en question utilise et compare ces informations avec une liste d'acteurs malveillants et comportement suspects connus.<br>Si une correspondance est détectée, les informations privées sont anonymisées et sont stockées pendant 7 jours en attendant qu'un examen manuel soit effectué.",
|
||||
"privacy.v2.data.end.1": "Les données présentes dans les journaux d'évènements sont extraites et retirées pour être traitées par des applications qui tournent en local toute les 30 à 60 secondes.",
|
||||
"privacy.v2.data.end.2": "L'application en question utilise et compare ces informations avec une liste d'acteurs malveillants et comportement suspects connus.<br>Si une correspondance est détectée, les informations privées sont stockées pendant 7 jours en attendant qu'un examen manuel soit effectué.",
|
||||
"privacy.v2.data.end.3": "Après cette période de 7 jours, ou après qu'un examen ait été effectué, les données sont automatiquement supprimées.",
|
||||
"privacy.v2.data.end.4": "Toute information concernant une requête non suspecte est automatiquement supprimée.",
|
||||
"privacy.v2.data.end.5": "Ce processus n'est normalement jamais utilisé sur des requêtes provenant d'un trafic légitime dû au fait qu'il isole principalement les actions et requêtes qui ne devraient pas être possible sur ce site.",
|
||||
"privacy.v2.data.end.6": "Cependant, ce processus n'est pas infaillible et il est toujours possible qu'une requête soit isolée par erreur.",
|
||||
|
||||
"privacy.v2.update.title": "Changements à notre politique de confidentialité",
|
||||
"privacy.v2.update.intro.1": "Le contenu de notre politique de confidentialité a été originalement écrit et le 4 décembre 2021 modifié pour la dernière fois le 18 mars 2022.",
|
||||
"privacy.v2.update.history.1.date": "2021/12/04",
|
||||
"privacy.v2.update.history.1.desc.1": "Version originale",
|
||||
@@ -48,12 +45,16 @@
|
||||
"privacy.v2.update.history.3.desc.1.1": "Ajout de mentions de v6Node et liens vers leur politique de vie confidentialité.",
|
||||
"privacy.v2.update.history.3.desc.1.2": "Suppression de mentions de CloudFlare.",
|
||||
"privacy.v2.update.history.3.desc.2": "Changement de la section \"Cookies\" afin d'indiquer qu'ils ne seront plus utilisés sur les domaines publics.",
|
||||
"privacy.v2.update.history.4.date": "2023/11/11",
|
||||
"privacy.v2.update.history.4.desc.1": "Changement des références aux services externes pour indiquer l'utilisation de IONOS.",
|
||||
"privacy.v2.update.history.4.desc.1.1": "Suppression de mentions de v6Node.",
|
||||
"privacy.v2.update.history.4.desc.2": "Changement des temps de traitement et mentions de l'infrastructure dans la section <i>\"Changements à notre politique de confidentialité\"</i>.",
|
||||
"privacy.v2.update.end.2": "En cas de changement, vous serez clairement informé et une copie des anciennes versions de notre politique sera disponible au travers de cette page.",
|
||||
|
||||
"privacy.v2.third.title": "Organismes tiers",
|
||||
"privacy.v2.third.intro.1": "Ce site web utilise les services proposés par v6Node afin d'empêcher des acteurs malveillants d'y accéder et dans le but de mettre en place un système de reverse-proxy.",
|
||||
"privacy.v2.third.intro.1": "Ce site web utilise un <abbr title=\"Serveur privé virtuel\">VPS</abbr> proposés par IONOS dans le but de mettre en place un système de reverse-proxy.",
|
||||
"privacy.v2.third.intro.2": "Ceci a pour but d'améliorer l'expérience des personnes le visitant grâce à un système de filtrage et caching privé.",
|
||||
"privacy.v2.third.intro.3": "Aucune des données collectées et stockées par v6Node et le système décris ci-dessus n'est utilisé ou stocké.",
|
||||
"privacy.v2.third.intro.3": "Due à la nature du serveur loué à IONOS, aucune donnée ne devraient être collectées de leur côté.",
|
||||
"privacy.v2.third.intro.4": "Si vous souhaitez consulter leur politique de confidentialité ainsi que celle de leur partenaires, vous pouvez le faire en suivant les liens ci-dessous:",
|
||||
|
||||
"privacy.v2.cookies.title": "Cookies de navigation",
|
||||
|
@@ -1,100 +0,0 @@
|
||||
{
|
||||
"programming.title": "Programmation",
|
||||
"programming.title.projects": "Projets",
|
||||
"programming.java.title": "Java",
|
||||
"programming.purebasic.title": "PureBasic",
|
||||
"programming.python.title": "Python",
|
||||
"programming.others.title": "Autres",
|
||||
"programming.docker.title": "Docker",
|
||||
"programming.apps.title": "Applications",
|
||||
"programming.downloads.title": "Téléchargements",
|
||||
"programming.git.title": "Dépôts Git",
|
||||
"programming.tutorials.title": "Tutoriels",
|
||||
"programming.tools.title": "Outils",
|
||||
"programming.games.title": "Jeux & Mods",
|
||||
"programming.library.title": "Librairies",
|
||||
"electronics.title": "Électronique",
|
||||
"electronics.iot.title": "IoT",
|
||||
"electronics.experiments.title": "Expériences",
|
||||
"electronics.ham.title": "HAM",
|
||||
"links.title": "Liens",
|
||||
"links.visit.button": "Visiter",
|
||||
"about.title": "À-propos",
|
||||
"contact.description": "$contact.description",
|
||||
|
||||
"error.common.details.title": "Détails de l'erreur",
|
||||
"error.4xx.title": "Erreur du client HTTP",
|
||||
"error.4xx.text": "${error.4xx.text}",
|
||||
"error.4xx.button.back": "Retourner en arrière",
|
||||
"error.403.title": "Erreur 403",
|
||||
"error.403.description": "L'accès à la ressource demandée est interdit !",
|
||||
"error.403.explanation": "Si ce problème persiste, vous pouvez nous contacter via une des avenues données sur la page <a href=\"/contact/\">Contact</a>.",
|
||||
"error.404.title": "Erreur 404",
|
||||
"error.404.description": "La ressource demandée est introuvable sur le serveur !",
|
||||
"error.404.explanation": "Si ce problème persiste, vous pouvez nous contacter via une des avenues données sur la page <a href=\"/contact/\">Contact</a>.",
|
||||
|
||||
"error.content.title.generic": "Erreur de contenu",
|
||||
"error.content.title.empty": "Aucun contenu trouvé",
|
||||
"error.content.none": "Aucune erreur n'a été détectée.",
|
||||
"error.content.detect.category": "Impossibilité de détecter la catégorie de contenu demandée.",
|
||||
"error.content.detect.display": "Impossibilité de détecter si une recherche ou page spécifique était demandée.",
|
||||
"error.content.detect.subtype": "Impossibilité de détecter le sous-type de contenu demandé.",
|
||||
"error.content.detect.tags": "Impossibilité de détecter les tags de base du contenu demandé.",
|
||||
"error.content.detect.empty": "Aucun contenu en rapport avec les tags choisi n'as été trouvé.",
|
||||
"error.content.tags.length": "Le paramètre d'URL \"tags\" est trop long.",
|
||||
"error.content.tags.alphanumeric": "Un des tags donné dans le paramètre d'URL \"tags\" n'est pas une chaîne de texte alphanumérique valide.",
|
||||
"error.content.detect.type": "Le type de contenu désiré n'as pas pu être détecté.",
|
||||
"error.content.id.alphanumeric": "L'ID de la ressource demandée n'est pas une chaîne de texte alphanumérique valide.",
|
||||
"error.content.data.not.exist": "Le contenu demandée n'a pas de fichier de rendu interne associé.",
|
||||
"error.content.data.no.title": "Aucun titre trouvé !",
|
||||
"error.content.data.no.description": "Aucune description trouvée !",
|
||||
"error.content.data.no.tags": "Aucun tag trouvé !",
|
||||
"error.content.data.no.parts": "Aucun élément à présenter n'a été trouvé !",
|
||||
"error.content.data.no.subpart": "Aucun sous-élément n'a été trouvé pour cet élément !",
|
||||
"error.content.data.part.unknown": "Élément inconnu: \"%s\" !",
|
||||
"error.content.cannot.load": "Le contenu demandé n'a pas pu être chargé !",
|
||||
|
||||
"content.title.error": "Erreur de contenu",
|
||||
"content.title.content": "Projets",
|
||||
"content.title.search.header": "Recherche",
|
||||
"content.title.search.card": "Recherche de contenu",
|
||||
"content.title.search.card.single": "Résultat de recherche",
|
||||
"content.title.search.card.multiple": "Résultats de recherche",
|
||||
"content.tags.requested": "Tags demandés",
|
||||
"content.search.count.single": "résultat",
|
||||
"content.search.count.multiple": "résultats",
|
||||
|
||||
"content.fallback.content.commons.version.current": "Version actuelle",
|
||||
"content.fallback.content.commons.version.previous.single": "Version précédente",
|
||||
"content.fallback.content.commons.version.previous.multiple": "Versions précédentes",
|
||||
"content.fallback.content.commons.version.old.single": "Ancienne version",
|
||||
"content.fallback.content.commons.version.old.multiple": "Anciennes versions",
|
||||
"content.fallback.content.commons.version.source": "Code source",
|
||||
"content.fallback.content.commons.cpu": "Architecture de CPU",
|
||||
"content.fallback.content.commons.cpu.any": "Indépendante",
|
||||
"content.fallback.content.commons.cpu.x64": "x64",
|
||||
"content.fallback.content.commons.cpu.x86": "x86",
|
||||
"content.fallback.content.commons.cpu.arm": "arm",
|
||||
"content.fallback.content.commons.cpu.arm64": "arm64",
|
||||
"content.fallback.content.commons.na.italic": "<i>N/A</i>",
|
||||
"content.fallback.content.commons.na": "N/A",
|
||||
"content.fallback.content.commons.lang": "Langue",
|
||||
"content.fallback.content.commons.download.single": "Téléchargement",
|
||||
"content.fallback.content.commons.download.multiple": "Téléchargements",
|
||||
"content.fallback.content.commons.version": "Version",
|
||||
"content.fallback.content.commons.github": "Dépôt GitHub",
|
||||
"content.fallback.content.commons.gitea": "Dépôt Gitea auto-hébergé",
|
||||
"content.fallback.content.commons.nuget": "Packet Nuget",
|
||||
"content.fallback.content.commons.license.mit.single": "License MIT",
|
||||
|
||||
"content.fallback.content.commons.lang.english": "Anglais",
|
||||
"content.fallback.content.commons.lang.french": "Français",
|
||||
"content.fallback.content.commons.lang.luxembourgish": "Luxembourgeois",
|
||||
|
||||
"content.default.head.title" : "Aucun titre trouvé !",
|
||||
"content.default.head.description" : "Aucune description trouvée !",
|
||||
"content.default.opengraph.title" : "Aucun titre trouvé !",
|
||||
"content.default.opengraph.description" : "Aucune description trouvée !",
|
||||
|
||||
"modal.title.debugging": "Informations de débogage"
|
||||
}
|
18
commons/strings/fr/sidebar.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"sidebar.alt.logo": "Logo du site web",
|
||||
"sidebar.text.home": "Accueil",
|
||||
"sidebar.text.shop": "Magasin",
|
||||
"sidebar.text.school": "Formations",
|
||||
"sidebar.text.projects": "Projets",
|
||||
"sidebar.text.applications": "Applications",
|
||||
"sidebar.text.libraries": "Librairies",
|
||||
"sidebar.text.electronics": "Électronique",
|
||||
"sidebar.text.tools": "Outils",
|
||||
"sidebar.text.links": "Liens",
|
||||
"sidebar.text.downloads": "Téléchargements",
|
||||
"sidebar.text.gitea": "Dépôts Git",
|
||||
"sidebar.text.wiki": "Wiki",
|
||||
"sidebar.text.about": "À-propos",
|
||||
"sidebar.text.contributors": "Contributeurs",
|
||||
"sidebar.text.contact": "Contact"
|
||||
}
|
7
commons/strings/fr/tools.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"tools.head.title": "Outils - NibblePoker",
|
||||
"tools.head.description": "TODO: description",
|
||||
"tools.og.title": "NibblePoker - Outils",
|
||||
"tools.og.description": "TODO: description",
|
||||
"tools.header.title": "Outils"
|
||||
}
|
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"home.title.nav": "Doheem",
|
||||
"home.intro.title": "Wëllkomm op <i>NibblePoker.lu</i> !"
|
||||
}
|
@@ -1,3 +0,0 @@
|
||||
{
|
||||
"lang.current": "Luxembourgish"
|
||||
}
|
209
compile.bat
Normal file
@@ -0,0 +1,209 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
:: Going into the script's directory
|
||||
cd /D "%~dp0"
|
||||
|
||||
|
||||
:clean
|
||||
call "%~dp0clean.bat"
|
||||
:clean-end
|
||||
|
||||
|
||||
:lang
|
||||
echo.
|
||||
echo Handling the languages
|
||||
echo ----------------------
|
||||
|
||||
:lang-compile
|
||||
echo Compiling lang files...
|
||||
python commons/strings/compile.py
|
||||
|
||||
:lang-end
|
||||
|
||||
|
||||
:sass
|
||||
echo.
|
||||
echo Handling the SASS files
|
||||
echo -----------------------
|
||||
|
||||
:sass-compile
|
||||
echo Compiling SASS files...
|
||||
pushd %CD%
|
||||
cd %~dp0\resources\NibblePoker\scss\
|
||||
call "%~dp0node_modules\.bin\sass" nibblepoker.scss:../css/nibblepoker.css -q
|
||||
call "%~dp0node_modules\.bin\sass" nibblepoker.scss:../css/nibblepoker.min.css -q --style compressed
|
||||
popd
|
||||
|
||||
:sass-end
|
||||
|
||||
|
||||
:libs
|
||||
echo.
|
||||
echo Handling the libraries
|
||||
echo ----------------------
|
||||
|
||||
:libs-nibblepoker-minify
|
||||
echo Minifying nibblepoker.js
|
||||
pushd %CD%
|
||||
cd %~dp0\resources\NibblePoker\js\
|
||||
echo ^> resources\NibblePoker\js\nibblepoker.js
|
||||
call "%~dp0node_modules\.bin\terser" nibblepoker.js -c -m -o nibblepoker.min.js
|
||||
echo ^> resources\NibblePoker\js\nibblepoker-code.js
|
||||
call "%~dp0node_modules\.bin\terser" nibblepoker-code.js -c -m -o nibblepoker-code.min.js
|
||||
echo ^> resources\NibblePoker\js\nibblepoker-contributors.js
|
||||
call "%~dp0node_modules\.bin\terser" nibblepoker-contributors.js -c -m -o nibblepoker-contributors.min.js
|
||||
echo ^> resources\NibblePoker\js\nibblepoker-glider.js
|
||||
call "%~dp0node_modules\.bin\terser" nibblepoker-glider.js -c -m -o nibblepoker-glider.min.js
|
||||
popd
|
||||
|
||||
:libs-decimaljs-minify
|
||||
echo Minifying Decimal.JS
|
||||
pushd %CD%
|
||||
cd %~dp0\resources\DecimalJs\10.4.3\
|
||||
echo ^> resources\DecimalJs\10.4.3\decimal.mjs
|
||||
call "%~dp0node_modules\.bin\terser" decimal.mjs -c -m --toplevel -o decimal.min.mjs
|
||||
cd %~dp0\resources\DecimalJsLight\2.5.1\
|
||||
echo ^> resources\DecimalJsLight\2.5.1\decimal.mjs
|
||||
call "%~dp0node_modules\.bin\terser" decimal.mjs -c -m --toplevel -o decimal.min.mjs
|
||||
popd
|
||||
|
||||
:libs-end
|
||||
|
||||
goto end
|
||||
|
||||
:: THE Formula-wizard minified files don't point to the proper minified JS file !!!!
|
||||
|
||||
|
||||
:formula-wizard
|
||||
echo.
|
||||
echo Handling the 'Formula Wizard'
|
||||
echo -----------------------------
|
||||
|
||||
:formula-wizard-clean
|
||||
echo Cleaning...
|
||||
pushd %CD%
|
||||
cd %~dp0\tools\items\formula-wizard\src\
|
||||
del *.js 2>nul
|
||||
del *.map 2>nul
|
||||
popd
|
||||
|
||||
:formula-wizard-compile
|
||||
echo Compiling TypeScript...
|
||||
pushd %CD%
|
||||
cd %~dp0\tools\items\formula-wizard\src\
|
||||
call "%~dp0node_modules\.bin\tsc"
|
||||
popd
|
||||
|
||||
:formula-wizard-fix-imports
|
||||
echo Fixing imports...
|
||||
pushd %CD%
|
||||
cd %~dp0\tools\items\formula-wizard\src\
|
||||
call node "%~dp0fix-import-path.js" "formulas.js;lang.js;main.js;units.js;ui_catalog.js;mvc_context.js;sets.js;mvc_formula.js;utils_templates.js;formula_weaver.js" "decimal" "decimal.min.mjs"
|
||||
call node "%~dp0fix-import-path.js" "formulas.js;lang.js;main.js;units.js;ui_catalog.js;mvc_context.js;sets.js;mvc_formula.js;utils_templates.js;formula_weaver.js" "lang" "lang.js"
|
||||
call node "%~dp0fix-import-path.js" "formulas.js;lang.js;main.js;units.js;ui_catalog.js;mvc_context.js;sets.js;mvc_formula.js;utils_templates.js;formula_weaver.js" "formulas" "formulas.js"
|
||||
call node "%~dp0fix-import-path.js" "formulas.js;lang.js;main.js;units.js;ui_catalog.js;mvc_context.js;sets.js;mvc_formula.js;utils_templates.js;formula_weaver.js" "units" "units.js"
|
||||
call node "%~dp0fix-import-path.js" "formulas.js;lang.js;main.js;units.js;ui_catalog.js;mvc_context.js;sets.js;mvc_formula.js;utils_templates.js;formula_weaver.js" "ui_catalog" "ui_catalog.js"
|
||||
call node "%~dp0fix-import-path.js" "formulas.js;lang.js;main.js;units.js;ui_catalog.js;mvc_context.js;sets.js;mvc_formula.js;utils_templates.js;formula_weaver.js" "mvc_context" "mvc_context.js"
|
||||
call node "%~dp0fix-import-path.js" "formulas.js;lang.js;main.js;units.js;ui_catalog.js;mvc_context.js;sets.js;mvc_formula.js;utils_templates.js;formula_weaver.js" "sets" "sets.js"
|
||||
call node "%~dp0fix-import-path.js" "formulas.js;lang.js;main.js;units.js;ui_catalog.js;mvc_context.js;sets.js;mvc_formula.js;utils_templates.js;formula_weaver.js" "mvc_formula" "mvc_formula.js"
|
||||
call node "%~dp0fix-import-path.js" "formulas.js;lang.js;main.js;units.js;ui_catalog.js;mvc_context.js;sets.js;mvc_formula.js;utils_templates.js;formula_weaver.js" "formula_weaver" "formula_weaver.js"
|
||||
call node "%~dp0fix-import-path.js" "formulas.js;lang.js;main.js;units.js;ui_catalog.js;mvc_context.js;sets.js;mvc_formula.js;utils_templates.js;formula_weaver.js" "utils_templates" "utils_templates.js"
|
||||
popd
|
||||
|
||||
:formula-wizard-bundle
|
||||
echo Making the bundle...
|
||||
pushd %CD%
|
||||
cd %~dp0\tools\items\formula-wizard\src\
|
||||
call "%~dp0node_modules\.bin\rollup" main.js --format cjs --sourcemap --file formula-wizard.js
|
||||
popd
|
||||
|
||||
:formula-wizard-minify
|
||||
echo Minifying the files...
|
||||
pushd %CD%
|
||||
cd %~dp0\tools\items\formula-wizard\src\
|
||||
call "%~dp0node_modules\.bin\terser" main.js -c -m --toplevel -o main.min.js
|
||||
call "%~dp0node_modules\.bin\terser" lang.js -c -m --toplevel -o lang.min.js
|
||||
call "%~dp0node_modules\.bin\terser" formulas.js -c -m --toplevel -o formulas.min.js
|
||||
call "%~dp0node_modules\.bin\terser" units.js -c -m --toplevel -o units.min.js
|
||||
call "%~dp0node_modules\.bin\terser" ui_catalog.js -c -m --toplevel -o ui_catalog.min.js
|
||||
call "%~dp0node_modules\.bin\terser" mvc_context.js -c -m --toplevel -o mvc_context.min.js
|
||||
call "%~dp0node_modules\.bin\terser" sets.js -c -m --toplevel -o sets.min.js
|
||||
call "%~dp0node_modules\.bin\terser" mvc_formula.js -c -m --toplevel -o mvc_formula.min.js
|
||||
call "%~dp0node_modules\.bin\terser" utils_templates.js -c -m --toplevel -o utils_templates.min.js
|
||||
call "%~dp0node_modules\.bin\terser" formula_weaver.js -c -m --toplevel -o formula_weaver.min.js
|
||||
call "%~dp0node_modules\.bin\terser" formula-wizard.js -c -m --toplevel -o formula-wizard.min.js
|
||||
popd
|
||||
|
||||
:formula-wizard-end
|
||||
|
||||
|
||||
:php
|
||||
echo.
|
||||
echo Handling the PHP files
|
||||
echo -----------------------
|
||||
|
||||
:php-minify
|
||||
echo Minifying PHP files...
|
||||
pushd %CD%
|
||||
:: We minify the .php files to help with some weird spacing issues that cannot be fixed with CSS.
|
||||
:: This issue is usually handled by the reverse-proxy or a middleware, but since I need to export SPA(s), I can't rely on it
|
||||
for /r "%CD%" %%F in (*.php) do (
|
||||
set inputPath=%%F
|
||||
set outputPath=%%~dpnF.min.php
|
||||
|
||||
echo ^> "!inputPath!" =^> "!outputPath!"
|
||||
call "%~dp0node_modules\.bin\html-minifier-terser" --conservative-collapse --collapse-inline-tag-whitespace ^
|
||||
--collapse-whitespace --remove-comments --decode-entities --continue-on-parse-error -o "!outputPath!" "!inputPath!"
|
||||
)
|
||||
popd
|
||||
|
||||
:php-relink
|
||||
echo Linking minified PHP files together...
|
||||
pushd %CD%
|
||||
:: We change every .php extension to .min.php in all the minified file.
|
||||
:: I didn't use Python because it fails miserably with utf-8 symbols...
|
||||
for /r "%CD%" %%F in (*.min.php) do (
|
||||
node "%~dp0php-relinker.js" "%%F"
|
||||
)
|
||||
popd
|
||||
|
||||
:php-end
|
||||
|
||||
|
||||
:compile-typescript
|
||||
echo Compiling TypeScript for ".js" files...
|
||||
call .\node_modules\.bin\tsc
|
||||
|
||||
:fix-typescript-imports
|
||||
echo Fixing import paths for ".js" files manually...
|
||||
node .\fix-import-path.js "tools/items/formula-wizard/code.js" "decimal" "decimal.min.mjs"
|
||||
|
||||
:minify-js
|
||||
echo Minifying JS manually...
|
||||
pushd %CD%
|
||||
|
||||
:: rollup, maybe
|
||||
|
||||
cd %~dp0\resources\DecimalJs\10.4.3\
|
||||
echo ^> resources\DecimalJs\10.4.3\decimal.mjs
|
||||
call "%~dp0node_modules\.bin\terser" decimal.mjs -c -m --toplevel -o decimal.min.mjs
|
||||
|
||||
cd %~dp0\resources\DecimalJsLight\2.5.1\
|
||||
echo ^> resources\DecimalJsLight\2.5.1\decimal.mjs
|
||||
call "%~dp0node_modules\.bin\terser" decimal.mjs -c -m --toplevel -o decimal.min.mjs
|
||||
|
||||
cd %~dp0\tools\items\formula-wizard\
|
||||
echo ^> tools\items\formula-wizard\code.js
|
||||
call "%~dp0node_modules\.bin\terser" code.js -c passes=9 --module --ecma 2019 --mangle --toplevel -o code.min.js
|
||||
:: Due to the fact I used interfaces and because terser has its limits, I need to manually minify some properties.
|
||||
:: It is done this way to avoid having to make some arcane incantations that may break if terser feels like it some day.
|
||||
:: TODO: Make a post minifier
|
||||
|
||||
cd %~dp0\tools\items\b64-tools\
|
||||
echo ^> tools\items\b64-tools\code.js
|
||||
call "%~dp0node_modules\.bin\terser" code.js -c --module --ecma 2017 --mangle -o code.min.js
|
||||
|
||||
popd
|
||||
|
||||
:end
|
@@ -1,132 +1,60 @@
|
||||
<?php
|
||||
set_include_path('../commons/');
|
||||
include_once 'config.php';
|
||||
include_once 'langs.php';
|
||||
$start_time = microtime(true);
|
||||
set_include_path('../');
|
||||
include_once 'commons/config.php';
|
||||
include_once 'commons/langs.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo($user_language); ?>">
|
||||
<head>
|
||||
<?php include 'headers.php'; ?>
|
||||
<title><?php print(localize('contact.title')); ?> - Nibble Poker</title>
|
||||
<meta name="description" content="<?php print(localize('contact.description')); ?>">
|
||||
<meta property="og:title" content="Nibble Poker - <?php print(localize('contact.title')); ?>" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="<?php echo($host_uri); ?>/" />
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/Azias/logos/v2_opengraph.png"/>
|
||||
<?php include 'commons/DOM/head.php'; ?>
|
||||
<title><?php print(localize('contact.head.title')); ?></title>
|
||||
<meta name="description" content="<?php print(localize('contact.head.description')); ?>">
|
||||
<meta property="og:title" content="<?php print(localize('contact.og.title')); ?>"/>
|
||||
<meta property="og:type" content="website"/>
|
||||
<meta property="og:url" content="<?php echo($host_uri . l10n_url_abs('/')); ?>"/>
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/NibblePoker/images/logos/v2_opengraph.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="<?php print(localize('contact.description')); ?>"/>
|
||||
<meta property="og:description" content="<?php print(localize('contact.og.description')); ?>"/>
|
||||
</head>
|
||||
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-sidebar-shortcut-enabled="true">
|
||||
<?php include 'body-root.php'; ?>
|
||||
<div class="page-wrapper with-sidebar with-navbar-fixed-bottom">
|
||||
<?php $SIDEBAR_ID = 'contact'; include 'sidebar.php'; ?>
|
||||
|
||||
<div class="content-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div id="page-title-bar" class="card p-0 pl-20 m-0 square-corners bg-very-dark title-bkgd navbar">
|
||||
<h2 class="content-title font-size-24 mt-20 text-truncate">
|
||||
<i class="fad fa-mailbox"></i> <?php print(localize("contact.title")); ?>
|
||||
</h2>
|
||||
<?php include 'header-lang.php'; ?>
|
||||
</div>
|
||||
<div class="content mx-auto w-lg-p90">
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<h2 class="card-title font-size-18 m-0"><i class="fad fa-envelope-square"></i> <?php print(localize("contact.email.title")); ?></h2>
|
||||
</div>
|
||||
<div class="col-8 text-right font-italic">
|
||||
<h2 class="card-title font-size-18 m-0 text-super-muted">herwin.bozet@gmail.com</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-20 bg-light-lm bg-very-dark-dm rounded-bottom px-20">
|
||||
<form action="mailto:herwin.bozet@gmail.com?subject=Website%20contact%20form%20message" target="_top" method="post" class="w-full">
|
||||
<div class="form-group">
|
||||
<label for="name"><?php print(localize("contact.email.name")); ?></label>
|
||||
<input type="text" class="form-control" id="name" placeholder="John Smith">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="message" class="required"><?php print(localize("contact.email.message")); ?></label>
|
||||
<textarea class="form-control" id="message" placeholder="Write your message here." required="required"></textarea>
|
||||
</div>
|
||||
<input class="btn btn-primary mr-10" type="submit" value="<?php print(localize("generic.button.submit")); ?>">
|
||||
<input class="btn btn-secondary" type="reset" value="<?php print(localize("generic.button.reset")); ?>">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<h2 class="card-title font-size-18 m-0"><i class="fab fa-twitter"></i> Twitter</h2>
|
||||
</div>
|
||||
<div class="col-8 text-right font-italic">
|
||||
<h2 class="card-title font-size-18 m-0 text-super-muted">@NibblePoker</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-20 bg-light-lm bg-very-dark-dm rounded-bottom pl-20">
|
||||
<a href="https://twitter.com/messages/compose?recipient_id=937370791334895616">
|
||||
<button class="btn btn-primary"><?php print(localize("contact.twitter.button")); ?></button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-5 col-lg-12">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fad fa-lock-alt"></i> Tox
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-10 bg-light-lm bg-very-dark-dm rounded-bottom px-20">
|
||||
<p class="mb-0 mt-10">
|
||||
<?php print(localize("contact.tox.main")); ?>
|
||||
</p>
|
||||
<p class="text-monospace text-break font-size-12 mt-0 ml-10">
|
||||
62C1A91A425F90D7B4F047D70CCF31E7402C9EC37B93604B0F37C416442D15044AF6C1AE033B
|
||||
</p>
|
||||
<p class="mb-20 text-decoration-none">
|
||||
<a href="tox:62C1A91A425F90D7B4F047D70CCF31E7402C9EC37B93604B0F37C416442D15044AF6C1AE033B" class="text-decoration-none">
|
||||
<button class="btn btn-primary"><?php print(localize("contact.tox.button.open")); ?></button>
|
||||
</a>
|
||||
<button id="button-copy-tox-id-main" class="btn btn-secondary ml-10">
|
||||
<?php print(localize("contact.tox.button.copy")); ?>
|
||||
</button>
|
||||
</p>
|
||||
<hr>
|
||||
<p class="mb-0">
|
||||
<?php print(localize("contact.tox.secondary")); ?>
|
||||
</p>
|
||||
<p class="text-monospace text-break font-size-12 mt-0 ml-10">
|
||||
01ABBD4515C8FA56231333D1022CEEE0A605F4E85F8A945365F56D196A1BBA10FB4DCE08DBE8
|
||||
</p>
|
||||
<p>
|
||||
<a href="tox:01ABBD4515C8FA56231333D1022CEEE0A605F4E85F8A945365F56D196A1BBA10FB4DCE08DBE8" class="text-decoration-none">
|
||||
<button class="btn btn-primary"><?php print(localize("contact.tox.button.open")); ?></button>
|
||||
</a>
|
||||
<button id="button-copy-tox-id-backup" class="btn btn-secondary ml-10">
|
||||
<?php print(localize("contact.tox.button.copy")); ?>
|
||||
</button>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include 'footer.php'; ?>
|
||||
</div>
|
||||
<script src="/resources/HalfMoon/1.1.1/js/halfmoon.min.js"></script>
|
||||
<script src="/resources/Azias/js/nibblepoker.lu.js"></script>
|
||||
<body>
|
||||
<?php
|
||||
include_once 'commons/DOM/utils.php';
|
||||
$SIDEBAR_IDS = ['contact'];
|
||||
include 'commons/DOM/sidebar.php';
|
||||
?>
|
||||
<header class="w-full p-m pl-s">
|
||||
<h1 class="t-size-17 t-w-500">
|
||||
<i class="fad fa-mailbox t-size-16 mr-s t-muted"></i><?php print(localize("contact.header.title")); ?>
|
||||
</h1>
|
||||
<?php include 'commons/DOM/header-lang.php'; ?>
|
||||
</header>
|
||||
<main id="main" class="rl-m border border-r-0 p-l">
|
||||
|
||||
<?php printMainHeader(localize("contact.email.title"), "fad fa-mail-bulk", "herwin.bozet@gmail.com"); ?>
|
||||
<p class="m-s">
|
||||
<a href="mailto:Herwin Bozet<herwin.bozet@gmail.com>?subject=Contact%20via%20NibblePoker.lu" class="bland-link button-link">
|
||||
<button class="p-xs r-s border b-light success"><i class="fad fa-external-link-alt mr-xs"></i><?php print(localize("contact.email.compose")); ?></button>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<?php printMainHeader(localize("contact.twitter.title"), "fab fa-twitter", "@NibblePoker"); ?>
|
||||
<p class="m-s">
|
||||
<a href="https://twitter.com/messages/compose?recipient_id=937370791334895616" class="bland-link button-link">
|
||||
<button class="p-xs r-s border b-light primary"><i class="fad fa-external-link-alt mr-xs"></i><?php print(localize("contact.twitter.compose")); ?></button>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
</main>
|
||||
<?php
|
||||
include 'commons/DOM/footer.php';
|
||||
include 'commons/DOM/scripts.php';
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
<?php
|
||||
$end_time = microtime(true);
|
||||
if($print_execution_timer) {
|
||||
echo("<!-- PHP execution took " . round(($end_time - $start_time) * 1000, 2) . " ms -->");
|
||||
}
|
||||
?>
|
@@ -1,3 +1,6 @@
|
||||
# Serving minified pages and/or pre-rendered ones first if available.
|
||||
DirectoryIndex index.min.html index.min.php index.php index.html
|
||||
|
||||
# Redirecting any URL that starts with "/content" to the root of this folder.
|
||||
RewriteEngine On
|
||||
RewriteRule ^(.*) index.php [NC]
|
||||
|
@@ -9,8 +9,9 @@
|
||||
"en": "A simple CLI tool that can list COM ports with their name, friendly name and device name easily and cleanly.<br>This tool is intended to replace the tedious task of having to use the <code>mode</code> command, and the <i>Device Manager</i> to find a newly plugged-in device that provides a COM port.",
|
||||
"fr": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemins des ports COM.<br>Cet outil a pour bût de faciliter cette tâche sans avoir à utiliser la commande <code>mode</code> ou le <i>Gestionnaire de périphérique</i>."
|
||||
},
|
||||
"image": "/resources/Azias/imgs/lscom/lscom-v2-text-01-bkgd-cli.png",
|
||||
"tags": ["application", "tool" ,"lscom", "dotnet", "windows"]
|
||||
"image": "/resources/NibblePoker/images/content/lscom/lscom-v2-text-01-bkgd-cli.png",
|
||||
"tags": ["application", "tool" ,"lscom", "dotnet", "windows"],
|
||||
"priority": 100
|
||||
},
|
||||
{
|
||||
"id": "youtube-auto-archiver",
|
||||
@@ -22,8 +23,9 @@
|
||||
"en": "A simple and yet highly configurable Python application that automatically checks if a Youtuber is streaming, and downloads said streams while also archiving its latest uploads.",
|
||||
"fr": "Conteneur et application Python hautement configurable qui permet d'automatiquement archiver et télécharger des livestreams et vidéos depuis YouTube."
|
||||
},
|
||||
"image": "/resources/Azias/imgs/yaa/icon-final.png",
|
||||
"tags": ["docker", "application", "web", "python"]
|
||||
"image": "/resources/NibblePoker/images/content/yaa/icon-final.png",
|
||||
"tags": ["docker", "application", "web", "python"],
|
||||
"priority": 30
|
||||
},
|
||||
{
|
||||
"id": "excel-worksheet-password-remover",
|
||||
@@ -35,11 +37,12 @@
|
||||
"en": "Small web page from which you can easily remove a password from an Excel worksheet.<br>It works by leaving the task of editing the XML files on an Excel document to your browser instead to keep everything local.",
|
||||
"fr": "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 fichier sur internet.<br>Cette application laisse votre navigateur modifier les fichiers XML du fichier Excel afin de tout garder en local."
|
||||
},
|
||||
"image": "/resources/Azias/imgs/excel-password-remover/excel-password-remover.png",
|
||||
"image": "/resources/NibblePoker/images/content/excel-password-remover/excel-password-remover.png",
|
||||
"tags": [
|
||||
"tool",
|
||||
"web"
|
||||
]
|
||||
],
|
||||
"priority": 50
|
||||
},
|
||||
{
|
||||
"id": "dotnet-arguments",
|
||||
@@ -51,11 +54,12 @@
|
||||
"en": "A simple and 'to-the-point' library to parse launch arguments in .NET and .NET Core applications.",
|
||||
"fr": "Une petite librairie simple et efficace pour lire et interpréter les options de lancement d'un programme pour .NET et .NET Core."
|
||||
},
|
||||
"image": "/resources/Azias/imgs/placeholder.png",
|
||||
"image": "/resources/NibblePoker/images/placeholder.png",
|
||||
"tags": [
|
||||
"library",
|
||||
"dotnet"
|
||||
]
|
||||
],
|
||||
"priority": 40
|
||||
},
|
||||
{
|
||||
"id": "mc-expanded-iron-bundles",
|
||||
@@ -67,12 +71,13 @@
|
||||
"en": "A small Minecraft mod that provides bundles with more storage space, and new functionalities in the future.",
|
||||
"fr": "Un petit mod pour Minecraft qui ajoute des sacs avec plus d'espace de stockage et de nouvelles fonctionalitées dans le futur."
|
||||
},
|
||||
"image": "/resources/Azias/imgs/mc-expanded-iron-bundles/item-icon.png",
|
||||
"image": "/resources/NibblePoker/images/content/mc-expanded-iron-bundles/item-icon.png",
|
||||
"tags": [
|
||||
"game",
|
||||
"minecraft",
|
||||
"mod"
|
||||
]
|
||||
],
|
||||
"priority": 20
|
||||
},
|
||||
{
|
||||
"id": "lscom-cli",
|
||||
@@ -84,7 +89,7 @@
|
||||
"en": "A simple CLI tool that can list COM ports with their name, friendly name and device name easily and cleanly.<br>This tool is intended to replace the tedious task of having to use the <code>mode</code> command, and the <i>Device Manager</i> to find a newly plugged-in device that provides a COM port.",
|
||||
"fr": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemins des ports COM.<br>Cet outil a pour bût de faciliter cette tâche sans avoir à utiliser la commande <code>mode</code> ou le <i>Gestionnaire de périphérique</i>."
|
||||
},
|
||||
"image": "/resources/Azias/imgs/lscom/lscom-legacy-simple.png",
|
||||
"image": "/resources/NibblePoker/images/content/lscom/lscom-legacy-simple.png",
|
||||
"tags": ["application", "tool" ,"lscom", "purebasic", "windows"]
|
||||
}
|
||||
]
|
||||
|
@@ -1,15 +1,31 @@
|
||||
<?php
|
||||
$start_time = microtime(true);
|
||||
|
||||
// Importing required scripts.
|
||||
set_include_path('../commons/');
|
||||
include_once 'config.php';
|
||||
include_once 'langs.php';
|
||||
include_once 'content.php';
|
||||
set_include_path('../');
|
||||
include_once 'commons/config.php';
|
||||
include_once 'commons/langs.php';
|
||||
|
||||
// Preparing the content
|
||||
include_once 'commons/content.php';
|
||||
include_once 'commons/composer.php';
|
||||
$contentManager = getContentManager($config_dir_content);
|
||||
$content = NULL;
|
||||
if(!$contentManager->hasError && $contentManager->displayType == ContentDisplayType::CONTENT) {
|
||||
$content = load_content_by_file_path($contentManager->contentFilepath);
|
||||
if(is_null($content)) {
|
||||
$contentManager->hasError = true;
|
||||
$contentManager->errorMessageKey = "content.error.message.cannot.load";
|
||||
}
|
||||
}
|
||||
$content_error_message = localize($contentManager->errorMessageKey);
|
||||
|
||||
// Checking if an error occurred while loading data and parsing the URL.
|
||||
// And if not, enabling special features.
|
||||
$content_error_code = 200;
|
||||
if($content_has_error) {
|
||||
// TODO: Add condition for the lack of data for an item.
|
||||
if(is_null($filtered_content_index_data)) {
|
||||
if($contentManager->hasError) {
|
||||
// TODO: Add condition for the lack of data for an item.
|
||||
if(is_null($contentManager->rootIndexEntries)) {
|
||||
// Failed to get a display type or to extract types.
|
||||
header("HTTP/1.1 400 Bad Request");
|
||||
$content_error_code = 400;
|
||||
@@ -18,167 +34,170 @@ if($content_has_error) {
|
||||
header("HTTP/1.1 500 Internal Server Error");
|
||||
$content_error_code = 500;
|
||||
}
|
||||
} else {
|
||||
$enable_code_highlight = true;
|
||||
$enable_glider = true;
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo($user_language); ?>">
|
||||
<head>
|
||||
<?php
|
||||
include 'headers.php';
|
||||
|
||||
// Setting up the page's title, description and opengraph tags.
|
||||
if($content_has_error) {
|
||||
echo('<title>' . localize("error.content.title.generic") . ' - Nibble Poker</title>');
|
||||
echo('<meta name="description" content="'.$content_error_message.'">');
|
||||
echo('<meta property="og:title" content="Nibble Poker - '.localize("error.content.title.generic").'" />');
|
||||
echo('<meta property="og:description" content="'.$content_error_message.'"/>');
|
||||
echo('<meta property="og:type" content="website" />');
|
||||
echo('<meta property="og:url" content="' . $host_uri . '" />');
|
||||
echo('<meta property="og:image" content="' . $host_uri . '/resources/Azias/logos/v2_opengraph.png"/>');
|
||||
echo('<meta property="og:image:type" content="image/png"/>');
|
||||
} else {
|
||||
if($requested_content_display_type == ContentDisplayType::CONTENT) {
|
||||
echo('<title>'.$content->get_head_title().' - Nibble Poker</title>');
|
||||
echo('<meta name="description" content="'.$content->get_head_description().'">');
|
||||
echo($content->get_opengraph_tags("Nibble Poker - ", "website", $host_uri,
|
||||
null, $host_uri . "/resources/Azias/logos/v2_opengraph.png"));
|
||||
} else {
|
||||
echo('<title>' . localize("content.title.search.card") . ' - Nibble Poker</title>');
|
||||
echo('<meta name="description" content="">');
|
||||
echo('<meta property="og:title" content="Nibble Poker - '.localize("content.title.search.card").'" />');
|
||||
echo('<meta property="og:description" content=""/>');
|
||||
echo('<meta property="og:type" content="website" />');
|
||||
echo('<meta property="og:url" content="' . $host_uri . '" />');
|
||||
echo('<meta property="og:image" content="' . $host_uri . '/resources/Azias/logos/v2_opengraph.png"/>');
|
||||
echo('<meta property="og:image:type" content="image/png"/>');
|
||||
}
|
||||
// Remark: The 'glider' and 'highlight.js' stylesheets are included here.
|
||||
include 'commons/DOM/head.php';
|
||||
|
||||
// Preparing values for the head's tags.
|
||||
if ($contentManager->hasError) {
|
||||
$content_head_title = localize("content.error.head.title");
|
||||
$content_head_description = $content_error_message;
|
||||
$content_head_og_title = localize("content.error.og.title");
|
||||
$content_head_og_description = $content_error_message;
|
||||
} elseif($contentManager->displayType == ContentDisplayType::CONTENT) {
|
||||
$content_head_title =
|
||||
localize("content.item.head.title.prefix") .
|
||||
$content->get_head_title() .
|
||||
localize("content.item.head.title.suffix");
|
||||
$content_head_description = $content->get_head_description();
|
||||
$content_head_title =
|
||||
localize("content.item.og.title.prefix") .
|
||||
$content->get_head_title() .
|
||||
localize("content.item.og.title.suffix");
|
||||
$content_head_og_description = $content->get_head_description();
|
||||
} elseif($contentManager->displayType == ContentDisplayType::SEARCH) {
|
||||
$content_head_title = localize("content.search.head.title");
|
||||
$content_head_description = localize("content.search.head.description");
|
||||
$content_head_og_title = localize("content.search.og.title");
|
||||
$content_head_og_description = localize("content.search.og.description");
|
||||
}
|
||||
?>
|
||||
<link href="/resources/GliderJs/1.7.6/glider.min.css" rel="stylesheet" />
|
||||
<link href="/resources/HighlightJS/11.6.0/styles/atom-one-dark.min.css" rel="stylesheet" />
|
||||
|
||||
// TODO: Fix the OG URL tag to add the tags !
|
||||
?>
|
||||
<title><?php echo($content_head_title); ?></title>
|
||||
<meta name="description" content="<?php echo($content_head_description); ?>">
|
||||
<meta property="og:title" content="<?php echo($content_head_og_title); ?>"/>
|
||||
<meta property="og:type" content="website"/>
|
||||
<meta property="og:url" content="<?php echo($host_uri . l10n_url_abs('/')); ?>"/>
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/NibblePoker/images/logos/v2_opengraph.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="<?php echo($content_head_og_description); ?>"/>
|
||||
</head>
|
||||
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-sidebar-shortcut-enabled="true">
|
||||
<?php include 'body-root.php'; ?>
|
||||
<div class="page-wrapper with-sidebar with-navbar-fixed-bottom">
|
||||
<?php $SIDEBAR_ID = 'blog'; include 'sidebar.php'; ?>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div id="page-title-bar" class="card p-0 pl-20 m-0 square-corners bg-very-dark title-bkgd navbar">
|
||||
<h2 class="content-title font-size-24 mt-20 text-truncate">
|
||||
<i class="fad fa-briefcase"></i> <?php
|
||||
if($content_has_error) {
|
||||
echo('<span class="hidden-xs-and-down">'.localize("content.title.content").'<span class="mx-10">❱</span></span>'.localize("content.title.error"));
|
||||
} elseif($requested_content_display_type == ContentDisplayType::SEARCH) {
|
||||
echo(localize("content.title.content").'<span class="hidden-xs-and-down"><span class="mx-10">❱</span>'.localize("content.title.search.header").'</span>');
|
||||
} elseif($requested_content_display_type == ContentDisplayType::CONTENT) {
|
||||
echo('<span class="hidden-xs-and-down">'.localize("content.title.content").'<span class="mx-10">❱</span></span>'.$content->get_head_title());
|
||||
}
|
||||
?>
|
||||
</h2>
|
||||
<?php include 'header-lang.php'; ?>
|
||||
</div>
|
||||
<div class="content mx-auto w-lg-p90">
|
||||
<?php
|
||||
// Checking if an error occurred.
|
||||
if($content_error_code != 200) {
|
||||
// #############
|
||||
// Error card
|
||||
// #############
|
||||
start_content_card("fad fa-exclamation-triangle", localize('error.content.title.generic'), "");
|
||||
echo('<div class="py-20 bg-light-lm rounded-bottom px-0 bg-very-dark title-bkgd">');
|
||||
echo('<h3 class="m-0 font-size-20 text-center font-weight-semi-bold">'.$content_error_message.'</h3>');
|
||||
echo('</div>');
|
||||
echo('<div class="px-card py-10 bg-light-lm bg-dark-dm rounded-bottom border-top">'.
|
||||
'<p class="font-size-12 m-0 text-super-muted">'.
|
||||
'Card footer here.'.
|
||||
'</p></div>');
|
||||
end_content_card();
|
||||
goto content_printing_end;
|
||||
}
|
||||
|
||||
// Printing the containers
|
||||
if($requested_content_display_type == ContentDisplayType::SEARCH) {
|
||||
// #############
|
||||
// Search page
|
||||
// #############
|
||||
start_content_card(
|
||||
"fad fa-file-search",
|
||||
localize("content.title.search.card"),
|
||||
strval(count($filtered_content_index_data)) . " " .
|
||||
(count($filtered_content_index_data) > 1 ?
|
||||
localize("content.search.count.multiple") :
|
||||
localize("content.search.count.single")));
|
||||
echo('<div class="py-20 bg-light-lm rounded-bottom px-0 bg-very-dark title-bkgd">');
|
||||
for($i = 0; $i < count($filtered_content_index_data); $i++) {
|
||||
if($i > 0) {
|
||||
echo('<div class="sidebar-divider m-20 mx-0"></div>');
|
||||
}
|
||||
echo('<div class="content m-0 mx-20">');
|
||||
|
||||
// https://css-tricks.com/float-an-element-to-the-bottom-corner/
|
||||
echo('<div class="content-presentation-container">');
|
||||
echo('<a href="'.l10n_url_abs("/content/".$filtered_content_index_data[$i]["id"]).'"><div>');
|
||||
echo('<div class="content-search-image-container">');
|
||||
echo('<img class="content-search-image" src="'.$filtered_content_index_data[$i]["image"].'">');
|
||||
echo('</div>');
|
||||
echo('<h3 class="font-size-18 mb-5 font-weight-semi-bold content-search-title">'.$filtered_content_index_data[$i]["title"][$user_language].'</h3>');
|
||||
echo($filtered_content_index_data[$i]["preamble"][$user_language]);
|
||||
echo('</div></a>');
|
||||
echo('</div>');
|
||||
|
||||
echo('<hr class="subtle">');
|
||||
|
||||
echo('<div class="d-flex flex-wrap">');
|
||||
echo('<div class="content-tag-container">');
|
||||
echo('<i class="fad fa-tags"></i>');
|
||||
for($j = 0; $j < count($filtered_content_index_data[$i]["tags"]); $j++) {
|
||||
echo('<a href="'.l10n_url_abs("/content/?tags=".$filtered_content_index_data[$i]["tags"][$j]).'" class="content-tag">#');
|
||||
echo($filtered_content_index_data[$i]["tags"][$j].'</a>');
|
||||
}
|
||||
echo('</div>');
|
||||
echo('</div>');
|
||||
|
||||
echo('</div>');
|
||||
}
|
||||
echo('</div>');
|
||||
echo('<div class="px-card py-10 bg-light-lm bg-dark-dm rounded-bottom border-top">'.
|
||||
'<p class="font-size-12 m-0 text-super-muted">'.
|
||||
'Card footer here.'.
|
||||
'</p></div>');
|
||||
end_content_card();
|
||||
} elseif($requested_content_display_type == ContentDisplayType::CONTENT) {
|
||||
// ##############
|
||||
// Content page
|
||||
// ##############
|
||||
echo($content->get_html());
|
||||
}
|
||||
|
||||
content_printing_end:
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<body>
|
||||
<?php
|
||||
include_once 'commons/DOM/utils.php';
|
||||
$SIDEBAR_IDS = array_merge(['content'], is_null($contentManager->requestedTags) ? [] : $contentManager->requestedTags);
|
||||
include 'commons/DOM/sidebar.php';
|
||||
?>
|
||||
<header class="w-full p-m pl-s">
|
||||
<h1 class="t-size-17 t-w-500">
|
||||
<?php
|
||||
if($contentManager->hasError) {
|
||||
echo('<i class="fad fa-exclamation-triangle t-size-16 mr-s t-muted"></i>');
|
||||
echo(localize("content.header.base"));
|
||||
echo('<span class="mobile-hide">');
|
||||
echo('<span class="mx-s t-size-15">❱</span>');
|
||||
echo(localize("content.error.header"));
|
||||
echo('</span>');
|
||||
} elseif($contentManager->displayType == ContentDisplayType::SEARCH) {
|
||||
echo('<i class="fad fa-briefcase t-size-16 mr-s t-muted"></i>');
|
||||
echo(localize("content.header.base"));
|
||||
echo('<span class="mobile-hide">');
|
||||
echo('<span class="mx-s t-size-15">❱</span>');
|
||||
echo(localize("content.search.header"));
|
||||
echo('</span>');
|
||||
} elseif($contentManager->displayType == ContentDisplayType::CONTENT) {
|
||||
echo('<i class="fad fa-briefcase t-size-16 mr-s t-muted"></i>');
|
||||
echo(localize("content.header.base"));
|
||||
echo('<span class="mobile-hide">');
|
||||
echo('<span class="mx-s t-size-15">❱</span>');
|
||||
echo('<span class="t-size-16">' . $content->get_head_title() . '</span>');
|
||||
echo('</span>');
|
||||
}
|
||||
?>
|
||||
</h1>
|
||||
<?php include 'commons/DOM/header-lang.php'; ?>
|
||||
</header>
|
||||
<main id="main" class="rl-m border border-r-0 p-l">
|
||||
<?php
|
||||
// Checking if an error occurred.
|
||||
if($content_error_code != 200) {
|
||||
if($contentManager->displayType == ContentDisplayType::SEARCH) {
|
||||
printMainHeader(localize("content.error.heading.main.search"), "fad fa-exclamation-triangle");
|
||||
} elseif($contentManager->displayType == ContentDisplayType::CONTENT) {
|
||||
printMainHeader(localize("content.error.heading.main.content"), "fad fa-exclamation-triangle");
|
||||
} else {
|
||||
printMainHeader(localize("content.error.heading.main.fallback"), "fad fa-exclamation-triangle");
|
||||
}
|
||||
|
||||
<!-- Custom modal, see: https://dev.to/nicm42/fading-in-and-fading-out-with-css-transitions-3lc1 -->
|
||||
echo('<h3 class="mt-m t-size-18 t-center content-error-text mx-auto">' . $content_error_message . '</h3>');
|
||||
|
||||
<div class="modal" id="modal-content-image-viewer" tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content modal-content-media w-three-quarter">
|
||||
<a id="modal-img-close" href="#" class="close" role="button" aria-label="Close">
|
||||
<span aria-hidden="true"><i class="fad fa-times"></i></span>
|
||||
</a>
|
||||
<img id="modal-img" src="/resources/Azias/imgs/placeholder.png" class="img-fluid ml-auto mr-auto" alt="modal-img">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
goto content_printing_end;
|
||||
}
|
||||
|
||||
if($contentManager->displayType == ContentDisplayType::SEARCH) {
|
||||
// We are handling a content search with at least one result.
|
||||
|
||||
<?php include 'footer.php'; ?>
|
||||
</div>
|
||||
<script src="/resources/HalfMoon/1.1.1/js/halfmoon.min.js"></script>
|
||||
<script src="/resources/GliderJs/1.7.6/glider.min.js"></script>
|
||||
<script src="/resources/HighlightJS/11.6.0/highlight.min.js"></script>
|
||||
<script src="/resources/HighlightJS/11.6.0/languages/csharp.min.js"></script>
|
||||
<script src="/resources/Azias/js/nibblepoker.lu.js"></script>
|
||||
<script src="/resources/Azias/js/code-highlighter.js"></script>
|
||||
// Making the header with the amount of results.
|
||||
printMainHeader(
|
||||
count($contentManager->rootIndexEntries) > 1 ?
|
||||
localize("content.search.heading.main.multiple") :
|
||||
localize("content.search.heading.main.single"),
|
||||
"fad fa-file-search",
|
||||
count($contentManager->rootIndexEntries) . " " . (
|
||||
count($contentManager->rootIndexEntries) > 1 ?
|
||||
localize("content.search.count.multiple") :
|
||||
localize("content.search.count.single")));
|
||||
|
||||
// Printing the entry for each piece of relevant content.
|
||||
$doPrintRuler = false;
|
||||
foreach($contentManager->rootIndexEntries as $current_content) {
|
||||
/** @var ContentIndexEntry $current_content */
|
||||
|
||||
if($doPrintRuler) {
|
||||
echo('<hr class="subtle">');
|
||||
} else {
|
||||
$doPrintRuler = true;
|
||||
}
|
||||
|
||||
echo('<div class="p-s">');
|
||||
echo('<a class="casper-link" href="'.l10n_url_abs("/content/".$current_content->id).'">');
|
||||
echo('<div class="content-search-entry">');
|
||||
|
||||
echo('<img class="content-search-image mr-s r-l" src="' . $current_content->image . '">');
|
||||
echo('<h3 class="mb-xs">' . $current_content->title[$user_language] . '</h3>');
|
||||
echo('<p>' . $current_content->preamble[$user_language] . '</p>');
|
||||
|
||||
echo('</div>');
|
||||
echo('</a>');
|
||||
|
||||
echo('<p class="mt-xs"><i class="fad fa-tags t-size-8"></i>');
|
||||
foreach($current_content->tags as $current_content_tag) {
|
||||
echo('<a href="' . l10n_url_abs("/content/?tags=".$current_content_tag) .
|
||||
'" class="ml-xs">#' . $current_content_tag . '</a>');
|
||||
}
|
||||
echo('</p>');
|
||||
|
||||
echo('</div>');
|
||||
}
|
||||
|
||||
// TODO: Print the tags used in the search and others that may be available.
|
||||
} elseif($contentManager->displayType == ContentDisplayType::CONTENT) {
|
||||
// Printing the content
|
||||
echo($content->get_html());
|
||||
}
|
||||
|
||||
// Label used when there is an error to skip the content printing parts.
|
||||
content_printing_end:
|
||||
?>
|
||||
</main>
|
||||
<?php
|
||||
include 'commons/DOM/footer.php';
|
||||
include 'commons/DOM/scripts.php';
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
$end_time = microtime(true);
|
||||
if($print_execution_timer) {
|
||||
echo("<!-- PHP execution took " . round(($end_time - $start_time) * 1000, 2) . " ms -->");
|
||||
}
|
||||
?>
|
158
content/items/circuitpython-custom-file-systems.json
Normal file
@@ -0,0 +1,158 @@
|
||||
{
|
||||
"strings": {
|
||||
"en": {
|
||||
"meta.title": "CircuitPython - Custom File Systems",
|
||||
"meta.description": "A set of examples of custom file systems and block-level devices for CircuitPython that can be used for educational purposes and expanded upon.",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/CircuitPython-CustomFileSystems\"><i class=\"fab fa-github\"></i> View on GitHub</a>",
|
||||
|
||||
"intro.title": "Introduction",
|
||||
"intro.p1": "This project contains a set of examples of custom file systems and block-level devices for CircuitPython that can be used for educational purposes and expanded upon.",
|
||||
"intro.p2": "All these examples are thoroughly documented in order to allow you to understand how each method of a virtual FS/BLD works, and also to show you some of the undocumented methods for these.",
|
||||
|
||||
"requirements.title": "Requirements",
|
||||
"requirements.1": "A MCU with CircuitPython 8.0 or newer",
|
||||
"requirements.1.1": "Access to the <a href=\"https://docs.circuitpython.org/en/latest/shared-bindings/zlib/index.html\">zlib</a> (Required for most block-level devices)",
|
||||
"requirements.1.2": "Wi-Fi connectivity is required for some examples",
|
||||
"requirements.1.3": "Around 1MiB of disk space and 48 KiB of RAM free on the MCU",
|
||||
"requirements.2": "A way to mount disk images on you computer for block-level projects",
|
||||
"requirements.2.1": "<a href=\"https://sourceforge.net/projects/imdisk-toolkit/\">ImDisk's Ram Disk tool</a> is recommended for Windows.",
|
||||
"requirements.2.2": "I don't know about Linux, sorry.",
|
||||
"requirements.3": "A lot of patience to deal with some of CircuitPython's quirks",
|
||||
|
||||
"fs.title": "File Systems",
|
||||
|
||||
"fs.blank.title": "Blank",
|
||||
"fs.blank.p1": "Blank file system with a lot of comments on how each procedure works and what it should return.<br>When its content is listed, it is shown as being empty.",
|
||||
"fs.blank.p2": "This file system has a LOT more comments than the others which explains in much more details how each important method works.",
|
||||
|
||||
"fs.rom.title": "Read-Only Memory",
|
||||
|
||||
"bld.title": "Block-level Devices",
|
||||
|
||||
"bld.stub.title": "Stub",
|
||||
"bld.stub.p1": "Stub of a generic block-level class without any code, but detailed comments for each required methods and their warnings and notes.",
|
||||
"bld.stub.p2": "The reasoning behind not making this one a working class is that block-level devices require quite a bit more code to make them work as you need to create a working MBR and FAT partition.",
|
||||
|
||||
"bld.remote.title": "Remote",
|
||||
|
||||
"warning.title": "Warning",
|
||||
"warning.p1": "Due to the way some commands are executed, it is possible to have a <a href=\"https://owasp.org/www-community/attacks/Command_Injection\">command injection vulnerability</a> if you mess up or leave the config file editable by everyone.",
|
||||
"warning.p2": "This might be fixed in the future, but don't count on it as this project is a personal one.",
|
||||
|
||||
"features.title": "Features",
|
||||
"features.list.1.1": "● General",
|
||||
|
||||
"links.title": "Links",
|
||||
"_123": "https://files.nibblepoker.lu/downloads/CircuitPython-CustomFileSystems/CircuitPython-CustomFileSystems-master.zip"
|
||||
},
|
||||
"fr": {
|
||||
"meta.title": "CircuitPython - Systèmes de fichiers personalisés",
|
||||
"meta.description": "Un set de systèmes de fichiers et stockage en blocs personnalisés pour CircuitPython qui peuvent être utilisés afin d'apprendre leur fonctionnement ou améliorés et implémentés dans d'autres solutions.",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/CircuitPython-CustomFileSystems\"><i class=\"fab fa-github\"></i> Voir sur GitHub</a>",
|
||||
|
||||
"intro.title": "Introduction",
|
||||
"intro.p1": "Ce projet contient un set de systèmes de fichiers et stockage en blocs personnalisés pour CircuitPython qui peuvent être utilisés afin d'apprendre leur fonctionnement ou améliorés et implémentés dans d'autres solutions.",
|
||||
"intro.p2": "Tous ces exemples sont soigneusement documentés afin de vous permettre de comprendre le fonctionnement de chaque méthode d'un système de fichiers virtuel ou d'un stockage en blocs<br>Et en plus de cela, ils vous montreront certaines des méthodes non documentées.",
|
||||
|
||||
"requirements.title": "Dépendances",
|
||||
"requirements.1": "Un MCU avec CircuitPython 8.0 ou une version plus récente",
|
||||
"requirements.1.1": "Access to the <a href=\"https://docs.circuitpython.org/en/latest/shared-bindings/zlib/index.html\">zlib</a> (Required for most block-level devices)",
|
||||
"requirements.1.2": "Wi-Fi connectivity is required for some examples",
|
||||
"requirements.1.3": "Around 1MiB of disk space and 48 KiB of RAM free on the MCU",
|
||||
"requirements.2": "A way to mount disk images on you computer for block-level projects",
|
||||
"requirements.2.1": "<a href=\"https://sourceforge.net/projects/imdisk-toolkit/\">ImDisk's Ram Disk tool</a> is recommended for Windows.",
|
||||
"requirements.2.2": "I don't know about Linux, sorry.",
|
||||
"requirements.3": "A lot of patience to deal with some of CircuitPython's quirks",
|
||||
|
||||
"warning.title": "Avertissements",
|
||||
"warning.p1": "Due au fait que certaines commandes sont exécutées avec des paramètres arbitraires configurables cette application est vulnérable aux attaques par <a href=\"https://owasp.org/www-community/attacks/Command_Injection\">injection de commande</a> si le fichier de configuration est modifiable par des personnes non autorisées.",
|
||||
"warning.p2": "Ce problème sera probablement réglé dans le futur, mais il n'y a pas de date fixe comme ce projet est plus personnel qu'autre-chose.",
|
||||
|
||||
"features.title": "Fonctionnalités",
|
||||
|
||||
"links.title": "Liens"
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"template": "generic-project-readme",
|
||||
"head": {
|
||||
"title": "meta.title",
|
||||
"description": "meta.description"
|
||||
},
|
||||
"opengraph": {
|
||||
"title": "meta.title",
|
||||
"description": "meta.description",
|
||||
"type": null,
|
||||
"url": null,
|
||||
"image": null,
|
||||
"image_type": null
|
||||
},
|
||||
"article": {
|
||||
"icon": "fab fa-python",
|
||||
"title": "meta.title",
|
||||
"subtitle": "article.subtitle",
|
||||
"tags": ["electronic", "python", "circuitpython"]
|
||||
}
|
||||
},
|
||||
"elements": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p2"},
|
||||
|
||||
{"type": "h1", "content": "requirements.title"},
|
||||
{
|
||||
"type": "paragraph", "indent": 2,
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ∘ ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.1.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ∘ ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.1.2"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ∘ ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.1.3"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "paragraph", "indent": 2,
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.2"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ∘ ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.2.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ∘ ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.2.2"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "paragraph", "indent": 2,
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.3"}
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "fs.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "fs.p1"},
|
||||
{"type": "image", "src": "fuck"},
|
||||
{"type": "h1", "content": "fs.blank.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "fs.blank.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "fs.blank.p2"},
|
||||
{"type": "h1", "content": "fs.rom.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p2"},
|
||||
|
||||
{"type": "h1", "content": "bld.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "bld.p1"},
|
||||
{"type": "image", "src": "fuck"},
|
||||
{"type": "h1", "content": "bld.stub.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "bld.stub.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "bld.stub.p2"},
|
||||
{"type": "h1", "content": "bld.remote.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p2"}
|
||||
]
|
||||
}
|
@@ -34,7 +34,7 @@
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"template": "article",
|
||||
"template": "generic-project-readme",
|
||||
"head": {
|
||||
"title": "meta.title",
|
||||
"description": "meta.description"
|
||||
@@ -55,50 +55,30 @@
|
||||
}
|
||||
},
|
||||
"elements": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p2"},
|
||||
|
||||
{"type": "h1", "content": "requirements.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p2"}
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "link": "https://dotnet.microsoft.com/en-us/download/dotnet/6.0", "content": "requirements.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.2"}
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "documentation.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "documentation.1"},
|
||||
|
||||
{"type": "h1", "content": "example.title"},
|
||||
{
|
||||
"type": "container",
|
||||
"padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "container", "padding": 2, "modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "requirements.title"},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "link": "https://dotnet.microsoft.com/en-us/download/dotnet/6.0", "content": "requirements.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.2"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "documentation.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "documentation.1"}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["_no-top-padding", "no-bottom-padding"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "example.title"},
|
||||
{
|
||||
"type": "code", "indent": 2,
|
||||
"modifiers": ["horizontal-scroll", "code-block"],
|
||||
@@ -132,71 +112,59 @@
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "license.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "license.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "content.commons.license.mit.single", "link": "https://github.com/aziascreations/DotNet-Arguments/blob/master/LICENSE"}
|
||||
]
|
||||
"type": "paragraph", "indent": 2, "content": "content.commons.license.mit.single",
|
||||
"link": "https://github.com/aziascreations/DotNet-Arguments/blob/master/LICENSE"
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "links.title"},
|
||||
{
|
||||
"type": "container",
|
||||
"padding": 20,
|
||||
"modifiers": ["no-top-margin"],
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "h1", "content": "links.title"},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"type": "raw", "link": "https://www.nuget.org/packages/NibblePoker.Library.Arguments",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "content.commons.nuget"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://www.nuget.org/packages/NibblePoker.Library.Arguments",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.nuget"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://www.nuget.org/packages/NibblePoker.Library.Arguments)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://www.nuget.org/packages/NibblePoker.Library.Arguments)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://github.com/aziascreations/DotNet-Arguments",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.github"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://github.com/aziascreations/DotNet-Arguments",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.github"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://github.com/aziascreations/DotNet-Arguments)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://github.com/aziascreations/DotNet-Arguments)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://git.nibblepoker.lu/aziascreations/DotNet-Arguments",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.gitea"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://git.nibblepoker.lu/aziascreations/DotNet-Arguments",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.gitea"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://git.nibblepoker.lu/aziascreations/DotNet-Arguments)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://git.nibblepoker.lu/aziascreations/DotNet-Arguments)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
]
|
||||
}
|
@@ -3,21 +3,21 @@
|
||||
"en": {
|
||||
"meta.title": "Excel Worksheet Password Remover",
|
||||
"meta.description": "Small web page from which you can easily remove a password from an Excel worksheet. It works by leaving the task of editing the XML files on an Excel document to your browser instead to keep everything local.",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/Excel-Worksheet-Password-Remover\" class=\"font-size-16\"><i class=\"fab fa-github\"></i> View on GitHub</a>",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/Excel-Worksheet-Password-Remover\"><i 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, 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>.",
|
||||
"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",
|
||||
"demo.title": "Demonstration video",
|
||||
"links.title": "Links"
|
||||
},
|
||||
"fr": {
|
||||
"_meta.title": "",
|
||||
"meta.description": "Petite application web qui permet de facilement retirer le mot de passe d'une feuille de calcul Excel depuis votre navigateur web sans avoir à uploader le fichier sur internet. Cette application laisse votre navigateur modifier les fichiers XML du fichier Excel afin de tout garder en local.",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/Excel-Worksheet-Password-Remover\" class=\"font-size-16\"><i class=\"fab fa-github\"></i> Voir sur GitHub</a>",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/Excel-Worksheet-Password-Remover\"><i 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",
|
||||
@@ -25,12 +25,12 @@
|
||||
"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": "Démonstration",
|
||||
"demo.title": "Vidéo de démonstration",
|
||||
"links.title": "Liens"
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"template": "article",
|
||||
"template": "generic-project-readme",
|
||||
"head": {
|
||||
"title": "meta.title",
|
||||
"description": "meta.description"
|
||||
@@ -51,95 +51,66 @@
|
||||
}
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p1"}
|
||||
]
|
||||
},
|
||||
{"type": "h1", "content": "intro.title", "modifiers": ["_no-top-margin"]},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p1"},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "working.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "working.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "working.p2"}
|
||||
]
|
||||
},
|
||||
{"type": "h1", "content": "working.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "working.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "working.p2"},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "usage.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "usage.p1"}
|
||||
]
|
||||
},
|
||||
{"type": "h1", "content": "usage.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "usage.p1"},
|
||||
|
||||
{"type": "h1", "content": "demo.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "container",
|
||||
"modifiers": ["pb-0"],
|
||||
"padding": 2,
|
||||
"parts": [
|
||||
{"type": "h1", "content": "demo.title"},
|
||||
{
|
||||
"type": "container",
|
||||
"modifiers": ["no-padding"],
|
||||
"padding": 0,
|
||||
"parts": [
|
||||
{
|
||||
"type": "video",
|
||||
"source": "https://files.nibblepoker.lu/downloads/Excel-Worksheet-Password-Remover/demo_v1.mp4",
|
||||
"_source": "/tmp/demo_v1.mp4",
|
||||
"thumbnail": "https://files.nibblepoker.lu/downloads/Excel-Worksheet-Password-Remover/demo_v1_thumb.webp"
|
||||
}
|
||||
]
|
||||
"type": "video",
|
||||
"source": "https://files.nibblepoker.lu/downloads/Excel-Worksheet-Password-Remover/demo_v1.mp4",
|
||||
"thumbnail": "https://files.nibblepoker.lu/downloads/Excel-Worksheet-Password-Remover/demo_v1_thumb.webp"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{"type": "h1", "content": "links.title"},
|
||||
{
|
||||
"type": "container",
|
||||
"padding": 20,
|
||||
"modifiers": ["no-top-margin"],
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "h1", "content": "links.title"},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"type": "raw", "link": "https://github.com/aziascreations/Excel-Worksheet-Password-Remover",
|
||||
"sr_title": "Test 123",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "content.commons.github"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://github.com/aziascreations/Excel-Worksheet-Password-Remover",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.github"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://github.com/aziascreations/Excel-Worksheet-Password-Remover)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
"type": "raw",
|
||||
"content": "<span class=\"t-size-8\">(https://github.com/aziascreations/Excel-Worksheet-Password-Remover)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://git.nibblepoker.lu/aziascreations/Excel-Worksheet-Password-Remover",
|
||||
"sr_title": "Test 123",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.gitea"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://git.nibblepoker.lu/aziascreations/Excel-Worksheet-Password-Remover",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.gitea"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://git.nibblepoker.lu/aziascreations/Excel-Worksheet-Password-Remover)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
"type": "raw",
|
||||
"content": "<span class=\"t-size-8\">(https://git.nibblepoker.lu/aziascreations/Excel-Worksheet-Password-Remover)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
|
@@ -75,7 +75,7 @@
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"template": "article",
|
||||
"template": "generic-project-readme",
|
||||
"head": {
|
||||
"title": "meta.title",
|
||||
"description": "meta.description"
|
||||
@@ -96,101 +96,77 @@
|
||||
}
|
||||
},
|
||||
"elements": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p2"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p3"},
|
||||
|
||||
{"type": "h1", "content": "requirements.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p2"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p3"}
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ∘ ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.2"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.3"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ∘ ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.4"}
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "improvements.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "h1", "content": "requirements.title"},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ∘ ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.2"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.3"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ∘ ", "localize": false},
|
||||
{"type": "raw", "content": "requirements.4"}
|
||||
]
|
||||
}
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "improvements.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "improvements.2"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "improvements.3"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "improvements.4"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "improvements.5"}
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "screenshots.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "container", "padding": 2,
|
||||
"modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "improvements.title"},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "improvements.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "improvements.2"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "improvements.3"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "improvements.4"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "improvements.5"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["_no-top-padding", "no-bottom-padding"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "screenshots.title"},
|
||||
{
|
||||
"type": "container", "margin": 5, "padding": 0,
|
||||
"type": "gallery",
|
||||
"modifiers": [],
|
||||
"parts": [
|
||||
{
|
||||
"type": "gallery",
|
||||
"modifiers": [],
|
||||
"images": [
|
||||
"/resources/Azias/imgs/lscom/screen-cli-stylish-2x-xBR.png",
|
||||
"/resources/Azias/imgs/lscom/screen-cli-csv-2x-xBR.png",
|
||||
"/resources/Azias/imgs/lscom/screen-cli-full-2x-xBR.png"
|
||||
]
|
||||
}
|
||||
"images": [
|
||||
"/resources/NibblePoker/images/content/lscom/screen-cli-stylish-2x-xBR.png",
|
||||
"/resources/NibblePoker/images/content/lscom/screen-cli-csv-2x-xBR.png",
|
||||
"/resources/NibblePoker/images/content/lscom/screen-cli-full-2x-xBR.png"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{"type": "h1", "content": "usage.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["_no-top-padding", "no-bottom-padding"],
|
||||
"type": "container", "padding": 2,
|
||||
"modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "usage.title"},
|
||||
{
|
||||
"type": "code", "indent": 2,
|
||||
"modifiers": ["horizontal-scroll", "code-block"],
|
||||
"modifiers": ["horizontal-scroll-auto", "code-block"],
|
||||
"code": [
|
||||
"lscom.exe [-a|--show-all] [-d|--show-device] [-D <str>|--divider <str>] [-f|--show-friendly]",
|
||||
" [-h|--help] [-H|--short-help] [-n|--show-name-raw] [-P|--no-pretty] [-s|--sort]",
|
||||
@@ -214,15 +190,15 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{"type": "h1", "content": "formatting.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["_no-top-padding", "no-bottom-padding"],
|
||||
"type": "container", "padding": 2,
|
||||
"modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "formatting.title"},
|
||||
{
|
||||
"type": "code", "indent": 2,
|
||||
"modifiers": ["horizontal-scroll", "code-block"],
|
||||
"modifiers": ["horizontal-scroll-auto", "code-block"],
|
||||
"code": [
|
||||
" *┬> No launch arguments:",
|
||||
" └──> ${Raw name} => COM1",
|
||||
@@ -246,277 +222,251 @@
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "packages.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "packages.single.title", "modifiers": ["bold"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "packages.single.1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "packages.self.title", "modifiers": ["bold"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "packages.self.1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "packages.msi.title", "modifiers": ["bold"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "packages.msi.1"},
|
||||
|
||||
{"type": "h1", "content": "content.commons.version.current"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "container", "padding": 2, "modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "packages.title"},
|
||||
{"type": "h3", "indent": 2, "content": "packages.single.title"},
|
||||
{"type": "paragraph", "indent": 4, "content": "packages.single.1", "modifiers": ["no-top-margin"]},
|
||||
{"type": "h3", "indent": 2, "content": "packages.self.title"},
|
||||
{"type": "paragraph", "indent": 4, "content": "packages.self.1", "modifiers": ["no-top-margin"]},
|
||||
{"type": "h3", "indent": 2, "content": "packages.msi.title"},
|
||||
{"type": "paragraph", "indent": 4, "content": "packages.msi.1", "modifiers": ["no-top-margin"]}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["_no-top-padding"],
|
||||
"parts": [
|
||||
{"type": "h1", "modifiers": ["no-top-margin"], "content": "content.commons.version.current"},
|
||||
{"type": "spacer", "size": 1},
|
||||
{
|
||||
"type": "container", "padding": 0,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"],
|
||||
"parts": [
|
||||
{
|
||||
"type": "table", "modifiers": ["striped", "inner-bordered"],
|
||||
"head": [
|
||||
{"type": "raw", "content": "content.commons.cpu.responsive"},
|
||||
{"type": "raw", "content": "requirements.table.title"},
|
||||
{"type": "raw", "content": "content.commons.download.single"}
|
||||
],
|
||||
"body": [
|
||||
[
|
||||
{"type": "raw", "content": "content.commons.cpu.any"},
|
||||
{"type": "raw", "content": "requirements.text.dotnet"},
|
||||
{
|
||||
"type": "table", "modifiers": ["stylish", "auto-cell-padding", "v-center-cells"],
|
||||
"head": [
|
||||
{"type": "raw", "content": "content.commons.cpu.responsive"},
|
||||
{"type": "raw", "content": "requirements.table.title"},
|
||||
{"type": "raw", "content": "content.commons.download.single"}
|
||||
],
|
||||
"body": [
|
||||
[
|
||||
{"type": "raw", "content": "content.commons.cpu.any"},
|
||||
{"type": "raw", "content": "requirements.text.dotnet"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_AnyCPU.zip",
|
||||
"modifiers": ["thin", "download-primary"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_AnyCPU.zip",
|
||||
"modifiers": ["thin", "download-primary"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_AnyCPU.zip</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.x64", "rowspan": 3},
|
||||
{"type": "raw", "content": "requirements.text.dotnet"},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_AnyCPU.zip</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.x64", "rowspan": 3},
|
||||
{"type": "raw", "content": "requirements.text.dotnet"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64_Single.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64_Single.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_x64_Single.zip</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "requirements.text.none.fp", "rowspan": 2},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_x64_Single.zip</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "requirements.text.none.fp", "rowspan": 2},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64_SelfContained.zip",
|
||||
"modifiers": ["thin", "download-primary"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64_SelfContained.zip",
|
||||
"modifiers": ["thin", "download-primary"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_x64_SelfContained.zip</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_x64_SelfContained.zip</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64.msi",
|
||||
"modifiers": ["thin", "download-primary"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x64.msi",
|
||||
"modifiers": ["thin", "download-primary"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-archive\"></i> ListComPort_v3.0.0_x64.msi</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.x86", "rowspan": 3},
|
||||
{"type": "raw", "content": "requirements.text.dotnet"},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-archive\"></i> ListComPort_v3.0.0_x64.msi</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.x86", "rowspan": 3},
|
||||
{"type": "raw", "content": "requirements.text.dotnet"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86_Single.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86_Single.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_x86_Single.zip</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "requirements.text.none.fp", "rowspan": 2},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_x86_Single.zip</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "requirements.text.none.fp", "rowspan": 2},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86_SelfContained.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86_SelfContained.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_x86_SelfContained.zip</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_x86_SelfContained.zip</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86.msi",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_x86.msi",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-archive\"></i> ListComPort_v3.0.0_x86.msi</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.arm64", "rowspan": 2},
|
||||
{"type": "raw", "content": "requirements.text.dotnet"},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-archive\"></i> ListComPort_v3.0.0_x86.msi</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.arm64", "rowspan": 2},
|
||||
{"type": "raw", "content": "requirements.text.dotnet"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm64_Single.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm64_Single.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_arm64_Single.zip</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "requirements.text.none.fp"},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_arm64_Single.zip</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "requirements.text.none.fp"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm64_SelfContained.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm64_SelfContained.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_arm64_SelfContained.zip</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.arm", "rowspan": 2},
|
||||
{"type": "raw", "content": "requirements.text.dotnet"},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_arm64_SelfContained.zip</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.arm", "rowspan": 2},
|
||||
{"type": "raw", "content": "requirements.text.dotnet"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm_Single.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm_Single.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_arm_Single.zip</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "requirements.text.none.fp"},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_arm_Single.zip</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "requirements.text.none.fp"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm_SelfContained.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/ListComPort_v3.0.0_arm_SelfContained.zip",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_arm_SelfContained.zip</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> ListComPort_v3.0.0_arm_SelfContained.zip</span><i class=\"fas fa-download ml-s\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{"type": "h1", "content": "content.commons.version.source"},
|
||||
{
|
||||
"type": "container", "padding": 20, "modifiers": ["no-top-padding"],
|
||||
"type": "container", "padding": 2, "modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "modifiers": ["no-top-margin"], "content": "content.commons.version.source"},
|
||||
{"type": "spacer", "size": 1},
|
||||
{
|
||||
"type": "container", "padding": 0,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"],
|
||||
"parts": [{
|
||||
"type": "table", "modifiers": ["striped", "inner-bordered"],
|
||||
"head": [
|
||||
{"type": "raw", "content": "content.commons.version"},
|
||||
{"type": "raw", "content": "content.commons.download.multiple"}
|
||||
],
|
||||
"body": [[
|
||||
{"type": "raw", "content": "v3.0.0", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/DotNet-ListComPort-3.0.0.zip",
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> 3.0.0.zip</span><i class=\"fas fa-download ml-10\"></i>",
|
||||
"localize": false
|
||||
},{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/DotNet-ListComPort-3.0.0.tar.gz",
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> 3.0.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]]
|
||||
}]
|
||||
"type": "table", "modifiers": ["stylish", "auto-cell-padding", "v-center-cells"],
|
||||
"head": [
|
||||
{"type": "raw", "content": "content.commons.version"},
|
||||
{"type": "raw", "content": "content.commons.download.multiple"}
|
||||
],
|
||||
"body": [[
|
||||
{"type": "raw", "content": "v3.0.0", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/DotNet-ListComPort-3.0.0.zip",
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> 3.0.0.zip</span><i class=\"fas fa-download ml-s\"></i>",
|
||||
"localize": false
|
||||
},{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/DotNet-ListComPort/3.0.0/DotNet-ListComPort-3.0.0.tar.gz",
|
||||
"content": "<span class=\"text-monospace\"><i class=\"fad fa-file-archive\"></i> 3.0.0.tar.gz</span><i class=\"fas fa-download ml-s\"></i>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "links.title"},
|
||||
{
|
||||
"type": "container",
|
||||
"padding": 20,
|
||||
"modifiers": ["no-top-margin"],
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "h1", "content": "links.title"},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"type": "raw", "link": "https://github.com/aziascreations/DotNet-ListComPort",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "content.commons.github"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://github.com/aziascreations/DotNet-ListComPort",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.github"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://github.com/aziascreations/DotNet-ListComPort)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://github.com/aziascreations/DotNet-ListComPort)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://git.nibblepoker.lu/aziascreations/DotNet-ListComPort",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.gitea"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://git.nibblepoker.lu/aziascreations/DotNet-ListComPort",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.gitea"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://git.nibblepoker.lu/aziascreations/DotNet-ListComPort)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://git.nibblepoker.lu/aziascreations/DotNet-ListComPort)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"strings": {
|
||||
"en": {
|
||||
"meta.title": "PB-ListComPort (Legacy)",
|
||||
"meta.title": "PB-ListComPort <i>(Legacy)</i>",
|
||||
"meta.description": "A simple CLI tool that can list COM ports with their name, friendly name and device name easily and cleanly.",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/PB-ListComPort\" class=\"font-size-16\"><i class=\"fab fa-github\"></i> View on GitHub</a>",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/PB-ListComPort\"><i class=\"fab fa-github\"></i> View on GitHub</a>",
|
||||
"intro.title": "Introduction",
|
||||
"intro.p1": "A simple CLI tool that can list COM ports with their full name easily and cleanly.",
|
||||
"intro.p2": "This tool is intended to replace the tedious task of having to use the <code class=\"code\">mode</code> command, and the <i>Device Manager</i> to find a newly plugged-in device that provides a COM port.",
|
||||
@@ -13,9 +13,9 @@
|
||||
"links.title": "Links"
|
||||
},
|
||||
"fr": {
|
||||
"meta.title": "PB-ListComPort (Legacy)",
|
||||
"meta.title": "PB-ListComPort <i>(Legacy)</i>",
|
||||
"meta.description": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemin des ports COM.",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/PB-ListComPort\" class=\"font-size-16\"><i class=\"fab fa-github\"></i> Voir sur GitHub</a>",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/PB-ListComPort\"><i class=\"fab fa-github\"></i> Voir sur GitHub</a>",
|
||||
"intro.title": "Introduction",
|
||||
"_intro.p1": "",
|
||||
"_intro.p2": "",
|
||||
@@ -26,7 +26,7 @@
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"template": "article",
|
||||
"template": "generic-project-readme",
|
||||
"head": {
|
||||
"title": "meta.title",
|
||||
"description": "meta.description"
|
||||
@@ -47,25 +47,19 @@
|
||||
}
|
||||
},
|
||||
"elements": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p2"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p3"},
|
||||
|
||||
{"type": "h1", "content": "usage.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "container", "padding": 2,
|
||||
"modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p2"},
|
||||
{"type": "paragraph", "indent": 2, "content": "intro.p3"}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["_no-top-padding", "no-bottom-padding"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "usage.title"},
|
||||
{
|
||||
"type": "code", "indent": 2,
|
||||
"modifiers": ["horizontal-scroll", "code-block"],
|
||||
"modifiers": ["horizontal-scroll-auto-auto-auto-auto", "code-block"],
|
||||
"code": [
|
||||
"lscom.exe [-a|--show-all] [-d|--show-device] [-D <str>|--divider <str>] [-f|--show-friendly]",
|
||||
" [-h|--help] [-n|--show-name-raw] [-P|--no-pretty] [-s|--sort] [-S|--sort-reverse]",
|
||||
@@ -88,15 +82,15 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{"type": "h1", "content": "formatting.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["_no-top-padding", "no-bottom-padding"],
|
||||
"type": "container", "padding": 2,
|
||||
"modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "formatting.title"},
|
||||
{
|
||||
"type": "code", "indent": 2,
|
||||
"modifiers": ["horizontal-scroll", "code-block"],
|
||||
"modifiers": ["horizontal-scroll-auto-auto-auto-auto", "code-block"],
|
||||
"code": [
|
||||
" *┬> No launch arguments:",
|
||||
" └──> ${Raw name} => COM1",
|
||||
@@ -119,322 +113,299 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{"type": "h1", "content": "content.commons.version.current"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["_no-top-padding"],
|
||||
"type": "container", "padding": 2,
|
||||
"modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "modifiers": ["no-top-margin"], "content": "content.commons.version.current"},
|
||||
{"type": "spacer", "size": 1},
|
||||
{
|
||||
"type": "container", "padding": 0,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"],
|
||||
"parts": [
|
||||
{
|
||||
"type": "table", "modifiers": ["striped", "inner-bordered"],
|
||||
"head": [
|
||||
{"type": "raw", "content": "content.commons.cpu.responsive"},
|
||||
{"type": "raw", "content": "content.commons.lang"},
|
||||
{"type": "raw", "content": "content.commons.download.single"}
|
||||
],
|
||||
"body": [
|
||||
[
|
||||
{"type": "raw", "content": "content.commons.cpu.x64", "rowspan": 2},
|
||||
{"type": "raw", "content": "content.commons.lang.english"},
|
||||
{
|
||||
"type": "table", "modifiers": ["stylish", "auto-cell-padding", "v-center-cells"],
|
||||
"head": [
|
||||
{"type": "raw", "content": "content.commons.cpu.responsive"},
|
||||
{"type": "raw", "content": "content.commons.lang"},
|
||||
{"type": "raw", "content": "content.commons.download.single"}
|
||||
],
|
||||
"body": [
|
||||
[
|
||||
{"type": "raw", "content": "content.commons.cpu.x64", "rowspan": 2},
|
||||
{"type": "raw", "content": "content.commons.lang.english"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_eng_x64.exe",
|
||||
"modifiers": ["thin", "download-primary"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_eng_x64.exe",
|
||||
"modifiers": ["thin", "download-primary"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_eng_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.lang.french"},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_eng_x64.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.lang.french"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_fra_x64.exe",
|
||||
"modifiers": ["thin", "download-primary"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_fra_x64.exe",
|
||||
"modifiers": ["thin", "download-primary"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_fra_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.x86", "rowspan": 2},
|
||||
{"type": "raw", "content": "content.commons.lang.english"},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_fra_x64.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.x86", "rowspan": 2},
|
||||
{"type": "raw", "content": "content.commons.lang.english"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_eng_x86.exe",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_eng_x86.exe",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_eng_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.lang.french"},
|
||||
{
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_eng_x86.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.lang.french"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_fra_x86.exe",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_fra_x86.exe",
|
||||
"modifiers": ["thin"],
|
||||
"parts": [{
|
||||
"type": "raw",
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_fra_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
"localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_fra_x86.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{"type": "h1", "content": "content.commons.version.previous.multiple"},
|
||||
{
|
||||
"type": "container", "padding": 20, "modifiers": ["no-top-padding"],
|
||||
"type": "container", "padding": 2, "modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "modifiers": ["no-top-margin"], "content": "content.commons.version.previous.multiple"},
|
||||
{"type": "spacer", "size": 1},
|
||||
{
|
||||
"type": "container", "padding": 0,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"],
|
||||
"parts": [{
|
||||
"type": "table", "modifiers": ["striped", "inner-bordered"],
|
||||
"head": [
|
||||
{"type": "raw", "content": "content.commons.version"},
|
||||
{"type": "raw", "content": "content.commons.cpu.responsive"},
|
||||
{"type": "raw", "content": "content.commons.lang"},
|
||||
{"type": "raw", "content": "content.commons.download.single"}
|
||||
],
|
||||
"body": [
|
||||
[
|
||||
{"type": "raw", "content": "v2.0.0", "localize": false, "rowspan": 4},
|
||||
{"type": "raw", "content": "content.commons.cpu.x64", "rowspan": 2},
|
||||
{"type": "raw", "content": "content.commons.lang.english"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_eng_x64.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_eng_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.lang.french"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_fra_x64.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_fra_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.x86", "rowspan": 2},
|
||||
{"type": "raw", "content": "content.commons.lang.english"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_eng_x86.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_eng_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}
|
||||
]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.lang.french"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_fra_x86.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_fra_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "v1.1.0", "localize": false, "rowspan": 2},
|
||||
{"type": "raw", "content": "content.commons.cpu.x64"},
|
||||
{"type": "raw", "content": "content.commons.lang.english", "rowspan": 2},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/lscom-x64.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom-x64.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.x86"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/lscom-x86.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom-x86.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "v1.0.0", "localize": false},
|
||||
{"type": "raw", "content": "content.commons.cpu.x64"},
|
||||
{"type": "raw", "content": "content.commons.lang.english"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/lscom.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom.exe</span><i class=\"fas fa-download ml-10\"></i>"
|
||||
}]
|
||||
}
|
||||
]
|
||||
]
|
||||
}]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20, "modifiers": ["no-top-padding"],
|
||||
"parts": [
|
||||
{"type": "h1", "modifiers": ["no-top-margin"], "content": "content.commons.version.source"},
|
||||
{"type": "spacer", "size": 1},
|
||||
{
|
||||
"type": "container", "padding": 0,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"],
|
||||
"parts": [{
|
||||
"type": "table", "modifiers": ["striped", "inner-bordered"],
|
||||
"head": [
|
||||
{"type": "raw", "content": "content.commons.version"},
|
||||
{"type": "raw", "content": "content.commons.download.multiple"}
|
||||
],
|
||||
"body": [[
|
||||
{"type": "raw", "content": "v2.1.0", "localize": false},
|
||||
"type": "table", "modifiers": ["stylish", "auto-cell-padding", "v-center-cells"],
|
||||
"head": [
|
||||
{"type": "raw", "content": "content.commons.version"},
|
||||
{"type": "raw", "content": "content.commons.cpu.responsive"},
|
||||
{"type": "raw", "content": "content.commons.lang"},
|
||||
{"type": "raw", "content": "content.commons.download.single"}
|
||||
],
|
||||
"body": [
|
||||
[
|
||||
{"type": "raw", "content": "v2.0.0", "localize": false, "rowspan": 4},
|
||||
{"type": "raw", "content": "content.commons.cpu.x64", "rowspan": 2},
|
||||
{"type": "raw", "content": "content.commons.lang.english"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_eng_x64.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_eng_x64.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.lang.french"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_fra_x64.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_fra_x64.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.x86", "rowspan": 2},
|
||||
{"type": "raw", "content": "content.commons.lang.english"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/2.1.0.zip",
|
||||
"content": "<span class=\"text-monospace\">2.1.0.zip</span><i class=\"fas fa-download ml-10\"></i>",
|
||||
"localize": false
|
||||
},{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/2.1.0.tar.gz",
|
||||
"content": "<span class=\"text-monospace\">2.1.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>",
|
||||
"localize": false
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_eng_x86.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_eng_x86.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}
|
||||
]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "v2.0.0", "localize": false},
|
||||
{"type": "raw", "content": "content.commons.lang.french"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/2.0.0.zip",
|
||||
"content": "<span class=\"text-monospace\">2.0.0.zip</span><i class=\"fas fa-download ml-10\"></i>",
|
||||
"localize": false
|
||||
},{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/2.0.0.tar.gz",
|
||||
"content": "<span class=\"text-monospace\">2.0.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_fra_x86.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom_fra_x86.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "v1.1.0", "localize": false},
|
||||
{"type": "raw", "content": "v1.1.0", "localize": false, "rowspan": 2},
|
||||
{"type": "raw", "content": "content.commons.cpu.x64"},
|
||||
{"type": "raw", "content": "content.commons.lang.english", "rowspan": 2},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/1.1.0.zip",
|
||||
"content": "<span class=\"text-monospace\">1.1.0.zip</span><i class=\"fas fa-download ml-10\"></i>",
|
||||
"localize": false
|
||||
},{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/1.1.0.tar.gz",
|
||||
"content": "<span class=\"text-monospace\">1.1.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/lscom-x64.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom-x64.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "content.commons.cpu.x86"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/lscom-x86.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom-x86.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "v1.0.0", "localize": false},
|
||||
{"type": "raw", "content": "content.commons.cpu.x64"},
|
||||
{"type": "raw", "content": "content.commons.lang.english"},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/1.0.0.zip",
|
||||
"content": "<span class=\"text-monospace\">1.0.0.zip</span><i class=\"fas fa-download ml-10\"></i>",
|
||||
"localize": false
|
||||
},{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/1.0.0.tar.gz",
|
||||
"content": "<span class=\"text-monospace\">1.0.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
"parts": [{
|
||||
"type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/lscom.exe",
|
||||
"modifiers": ["thin"], "localize": false,
|
||||
"content": "<span class=\"text-monospace\">lscom.exe</span><i class=\"fas fa-download ml-xs\"></i>"
|
||||
}]
|
||||
}
|
||||
]]
|
||||
}]
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
{"type": "h1", "content": "content.commons.version.source"},
|
||||
{
|
||||
"type": "container",
|
||||
"padding": 20,
|
||||
"modifiers": ["no-top-margin"],
|
||||
"type": "container", "padding": 2, "modifiers": ["pb-0"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "links.title"},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"type": "table", "modifiers": ["stylish", "auto-cell-padding", "v-center-cells"],
|
||||
"head": [
|
||||
{"type": "raw", "content": "content.commons.version"},
|
||||
{"type": "raw", "content": "content.commons.download.multiple"}
|
||||
],
|
||||
"body": [[
|
||||
{"type": "raw", "content": "v2.1.0", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/2.1.0.zip",
|
||||
"content": "<span class=\"text-monospace\">2.1.0.zip</span><i class=\"fas fa-download ml-xs\"></i>",
|
||||
"localize": false
|
||||
},{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/2.1.0.tar.gz",
|
||||
"content": "<span class=\"text-monospace\">2.1.0.tar.gz</span><i class=\"fas fa-download ml-xs\"></i>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "v2.0.0", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/2.0.0.zip",
|
||||
"content": "<span class=\"text-monospace\">2.0.0.zip</span><i class=\"fas fa-download ml-xs\"></i>",
|
||||
"localize": false
|
||||
},{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/2.0.0.tar.gz",
|
||||
"content": "<span class=\"text-monospace\">2.0.0.tar.gz</span><i class=\"fas fa-download ml-xs\"></i>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "v1.1.0", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/1.1.0.zip",
|
||||
"content": "<span class=\"text-monospace\">1.1.0.zip</span><i class=\"fas fa-download ml-xs\"></i>",
|
||||
"localize": false
|
||||
},{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/1.1.0.tar.gz",
|
||||
"content": "<span class=\"text-monospace\">1.1.0.tar.gz</span><i class=\"fas fa-download ml-xs\"></i>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
],[
|
||||
{"type": "raw", "content": "v1.0.0", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"parts": [
|
||||
{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/1.0.0.zip",
|
||||
"content": "<span class=\"text-monospace\">1.0.0.zip</span><i class=\"fas fa-download ml-xs\"></i>",
|
||||
"localize": false
|
||||
},{
|
||||
"type": "button", "modifiers": ["thin"],
|
||||
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/1.0.0.tar.gz",
|
||||
"content": "<span class=\"text-monospace\">1.0.0.tar.gz</span><i class=\"fas fa-download ml-xs\"></i>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]]
|
||||
}
|
||||
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "links.title"},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://github.com/aziascreations/PB-ListComPort",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "content.commons.github"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://github.com/aziascreations/PB-ListComPort",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.github"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://github.com/aziascreations/PB-ListComPort)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://github.com/aziascreations/PB-ListComPort)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://git.nibblepoker.lu/aziascreations/PB-ListComPort",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.gitea"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://git.nibblepoker.lu/aziascreations/PB-ListComPort",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.gitea"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://git.nibblepoker.lu/aziascreations/PB-ListComPort)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://git.nibblepoker.lu/aziascreations/PB-ListComPort)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -52,7 +52,7 @@
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"template": "article",
|
||||
"template": "generic-project-readme",
|
||||
"head": {
|
||||
"title": "meta.title",
|
||||
"description": "meta.description"
|
||||
@@ -73,162 +73,138 @@
|
||||
}
|
||||
},
|
||||
"elements": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "meta.description"},
|
||||
|
||||
{"type": "h1", "content": "feature.current.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "meta.description"}
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.2"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.3"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.4"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.5"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.6"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.7"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.8"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.9"}
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "feature.planned.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "h1", "content": "feature.current.title"},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.2"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.3"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.4"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.5"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.6"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.7"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.8"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": " ⚬ ", "localize": false},
|
||||
{"type": "raw", "content": "feature.current.9"}
|
||||
]
|
||||
}
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.2"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.3"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.4"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.5"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.6"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.7"}
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "h1", "content": "links.title"},
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"modifiers": ["no-bottom-padding"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "feature.planned.title"},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"type": "raw",
|
||||
"link": "https://github.com/aziascreations/MC-Expanded-Iron-Bundles",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.1"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.2"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.3"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.4"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.5"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.6"},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "feature.planned.7"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-top-margin"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "links.title"},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"modifiers": ["no-bottom-padding"],
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "content.commons.github"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"link": "https://github.com/aziascreations/MC-Expanded-Iron-Bundles",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.github"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://github.com/aziascreations/MC-Expanded-Iron-Bundles)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"link": "https://git.nibblepoker.lu/aziascreations/MC-Expanded-Iron-Bundles",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "content.commons.gitea"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://git.nibblepoker.lu/aziascreations/MC-Expanded-Iron-Bundles)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
"content": "<span class=\"font-size-12\">(https://github.com/aziascreations/MC-Expanded-Iron-Bundles)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"modifiers": ["no-top-padding"],
|
||||
"type": "raw",
|
||||
"link": "https://git.nibblepoker.lu/aziascreations/MC-Expanded-Iron-Bundles",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "content.commons.gitea"},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://modrinth.com/mod/expanded-iron-bundles",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "Modrinth [Fabric & Forge]", "localize": false},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://modrinth.com/mod/expanded-iron-bundles)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://git.nibblepoker.lu/aziascreations/MC-Expanded-Iron-Bundles)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "paragraph",
|
||||
"indent": 2,
|
||||
"modifiers": ["no-top-padding"],
|
||||
"parts": [
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://modrinth.com/mod/expanded-iron-bundles",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "Modrinth [Fabric & Forge]", "localize": false},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://modrinth.com/mod/expanded-iron-bundles)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{"type": "raw", "content": "<br>", "localize": false},
|
||||
{"type": "raw", "content": "● ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://www.curseforge.com/minecraft/mc-mods/expanded-iron-bundles-fabric",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "CurseForge [Fabric]", "localize": false},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw", "link": "https://www.curseforge.com/minecraft/mc-mods/expanded-iron-bundles-fabric",
|
||||
"parts": [
|
||||
{"type": "raw", "content": "CurseForge [Fabric]", "localize": false},
|
||||
{"type": "raw", "content": "<span class=\"hidden-xs-and-down\"> - ", "localize": false},
|
||||
{
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://www.curseforge.com/minecraft/mc-mods/expanded-iron-bundles-fabric)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
"type": "raw",
|
||||
"content": "<span class=\"font-size-12\">(https://www.curseforge.com/minecraft/mc-mods/expanded-iron-bundles-fabric)</span></span>",
|
||||
"localize": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@@ -3,7 +3,7 @@
|
||||
"en": {
|
||||
"meta.title": "Youtube Auto Archiver",
|
||||
"meta.description": "A simple and yet highly configurable Python application that automatically checks if a Youtuber is streaming, and downloads said streams while also archiving its latest uploads.",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/Youtube-Auto-Archiver\" class=\"font-size-16\"><i class=\"fab fa-github\"></i> View on GitHub</a>",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/Youtube-Auto-Archiver\"><i class=\"fab fa-github\"></i> View on GitHub</a>",
|
||||
|
||||
"intro.title": "Introduction",
|
||||
"warning.title": "Warning",
|
||||
@@ -30,7 +30,7 @@
|
||||
"fr": {
|
||||
"_meta.title": "",
|
||||
"meta.description": "Une simple petite application hautement configurable qui vérifie automatiquement si un Youtubeur stream et as uploadé des vidéos afin de les archiver.",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/Youtube-Auto-Archiver\" class=\"font-size-16\"><i class=\"fab fa-github\"></i> Voir sur GitHub</a>",
|
||||
"article.subtitle": "<a href=\"https://github.com/aziascreations/Youtube-Auto-Archiver\"><i class=\"fab fa-github\"></i> Voir sur GitHub</a>",
|
||||
|
||||
"intro.title": "Introduction",
|
||||
"warning.title": "Avertissements",
|
||||
@@ -56,7 +56,7 @@
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"template": "article",
|
||||
"template": "generic-project-readme",
|
||||
"head": {
|
||||
"title": "meta.title",
|
||||
"description": "meta.description"
|
||||
@@ -77,54 +77,30 @@
|
||||
}
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "meta.description"}
|
||||
]
|
||||
},
|
||||
{"type": "h1", "content": "intro.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "meta.description"},
|
||||
|
||||
{"type": "h1", "content": "warning.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "warning.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "warning.p2"},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "warning.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "warning.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "warning.p2"}
|
||||
]
|
||||
},
|
||||
{"type": "h1", "content": "features.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "features.list.1.1"},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.1.2"},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.1.3"},
|
||||
{"type": "paragraph", "indent": 2, "content": "features.list.2.1"},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.2.2"},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.2.3"},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.2.4"},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.2.5"},
|
||||
{"type": "paragraph", "indent": 2, "content": "features.list.3.1"},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.3.2"},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.3.3"},
|
||||
{"type": "paragraph", "indent": 2, "content": "features.list.4.1"},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.4.2"},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "features.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "features.list.1.1", "modifiers": ["no-bottom-margin"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.1.2", "modifiers": ["no-bottom-margin", "no-top-margin"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.1.3", "modifiers": ["no-bottom-margin", "no-top-margin"]},
|
||||
{"type": "paragraph", "indent": 2, "content": "features.list.2.1", "modifiers": ["no-bottom-margin"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.2.2", "modifiers": ["no-bottom-margin", "no-top-margin"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.2.3", "modifiers": ["no-bottom-margin", "no-top-margin"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.2.4", "modifiers": ["no-bottom-margin", "no-top-margin"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.2.5", "modifiers": ["no-bottom-margin", "no-top-margin"]},
|
||||
{"type": "paragraph", "indent": 2, "content": "features.list.3.1", "modifiers": ["no-bottom-margin"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.3.2", "modifiers": ["no-bottom-margin", "no-top-margin"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.3.3", "modifiers": ["no-bottom-margin", "no-top-margin"]},
|
||||
{"type": "paragraph", "indent": 2, "content": "features.list.4.1", "modifiers": ["no-bottom-margin"]},
|
||||
{"type": "paragraph", "indent": 4, "content": "features.list.4.2", "modifiers": ["no-top-margin"]}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"type": "container", "padding": 20,
|
||||
"modifiers": ["no-bottom-padding", "no-top-margin"],
|
||||
"parts": [
|
||||
{"type": "h1", "content": "warning.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "warning.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "warning.p2"}
|
||||
]
|
||||
}
|
||||
{"type": "h1", "content": "warning.title"},
|
||||
{"type": "paragraph", "indent": 2, "content": "warning.p1"},
|
||||
{"type": "paragraph", "indent": 2, "content": "warning.p2"}
|
||||
]
|
||||
}
|
||||
|
65
contributors/index.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
$start_time = microtime(true);
|
||||
set_include_path('../');
|
||||
include_once 'commons/config.php';
|
||||
include_once 'commons/langs.php';
|
||||
$enable_kitty_and_doggo_sounds = true;
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo($user_language); ?>">
|
||||
<head>
|
||||
<?php include 'commons/DOM/head.php'; ?>
|
||||
<title><?php print(localize('contributors.head.title')); ?></title>
|
||||
<meta name="description" content="<?php print(localize('contributors.head.description')); ?>">
|
||||
<meta property="og:title" content="<?php print(localize('contributors.og.title')); ?>"/>
|
||||
<meta property="og:type" content="website"/>
|
||||
<meta property="og:url" content="<?php echo($host_uri . l10n_url_abs('/contributors/')); ?>"/>
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/NibblePoker/images/logos/v2_opengraph_v2.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="<?php print(localize('contributors.og.description')); ?>"/>
|
||||
<?php include 'commons/DOM/head-preloads.php'; ?>
|
||||
</head>
|
||||
<body>
|
||||
<?php
|
||||
include_once 'commons/DOM/utils.php';
|
||||
$SIDEBAR_IDS = ['contributors'];
|
||||
include 'commons/DOM/sidebar.php';
|
||||
?>
|
||||
<header class="w-full p-m pl-s">
|
||||
<h1 class="t-size-17 t-w-500">
|
||||
<i class="fad fa-user t-size-16 mr-s t-muted"></i><?php print(localize("contributors.header.title")); ?>
|
||||
</h1>
|
||||
<?php include 'commons/DOM/header-lang.php'; ?>
|
||||
</header>
|
||||
<main id="main" class="rl-m border border-r-0 p-l">
|
||||
|
||||
<?php printMainHeader(localize("contributors.intro.title")); ?>
|
||||
|
||||
<?php //printSubHeader(localize("contributors.sponsors.title")); ?>
|
||||
|
||||
<?php printSubHeader(localize("contributors.code.title")); ?>
|
||||
|
||||
<?php printSubHeader(localize("contributors.spiritualis.title")); ?>
|
||||
<div class="mx-xs mt-s">
|
||||
<div id="kitty-kiki" class="img-contributor kitty">
|
||||
<img src="/resources/NibblePoker/images/contributors/kiki-02.jpg" draggable="false">
|
||||
<img src="/resources/NibblePoker/images/contributors/kiki-03.jpg" draggable="false">
|
||||
</div>
|
||||
<div id="kitty-maki" class="img-contributor kitty">
|
||||
<img src="/resources/NibblePoker/images/contributors/maki-02.jpg" draggable="false">
|
||||
<img src="/resources/NibblePoker/images/contributors/maki-03.jpg" draggable="false">
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<?php
|
||||
include 'commons/DOM/footer.php';
|
||||
include 'commons/DOM/scripts.php';
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
$end_time = microtime(true);
|
||||
if($print_execution_timer) {
|
||||
echo("<!-- PHP execution took " . round(($end_time - $start_time) * 1000, 2) . " ms -->");
|
||||
}
|
||||
?>
|
72
error.php
Normal file
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
$start_time = microtime(true);
|
||||
set_include_path('./');
|
||||
include_once 'commons/config.php';
|
||||
include_once 'commons/langs.php';
|
||||
|
||||
// Determining the relevant error code to prepare the page for.
|
||||
$np_err_code = 500;
|
||||
if(isset($_SERVER['REDIRECT_STATUS'])) {
|
||||
$np_err_code = $_SERVER['REDIRECT_STATUS'];
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo($user_language); ?>">
|
||||
<head>
|
||||
<?php include 'commons/DOM/head.php'; ?>
|
||||
<title><?php print(localize('error.'.$np_err_code.'.head.title')); ?></title>
|
||||
<meta name="description" content="<?php print(localize('error.'.$np_err_code.'.head.description')); ?>">
|
||||
<meta property="og:title" content="<?php print(localize('error.'.$np_err_code.'.og.title')); ?>"/>
|
||||
<meta property="og:type" content="website"/>
|
||||
<meta property="og:url" content="<?php echo($host_uri . l10n_url_abs('/')); ?>"/>
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/NibblePoker/images/logos/v2_opengraph.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="<?php print(localize('error.'.$np_err_code.'.og.description')); ?>"/>
|
||||
</head>
|
||||
<body>
|
||||
<?php
|
||||
include_once 'commons/DOM/utils.php';
|
||||
$SIDEBAR_IDS = [];
|
||||
include 'commons/DOM/sidebar.php';
|
||||
?>
|
||||
<header class="w-full p-m pl-s">
|
||||
<h1 class="t-size-17 t-w-500">
|
||||
<i class="fad fa-exclamation-triangle t-size-16 mr-s t-muted"></i><?php print(localize("error.".$np_err_code.".header.title")); ?>
|
||||
</h1>
|
||||
<?php include 'commons/DOM/header-lang.php'; ?>
|
||||
</header>
|
||||
<main id="main" class="rl-m border border-r-0 p-l">
|
||||
|
||||
<?php printMainHeader(localize("error.title", [$np_err_code]), "fas fa-exclamation-triangle"); ?>
|
||||
<p class="mt-xs mx-s t-bold t-size-12"><?php print(localize("error." . $np_err_code . ".og.description")); ?></p>
|
||||
|
||||
<?php
|
||||
$np_err_img = "";
|
||||
$np_err_img_alt = "";
|
||||
switch($np_err_code) {
|
||||
case 403:
|
||||
case 404:
|
||||
$np_err_img = "/resources/NibblePoker/images/drawings/computer_v1_danger_strong.png";
|
||||
$np_err_img_alt = localize("error.skit.pc.dead");
|
||||
break;
|
||||
case 500:
|
||||
default:
|
||||
$np_err_img = "/resources/NibblePoker/images/drawings/computer_v1_dead_strong.png";
|
||||
$np_err_img_alt = localize("error.skit.pc.dead");
|
||||
break;
|
||||
}
|
||||
echo('<img id="error-page-skit" src="' . $np_err_img . '" alt="' . $np_err_img_alt . '" draggable="false">');
|
||||
?>
|
||||
</main>
|
||||
<?php
|
||||
include 'commons/DOM/footer.php';
|
||||
include 'commons/DOM/scripts.php';
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
$end_time = microtime(true);
|
||||
if($print_execution_timer) {
|
||||
echo("<!-- PHP execution took " . round(($end_time - $start_time) * 1000, 2) . " ms -->");
|
||||
}
|
||||
?>
|
BIN
favicon.ico
Before Width: | Height: | Size: 185 KiB After Width: | Height: | Size: 24 KiB |
54
fix-import-path.js
Normal file
@@ -0,0 +1,54 @@
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
|
||||
// Grabbing launch arguments
|
||||
if(process.argv.length !== 5) {
|
||||
console.error('!> Invalid syntax !');
|
||||
console.error('Use: node fix-import-path.js <input_file> <import_name> <replacement_file>');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const inputFile = process.argv[2];
|
||||
const inputImportName = process.argv[3];
|
||||
const inputReplacement = process.argv[4];
|
||||
|
||||
let filesToProcess = inputFile.split(";");
|
||||
|
||||
|
||||
// Fixing the files
|
||||
for(const fileToProcess of filesToProcess) {
|
||||
console.log("> Replacing '"+inputImportName+"' with '"+inputReplacement+"' in '"+fileToProcess+"' ...");
|
||||
|
||||
const inputFileLines = fs.readFileSync(fileToProcess).toString().split("\n");
|
||||
|
||||
if(inputFileLines == null) {
|
||||
console.error('!> Failed to read lines !');
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
const outputFileLines = [];
|
||||
|
||||
for(let inputLine of inputFileLines) {
|
||||
if(inputLine.startsWith("import") && inputLine.includes("from")) {
|
||||
inputLine = inputLine.split(/['"]+/);
|
||||
|
||||
// inputLine is now an array !
|
||||
//console.log(inputLine);
|
||||
|
||||
inputLine[inputLine.length - 2] = inputLine[inputLine.length - 2].replace(
|
||||
inputImportName, inputReplacement
|
||||
);
|
||||
|
||||
inputLine = inputLine.join("\"");
|
||||
}
|
||||
outputFileLines.push(inputLine);
|
||||
}
|
||||
|
||||
try {
|
||||
fs.unlinkSync(fileToProcess);
|
||||
fs.writeFileSync(fileToProcess, outputFileLines.join("\n"), "utf8");
|
||||
} catch(err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
@@ -1,27 +0,0 @@
|
||||
<?php
|
||||
echo("# This is a a .env file for use in local development.
|
||||
# Duplicate this file as .env in the root of the project
|
||||
# and update the environment variables to match your
|
||||
# desired config.
|
||||
#
|
||||
# DO NOT MAKE THIS FILE PUBLICLY ACCESSIBLE !
|
||||
|
||||
# PostgreSQL connection string for the DB
|
||||
DATABASE_URL=postgres://fib.gov:5432/i_am_dickish_script_kiddy
|
||||
|
||||
# Logs' level
|
||||
LOG_LEVEL=trace
|
||||
|
||||
# The environment to run the application in
|
||||
NODE_ENV=development
|
||||
|
||||
# The HTTP port to run the application on
|
||||
PORT=69
|
||||
|
||||
# The secret to encrypt session IDs with
|
||||
SESSION_SECRET=R2V0IGZ1Y2tlZCB5b3UgZnVja2luZyB0d2F0ICE=
|
||||
|
||||
# The secret to get access to the admin panel
|
||||
ADMIN_SECRET=SmV0IGZ1ZWwgY2FuJ3QgbWVsdCBzdGVlbCBiZWFtLCBCdXNoIGRpZCA5LzEx=
|
||||
");
|
||||
?>
|
@@ -1,14 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Title</h1>
|
||||
<p>PHP file jail</p>
|
||||
</body>
|
||||
</html>
|
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
header('Content-Type: text/xml; charset=utf-8');
|
||||
echo("<?xml version=\"1.0\" encoding=\"utf-8\" ?>
|
||||
|
||||
<manifest xmlns=\"http://schemas.microsoft.com/wlw/manifest/weblog\">
|
||||
|
||||
<options>
|
||||
<clientType>WordPress</clientType>
|
||||
<supportsKeywords>Yes</supportsKeywords>
|
||||
<supportsGetTags>Yes</supportsGetTags>
|
||||
</options>
|
||||
|
||||
<weblog>
|
||||
<serviceName>WordPress</serviceName>
|
||||
<imageUrl>images/wlw/wp-icon.png</imageUrl>
|
||||
<watermarkImageUrl>images/wlw/wp-watermark.png</watermarkImageUrl>
|
||||
<homepageLinkText>View site</homepageLinkText>
|
||||
<adminLinkText>Dashboard</adminLinkText>
|
||||
<adminUrl>
|
||||
<![CDATA[
|
||||
{blog-postapi-url}/../wp-admin/
|
||||
]]>
|
||||
</adminUrl>
|
||||
<postEditingUrl>
|
||||
<![CDATA[
|
||||
{blog-postapi-url}/../wp-admin/post.php?action=edit&post={post-id}
|
||||
]]>
|
||||
</postEditingUrl>
|
||||
</weblog>
|
||||
|
||||
<buttons>
|
||||
<button>
|
||||
<id>0</id>
|
||||
<text>Manage Comments</text>
|
||||
<imageUrl>images/wlw/wp-comments.png</imageUrl>
|
||||
<clickUrl>
|
||||
<![CDATA[
|
||||
{blog-postapi-url}/../wp-admin/edit-comments.php
|
||||
]]>
|
||||
</clickUrl>
|
||||
</button>
|
||||
|
||||
</buttons>
|
||||
|
||||
</manifest>");
|
||||
?>
|
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
header('Content-Type: text/xml; charset=utf-8');
|
||||
echo("<?xml version='1.0'?>
|
||||
<module>
|
||||
<name>VtigerVulnPlugin</name>
|
||||
<label>VtigerVulnPlugin</label>
|
||||
<parent>Tools</parent>
|
||||
<version>1.01</version>
|
||||
<dependencies>
|
||||
<vtiger_version>7.0.0</vtiger_version>
|
||||
<vtiger_max_version>7.*</vtiger_max_version>
|
||||
</dependencies>
|
||||
<license>
|
||||
<file>LICENSE.txt</file>
|
||||
</license>
|
||||
|
||||
<actions>
|
||||
<action>
|
||||
<name><![CDATA[Import]]></name>
|
||||
<status>enabled</status>
|
||||
</action>
|
||||
<action>
|
||||
<name><![CDATA[Export]]></name>
|
||||
<status>disabled</status>
|
||||
</action>
|
||||
</actions>
|
||||
</module>");
|
||||
?>
|
@@ -1,14 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Title</h1>
|
||||
<p>Folder jail</p>
|
||||
</body>
|
||||
</html>
|
@@ -1,4 +0,0 @@
|
||||
# Honeypots
|
||||
|
||||
## ???
|
||||
TODO
|
295
index.php
@@ -1,238 +1,75 @@
|
||||
<?php
|
||||
set_include_path('./commons/');
|
||||
include_once 'config.php';
|
||||
include_once 'langs.php';
|
||||
$start_time = microtime(true);
|
||||
set_include_path('./');
|
||||
include_once 'commons/config.php';
|
||||
include_once 'commons/langs.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo($user_language); ?>">
|
||||
<head>
|
||||
<?php include 'headers.php'; ?>
|
||||
<title>Nibble Poker</title>
|
||||
<meta name="description" content="<?php print(localize('home.intro.meta.description')); ?>">
|
||||
<meta property="og:title" content="Nibble Poker" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="<?php echo($host_uri); ?>/" />
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/Azias/logos/opengraph.png"/>
|
||||
<?php include 'commons/DOM/head.php'; ?>
|
||||
<title><?php print(localize('home.head.title')); ?></title>
|
||||
<meta name="description" content="<?php print(localize('home.head.description')); ?>">
|
||||
<meta property="og:title" content="<?php print(localize('home.og.title')); ?>"/>
|
||||
<meta property="og:type" content="website"/>
|
||||
<meta property="og:url" content="<?php echo($host_uri . l10n_url_abs('/')); ?>"/>
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/NibblePoker/images/logos/v2_opengraph.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="<?php print(localize('home.intro.meta.description')); ?>"/>
|
||||
<meta property="og:description" content="<?php print(localize('home.og.description')); ?>"/>
|
||||
</head>
|
||||
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-sidebar-shortcut-enabled="true">
|
||||
<?php include 'body-root.php'; ?>
|
||||
<div class="page-wrapper with-sidebar with-navbar-fixed-bottom">
|
||||
<?php $SIDEBAR_ID = 'home'; include 'sidebar.php'; ?>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div id="page-title-bar" class="card p-0 pl-20 m-0 square-corners bg-very-dark title-bkgd navbar">
|
||||
<h2 class="content-title font-size-24 mt-20 text-truncate">
|
||||
<i class="fad fa-home"></i> <?php print(localize("home.title.header")); ?>
|
||||
</h2>
|
||||
<?php include 'header-lang.php'; ?>
|
||||
</div>
|
||||
<div class="row mx-auto w-95">
|
||||
<!-- The "content mx-auto w-lg-p90" do not work for the parent, the cards are different ! -->
|
||||
<div class="col-12 d-block">
|
||||
<div class="content mb-0">
|
||||
<div class="card p-0 m-0 card-bkgd">
|
||||
<div class="content m-0">
|
||||
<div class="px-card py-10 border-bottom px-20 bg-light-lm bg-very-dark-dm">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-1 text-center"><i class="fad fa-alien-monster"></i></div>
|
||||
<div class="col-10 text-center">
|
||||
<h2 class="card-title font-size-18 m-0"><?php print(localize("home.intro.title")); ?></h2>
|
||||
</div>
|
||||
<div class="col-1 text-center"><i class="fad fa-alien-monster"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content m-20">
|
||||
<h2 class="content-title font-size-20 mb-10"></h2>
|
||||
<p class="ml-lg-10 mt-lg-5 mb-lg-5"><?php print(localize("home.intro.text.1")); ?></p>
|
||||
<p class="ml-lg-10 mt-lg-5"><?php print(localize("home.intro.text.2")); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mx-auto w-95">
|
||||
<!--<div class="row mx-auto w-lg-p90">-->
|
||||
<div class="col-sm-12 col-lg-8 table-cell">
|
||||
<div class="content mb-0">
|
||||
<div class="card p-0 m-0 card-bkgd">
|
||||
<div class="content m-0">
|
||||
|
||||
<div class="px-card py-10 border-bottom px-20 bg-light-lm bg-very-dark-dm">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-1"><i class="fad fa-computer-classic"></i></div>
|
||||
<div class="col-10 text-center">
|
||||
<h2 class="card-title font-size-18 m-0">Applications</h2>
|
||||
</div>
|
||||
<div class="col-1 text-right"><i class="fad fa-computer-classic"></i></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="px-card py-5 px-20">
|
||||
<div class="pl-lg-15 l-lab-dotnet">
|
||||
<p class="mb-0 font-weight-semi-bold">
|
||||
DotNet-ListComPort
|
||||
<span class="ml-15 text-super-muted">
|
||||
<i class="fab fa-windows"></i>
|
||||
</span>
|
||||
</p>
|
||||
<p class="ml-5 mt-0">
|
||||
Cli tool that lists COM ports in different parsable formats.<br>
|
||||
<span class="pr-20">
|
||||
<i class="fad fa-globe"></i> <a href="https://github.com/aziascreations/DotNet-ListComPort">GitHub</a>
|
||||
</span>
|
||||
<i class="fad fa-globe"></i> <a href="<?php echo(l10n_url_abs("/content/lscom-cli-dotnet")); ?>">Project's page</a>
|
||||
</p>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="pl-lg-15 l-lab-web">
|
||||
<p class="mb-0 font-weight-semi-bold">
|
||||
Youtube-Auto-Archiver
|
||||
<span class="ml-15 text-super-muted">
|
||||
<i class="fab fa-windows"></i>
|
||||
<i class="fab fa-linux"></i>
|
||||
<i class="fab fa-docker"></i>
|
||||
</span>
|
||||
</p>
|
||||
<p class="ml-5 mt-0">
|
||||
Automatic archival solutions for YouTube livestreams and uploads.<br>
|
||||
<span class="pr-20">
|
||||
<i class="fad fa-globe"></i> <a href="https://github.com/aziascreations/Youtube-Auto-Archiver">GitHub</a>
|
||||
</span>
|
||||
<i class="fad fa-globe"></i> <a href="<?php echo(l10n_url_abs("/content/youtube-auto-archiver")); ?>">Project's page</a>
|
||||
</p>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="pl-lg-15 l-lab-office">
|
||||
<p class="mb-0 font-weight-semi-bold">
|
||||
Excel-Worksheet-Password-Remover
|
||||
<span class="ml-15 text-super-muted">
|
||||
<i class="fab fa-chrome"></i>
|
||||
<i class="fab fa-firefox-browser"></i>
|
||||
</span>
|
||||
</p>
|
||||
<p class="ml-5 mt-0">
|
||||
Web-based tool that simplifies the removal of passwords on Excel's Worksheet.<br>
|
||||
<span class="pr-20">
|
||||
<i class="fad fa-globe"></i> <a href="https://github.com/aziascreations/Excel-Worksheet-Password-Remover">GitHub</a>
|
||||
</span>
|
||||
<i class="fad fa-globe"></i> <a href="<?php echo(l10n_url_abs("/content/excel-worksheet-password-remover")); ?>">Project's page</a>
|
||||
</p>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="pl-lg-15 l-lab-game">
|
||||
<p class="mb-0 font-weight-semi-bold">
|
||||
Minecraft - Expanded Iron Bundles
|
||||
<span class="ml-15 text-super-muted">
|
||||
<i class="fas fa-gamepad-alt"></i>
|
||||
</span>
|
||||
</p>
|
||||
<p class="ml-5 mt-0">
|
||||
A small Minecraft mod that provides bundles with more storage space, and new functionalities in the future.<br>
|
||||
<span class="pr-20">
|
||||
<i class="fad fa-globe"></i> <a href="https://github.com/aziascreations/MC-Expanded-Iron-Bundles">GitHub</a>
|
||||
</span>
|
||||
<i class="fad fa-globe"></i> <a href="<?php echo(l10n_url_abs("/content/mc-expanded-iron-bundles")); ?>">Project's page</a>
|
||||
</p>
|
||||
</div>
|
||||
<hr>
|
||||
|
||||
<div class="pl-lg-15 l-lab-app">
|
||||
<p class="mb-0 font-weight-semi-bold">
|
||||
DotNet-Arguments
|
||||
<span class="ml-15 text-super-muted">
|
||||
<i class="fa fa-puzzle-piece"></i>
|
||||
<i class="fab fa-windows"></i>
|
||||
<i class="fab fa-linux"></i>
|
||||
<i class="fab fa-docker"></i>
|
||||
</span>
|
||||
</p>
|
||||
<p class="ml-5 mt-0">
|
||||
A simple and 'to-the-point' library to parse launch arguments in .NET and .NET Core applications.<br>
|
||||
<span class="pr-20">
|
||||
<i class="fad fa-globe"></i> <a href="https://github.com/aziascreations/DotNet-Arguments">GitHub</a>
|
||||
</span>
|
||||
<i class="fad fa-globe"></i> <a href="<?php echo(l10n_url_abs("/content/dotnet-arguments")); ?>">Project's page</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<a href="<?php print(l10n_url_abs('/content/')); ?>">
|
||||
<div class="container-card-fold primary">
|
||||
<i class="fas fa-angle-right r-45"></i>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-lg-4 table-cell"><!--d-none d-sm-block-->
|
||||
<div class="content ml-lg-0">
|
||||
<div class="card p-0 m-0 card-bkgd">
|
||||
<div class="content m-0">
|
||||
<div class="px-card py-10 border-bottom px-20 bg-light-lm bg-very-dark-dm">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-1">
|
||||
<i class="fad fa-pen-nib fa-flip-horizontal"></i>
|
||||
</div>
|
||||
<div class="col-10 text-center">
|
||||
<h2 class="card-title font-size-18 m-0">Updates</h2>
|
||||
</div>
|
||||
<div class="col-1 text-right"><i class="fad fa-pen-nib"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-5 px-20">
|
||||
<p>
|
||||
<span class="font-weight-bold">9th September 2022</span><br>
|
||||
Moved to v6Node and updated privacy policy to reflect the changes.
|
||||
</p>
|
||||
<hr>
|
||||
<p>
|
||||
<span class="font-weight-bold">25th July 2022</span><br>
|
||||
Finished setting up a public read-only Gitea instance for the projects.
|
||||
</p>
|
||||
<hr>
|
||||
<p>
|
||||
<span class="font-weight-bold">16th April 2022</span><br>
|
||||
Finished the <i>"Project"</i> section
|
||||
</p>
|
||||
<hr>
|
||||
<p>
|
||||
<span class="font-weight-bold">18th March 2022</span><br>
|
||||
Updated the privacy policy.
|
||||
</p>
|
||||
<hr>
|
||||
<p>
|
||||
<span class="font-weight-bold">28th February 2022</span><br>
|
||||
Dropped OVH as our main web hosting provider, and switched to CloudFlare.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include 'footer.php'; ?>
|
||||
</div>
|
||||
<script src="/resources/HalfMoon/1.1.1/js/halfmoon.min.js"></script>
|
||||
<script src="/resources/Azias/js/nibblepoker.lu.js"></script>
|
||||
<body>
|
||||
<?php
|
||||
include_once 'commons/DOM/utils.php';
|
||||
$SIDEBAR_IDS = ['home'];
|
||||
include 'commons/DOM/sidebar.php';
|
||||
?>
|
||||
<header class="w-full p-m pl-s">
|
||||
<h1 class="t-size-17 t-w-500">
|
||||
<i class="fad fa-home t-size-16 mr-s t-muted"></i><?php print(localize("home.header.title")); ?>
|
||||
</h1>
|
||||
<?php include 'commons/DOM/header-lang.php'; ?>
|
||||
</header>
|
||||
<main id="main" class="rl-m border border-r-0 p-l">
|
||||
|
||||
<?php printMainHeader(localize("home.intro.title", ["<i class='ml-xxs'>NibblePoker." . $host_tld . "</i>"])); ?>
|
||||
<p class="mt-xs mx-s"><?php print(localize("home.intro.text.1")); ?></p>
|
||||
<p class="mt-xs mx-s"><?php print(localize("home.intro.text.2")); ?></p>
|
||||
|
||||
|
||||
<?php printMainHeader(localize("home.showcase.title")); ?>
|
||||
<p class="mt-xs mx-s t-bold">TODO</p>
|
||||
|
||||
<?php printMainHeader(localize("home.updates.title")); ?>
|
||||
<p class="mt-xs ml-s t-w-600"><i class="fad fa-calendar-alt mr-xs"></i><?php print(localize("home.updates.3.date")); ?></p>
|
||||
<p class="mt-xxs ml-m">
|
||||
<?php print(localize("home.updates.3.text.1")); ?><br>
|
||||
<?php print(localize("home.updates.3.text.2")); ?><br>
|
||||
<?php print(localize("home.updates.3.text.3")); ?><br>
|
||||
<?php print(localize("home.updates.text.privacy")); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s t-w-600"><i class="fad fa-calendar-alt mr-xs"></i><?php print(localize("home.updates.2.date")); ?></p>
|
||||
<p class="mt-xxs ml-m">
|
||||
<?php print(localize("home.updates.2.text.1")); ?><br>
|
||||
<?php print(localize("home.updates.2.text.2")); ?><br>
|
||||
<?php print(localize("home.updates.2.text.3")); ?><br>
|
||||
<?php print(localize("home.updates.2.text.4")); ?><br>
|
||||
<?php print(localize("home.updates.text.privacy")); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s t-w-600"><i class="fad fa-calendar-alt mr-xs"></i><?php print(localize("home.updates.1.date")); ?></p>
|
||||
<p class="mt-xxs ml-m">
|
||||
<?php print(localize("home.updates.1.text.1")); ?><br>
|
||||
<?php print(localize("home.updates.text.privacy")); ?>
|
||||
</p>
|
||||
</main>
|
||||
<?php
|
||||
include 'commons/DOM/footer.php';
|
||||
include 'commons/DOM/scripts.php';
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
$end_time = microtime(true);
|
||||
if($print_execution_timer) {
|
||||
echo("<!-- PHP execution took " . round(($end_time - $start_time) * 1000, 2) . " ms -->");
|
||||
}
|
||||
?>
|
199
links/index.php
@@ -1,120 +1,97 @@
|
||||
<?php
|
||||
set_include_path('../commons/');
|
||||
include_once 'config.php';
|
||||
include_once 'langs.php';
|
||||
$start_time = microtime(true);
|
||||
set_include_path('../');
|
||||
include_once 'commons/config.php';
|
||||
include_once 'commons/langs.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo($user_language); ?>">
|
||||
<head>
|
||||
<?php include 'headers.php'; ?>
|
||||
<title>Links - Nibble Poker</title>
|
||||
<meta name="description" content="A collection of links to all the other locations we are active on.">
|
||||
<meta property="og:title" content="Nibble Poker - Links" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="<?php echo($host_uri); ?>/" />
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/Azias/logos/v2_opengraph.png"/>
|
||||
<?php include 'commons/DOM/head.php'; ?>
|
||||
<title><?php print(localize('links.head.title')); ?></title>
|
||||
<meta name="description" content="<?php print(localize('links.head.description')); ?>">
|
||||
<meta property="og:title" content="<?php print(localize('links.og.title')); ?>"/>
|
||||
<meta property="og:type" content="website"/>
|
||||
<meta property="og:url" content="<?php echo($host_uri . l10n_url_abs('/')); ?>"/>
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/NibblePoker/images/logos/v2_opengraph.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="A collection of links to all the other locations we are active on."/>
|
||||
<meta property="og:description" content="<?php print(localize('links.og.description')); ?>"/>
|
||||
</head>
|
||||
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-sidebar-shortcut-enabled="true">
|
||||
<?php include 'body-root.php'; ?>
|
||||
<div class="page-wrapper with-sidebar with-navbar-fixed-bottom">
|
||||
<?php $SIDEBAR_ID = 'links'; include 'sidebar.php'; ?>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div id="page-title-bar" class="card p-0 pl-20 m-0 square-corners bg-very-dark title-bkgd navbar">
|
||||
<h2 class="content-title font-size-24 mt-20 text-truncate">
|
||||
<i class="fad fa-link"></i> <?php print(localize("links.title")); ?>
|
||||
</h2>
|
||||
<?php include 'header-lang.php'; ?>
|
||||
</div>
|
||||
<div class="content mx-auto w-lg-p90">
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-5 col-lg-12">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fab fa-github"></i> GitHub
|
||||
</h2>
|
||||
</div>
|
||||
<div class="col-7 hidden-lg-and-up text-right font-italic">
|
||||
<h2 class="card-title font-size-18 m-0 text-super-muted">aziascreations</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div class="content mx-15 my-15"><p>[Contains the most recent repositories and blablabla...]</p>
|
||||
</div>-->
|
||||
<div class="px-card py-10 bg-light-lm bg-very-dark-dm rounded-bottom px-20">
|
||||
<p class="font-size-12 m-0">
|
||||
<i class="fad fa-globe"></i> https://github.com/aziascreations
|
||||
<a class="ml-20" href="https://github.com/aziascreations">
|
||||
<span class="badge badge-primary">
|
||||
<?php print(localize('links.visit.button')); ?>
|
||||
</span>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-5 col-lg-12">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fab fa-twitter"></i> Twitter
|
||||
</h2>
|
||||
</div>
|
||||
<div class="col-7 hidden-lg-and-up text-right font-italic">
|
||||
<h2 class="card-title font-size-18 m-0 text-super-muted">@nibblepoker</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-10 bg-light-lm bg-very-dark-dm rounded-bottom px-20">
|
||||
<p class="font-size-12 m-0">
|
||||
<i class="fad fa-globe"></i> https://twitter.com/NibblePoker
|
||||
<a class="ml-20" href="https://twitter.com/NibblePoker">
|
||||
<span class="badge badge-primary">
|
||||
<?php print(localize('links.visit.button')); ?>
|
||||
</span>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-5 col-lg-12">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fab fa-linkedin"></i> LinkedIn
|
||||
</h2>
|
||||
</div>
|
||||
<div class="col-7 hidden-lg-and-up text-right font-italic">
|
||||
<h2 class="card-title font-size-18 m-0 text-super-muted">NibblePoker</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-10 bg-light-lm bg-very-dark-dm rounded-bottom px-20">
|
||||
<p class="font-size-12 m-0">
|
||||
<i class="fad fa-globe"></i> https://www.linkedin.com/in/herwin-bozet-60aa6310b/
|
||||
<a class="ml-20" href="https://www.linkedin.com/in/herwin-bozet-60aa6310b/">
|
||||
<span class="badge badge-primary">
|
||||
<?php print(localize('links.visit.button')); ?>
|
||||
</span>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include 'footer.php'; ?>
|
||||
</div>
|
||||
<script src="/resources/HalfMoon/1.1.1/js/halfmoon.min.js"></script>
|
||||
<script src="/resources/Azias/js/nibblepoker.lu.js"></script>
|
||||
<body>
|
||||
<?php
|
||||
include_once 'commons/DOM/utils.php';
|
||||
$SIDEBAR_IDS = ['links'];
|
||||
include 'commons/DOM/sidebar.php';
|
||||
?>
|
||||
<header class="w-full p-m pl-s">
|
||||
<h1 class="t-size-17 t-w-500">
|
||||
<i class="fad fa-link t-size-16 mr-s t-muted"></i><?php print(localize("links.header.title")); ?>
|
||||
</h1>
|
||||
<?php include 'commons/DOM/header-lang.php'; ?>
|
||||
</header>
|
||||
<main id="main" class="rl-m border border-r-0 p-l">
|
||||
<?php printMainHeader(localize("links.social.title")); ?>
|
||||
|
||||
<p class="mt-s ml-s t-w-600 t-size-12">
|
||||
<i class="fab fa-twitter mr-xs"></i><a href="https://twitter.com/NibblePoker"><?php print(localize("links.twitter.title")); ?></a>
|
||||
</p>
|
||||
<p class="mt-xxs ml-l">
|
||||
<?php print(localize("links.twitter.text.1")); ?>
|
||||
</p>
|
||||
|
||||
<p class="mt-s ml-s t-w-600 t-size-12">
|
||||
<i class="fab fa-github mr-xs"></i><a href="https://github.com/aziascreations"><?php print(localize("links.github.title")); ?></a>
|
||||
</p>
|
||||
<p class="mt-xxs ml-l">
|
||||
<?php print(localize("links.github.text.1")); ?>
|
||||
</p>
|
||||
|
||||
<p class="mt-s ml-s t-w-600 t-size-12">
|
||||
<i class="fab fa-github mr-xs"></i><a href="https://github.com/NibblePoker"><?php print(localize("links.github_pro.title")); ?></a>
|
||||
</p>
|
||||
<p class="mt-xxs ml-l">
|
||||
<?php print(localize("links.github_pro.text.1")); ?>
|
||||
</p>
|
||||
|
||||
<p class="mt-s ml-s t-w-600 t-size-12">
|
||||
<i class="fab fa-linkedin mr-xs"></i><a href="https://twitter.com/NibblePoker"><?php print(localize("links.linkedin.title")); ?></a>
|
||||
</p>
|
||||
<p class="mt-xxs ml-l">
|
||||
<?php print(localize("links.linkedin.text.1")); ?>
|
||||
</p>
|
||||
|
||||
<?php printMainHeader(localize("links.misc.title")); ?>
|
||||
|
||||
<p class="mt-s ml-s t-w-600 t-size-12">
|
||||
<i class="fad fa-code-branch ml-xxs mr-xs"></i><a href="https://git.nibblepoker.lu/"><?php print(localize("links.gitea.title")); ?></a>
|
||||
</p>
|
||||
<p class="mt-xxs ml-l">
|
||||
<?php print(localize("links.gitea.text.1")); ?>
|
||||
</p>
|
||||
|
||||
<p class="mt-s ml-s t-w-600 t-size-12">
|
||||
<i class="fad fa-download mr-xs"></i><a href="https://files.nibblepoker.lu/"><?php print(localize("links.files.title")); ?></a>
|
||||
</p>
|
||||
<p class="mt-xxs ml-l">
|
||||
<?php print(localize("links.files.text.1")); ?>
|
||||
</p>
|
||||
|
||||
<p class="mt-s ml-s t-w-600 t-size-12">
|
||||
<i class="fad fa-archive mr-xs"></i><a href="https://archives.nibblepoker.lu/"><?php print(localize("links.archives.title")); ?></a>
|
||||
</p>
|
||||
<p class="mt-xxs ml-l">
|
||||
<?php print(localize("links.archives.text.1")); ?>
|
||||
</p>
|
||||
</main>
|
||||
<?php
|
||||
include 'commons/DOM/footer.php';
|
||||
include 'commons/DOM/scripts.php';
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
$end_time = microtime(true);
|
||||
if($print_execution_timer) {
|
||||
echo("<!-- PHP execution took " . round(($end_time - $start_time) * 1000, 2) . " ms -->");
|
||||
}
|
||||
?>
|
10
package.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"minify": "^10.2.0",
|
||||
"rollup": "^3.27.2",
|
||||
"sass": "^1.63.6",
|
||||
"terser": "^5.19.0",
|
||||
"typescript": "^5.1.6",
|
||||
"html-minifier-terser": "^7.2.0"
|
||||
}
|
||||
}
|
25
php-relinker.js
Normal file
@@ -0,0 +1,25 @@
|
||||
const fs = require('fs');
|
||||
|
||||
if (process.argv.length < 3) {
|
||||
console.log('Usage: node php-relinker.js <input_php_file>');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const inputFilePath = process.argv[2];
|
||||
console.log(">", inputFilePath);
|
||||
|
||||
function replaceExtension(match) {
|
||||
return match.replace('.php', '.min.php');
|
||||
}
|
||||
|
||||
try {
|
||||
const content = fs.readFileSync(inputFilePath, 'utf-8');
|
||||
const modifiedContent = content.replace(/include.*\.php/g, replaceExtension);
|
||||
fs.writeFileSync(inputFilePath, modifiedContent, 'utf-8');
|
||||
} catch (error) {
|
||||
if (error.code === 'ENOENT') {
|
||||
console.log('> Error: File not found.');
|
||||
} else {
|
||||
console.error('> Error: An error occurred =>', error.message);
|
||||
}
|
||||
}
|
@@ -1,281 +1,265 @@
|
||||
<?php
|
||||
set_include_path('../commons/');
|
||||
include_once 'config.php';
|
||||
include_once 'langs.php';
|
||||
$start_time = microtime(true);
|
||||
set_include_path('../');
|
||||
include_once 'commons/config.php';
|
||||
include_once 'commons/langs.php';
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo($user_language); ?>">
|
||||
<head>
|
||||
<?php include 'headers.php'; ?>
|
||||
<title><?php print(localize('privacy.title')); ?> - Nibble Poker</title>
|
||||
<meta name="description" content="<?php print(localize('privacy.description')); ?>">
|
||||
<meta property="og:title" content="Nibble Poker - <?php print(localize('privacy.title')); ?>" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="<?php echo($host_uri); ?>/" />
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/Azias/logos/v2_opengraph.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="<?php print(localize('privacy.description')); ?>"/>
|
||||
<?php include 'commons/DOM/head.php'; ?>
|
||||
<title><?php print(localize('privacy.head.title')); ?></title>
|
||||
<meta name="description" content="<?php print(localize('privacy.head.description')); ?>">
|
||||
<meta property="og:title" content="<?php print(localize('privacy.og.title')); ?>"/>
|
||||
<meta property="og:type" content="website"/>
|
||||
<meta property="og:url" content="<?php echo($host_uri . l10n_url_abs('/privacy/')); ?>"/>
|
||||
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/NibblePoker/images/logos/v2_opengraph.png"/>
|
||||
<meta property="og:image:type" content="image/png"/>
|
||||
<meta property="og:description" content="<?php print(localize('privacy.og.description')); ?>"/>
|
||||
</head>
|
||||
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-sidebar-shortcut-enabled="true">
|
||||
<?php include 'body-root.php'; ?>
|
||||
<div class="page-wrapper with-sidebar with-navbar-fixed-bottom">
|
||||
<?php include 'sidebar.php'; ?>
|
||||
<div class="content-wrapper">
|
||||
<div class="container-fluid">
|
||||
<div id="page-title-bar" class="card p-0 pl-20 m-0 square-corners bg-very-dark title-bkgd navbar">
|
||||
<h2 class="content-title font-size-24 mt-20 text-truncate">
|
||||
<i class="fad fa-user-secret"></i> <?php print(localize('privacy.title')); ?>
|
||||
</h2>
|
||||
<?php include 'header-lang.php'; ?>
|
||||
</div>
|
||||
<div class="content mx-auto w-lg-p90">
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fad fa-info"></i> <?php print(localize('privacy.introduction.title')); ?>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-10 bg-light-lm px-20 bg-very-dark title-bkgd">
|
||||
<p class="font-size-12 m-0 mb-5">
|
||||
<?php print(localize('privacy.introduction.text.1')); ?>
|
||||
</p>
|
||||
<p class="font-size-12 m-0">
|
||||
<?php print(localize('privacy.introduction.text.2')); ?><br>
|
||||
<i class="fad fa-globe ml-10"></i>
|
||||
<a href="https://gdpr.eu/privacy-notice/">
|
||||
https://gdpr.eu/
|
||||
</a><br>
|
||||
<i class="fad fa-globe ml-10"></i>
|
||||
<a href="https://eur-lex.europa.eu/legal-content/ALL/?uri=CELEX%3A32016R0679">
|
||||
https://eur-lex.europa.eu/
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fad fa-database"></i> <?php print(localize('privacy.v2.data.title')); ?>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-10 bg-light-lm px-20 bg-very-dark title-bkgd">
|
||||
<p class="font-size-12 m-0">
|
||||
<?php print(localize('privacy.v2.data.intro.1')); ?>
|
||||
<br>
|
||||
<?php print(localize('privacy.v2.data.intro.2')); ?>
|
||||
</p>
|
||||
<p class="font-size-12 mb-0">
|
||||
<?php print(localize('privacy.v2.data.private.1')); ?><br>
|
||||
<span class="m-0 ml-10">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.data.private_list.1')); ?><br>
|
||||
</span>
|
||||
<span class="m-0 ml-10">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.data.private_list.2')); ?><br>
|
||||
</span>
|
||||
</p>
|
||||
<p class="font-size-12 mb-0">
|
||||
<?php print(localize('privacy.v2.data.non_private.1')); ?><br>
|
||||
<span class="m-0 ml-10">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.data.non_private_list.1')); ?><br>
|
||||
</span>
|
||||
<span class="m-0 ml-10">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.data.non_private_list.2')); ?><br>
|
||||
</span>
|
||||
</p>
|
||||
<p class="font-size-12 mb-0">
|
||||
<?php print(localize('privacy.v2.data.end.1')); ?>
|
||||
</p>
|
||||
<p class="font-size-12 mb-0">
|
||||
<?php print(localize('privacy.v2.data.end.2')); ?><br>
|
||||
<?php print(localize('privacy.v2.data.end.3')); ?>
|
||||
</p>
|
||||
<p class="font-size-12 mb-0">
|
||||
<?php print(localize('privacy.v2.data.end.4')); ?>
|
||||
</p>
|
||||
<p class="font-size-12 mb-0">
|
||||
<?php print(localize('privacy.v2.data.end.5')); ?><br>
|
||||
<?php print(localize('privacy.v2.data.end.6')); ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fad fa-handshake"></i> <?php print(localize('privacy.v2.third.title')); ?>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-10 bg-light-lm px-20 bg-very-dark title-bkgd">
|
||||
<p class="font-size-12 m-0">
|
||||
<?php print(localize('privacy.v2.third.intro.1')); ?><br>
|
||||
<?php print(localize('privacy.v2.third.intro.2')); ?>
|
||||
</p>
|
||||
<p class="font-size-12 mb-0">
|
||||
<?php print(localize('privacy.v2.third.intro.3')); ?>
|
||||
</p>
|
||||
<p class="font-size-12 mb-0">
|
||||
<?php print(localize('privacy.v2.third.intro.4')); ?><br>
|
||||
<i class="fad fa-globe ml-10"></i>
|
||||
<a href="https://v6node.com/legal">
|
||||
https://v6node.com/legal
|
||||
</a>
|
||||
<span class="ml-5">(<?php print(localize('lang.english')); ?> & <?php print(localize('lang.german')); ?>)</span><br>
|
||||
<i class="fad fa-globe ml-10"></i>
|
||||
<a href="https://v6node.b-cdn.net/legal/dataprotection.pdf">
|
||||
https://v6node.b-cdn.net/legal/dataprotection.pdf
|
||||
</a>
|
||||
<span class="ml-5">(<?php print(localize('lang.german')); ?>)</span><br>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fad fa-cookie-bite"></i> <?php print(localize('privacy.v2.cookies.title')); ?>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-10 bg-light-lm px-20 bg-very-dark title-bkgd">
|
||||
<p class="font-size-12 m-0">
|
||||
<?php print(localize('privacy.v2.cookies.intro.1')); ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fad fa-sync-alt"></i> <?php print(localize('privacy.update.title')); ?>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-10 bg-light-lm px-20 bg-very-dark title-bkgd">
|
||||
<p class="font-size-12 m-0">
|
||||
<?php print(localize('privacy.v2.update.intro.1')); ?>
|
||||
</p>
|
||||
<p class="font-size-12 mb-0">
|
||||
<i class="fad fa-calendar-alt"></i> <?php print(localize('privacy.v2.update.history.1.date')); ?>
|
||||
<span class="m-0 ml-20">
|
||||
<i class="fad fa-globe"></i> <a href="/privacy/privacy_2021-12-04_en.txt"><?php print(localize('lang.english')); ?></a>
|
||||
</span>
|
||||
<span class="m-0 ml-20">
|
||||
<i class="fad fa-globe"></i> <a href="/privacy/privacy_2021-12-04_fr.txt"><?php print(localize('lang.french')); ?></a>
|
||||
</span>
|
||||
<br>
|
||||
<span class="m-0 ml-10">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.update.history.1.desc.1')); ?><br>
|
||||
</span>
|
||||
</p>
|
||||
<p class="font-size-12 mb-0">
|
||||
<i class="fad fa-calendar-alt"></i> <?php print(localize('privacy.v2.update.history.2.date')); ?>
|
||||
<span class="m-0 ml-20">
|
||||
<i class="fad fa-globe"></i> <a href="/privacy/privacy_2022-03-18_en.txt"><?php print(localize('lang.english')); ?></a>
|
||||
</span>
|
||||
<span class="m-0 ml-20">
|
||||
<i class="fad fa-globe"></i> <a href="/privacy/privacy_2022-03-18_fr.txt"><?php print(localize('lang.french')); ?></a>
|
||||
</span>
|
||||
<br>
|
||||
<span class="m-0 ml-10">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.update.history.2.desc.1')); ?><br>
|
||||
</span>
|
||||
<span class="m-0 ml-10">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.update.history.2.desc.2')); ?><br>
|
||||
</span>
|
||||
<span class="m-0 ml-10">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.update.history.2.desc.3')); ?>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
|
||||
<p class="font-size-12 mb-0">
|
||||
<i class="fad fa-calendar-alt"></i> <?php print(localize('privacy.v2.update.history.3.date')); ?>
|
||||
<span class="m-0 ml-20">
|
||||
<i class="fad fa-globe"></i> <a href="/privacy/privacy_2022-09-09_en.txt"><?php print(localize('lang.english')); ?></a>
|
||||
</span>
|
||||
<span class="m-0 ml-20">
|
||||
<i class="fad fa-globe"></i> <a href="/privacy/privacy_2022-09-09_fr.txt"><?php print(localize('lang.french')); ?></a>
|
||||
</span>
|
||||
<br>
|
||||
<span class="m-0 ml-10">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.update.history.3.desc.1')); ?><br>
|
||||
</span>
|
||||
<span class="m-0 ml-20">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.update.history.3.desc.1.1')); ?><br>
|
||||
</span>
|
||||
<span class="m-0 ml-20">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.update.history.3.desc.1.2')); ?><br>
|
||||
</span>
|
||||
<span class="m-0 ml-10">
|
||||
<i class="fad fa-circle font-size-8"></i> <?php print(localize('privacy.v2.update.history.3.desc.2')); ?><br>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p class="font-size-12 mb-0">
|
||||
<?php print(localize('privacy.v2.update.end.2')); ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fad fa-mailbox"></i> <?php print(localize('privacy.contact.title')); ?>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-10 bg-light-lm px-20 bg-very-dark title-bkgd">
|
||||
<p class="font-size-12 m-0">
|
||||
<?php print(localize('privacy.contact.text.1')); ?><br>
|
||||
<i class="fad fa-at ml-10"></i>
|
||||
<a href="mailto:herwin.bozet@gmail.com">
|
||||
herwin.bozet@gmail.com
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card p-0 mx-0">
|
||||
<div class="px-card py-10 border-bottom px-20">
|
||||
<div class="container-fluid">
|
||||
<h2 class="card-title font-size-18 m-0">
|
||||
<i class="fad fa-gavel"></i> <?php print(localize('privacy.complaint.title')); ?>
|
||||
</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-card py-10 bg-light-lm px-20 bg-very-dark title-bkgd">
|
||||
<p class="font-size-12 m-0 mb-5">
|
||||
<?php print(localize('privacy.complaint.text.1')); ?>
|
||||
</p>
|
||||
<p class="font-size-12 m-0">
|
||||
<?php print(localize('privacy.complaint.text.2')); ?><br>
|
||||
<i class="fad fa-globe ml-10"></i>
|
||||
<a href="https://ec.europa.eu/info/law/law-topic/data-protection/reform/rights-citizens/redress/what-should-i-do-if-i-think-my-personal-data-protection-rights-havent-been-respected_en">
|
||||
https://ec.europa.eu/
|
||||
</a>
|
||||
<span class="ml-5">(<?php print(localize('lang.english')); ?>)</span><br>
|
||||
<i class="fad fa-globe ml-10"></i>
|
||||
<a href="https://gegevensbeschermingsautoriteit.be/citoyen/agir/introduire-une-plainte">
|
||||
https://gegevensbeschermingsautoriteit.be/
|
||||
</a>
|
||||
<span class="ml-5">(<?php print(localize('lang.french')); ?>)</span><br>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include 'footer.php'; ?>
|
||||
</div>
|
||||
<script src="/resources/HalfMoon/1.1.1/js/halfmoon.min.js"></script>
|
||||
<script src="/resources/Azias/js/nibblepoker.lu.js"></script>
|
||||
<body>
|
||||
<?php
|
||||
include_once 'commons/DOM/utils.php';
|
||||
$SIDEBAR_IDS = [];
|
||||
include 'commons/DOM/sidebar.php';
|
||||
?>
|
||||
<header class="w-full p-m pl-s">
|
||||
<h1 class="t-size-17 t-w-500">
|
||||
<i class="fad fa-user-secret t-size-16 mr-s t-muted"></i><?php print(localize("privacy.header.title")); ?>
|
||||
</h1>
|
||||
<?php include 'commons/DOM/header-lang.php'; ?>
|
||||
</header>
|
||||
<main id="main" class="rl-m border border-r-0 p-l">
|
||||
|
||||
<?php printMainHeader(localize("privacy.introduction.title"), "fad fa-info"); ?>
|
||||
<p class="mt-xs ml-s"><?php print(localize("privacy.introduction.text.1")); ?></p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize("privacy.introduction.text.2")); ?>
|
||||
<br><i class="fad fa-globe ml-s t-size-8"></i>
|
||||
<a href="https://gdpr.eu/privacy-notice/">
|
||||
https://gdpr.eu/
|
||||
</a><br>
|
||||
<i class="fad fa-globe ml-s t-size-8"></i>
|
||||
<a href="https://eur-lex.europa.eu/legal-content/ALL/?uri=CELEX%3A32016R0679">
|
||||
https://eur-lex.europa.eu/
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<?php printMainHeader(localize("privacy.v2.data.title"), "fad fa-database"); ?>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize('privacy.v2.data.intro.1')); ?>
|
||||
<br>
|
||||
<?php print(localize('privacy.v2.data.intro.2')); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.data.private.1')); ?><br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.data.private_list.1')); ?>
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.data.private_list.2')); ?>
|
||||
</span>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.data.non_private.1')); ?><br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.data.non_private_list.1')); ?>
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.data.non_private_list.2')); ?>
|
||||
</span>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.data.end.1')); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.data.end.2')); ?><br>
|
||||
<?php print(localize('privacy.v2.data.end.3')); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.data.end.4')); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.data.end.5')); ?><br>
|
||||
<?php print(localize('privacy.v2.data.end.6')); ?>
|
||||
</p>
|
||||
|
||||
<?php printMainHeader(localize("privacy.v2.third.title"), "fad fa-handshake"); ?>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize('privacy.v2.third.intro.1')); ?><br>
|
||||
<?php print(localize('privacy.v2.third.intro.2')); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.third.intro.3')); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.third.intro.4')); ?><br>
|
||||
<i class="fad fa-globe ml-s t-size-8"></i>
|
||||
<a href="https://www.ionos.fr/terms-gtc/clause-de-confidentialite/">
|
||||
https://www.ionos.fr/terms-gtc/clause-de-confidentialite/
|
||||
</a>
|
||||
<span class="ml-s">(<?php print(localize('lang.french')); ?>)</span><br>
|
||||
<i class="fad fa-globe ml-s t-size-8"></i>
|
||||
<a href="https://www.ionos.com/terms-gtc/privacy-policy/">
|
||||
https://www.ionos.com/terms-gtc/privacy-policy/
|
||||
</a>
|
||||
<span class="ml-s">(<?php print(localize('lang.english')); ?>)</span><br>
|
||||
</p>
|
||||
|
||||
<?php printMainHeader(localize("privacy.v2.cookies.title"), "fad fa-cookie-bite"); ?>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize('privacy.v2.cookies.intro.1')); ?>
|
||||
</p>
|
||||
|
||||
<!--<?php printMainHeader(localize("privacy.v2.personal.title"), "fad fa-fist-raised"); ?>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize('privacy.v2.personal.disabled.intro')); ?>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.personal.disabled.list.1')); ?>
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.personal.disabled.list.2')); ?>
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.personal.disabled.list.3')); ?>
|
||||
</span>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.personal.tracking.text.1')); ?><br>
|
||||
<?php print(localize('privacy.v2.personal.tracking.text.2')); ?><br>
|
||||
<?php print(localize('privacy.v2.personal.tracking.text.3')); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.personal.transparency.text.1')); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.personal.recommendations')); ?>
|
||||
<br>
|
||||
<i class="fad fa-globe ml-s t-size-8"></i>
|
||||
<a href="https://www.enisa.europa.eu/publications/privacy-considerations-of-online-behavioural-tracking">https://www.enisa.europa.eu/publications/privacy-considerations-of-online-behavioural-tracking</a>
|
||||
<span class="ml-s">(<?php print(localize('lang.english')); ?>)</span>
|
||||
</p>-->
|
||||
|
||||
<?php printMainHeader(localize("privacy.v2.update.title"), "fad fa-sync-alt"); ?>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize('privacy.v2.update.intro.1')); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<i class="fad fa-calendar-alt"></i> <?php print(localize('privacy.v2.update.history.1.date')); ?>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-globe t-size-8"></i> <a href="/privacy/privacy_2021-12-04_en.txt"><?php print(localize('lang.english')); ?></a>
|
||||
</span>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-globe t-size-8"></i> <a href="/privacy/privacy_2021-12-04_fr.txt"><?php print(localize('lang.french')); ?></a>
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.1.desc.1')); ?><br>
|
||||
</span>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<i class="fad fa-calendar-alt"></i> <?php print(localize('privacy.v2.update.history.2.date')); ?>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-globe t-size-8"></i> <a href="/privacy/privacy_2022-03-18_en.txt"><?php print(localize('lang.english')); ?></a>
|
||||
</span>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-globe t-size-8"></i> <a href="/privacy/privacy_2022-03-18_fr.txt"><?php print(localize('lang.french')); ?></a>
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.2.desc.1')); ?>
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.2.desc.2')); ?>
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.2.desc.3')); ?>
|
||||
</span>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<i class="fad fa-calendar-alt"></i> <?php print(localize('privacy.v2.update.history.3.date')); ?>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-globe t-size-8"></i> <a href="/privacy/privacy_2022-09-09_en.txt"><?php print(localize('lang.english')); ?></a>
|
||||
</span>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-globe t-size-8"></i> <a href="/privacy/privacy_2022-09-09_fr.txt"><?php print(localize('lang.french')); ?></a>
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.3.desc.1')); ?><br>
|
||||
</span>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.3.desc.1.1')); ?><br>
|
||||
</span>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.3.desc.1.2')); ?><br>
|
||||
</span>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.3.desc.2')); ?><br>
|
||||
</span>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<i class="fad fa-calendar-alt"></i> <?php print(localize('privacy.v2.update.history.4.date')); ?>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-globe t-size-8"></i> <a href="/privacy/privacy_2023-11-11_en.txt"><?php print(localize('lang.english')); ?></a>
|
||||
</span>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-globe t-size-8"></i> <a href="/privacy/privacy_2023-11-11_fr.txt"><?php print(localize('lang.french')); ?></a>
|
||||
</span>
|
||||
<br>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.4.desc.1')); ?><br>
|
||||
</span>
|
||||
<span class="ml-l">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.4.desc.1.1')); ?><br>
|
||||
</span>
|
||||
<span class="ml-s">
|
||||
<i class="fad fa-circle t-size-6"></i> <?php print(localize('privacy.v2.update.history.4.desc.2')); ?><br>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.v2.update.end.2')); ?>
|
||||
</p>
|
||||
|
||||
<?php printMainHeader(localize("privacy.contact.title"), "fad fa-mailbox"); ?>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize('privacy.contact.text.1')); ?><br>
|
||||
<i class="fad fa-at t-size-8 ml-s"></i>
|
||||
<a href="mailto:herwin.bozet@gmail.com">herwin.bozet@gmail.com</a>
|
||||
</p>
|
||||
|
||||
<?php printMainHeader(localize("privacy.complaint.title"), "fad fa-gavel"); ?>
|
||||
<p class="mt-xs ml-s">
|
||||
<?php print(localize('privacy.complaint.text.1')); ?>
|
||||
</p>
|
||||
<p class="mt-s ml-s">
|
||||
<?php print(localize('privacy.complaint.text.2')); ?><br>
|
||||
<i class="fad fa-globe t-size-8 ml-s"></i>
|
||||
<a href="https://ec.europa.eu/info/law/law-topic/data-protection/reform/rights-citizens/redress/what-should-i-do-if-i-think-my-personal-data-protection-rights-havent-been-respected_en">https://ec.europa.eu/</a>
|
||||
<span class="ml-s">(<?php print(localize('lang.english')); ?>)</span><br>
|
||||
<i class="fad fa-globe t-size-8 ml-s"></i>
|
||||
<a href="https://gegevensbeschermingsautoriteit.be/citoyen/agir/introduire-une-plainte">https://gegevensbeschermingsautoriteit.be/</a>
|
||||
<span class="ml-s">(<?php print(localize('lang.french')); ?>)</span><br>
|
||||
</p>
|
||||
|
||||
</main>
|
||||
<?php
|
||||
include 'commons/DOM/footer.php';
|
||||
include 'commons/DOM/scripts.php';
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
$end_time = microtime(true);
|
||||
if ($print_execution_timer) {
|
||||
echo("<!-- PHP execution took " . round(($end_time - $start_time) * 1000, 2) . " ms -->");
|
||||
}
|
||||
?>
|
82
privacy/privacy_2023-11-11_en.txt
Normal file
@@ -0,0 +1,82 @@
|
||||
# Introduction
|
||||
This privacy policy is written in accordance with the 12th and 13th articles of the GDPR.
|
||||
|
||||
If you wish to consult it, you can do so on the following websites:
|
||||
* https://gdpr.eu/
|
||||
* https://eur-lex.europa.eu/
|
||||
|
||||
|
||||
# Data collection
|
||||
This websites only collects data through generic access logs in order to detect and block bad actors from accessing this website.
|
||||
None of the data collected is used for any other purpose, it is never shared with any other third-party and is never use in any sort of analytics.
|
||||
|
||||
Here is the list of private data being collected:
|
||||
* IP address
|
||||
* Browser's User-Agent
|
||||
|
||||
And here is the list of non-private data being collected:
|
||||
* Requested resource' URI
|
||||
* Date and time
|
||||
|
||||
Once the data has been logged in the access logs, it is automatically retrieved and processed by a locally-hosted applications every 30-60 seconds and then deleted from said logs.
|
||||
|
||||
This application compares this information against a list of known threat sources, targets and behaviours and if a match is found, the private information is stored for 7 days pending a manual review.
|
||||
Once that 7 day period has elapsed, or once the report has been reviewed, all the relevant data is automatically deleted.
|
||||
|
||||
If your request wasn't flagged as potentially malicious, every data collected from it is thrown out instantly.
|
||||
|
||||
This process should normally never be triggered for regular traffic since most of the triggering actions are ones that should not be possible to accomplish through normal browsing.
|
||||
However, this process isn't infallible and there is always an off chance that false positives may happen.
|
||||
|
||||
|
||||
# Third Parties
|
||||
Our websites uses some VPS provided by IONOS in order to put in place a reverse-proxy system.
|
||||
The goal of this system is to improve your browsing experience with the help of a private caching service and custom traffic filtering rules.
|
||||
|
||||
No data should be collected on their side due to the nature of the server leased from IONOS.
|
||||
|
||||
If you'd wish to consult their privacy policy and their partners', you can do so by using the following URLs:
|
||||
* https://www.ionos.fr/terms-gtc/clause-de-confidentialite/ (French)
|
||||
* https://www.ionos.com/terms-gtc/privacy-policy/ (English)
|
||||
|
||||
|
||||
# Cookies
|
||||
Our websites doesn't use nor store any cookies in your browser.
|
||||
|
||||
|
||||
# Changes to our privacy policy
|
||||
The content of this privacy policy was originally written on the 4th of December 2021 and was last updated on the 18th of March 2022.
|
||||
|
||||
* 2021/12/04
|
||||
* Original version
|
||||
|
||||
* 2022/03/18
|
||||
* Changed section on data collection to reflect new policy.
|
||||
* Added mention about CloudFlare and linked to their privacy policy.
|
||||
* Improved the "Changes to our privacy policy" section.
|
||||
|
||||
* 2022/09/09
|
||||
* Changed references to external services to reflect the migration to v6Node.
|
||||
* Added mention about v6Node and linked to their privacy policy.
|
||||
* Removed mentions of CloudFlare.
|
||||
* Changed the "Cookies" section to indicate that none should be used on public domains.
|
||||
|
||||
* 2023/11/11
|
||||
* Changed references to external services to reflect the migration to IONOS.
|
||||
* Removed mentions of v6Node.
|
||||
* Changed section on data collection to reflect new timings & infrastructure.
|
||||
|
||||
In the event of a change to our privacy policy, you will be informed explicitly, and a copy of previous versions of the policy will be available through this page.
|
||||
|
||||
|
||||
# How to contact us ?
|
||||
If you wish to contact us for more information regarding our privacy policy, please contact us via the form included on the contact page, or at the following email address:
|
||||
* herwin.bozet@gmail.com
|
||||
|
||||
|
||||
# How to contact the appropriate authorities ?
|
||||
Should you wish to report a complaint or if you feel that our privacy policy has not addressed your concern in a satisfactory manner, you may contact your national Data Protection Authority (DPA).
|
||||
|
||||
More information on this procedure can be found on the following websites:
|
||||
* https://ec.europa.eu/ (English)
|
||||
* https://gegevensbeschermingsautoriteit.be/ (French)
|
83
privacy/privacy_2023-11-11_fr.txt
Normal file
@@ -0,0 +1,83 @@
|
||||
# Introduction
|
||||
La politique de confidentialité ci-présente a été écrite en accord avec les articles 12 et 13 de la RGPD.
|
||||
|
||||
Si vous souhaitez consulter le texte officiel en question, vous pouvez le faire sur les sites internet suivants :
|
||||
* https://gdpr.eu/
|
||||
* https://eur-lex.europa.eu/
|
||||
|
||||
|
||||
# Collecte de données
|
||||
Ce site web collecte des données au travers des journaux d'évènements afin de détecter et bloquer de potentiels acteurs malveillants.
|
||||
Les données collectées ne sont en aucun cas utilisées pour une quelconque autre raison.
|
||||
|
||||
Voici la liste des données personelles collectées:
|
||||
* L'addresse IP source
|
||||
* Le "User-Agent" de votre navigateur internet
|
||||
|
||||
Et voici la liste des données non-personelles collectées:
|
||||
* L'URI de la ressource demandée
|
||||
* La date et l'heure
|
||||
|
||||
Les données présentes dans les journaux d'évènements sont extraites et retirées pour être traitées par des applications qui tournent en local toute les 30 à 60 secondes.
|
||||
|
||||
L'application en question utilise et compare ces informations avec une liste d'acteurs malveillants et comportement suspects connus.
|
||||
Si une correspondance est détectée, les informations privées sont stockées pendant 7 jours en attendant qu'un examen manuel soit effectué.
|
||||
Après cette période de 7 jours, ou après qu'un examen ait été effectué, les données sont automatiquement supprimées.
|
||||
|
||||
Toute information concernant une requête non suspecte est automatiquement supprimée.
|
||||
|
||||
Ce processus n'est normalement jamais utilisé sur des requêtes provenant d'un trafic légitime dû au fait qu'il isole principalement les actions et requêtes qui ne devraient pas être possible sur ce site.
|
||||
Cependant, ce processus n'est pas infaillible et il est toujours possible qu'une requête soit isolée par erreur.
|
||||
|
||||
|
||||
# Organismes tiers
|
||||
Ce site web utilise un VPS proposés par IONOS dans le but de mettre en place un système de reverse-proxy.
|
||||
Ceci a pour but d'améliorer l'expérience des personnes le visitant grâce à un système de filtrage et caching privé.
|
||||
|
||||
Due à la nature du serveur loué à IONOS, aucune donnée ne devraient être collectées de leur côté.
|
||||
|
||||
Si vous souhaitez consulter leur politique de confidentialité ainsi que celle de leur partenaires, vous pouvez le faire en suivant les liens ci-dessous:
|
||||
* https://www.ionos.fr/terms-gtc/clause-de-confidentialite/ (Français)
|
||||
* https://www.ionos.com/terms-gtc/privacy-policy/ (Anglais)
|
||||
|
||||
|
||||
# Cookies de navigation
|
||||
Ce site web n'utilise pas, et ne stocke aucun cookies dans votre navigateur internet.
|
||||
|
||||
|
||||
# Changements à notre politique de confidentialité
|
||||
Le contenu de notre politique de confidentialité a été originalement écrit et le 4 décembre 2021 modifié pour la dernière fois le 18 mars 2022.
|
||||
|
||||
* 2021/12/04
|
||||
* Version originale
|
||||
|
||||
* 2022/03/18
|
||||
* Mise-à-jour de la section sur la collection des données.
|
||||
* Ajout d'une mention de CloudFlare et ajout de liens vers leur politique de confidentialité.
|
||||
* Amélioration de la section "Changements à notre politique de confidentialité".
|
||||
|
||||
* 2022/09/09
|
||||
* Changement des références aux services externes pour indiquer l'utilisation de v6Node.
|
||||
* Ajout de mentions de v6Node et liens vers leur politique de vie confidentialité.
|
||||
* Suppression de mentions de CloudFlare.
|
||||
* Changement de la section "Cookies" afin d'indiquer qu'ils ne seront plus utilisés sur les domaines publics.
|
||||
|
||||
* 2023/11/11
|
||||
* Changement des références aux services externes pour indiquer l'utilisation de IONOS.
|
||||
* Suppression de mentions de v6Node.
|
||||
* Changement des temps de traitement et mentions de l'infrastructure dans la section "Changements à notre politique de confidentialité".
|
||||
|
||||
En cas de changement, vous serez clairement informé et une copie des anciennes versions de notre politique sera disponible au travers de cette page.
|
||||
|
||||
|
||||
# Comment nous contacter ?
|
||||
Si vous souhaitez nous contacter afin d'obtenir plus d'informations concernant notre politique de confidentialité, nous vous recommandons d'utiliser le formulaire présent sur la page de contact, ou par courriel à l'adresse suivante:
|
||||
* herwin.bozet@gmail.com
|
||||
|
||||
|
||||
# Comment contacter les autorités compétentes ?
|
||||
Dans l'éventualité où vous souhaiteriez déposer une plainte pour une quelconque raison en rapport avec notre politique de confidentialité, veuillez vous adresser à l'autorité nationale de protection des données (DPA).
|
||||
|
||||
Les informations concernant cette procédure peuvent être trouvées sur les sites internet suivants:
|
||||
* https://ec.europa.eu/ (Anglais)
|
||||
* https://gegevensbeschermingsautoriteit.be/ (Français)
|
52
readme.md
@@ -1,31 +1,18 @@
|
||||
# Website - NibblePoker.lu
|
||||
Repository containing the source code for my website.
|
||||
TODO
|
||||
|
||||
## Preamble
|
||||
This repository is only a mirror and is never cloned and served as-is.
|
||||
This repository is only a mirror and should never be cloned and served as-is since it's missing some
|
||||
components.
|
||||
|
||||
In the event you wished to mirror and serve it, or modify it, you should make sure
|
||||
the `.git` folder and the other files referenced in the [.dockerignore](.dockerignore)
|
||||
file are properly removed, even if measures are in place to prevent access to them.
|
||||
The [.htaccess](.htaccess) files has been made public **on purpose** since they don't contain any
|
||||
private information and because they could be used by other people to create their website more easily.
|
||||
|
||||
The [.htaccess](.htaccess) file has been made public **on purpose** since it does not contain any
|
||||
private information and because it could be used by other people to create their website more easily
|
||||
since these configuration files are a nightmare to work with.<br>
|
||||
Especially with the lang redirections.
|
||||
## Features
|
||||
TODO
|
||||
|
||||
It is also a good idea to serve this website through a jailed instance of apache, just in case.
|
||||
|
||||
## Content
|
||||
### Blog
|
||||
Unfinished, but all the files should be contained in the `content/` folder.
|
||||
|
||||
### Honeypot & Tarpits *(Disabled)*
|
||||
There are a couple of files in the `honeypot/` and `tarpit/` folders that are used
|
||||
to serve some basic fake files that are often requested by automated scanners in order
|
||||
to mess with them, or potentially force them to report invalid data.
|
||||
|
||||
These pages can be removed by deleting the folders and removing the appropriate rules in
|
||||
the [.htaccess](.htaccess) file.
|
||||
### Tools
|
||||
TODO
|
||||
|
||||
## Requirements
|
||||
These files are required and need to be installed manually for the website to work properly !<br>
|
||||
@@ -33,5 +20,24 @@ These files are required and need to be installed manually for the website to wo
|
||||
* Apache 2.4 & PHP 8.1 or newer
|
||||
* Font Awesome Pro v5.15.3
|
||||
* `/resources/FontAwesomePro/`
|
||||
* Glider.js v1.7.6
|
||||
* `/resources/GliderJs/`
|
||||
* Highlight.js v11.6.0
|
||||
* `/resources/HighlightJS/`
|
||||
* `/resources/HighlightJS/`
|
||||
|
||||
## Licenses
|
||||
|
||||
### External
|
||||
Here is a list of the licenses for any third-party thing included in this repository.
|
||||
|
||||
* [Quantum Font](https://sesohq.sellfy.store/p/3enu/) by [sesohq](https://www.sesohq.com/)
|
||||
* Free font with no apparent usage restrictions.
|
||||
|
||||
All licenses are also included as-is in their project's respective folder.
|
||||
|
||||
### Website's code
|
||||
All the code, stylesheets, and configs that are not covered by the [External licenses](#external) are all
|
||||
licensed under the [Unlicense](LICENSE) license.
|
||||
|
||||
### Images
|
||||
The images present in this repository are currently not licensed.
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 126 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 87 B |