From 6fb621e5503ea4b3e92cb80977bb5f3d86774780 Mon Sep 17 00:00:00 2001 From: Herwin Date: Thu, 1 Jun 2023 17:20:44 +0200 Subject: [PATCH] Revamped layout, Added lang selection, Added auto lang detection, Removed trash, Other minor improvements Update .htaccess, body-1.php, and 50 more files... --- .htaccess | 3 +- commons/DOM/body-1.php | 8 - commons/DOM/body-2.php | 8 - commons/DOM/body-3.php | 8 - commons/DOM/body-4.php | 8 - commons/DOM/body-5.php | 8 - commons/DOM/footer.php | 4 +- commons/DOM/head.php | 12 +- commons/DOM/header-lang.php | 26 +++ commons/DOM/sidebar.php | 57 +++--- commons/DOM/utils.php | 2 +- commons/composer.php | 2 +- commons/langs.php | 47 ++++- commons/strings.json | 2 +- commons/strings/en/contact.json | 11 ++ commons/strings/en/content.json | 6 +- commons/strings/en/links.json | 7 + commons/strings/fr/contact.json | 11 ++ commons/strings/fr/content.json | 5 + commons/strings/fr/links.json | 7 + contact/index.bak.php | 132 ++++++++++++++ contact/index.php | 169 +++++------------- content/index.php | 21 +-- .../circuitpython-custom-file-systems.json | 158 ++++++++++++++++ error.php | 109 ++++++----- index.php | 9 +- links/index.php | 150 ++++------------ privacy/index.php | 9 +- .../images/drawings/mcu_v0_test1.png | Bin 0 -> 2004 bytes .../images/drawings/mcu_v0_test2.png | Bin 0 -> 2863 bytes .../NibblePoker/js/nibblepoker-glider.js | 13 +- resources/NibblePoker/js/nibblepoker.js | 84 +++++++-- resources/NibblePoker/scss/config.scss | 2 + .../scss/core/rounding/global.scss | 1 + .../NibblePoker/scss/core/spacing/global.scss | 9 +- .../NibblePoker/scss/external/quantum.scss | 2 + resources/NibblePoker/scss/nibblepoker.scss | 26 +-- .../NibblePoker/scss/site/backgrounds.scss | 16 +- resources/NibblePoker/scss/site/base.scss | 155 ++++++++++++++++ resources/NibblePoker/scss/site/body.scss | 59 ------ resources/NibblePoker/scss/site/commons.scss | 27 --- resources/NibblePoker/scss/site/hr.scss | 21 +-- resources/NibblePoker/scss/site/input.scss | 43 ++++- resources/NibblePoker/scss/site/layout.scss | 69 ------- resources/NibblePoker/scss/site/mobile.scss | 19 ++ resources/NibblePoker/scss/site/modal.scss | 34 ++++ resources/NibblePoker/scss/site/table.scss | 4 + resources/NibblePoker/scss/site/text.scss | 94 ++++++---- resources/NibblePoker/scss/site/video.scss | 2 + resources/NibblePoker/scss/variables.scss | 8 +- tools/index.php | 9 +- tools/items/svg-to-png/code.js | 5 +- 52 files changed, 1047 insertions(+), 654 deletions(-) delete mode 100644 commons/DOM/body-1.php delete mode 100644 commons/DOM/body-2.php delete mode 100644 commons/DOM/body-3.php delete mode 100644 commons/DOM/body-4.php delete mode 100644 commons/DOM/body-5.php create mode 100644 commons/DOM/header-lang.php create mode 100644 commons/strings/en/contact.json create mode 100644 commons/strings/en/links.json create mode 100644 commons/strings/fr/contact.json create mode 100644 commons/strings/fr/links.json create mode 100644 contact/index.bak.php create mode 100644 content/items/circuitpython-custom-file-systems.json create mode 100644 resources/NibblePoker/images/drawings/mcu_v0_test1.png create mode 100644 resources/NibblePoker/images/drawings/mcu_v0_test2.png create mode 100644 resources/NibblePoker/scss/site/base.scss delete mode 100644 resources/NibblePoker/scss/site/body.scss delete mode 100644 resources/NibblePoker/scss/site/commons.scss delete mode 100644 resources/NibblePoker/scss/site/layout.scss create mode 100644 resources/NibblePoker/scss/site/mobile.scss create mode 100644 resources/NibblePoker/scss/site/modal.scss diff --git a/.htaccess b/.htaccess index 2a023db..16f6557 100644 --- a/.htaccess +++ b/.htaccess @@ -50,7 +50,7 @@ ErrorDocument 404 /error.php # # # Setting some headers for security. # # #Header always set X-Detected-Country "NK" # # 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" @@ -66,7 +66,6 @@ RewriteEngine On # Languages. (Does not work with a regex) RewriteRule ^en/(.*)$ /$1 [QSA] RewriteRule ^fr/(.*)$ /$1 [QSA] -RewriteRule ^lb/(.*)$ /$1 [QSA] # Honeypots. (Just to fuck with automated scanners, gotta love those unsolicited emails tho...) diff --git a/commons/DOM/body-1.php b/commons/DOM/body-1.php deleted file mode 100644 index ecdab68..0000000 --- a/commons/DOM/body-1.php +++ /dev/null @@ -1,8 +0,0 @@ - -
\ No newline at end of file diff --git a/commons/DOM/body-2.php b/commons/DOM/body-2.php deleted file mode 100644 index 51a4259..0000000 --- a/commons/DOM/body-2.php +++ /dev/null @@ -1,8 +0,0 @@ - -
\ No newline at end of file diff --git a/commons/DOM/body-3.php b/commons/DOM/body-3.php deleted file mode 100644 index 0c29c20..0000000 --- a/commons/DOM/body-3.php +++ /dev/null @@ -1,8 +0,0 @@ - -
\ No newline at end of file diff --git a/commons/DOM/body-4.php b/commons/DOM/body-4.php deleted file mode 100644 index 9fc0c61..0000000 --- a/commons/DOM/body-4.php +++ /dev/null @@ -1,8 +0,0 @@ - -
\ No newline at end of file diff --git a/commons/DOM/body-5.php b/commons/DOM/body-5.php deleted file mode 100644 index 343aa64..0000000 --- a/commons/DOM/body-5.php +++ /dev/null @@ -1,8 +0,0 @@ - -
\ No newline at end of file diff --git a/commons/DOM/footer.php b/commons/DOM/footer.php index 9d233d3..58dba39 100644 --- a/commons/DOM/footer.php +++ b/commons/DOM/footer.php @@ -1,6 +1,6 @@ <?php echo(localize(" draggable="false"> + alt="" draggable="false"> \ No newline at end of file diff --git a/commons/DOM/head.php b/commons/DOM/head.php index f6fd294..bf1eb40 100644 --- a/commons/DOM/head.php +++ b/commons/DOM/head.php @@ -5,10 +5,10 @@ if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) { die(); } ?> - - - - + + + + @@ -22,9 +22,9 @@ if($enable_waffle_iron) { //echo(""); } if($enable_code_highlight) { - echo(''); + echo(''); } if($enable_glider) { - echo(''); + echo(''); } ?> diff --git a/commons/DOM/header-lang.php b/commons/DOM/header-lang.php new file mode 100644 index 0000000..59bd575 --- /dev/null +++ b/commons/DOM/header-lang.php @@ -0,0 +1,26 @@ + +
+ + +   +   + + +
\ No newline at end of file diff --git a/commons/DOM/sidebar.php b/commons/DOM/sidebar.php index 4f3e652..2b1e7ba 100644 --- a/commons/DOM/sidebar.php +++ b/commons/DOM/sidebar.php @@ -1,63 +1,64 @@

'); +function printSidebarEntry($url, $title, $icon, $activeId) { + global $SIDEBAR_IDS; + echo(''); + echo('

'); echo('' . $title . '

'); } ?> diff --git a/commons/DOM/utils.php b/commons/DOM/utils.php index 3dd420f..c757fd7 100644 --- a/commons/DOM/utils.php +++ b/commons/DOM/utils.php @@ -33,7 +33,7 @@ function getMainHeader(string $text, ?string $iconId = null, ?string $rightText $htmlCode .= $text; if(!is_null($rightText)) { - $htmlCode .= '' . $rightText . ''; + $htmlCode .= '' . $rightText . ''; } $htmlCode .= ''; diff --git a/commons/composer.php b/commons/composer.php index 50ebb7a..b5aa029 100644 --- a/commons/composer.php +++ b/commons/composer.php @@ -907,7 +907,7 @@ class ComposerElement { case ComposerElementTypes::VIDEO: // Composing the video element $htmlCode .= ''; break; diff --git a/commons/langs.php b/commons/langs.php index ca1fc66..971880f 100644 --- a/commons/langs.php +++ b/commons/langs.php @@ -20,15 +20,50 @@ 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]; + } } +// 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); diff --git a/commons/strings.json b/commons/strings.json index 2044640..15bf1d6 100644 --- a/commons/strings.json +++ b/commons/strings.json @@ -1 +1 @@ -{"_compile_date":"2023-05-25T19:15:14.507575Z","en":{"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":"Content","content.search.header":"Search","content.error.header":"Error","content.error.head.title":"Content error - NibblePoker","content.error.og.title":"NibblePoker - Content error","content.error.heading.main.search":"Search error","content.error.heading.main.content":"Content error","content.error.heading.main.fallback":"Unknown error","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 !","content.error.message.data.no.tags":"No tags found !","content.error.message.data.no.title":"No title found !","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 Architecture","content.commons.cpu.responsive":"CPU Architecture","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":"N/A","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)","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\u2771403 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\u2771404 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\u2771500 Error","error.skit.pc.dead":"Drawing of an old PC with a face with crossed eyes.","footer.text.privacy":"Privacy policy","footer.alt.logo":"Website's logo","home.head.title":"NibblePoker","home.head.description":"TODO: description","home.og.title":"NibblePoker","home.og.description":"TODO: description","home.header.title":"Homepage","lang.menu.title":"Language","lang.current":"English","lang.automatic":"Automatic","lang.english":"English","lang.french":"French","lang.german":"German","lang.luxembourgish":"Luxembourgish","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.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:","privacy.complaint.title":"How to contact the appropriate authorities ?","privacy.complaint.text.1":"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).","privacy.complaint.text.2":"More information on this procedure can be found on the following websites:","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.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.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","privacy.v2.update.history.2.date":"2022/03/18","privacy.v2.update.history.2.desc.1":"Changed section on data collection to reflect new policy.","privacy.v2.update.history.2.desc.2":"Added mention about CloudFlare and linked to their privacy policy.","privacy.v2.update.history.2.desc.3":"Improved the \"Changes to our privacy policy\" section.","privacy.v2.update.history.3.date":"2022/09/09","privacy.v2.update.history.3.desc.1":"Changed references to external services to reflect the migration to v6Node.","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.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.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.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.","sidebar.alt.logo":"Website's logo","sidebar.text.home":"Home","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.about":"About","sidebar.text.contact":"Contact","tools.head.title":"Tools - NibblePoker","tools.head.description":"TODO: description","tools.og.title":"NibblePoker - Tools","tools.og.description":"TODO: description","tools.header.title":"Tools"},"fr":{"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\u00e9sultat de recherche","content.search.heading.main.multiple":"R\u00e9sultats de recherche","content.search.count.single":"r\u00e9sultat","content.search.count.multiple":"r\u00e9sultats","content.error.head.title":"Erreur de contenu - NibblePoker","content.error.og.title":"NibblePoker - Erreur de contenu","content.error.heading.main.search":"Erreur de recherche","content.error.heading.main.content":"Erreur de contenu","content.error.heading.main.fallback":"Erreur inconnue","content.error.message.none":"Aucune erreur n'a \u00e9t\u00e9 d\u00e9tect\u00e9e.","content.error.message.tags.length":"Le param\u00e8tre d'URL \"tags\" est trop long.","content.error.message.tags.alphanumeric":"Un des tags donn\u00e9 dans le param\u00e8tre d'URL \"tags\" n'est pas une cha\u00eene de texte alphanum\u00e9rique valide.","content.error.message.detect.empty":"Aucun contenu en rapport avec les tags choisi n'as \u00e9t\u00e9 trouv\u00e9.","content.error.message.id.alphanumeric":"L'ID de la ressource demand\u00e9e n'est pas une cha\u00eene de texte alphanum\u00e9rique valide.","content.error.message.data.not.exist":"Le contenu demand\u00e9e n'a pas de fichier de rendu interne associ\u00e9.","content.error.message.cannot.load":"Le contenu demand\u00e9 n'a pas pu \u00eatre charg\u00e9 de notre c\u00f4t\u00e9 !","content.error.message.data.no.tags":"Aucun tag trouv\u00e9 !","content.error.message.data.no.title":"Aucun titre trouv\u00e9 !","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\u00e9c\u00e9dente","content.commons.version.previous.multiple":"Versions pr\u00e9c\u00e9dentes","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\u00e9pendante","content.commons.cpu.x64":"x64","content.commons.cpu.x86":"x86","content.commons.cpu.arm":"arm","content.commons.cpu.arm64":"arm64","content.commons.na.italic":"N/A","content.commons.na":"N/A","content.commons.lang":"Langue","content.commons.download.single":"T\u00e9l\u00e9chargement","content.commons.download.multiple":"T\u00e9l\u00e9chargements","content.commons.version":"Version","content.commons.github":"D\u00e9p\u00f4t GitHub","content.commons.gitea":"D\u00e9p\u00f4t Gitea auto-h\u00e9berg\u00e9","content.commons.nuget":"Packet Nuget","content.commons.license.mit.single":"License MIT","content.commons.lang.english":"Anglais","content.commons.lang.french":"Fran\u00e7ais","content.commons.lang.luxembourgish":"Luxembourgeois","content.commons.lang.english.639-3":"Anglais (eng)","content.commons.lang.french.639-3":"Fran\u00e7ais (fra)","content.commons.lang.luxembourgish.639-3":"Luxembourgeois (ltz)","footer.text.privacy":"Politique de confidentialit\u00e9","footer.alt.logo":"Logo du site web","home.head.title":"NibblePoker","home.head.description":"TODO: description","home.og.title":"NibblePoker","home.og.description":"TODO: description","home.header.title":"Page d'accueil","lang.menu.title":"Langue","lang.current":"Fran\u00e7ais","lang.automatic":"Automatique","lang.english":"Anglais","lang.french":"Fran\u00e7ais","lang.german":"Allemand","lang.luxembourgish":"Luxembourgeois","privacy.head.title":"Politique de confidentialit\u00e9 - NibblePoker","privacy.head.description":"Notre politique de confidentialit\u00e9 dans un format clair et compr\u00e9hensible.","privacy.og.title":"NibblePoker - Politique de confidentialit\u00e9","privacy.og.description":"Notre politique de confidentialit\u00e9 dans un format clair et compr\u00e9hensible.","privacy.header.title":"Politique de confidentialit\u00e9","privacy.introduction.title":"Introduction","privacy.introduction.text.1":"La politique de confidentialit\u00e9 ci-pr\u00e9sente a \u00e9t\u00e9 \u00e9crite 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.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\u00e9, nous vous recommandons d'utiliser le formulaire pr\u00e9sent sur la page de contact, ou par courriel \u00e0 l'adresse suivante:","privacy.complaint.title":"Comment contacter les autorit\u00e9s comp\u00e9tentes ?","privacy.complaint.text.1":"Dans l'\u00e9ventualit\u00e9 o\u00f9 vous souhaiteriez d\u00e9poser une plainte pour une quelconque raison en rapport avec notre politique de confidentialit\u00e9, veuillez vous adresser \u00e0 l'autorit\u00e9 nationale de protection des donn\u00e9es (DPA).","privacy.complaint.text.2":"Les informations concernant cette proc\u00e9dure peuvent \u00eatre trouv\u00e9es sur les sites internet suivants:","privacy.v2.data.title":"Collecte de donn\u00e9es","privacy.v2.data.intro.1":"Ce site web collecte des donn\u00e9es au travers des journaux d'\u00e9v\u00e8nements afin de d\u00e9tecter et bloquer de potentiels acteurs malveillants.","privacy.v2.data.intro.2":"Les donn\u00e9es collect\u00e9es ne sont en aucun cas utilis\u00e9es pour une quelconque autre raison.","privacy.v2.data.private.1":"Voici la liste des donn\u00e9es personelles collect\u00e9es:","privacy.v2.data.private_list.1":"L'addresse IP source","privacy.v2.data.private_list.2":"Le \"User-Agent\" de votre navigateur internet","privacy.v2.data.non_private.1":"Et voici la liste des donn\u00e9es non-personelles collect\u00e9es:","privacy.v2.data.non_private_list.1":"L'URI de la ressource demand\u00e9e","privacy.v2.data.non_private_list.2":"La date et l'heure","privacy.v2.data.end.1":"Les donn\u00e9es pr\u00e9sentes dans les journaux d'\u00e9v\u00e8nements sont extraites et retir\u00e9es pour \u00eatre trait\u00e9es 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.
Si une correspondance est d\u00e9tect\u00e9e, les informations priv\u00e9es sont anonymis\u00e9es et sont stock\u00e9es pendant 7 jours en attendant qu'un examen manuel soit effectu\u00e9.","privacy.v2.data.end.3":"Apr\u00e8s cette p\u00e9riode de 7 jours, ou apr\u00e8s qu'un examen ait \u00e9t\u00e9 effectu\u00e9, les donn\u00e9es sont automatiquement supprim\u00e9es.","privacy.v2.data.end.4":"Toute information concernant une requ\u00eate non suspecte est automatiquement supprim\u00e9e.","privacy.v2.data.end.5":"Ce processus n'est normalement jamais utilis\u00e9 sur des requ\u00eates provenant d'un trafic l\u00e9gitime d\u00fb au fait qu'il isole principalement les actions et requ\u00eates qui ne devraient pas \u00eatre possible sur ce site.","privacy.v2.data.end.6":"Cependant, ce processus n'est pas infaillible et il est toujours possible qu'une requ\u00eate soit isol\u00e9e par erreur.","privacy.v2.update.title":"Changements \u00e0 notre politique de confidentialit\u00e9","privacy.v2.update.intro.1":"Le contenu de notre politique de confidentialit\u00e9 a \u00e9t\u00e9 originalement \u00e9crit et le 4 d\u00e9cembre 2021 modifi\u00e9 pour la derni\u00e8re fois le 18 mars 2022.","privacy.v2.update.history.1.date":"2021/12/04","privacy.v2.update.history.1.desc.1":"Version originale","privacy.v2.update.history.2.date":"2022/03/18","privacy.v2.update.history.2.desc.1":"Mise-\u00e0-jour de la section sur la collection des donn\u00e9es.","privacy.v2.update.history.2.desc.2":"Ajout d'une mention de CloudFlare et ajout de liens vers leur politique de confidentialit\u00e9.","privacy.v2.update.history.2.desc.3":"Am\u00e9lioration de la section \"Changements \u00e0 notre politique de confidentialit\u00e9\".","privacy.v2.update.history.3.date":"2022/09/09","privacy.v2.update.history.3.desc.1":"Changement des r\u00e9f\u00e9rences aux services externes pour indiquer l'utilisation de v6Node.","privacy.v2.update.history.3.desc.1.1":"Ajout de mentions de v6Node et liens vers leur politique de vie confidentialit\u00e9.","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\u00e9s sur les domaines publics.","privacy.v2.update.end.2":"En cas de changement, vous serez clairement inform\u00e9 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\u00e9s par v6Node afin d'emp\u00eacher des acteurs malveillants d'y acc\u00e9der et dans le but de mettre en place un syst\u00e8me de reverse-proxy.","privacy.v2.third.intro.2":"Ceci a pour but d'am\u00e9liorer l'exp\u00e9rience des personnes le visitant gr\u00e2ce \u00e0 un syst\u00e8me de filtrage et caching priv\u00e9.","privacy.v2.third.intro.3":"Aucune des donn\u00e9es collect\u00e9es et stock\u00e9es par v6Node et le syst\u00e8me d\u00e9cris ci-dessus n'est utilis\u00e9 ou stock\u00e9.","privacy.v2.third.intro.4":"Si vous souhaitez consulter leur politique de confidentialit\u00e9 ainsi que celle de leur partenaires, vous pouvez le faire en suivant les liens ci-dessous:","privacy.v2.cookies.title":"Cookies de navigation","privacy.v2.cookies.intro.1":"Ce site web n'utilise pas, et ne stocke aucun cookies dans votre navigateur internet.","sidebar.alt.logo":"Logo du site web","sidebar.text.home":"Accueil","sidebar.text.projects":"Projets","sidebar.text.applications":"Applications","sidebar.text.libraries":"Librairies","sidebar.text.electronics":"\u00c9lectronique","sidebar.text.tools":"Outils","sidebar.text.links":"Liens","sidebar.text.downloads":"T\u00e9l\u00e9chargements","sidebar.text.gitea":"D\u00e9p\u00f4ts Git","sidebar.text.about":"\u00c0-propos","sidebar.text.contact":"Contact"}} \ No newline at end of file +{"_compile_date":"2023-06-01T14:31:21.649349Z","en":{"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.twitter.title":"Twitter","contact.twitter.compose":"Compose DM to @NibblePoker on Twitter","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.error.head.title":"Content error - NibblePoker","content.error.og.title":"NibblePoker - Content error","content.error.heading.main.search":"Search error","content.error.heading.main.content":"Content error","content.error.heading.main.fallback":"Unknown error","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 !","content.error.message.data.no.tags":"No tags found !","content.error.message.data.no.title":"No title found !","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 Architecture","content.commons.cpu.responsive":"CPU Architecture","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":"N/A","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)","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\u2771403 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\u2771404 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\u2771500 Error","error.skit.pc.dead":"Drawing of an old PC with a face with crossed eyes.","footer.text.privacy":"Privacy policy","footer.alt.logo":"Website's logo","home.head.title":"NibblePoker","home.head.description":"TODO: description","home.og.title":"NibblePoker","home.og.description":"TODO: description","home.header.title":"Homepage","lang.menu.title":"Language","lang.current":"English","lang.automatic":"Automatic","lang.english":"English","lang.french":"French","lang.german":"German","lang.luxembourgish":"Luxembourgish","links.head.title":"Links - NibblePoker","links.head.description":"TODO: description","links.og.title":"NibblePoker - Links","links.og.description":"TODO: description","links.header.title":"Links","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.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:","privacy.complaint.title":"How to contact the appropriate authorities ?","privacy.complaint.text.1":"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).","privacy.complaint.text.2":"More information on this procedure can be found on the following websites:","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.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.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","privacy.v2.update.history.2.date":"2022/03/18","privacy.v2.update.history.2.desc.1":"Changed section on data collection to reflect new policy.","privacy.v2.update.history.2.desc.2":"Added mention about CloudFlare and linked to their privacy policy.","privacy.v2.update.history.2.desc.3":"Improved the \"Changes to our privacy policy\" section.","privacy.v2.update.history.3.date":"2022/09/09","privacy.v2.update.history.3.desc.1":"Changed references to external services to reflect the migration to v6Node.","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.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.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.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.","sidebar.alt.logo":"Website's logo","sidebar.text.home":"Home","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.about":"About","sidebar.text.contact":"Contact","tools.head.title":"Tools - NibblePoker","tools.head.description":"TODO: description","tools.og.title":"NibblePoker - Tools","tools.og.description":"TODO: description","tools.header.title":"Tools"},"fr":{"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.twitter.title":"Twitter","contact.twitter.compose":"Composer un message priv\u00e9 pour @NibblePoker sur Twitter","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\u00e9sultat de recherche","content.search.heading.main.multiple":"R\u00e9sultats de recherche","content.search.count.single":"r\u00e9sultat","content.search.count.multiple":"r\u00e9sultats","content.header.base":"Projets","content.search.header":"Recherche","content.error.header":"Erreur","content.error.head.title":"Erreur de contenu - NibblePoker","content.error.og.title":"NibblePoker - Erreur de contenu","content.error.heading.main.search":"Erreur de recherche","content.error.heading.main.content":"Erreur de contenu","content.error.heading.main.fallback":"Erreur inconnue","content.error.message.none":"Aucune erreur n'a \u00e9t\u00e9 d\u00e9tect\u00e9e.","content.error.message.tags.length":"Le param\u00e8tre d'URL \"tags\" est trop long.","content.error.message.tags.alphanumeric":"Un des tags donn\u00e9 dans le param\u00e8tre d'URL \"tags\" n'est pas une cha\u00eene de texte alphanum\u00e9rique valide.","content.error.message.detect.empty":"Aucun contenu en rapport avec les tags choisi n'as \u00e9t\u00e9 trouv\u00e9.","content.error.message.id.alphanumeric":"L'ID de la ressource demand\u00e9e n'est pas une cha\u00eene de texte alphanum\u00e9rique valide.","content.error.message.data.not.exist":"Le contenu demand\u00e9e n'a pas de fichier de rendu interne associ\u00e9.","content.error.message.cannot.load":"Le contenu demand\u00e9 n'a pas pu \u00eatre charg\u00e9 de notre c\u00f4t\u00e9 !","content.error.message.data.no.tags":"Aucun tag trouv\u00e9 !","content.error.message.data.no.title":"Aucun titre trouv\u00e9 !","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\u00e9c\u00e9dente","content.commons.version.previous.multiple":"Versions pr\u00e9c\u00e9dentes","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\u00e9pendante","content.commons.cpu.x64":"x64","content.commons.cpu.x86":"x86","content.commons.cpu.arm":"arm","content.commons.cpu.arm64":"arm64","content.commons.na.italic":"N/A","content.commons.na":"N/A","content.commons.lang":"Langue","content.commons.download.single":"T\u00e9l\u00e9chargement","content.commons.download.multiple":"T\u00e9l\u00e9chargements","content.commons.version":"Version","content.commons.github":"D\u00e9p\u00f4t GitHub","content.commons.gitea":"D\u00e9p\u00f4t Gitea auto-h\u00e9berg\u00e9","content.commons.nuget":"Packet Nuget","content.commons.license.mit.single":"License MIT","content.commons.lang.english":"Anglais","content.commons.lang.french":"Fran\u00e7ais","content.commons.lang.luxembourgish":"Luxembourgeois","content.commons.lang.english.639-3":"Anglais (eng)","content.commons.lang.french.639-3":"Fran\u00e7ais (fra)","content.commons.lang.luxembourgish.639-3":"Luxembourgeois (ltz)","footer.text.privacy":"Politique de confidentialit\u00e9","footer.alt.logo":"Logo du site web","home.head.title":"NibblePoker","home.head.description":"TODO: description","home.og.title":"NibblePoker","home.og.description":"TODO: description","home.header.title":"Page d'accueil","lang.menu.title":"Langue","lang.current":"Fran\u00e7ais","lang.automatic":"Automatique","lang.english":"Anglais","lang.french":"Fran\u00e7ais","lang.german":"Allemand","lang.luxembourgish":"Luxembourgeois","links.head.title":"Liens - NibblePoker","links.head.description":"TODO: description","links.og.title":"NibblePoker - Liens","links.og.description":"TODO: description","links.header.title":"Liens","privacy.head.title":"Politique de confidentialit\u00e9 - NibblePoker","privacy.head.description":"Notre politique de confidentialit\u00e9 dans un format clair et compr\u00e9hensible.","privacy.og.title":"NibblePoker - Politique de confidentialit\u00e9","privacy.og.description":"Notre politique de confidentialit\u00e9 dans un format clair et compr\u00e9hensible.","privacy.header.title":"Politique de confidentialit\u00e9","privacy.introduction.title":"Introduction","privacy.introduction.text.1":"La politique de confidentialit\u00e9 ci-pr\u00e9sente a \u00e9t\u00e9 \u00e9crite 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.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\u00e9, nous vous recommandons d'utiliser le formulaire pr\u00e9sent sur la page de contact, ou par courriel \u00e0 l'adresse suivante:","privacy.complaint.title":"Comment contacter les autorit\u00e9s comp\u00e9tentes ?","privacy.complaint.text.1":"Dans l'\u00e9ventualit\u00e9 o\u00f9 vous souhaiteriez d\u00e9poser une plainte pour une quelconque raison en rapport avec notre politique de confidentialit\u00e9, veuillez vous adresser \u00e0 l'autorit\u00e9 nationale de protection des donn\u00e9es (DPA).","privacy.complaint.text.2":"Les informations concernant cette proc\u00e9dure peuvent \u00eatre trouv\u00e9es sur les sites internet suivants:","privacy.v2.data.title":"Collecte de donn\u00e9es","privacy.v2.data.intro.1":"Ce site web collecte des donn\u00e9es au travers des journaux d'\u00e9v\u00e8nements afin de d\u00e9tecter et bloquer de potentiels acteurs malveillants.","privacy.v2.data.intro.2":"Les donn\u00e9es collect\u00e9es ne sont en aucun cas utilis\u00e9es pour une quelconque autre raison.","privacy.v2.data.private.1":"Voici la liste des donn\u00e9es personelles collect\u00e9es:","privacy.v2.data.private_list.1":"L'addresse IP source","privacy.v2.data.private_list.2":"Le \"User-Agent\" de votre navigateur internet","privacy.v2.data.non_private.1":"Et voici la liste des donn\u00e9es non-personelles collect\u00e9es:","privacy.v2.data.non_private_list.1":"L'URI de la ressource demand\u00e9e","privacy.v2.data.non_private_list.2":"La date et l'heure","privacy.v2.data.end.1":"Les donn\u00e9es pr\u00e9sentes dans les journaux d'\u00e9v\u00e8nements sont extraites et retir\u00e9es pour \u00eatre trait\u00e9es 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.
Si une correspondance est d\u00e9tect\u00e9e, les informations priv\u00e9es sont anonymis\u00e9es et sont stock\u00e9es pendant 7 jours en attendant qu'un examen manuel soit effectu\u00e9.","privacy.v2.data.end.3":"Apr\u00e8s cette p\u00e9riode de 7 jours, ou apr\u00e8s qu'un examen ait \u00e9t\u00e9 effectu\u00e9, les donn\u00e9es sont automatiquement supprim\u00e9es.","privacy.v2.data.end.4":"Toute information concernant une requ\u00eate non suspecte est automatiquement supprim\u00e9e.","privacy.v2.data.end.5":"Ce processus n'est normalement jamais utilis\u00e9 sur des requ\u00eates provenant d'un trafic l\u00e9gitime d\u00fb au fait qu'il isole principalement les actions et requ\u00eates qui ne devraient pas \u00eatre possible sur ce site.","privacy.v2.data.end.6":"Cependant, ce processus n'est pas infaillible et il est toujours possible qu'une requ\u00eate soit isol\u00e9e par erreur.","privacy.v2.update.title":"Changements \u00e0 notre politique de confidentialit\u00e9","privacy.v2.update.intro.1":"Le contenu de notre politique de confidentialit\u00e9 a \u00e9t\u00e9 originalement \u00e9crit et le 4 d\u00e9cembre 2021 modifi\u00e9 pour la derni\u00e8re fois le 18 mars 2022.","privacy.v2.update.history.1.date":"2021/12/04","privacy.v2.update.history.1.desc.1":"Version originale","privacy.v2.update.history.2.date":"2022/03/18","privacy.v2.update.history.2.desc.1":"Mise-\u00e0-jour de la section sur la collection des donn\u00e9es.","privacy.v2.update.history.2.desc.2":"Ajout d'une mention de CloudFlare et ajout de liens vers leur politique de confidentialit\u00e9.","privacy.v2.update.history.2.desc.3":"Am\u00e9lioration de la section \"Changements \u00e0 notre politique de confidentialit\u00e9\".","privacy.v2.update.history.3.date":"2022/09/09","privacy.v2.update.history.3.desc.1":"Changement des r\u00e9f\u00e9rences aux services externes pour indiquer l'utilisation de v6Node.","privacy.v2.update.history.3.desc.1.1":"Ajout de mentions de v6Node et liens vers leur politique de vie confidentialit\u00e9.","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\u00e9s sur les domaines publics.","privacy.v2.update.end.2":"En cas de changement, vous serez clairement inform\u00e9 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\u00e9s par v6Node afin d'emp\u00eacher des acteurs malveillants d'y acc\u00e9der et dans le but de mettre en place un syst\u00e8me de reverse-proxy.","privacy.v2.third.intro.2":"Ceci a pour but d'am\u00e9liorer l'exp\u00e9rience des personnes le visitant gr\u00e2ce \u00e0 un syst\u00e8me de filtrage et caching priv\u00e9.","privacy.v2.third.intro.3":"Aucune des donn\u00e9es collect\u00e9es et stock\u00e9es par v6Node et le syst\u00e8me d\u00e9cris ci-dessus n'est utilis\u00e9 ou stock\u00e9.","privacy.v2.third.intro.4":"Si vous souhaitez consulter leur politique de confidentialit\u00e9 ainsi que celle de leur partenaires, vous pouvez le faire en suivant les liens ci-dessous:","privacy.v2.cookies.title":"Cookies de navigation","privacy.v2.cookies.intro.1":"Ce site web n'utilise pas, et ne stocke aucun cookies dans votre navigateur internet.","sidebar.alt.logo":"Logo du site web","sidebar.text.home":"Accueil","sidebar.text.projects":"Projets","sidebar.text.applications":"Applications","sidebar.text.libraries":"Librairies","sidebar.text.electronics":"\u00c9lectronique","sidebar.text.tools":"Outils","sidebar.text.links":"Liens","sidebar.text.downloads":"T\u00e9l\u00e9chargements","sidebar.text.gitea":"D\u00e9p\u00f4ts Git","sidebar.text.about":"\u00c0-propos","sidebar.text.contact":"Contact"}} \ No newline at end of file diff --git a/commons/strings/en/contact.json b/commons/strings/en/contact.json new file mode 100644 index 0000000..891e5a8 --- /dev/null +++ b/commons/strings/en/contact.json @@ -0,0 +1,11 @@ +{ + "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.twitter.title": "Twitter", + "contact.twitter.compose": "Compose DM to @NibblePoker on Twitter" + +} \ No newline at end of file diff --git a/commons/strings/en/content.json b/commons/strings/en/content.json index 6071d5f..60755f1 100644 --- a/commons/strings/en/content.json +++ b/commons/strings/en/content.json @@ -10,7 +10,7 @@ "content.search.count.single": "result", "content.search.count.multiple": "results", - "content.header.base" : "Content", + "content.header.base" : "Projects", "content.search.header" : "Search", "content.error.header" : "Error", "_content.item.header" : "", @@ -56,8 +56,8 @@ "content.commons.version.old.single": "Old version", "content.commons.version.old.multiple": "Old versions", "content.commons.version.source": "Source code", - "content.commons.cpu": "CPU Architecture", - "content.commons.cpu.responsive": "CPU Architecture", + "content.commons.cpu": "CPU Architecture", + "content.commons.cpu.responsive": "CPU Architecture", "content.commons.cpu.any": "Any architecture", "content.commons.cpu.x64": "x64", "content.commons.cpu.x86": "x86", diff --git a/commons/strings/en/links.json b/commons/strings/en/links.json new file mode 100644 index 0000000..d3a4557 --- /dev/null +++ b/commons/strings/en/links.json @@ -0,0 +1,7 @@ +{ + "links.head.title": "Links - NibblePoker", + "links.head.description": "TODO: description", + "links.og.title": "NibblePoker - Links", + "links.og.description": "TODO: description", + "links.header.title": "Links" +} diff --git a/commons/strings/fr/contact.json b/commons/strings/fr/contact.json new file mode 100644 index 0000000..0bb509f --- /dev/null +++ b/commons/strings/fr/contact.json @@ -0,0 +1,11 @@ +{ + "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.twitter.title": "Twitter", + "contact.twitter.compose": "Composer un message privé pour @NibblePoker sur Twitter" + +} \ No newline at end of file diff --git a/commons/strings/fr/content.json b/commons/strings/fr/content.json index e774637..1ad367b 100644 --- a/commons/strings/fr/content.json +++ b/commons/strings/fr/content.json @@ -10,6 +10,11 @@ "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", diff --git a/commons/strings/fr/links.json b/commons/strings/fr/links.json new file mode 100644 index 0000000..e8b5d64 --- /dev/null +++ b/commons/strings/fr/links.json @@ -0,0 +1,7 @@ +{ + "links.head.title": "Liens - NibblePoker", + "links.head.description": "TODO: description", + "links.og.title": "NibblePoker - Liens", + "links.og.description": "TODO: description", + "links.header.title": "Liens" +} diff --git a/contact/index.bak.php b/contact/index.bak.php new file mode 100644 index 0000000..0b258b1 --- /dev/null +++ b/contact/index.bak.php @@ -0,0 +1,132 @@ + + + + + + <?php print(localize('contact.title')); ?> - Nibble Poker + + + + + + + + + + +
+ + +
+
+ +
+
+
+
+
+
+

  

+
+
+

herwin.bozet@gmail.com

+
+
+
+
+
+
+
+ + +
+
+ + +
+ "> + "> +
+
+
+
+
+
+
+
+

  Twitter

+
+
+

@NibblePoker

+
+
+
+
+
+ + + +
+
+
+
+
+
+
+

+   Tox +

+
+
+
+
+
+

+ +

+

+ 62C1A91A425F90D7B4F047D70CCF31E7402C9EC37B93604B0F37C416442D15044AF6C1AE033B +

+

+ + + + +

+
+

+ +

+

+ 01ABBD4515C8FA56231333D1022CEEE0A605F4E85F8A945365F56D196A1BBA10FB4DCE08DBE8 +

+

+ + + + +

+
+
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/contact/index.php b/contact/index.php index 0b258b1..b8139ff 100644 --- a/contact/index.php +++ b/contact/index.php @@ -1,132 +1,53 @@ - - <?php print(localize('contact.title')); ?> - Nibble Poker - - - - - + + <?php print(localize('contact.head.title')); ?> + + + + + - + - - -
- - -
-
- -
-
-
-
-
-
-

  

-
-
-

herwin.bozet@gmail.com

-
-
-
-
-
-
-
- - -
-
- - -
- "> - "> -
-
-
-
-
-
-
-
-

  Twitter

-
-
-

@NibblePoker

-
-
-
-
-
- - - -
-
-
-
-
-
-
-

-   Tox -

-
-
-
-
-
-

- -

-

- 62C1A91A425F90D7B4F047D70CCF31E7402C9EC37B93604B0F37C416442D15044AF6C1AE033B -

-

- - - - -

-
-

- -

-

- 01ABBD4515C8FA56231333D1022CEEE0A605F4E85F8A945365F56D196A1BBA10FB4DCE08DBE8 -

-

- - - - -

-
-
-
-
-
- -
- - + + +
+

+ +

+ +
+
+ + +

+ + + +

+ +
+ - \ No newline at end of file + +"); +} +?> \ No newline at end of file diff --git a/content/index.php b/content/index.php index 65f2898..8a05cab 100644 --- a/content/index.php +++ b/content/index.php @@ -65,9 +65,9 @@ if($contentManager->hasError) { $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");; + $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"); } // TODO: Fix the OG URL tag to add the tags ! @@ -84,10 +84,8 @@ if($contentManager->hasError) { requestedTags) ? [] : $contentManager->requestedTags); include 'commons/DOM/sidebar.php'; -include 'commons/DOM/body-2.php'; ?>

@@ -95,24 +93,29 @@ include 'commons/DOM/body-2.php'; if($contentManager->hasError) { echo(''); echo(localize("content.header.base")); + echo(''); echo(''); echo(localize("content.error.header")); + echo(''); } elseif($contentManager->displayType == ContentDisplayType::SEARCH) { echo(''); echo(localize("content.header.base")); + echo(''); echo(''); echo(localize("content.search.header")); + echo(''); } elseif($contentManager->displayType == ContentDisplayType::CONTENT) { echo(''); echo(localize("content.header.base")); + echo(''); echo(''); echo('' . $content->get_head_title() . ''); + echo(''); } ?>

- +
-
diff --git a/content/items/circuitpython-custom-file-systems.json b/content/items/circuitpython-custom-file-systems.json new file mode 100644 index 0000000..809d404 --- /dev/null +++ b/content/items/circuitpython-custom-file-systems.json @@ -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": " View on GitHub", + + "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 zlib  (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": "ImDisk's Ram Disk tool 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.
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 command injection vulnerability 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": " Voir sur GitHub", + + "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
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 zlib  (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": "ImDisk's Ram Disk tool 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 injection de commande 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": "
", "localize": false}, + {"type": "raw", "content": "   ∘  ", "localize": false}, + {"type": "raw", "content": "requirements.1.1"}, + {"type": "raw", "content": "
", "localize": false}, + {"type": "raw", "content": "   ∘  ", "localize": false}, + {"type": "raw", "content": "requirements.1.2"}, + {"type": "raw", "content": "
", "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": "
", "localize": false}, + {"type": "raw", "content": "   ∘  ", "localize": false}, + {"type": "raw", "content": "requirements.2.1"}, + {"type": "raw", "content": "
", "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"} + ] +} diff --git a/error.php b/error.php index 4d8b62e..6fc2cf3 100644 --- a/error.php +++ b/error.php @@ -10,63 +10,58 @@ if(isset($_SERVER['REDIRECT_STATUS'])) { $np_err_code = $_SERVER['REDIRECT_STATUS']; } ?> - - - - - <?php print(localize('error.'.$np_err_code.'.head.title')); ?> - - - - - - - - - - -
-

- -

- -
- -
- - -

-

- - '); - ?> -
- - - + + + + + <?php print(localize('error.'.$np_err_code.'.head.title')); ?> + + + + + + + + + + +
+

+ +

+ +
+
+ + +

+

+ + '); + ?> +
+ + +

- +
-
@@ -79,9 +76,7 @@ include 'commons/DOM/body-2.php';
diff --git a/links/index.php b/links/index.php index ac6fdfd..81a740e 100644 --- a/links/index.php +++ b/links/index.php @@ -1,120 +1,48 @@ - - Links - Nibble Poker - - - - - + + <?php print(localize('links.head.title')); ?> + + + + + - + - - -
- -
-
- -
-
-
-
-
-
-

-   GitHub -

-
-
-

aziascreations

-
-
-
-
- -
-

- https://github.com/aziascreations - - - - - -

-
-
-
-
-
-
-
-

-   Twitter -

-
-
-

@nibblepoker

-
-
-
-
-
-

- https://twitter.com/NibblePoker - - - - - -

-
-
-
-
-
-
-
-

-   LinkedIn -

-
-
-

NibblePoker

-
-
-
-
-
-

- https://www.linkedin.com/in/herwin-bozet-60aa6310b/ - - - - - -

-
-
-
-
-
- -
- - + + +
+

+ +

+ +
+
+ + + +
+ +"); +} +?> \ No newline at end of file diff --git a/privacy/index.php b/privacy/index.php index b63a7e0..dccbcb6 100644 --- a/privacy/index.php +++ b/privacy/index.php @@ -20,18 +20,15 @@ include_once 'commons/langs.php';

- +
-
@@ -207,9 +204,7 @@ include 'commons/DOM/body-2.php';
diff --git a/resources/NibblePoker/images/drawings/mcu_v0_test1.png b/resources/NibblePoker/images/drawings/mcu_v0_test1.png new file mode 100644 index 0000000000000000000000000000000000000000..f4087be1607449ff086a81017f61612349413736 GIT binary patch literal 2004 zcmV;_2P^oAP)xf>QHUZnXcHMj29}nTfq{QQJ@e7$6BQOEDJwV5 ziB$jq00DGTPE!Ct=GbNc00&G-L_t(|Ufk4y3Bxc91<@>Uva|oPh1Nw7x4%#kZ0R<5 z=%XV|cpN3;W95}zZDe~^h&ls3w-y4rvI>xrV zW?w$v$r*#%H3qZ;NNE;mo1Ki#)1`vCD^yDXcfO>3sT6<*yLN!$Fbu>1kUT&!{{Lr> zKw!D%5{0UbZ{^(|3`lBCdjN>({f+FmrAPn`=?gNX(52&{A>C8kk2h3`BUG3E?Hn*k z45}~EsT5p_uP6yrlRg<=kQ1O%eA`Fk3kXhCx;`frn5m??MK3CDPm(TeLk=XqA01!8 zIUv4@RDdQcYCuOy;V<2(KGKp#d`n8lHnqzh6{5NiC^aQA1DTp*#QA^rpo1~f~xPMCus!LJ1)bim* z;#<;u54ZkieA7v#e|Dsrq>}RZdPsX_X-QAxYbCvoFP9?Ck26$?lJ3-OuNhv{nk4v4 z5=y$AkMvG_Q%Ffs-J}n^#$iy@L{eNz;aAj7);GJfmGpjmvq`o1W}2ju8pW4L`)pEp zNFhsMA`PmAluVKwUlIZ<|hf8DBz8C0*y1Vm~fLR%sxE zs!Q>Iq(|X)pqrFV`htuDK%}W&Ga)>llQfhkPM7gLVIt0Cd;wetu`G+B^oKpW+iesE zq5v#y+5np#`TgIvvA}x>#<8d4WsJ+YtrGRq{9v4oF+_jJMCQ0;R`?c3L$dP#f8uacsJ zm2^q3LA?g`l3vnA)93QNq`LO~^Gw%LLVbE(NtE7hy-L}$l%kWBlCXJwX97dH(SxG05;yhAP=@Uu^U;_8QWPHY zNgalbbAqXqc_(#%;Ea#iIu0S@I1$?7poX5M6auNoE}5ALDHvD|s+Y3Bg|}v4=3?fY zjMcTn=8P|SabqMS`i+GUmY`lgXpRF3ITR+5Ru!u3Mo^W z$ShY90~kU}rDQoFRRq#YF-^X#%rK6GuBBUUtZG$Cs<(!W(^Lq_OI=oqL!}<;!&^0( zG}FHJQVOUAlZP<&gQ~n$lee#hRMHtSvt6nFnG`d{?R%)S?g2wyRQd8%D78{uQN>cI zgb46{r0=$-P5VOp;wD61nM`)+mzD!gIY>tiofwFDJ7aR%8Lp{EUiDNDWg)#o32KrDWskX@Nag~ zOc~Wu%%RypiXG;6yLONRAq<58v=`w1*L6vZB~4`*Bas`t2zB!baH&MnY0Tbxe1+4M zYULlL2mr5*1CfFmtuJCqI`u&_ok=N>R5FIrsIMf_|7$9ZE|b#zKL?Rn=?2rU@50DL zq+%nc)V$zEfVxupQbl}J8k~bx=B1=2hL2P3oMw%1d@3f+eQAuEpF^2+%#@Ti)R&n% z+lH#sFSUo-|55SPw}9F%{iL9@`}GB--StJMR69%SOJ#=?3nQJKQb0JH>Ixf>4Gj$o3=L6;A~k3e8AAq^mXv{ke{pedvMVW`C?tX*9RL6TH99>lF*7A8 zD=;%P^U>!Q8XOQ36DBGw7#kc85D^Lr3K||D6&M);0s>I$YYzYb00DGTPE!Ct=GbNc z01AUiL_t(|UhLHg3c^4T1yOHMvt)I-|1~AV_<=?S959)V{{|15u1hOJuoQB~ZCG{JZ^&=%wJt83}Gyr%+c3lUA z0BH@)1HcPV%4L!&G&m6oDXBu!qO^>ZG_)x#1Ff{V(0nA8q~RSJ0NTCOvb2THd}p*$ zj@ub3j7A#3bjF3yN)OfAbhGtTZf z1zVF@m0Ijv+^;N9o&JO)5w_id45Rb7mCit%~R_ zg?1=KDbQZJ&QOYg6b)q) zsya%6>`J+PgE^z~W*n+)OK+e|DRle7m7eTp03MZ?6F^Ox+tSUHGK->8pGhdC1xM-I zXI&y?&in%4LcvEveF>%cL7M+cbFLp$7*~?yj43UT?m=nM-E3tUiGHKo@P_{!*^v;_FIxKtsm4>>Xej;dQwVVLz-*S?T|EIBHe;HLn=YYlmfmKg?gcMyGr`7 zbd+Y`D{8}+Z(RDjgmFZgsT1ivY9UhZN(xJvsFz8(jCT=fl^O60rOdQzq+CWBOXNYM z!IJI4q#P!hQue4F z4l15qzDngV$(J%`hCHaG>WF1ADJv-Dz+*6}Qe~LrOWC6iB1KiI!z5G6oarESwl4ra zVM#HyboZrSiP}Nx9aI@6`P-L|Vg@M_)nC*X#f&qtNGg?Kk}2h)4l5-zEbSOG@TD9k z`BKKrKEgo-(2{fm7&DXD8n z+ld;NPIFM#mui!0NN0-~T~q@)(Ur7+BPpqKOY^sr3bpkQ0cMtNhoyN%DM~$;VqPg& z)&EiAOUDXS6&A=%vyN1eq)5()be=$^P-`WrD8)&s43lPx88X#~hLk^?L<*oG#QXcZ zzWM@mPA665ANKBOxltH~0_aR{&{2kdc(?S@B-w14^ThQXLfx_LM>^1x!*b;#W$acn7ZnT7jySf>H#X zl+eF1q`HtoA=N-X@9`~-KE9AwDIJ+H7gF6UR4L^Pc>yS(bT%Rl7X|NSgKR zb04u?N+_jpD`n4e!-UNx{q!q^kWw87u|c{U6#$e{uxC|Lq@{2;lJE$7c9LS7R6sA- zjjETjl0hLwJ5o~VQ%XBv35`;?l!kYuT?aryyT+v0Anm_XFB5d|DxLXMQjAjIG6iFy zhrx>!DQVDb^6{iHgu>qqHO!?DoBSNL>lV%dRi(@;X#f;^d_1guH>K|fLR~J@*t3*k zt2AO`B6D2|1~nJzUHUBWEjlU?i4{&HO_n!dwfcD*z_g;Vo2S8 zB*A!)pDPrdMyg#3B=&>$Na*!isHnxHC@#Ime381ll)j&l(n;zbyQCmTQsyTMBNPuO zrFUxG{otNbn196cBqdZK#cB#I)YQ|AJxEKDVTu%%il-Sq|C^e5HR+9XZ(yNrx zB1IwvrK}`7s2G$|Lc0~xYbRhHNmTvB^TufU&b(zhZrk9@EmUZwGND8;ndqFL{emSh zm?KNIZ+Rw95JxJ$rU0uah{#P{gOn*uWa5!T2ZqqCQnG@Qssh=i7>2Q|WcK|WN(g3= zDyLFXN9&Y+7`8(47i6W_Q5vzg@KjAF&9rZQDFxJm$w3$o3)Oh4rf=UGQcY(_reCT3 zo+O#-_T5!lc7vfWs($zylvb&&sA?%pLQL@ENFhR8o%V(L!R;L+A(v3~p7 zrHY|bL7JfIr8%Ud_O(mNtS_}s-y|i0bl1LiDV@%x`jKRpR&HOsFGU+tFoYgV$`GoT z2DP+2)d1BFU!PKFkPO;sUnq#G_H`o#V}MfXvVC8kyHK&7L=hZHVXUJ{%5N(oMM0^4i?jI~_mWa# zDWkrqV2sjGK$h-W|T+6jD(BP+AWGxp55%OjBR+r{nYOUIVQWQZlmA zM<``|`PKMwYBK^;Na4$|BWI;In7+PX>=}{5j(91K5i(O>R(dHA&q?RjftB;p1wbL) zm2_H(MOE?Cx^Ui?9;5no2$QZ&2~t { + const delay = time / animationStepCount; + let i = 0; + const intervalId = setInterval(() => { + element.style.opacity = String(1 - getBezierBlend(i / animationStepCount)); + i++; + if(i === animationStepCount) { + element.style.opacity = "0.0"; + element.hidden = true; + clearInterval(intervalId); + resolve(); + } + }, delay); + }); +} + +function fadeIn(element, time = 200) { + element.style.opacity = "0.0"; + element.hidden = false; + return new Promise((resolve) => { + const delay = time / animationStepCount; + let i = 0; + const intervalId = setInterval(() => { + element.style.opacity = String(getBezierBlend(i / animationStepCount)); + i++; + if(i === animationStepCount) { + element.style.opacity = "1.0"; + clearInterval(intervalId); + resolve(); + } + }, delay); + }); +} + let isSidebarVisible = true; +let eContentModal = document.getElementById("modal-content"); +let eContentModalInner = document.getElementById("modal-content-inner"); + +function showContentModal(eContent) { + eContentModalInner.appendChild(eContent); + fadeIn(eContentModal, 175).then(r => { + // We don't care about what happens afterward... + }); +} document.addEventListener("DOMContentLoaded", () => { - const eSidebar = document.getElementById("sidebar"); - const eMain = document.getElementById("main"); - - document.getElementById("sidebar-toggle-footer").onclick = function () { - if(isSidebarVisible) { - eSidebar.classList.add("retracted"); + const eSidebar = document.getElementById("sidebar"); + const eMain = document.getElementById("main"); + + document.getElementById("sidebar-toggle-footer").onclick = function() { + if(isSidebarVisible) { + eSidebar.classList.add("retracted"); eMain.classList.add("expanded"); - } else { - eSidebar.classList.remove("retracted"); - eMain.classList.remove("expanded"); - } - isSidebarVisible = !isSidebarVisible; + } else { + eSidebar.classList.remove("retracted"); + eMain.classList.remove("expanded"); + } + isSidebarVisible = !isSidebarVisible; }; + //showContentModal(eContentModal); + + [eContentModal, document.getElementById("modal-content-cross"), eContentModalInner].forEach(value => { + value.onclick = function() { + fadeOut(eContentModal, 175).then(r => { + eContentModalInner.innerHTML = ""; + }); + } + }) + // TODO: Autodetect mobile screens, close it, and add classes to make it over the rest with dark modal bkgd. }); diff --git a/resources/NibblePoker/scss/config.scss b/resources/NibblePoker/scss/config.scss index 40fd58c..da6aa69 100644 --- a/resources/NibblePoker/scss/config.scss +++ b/resources/NibblePoker/scss/config.scss @@ -2,3 +2,5 @@ // Add the "w-000px"/"h-000x" classes. $undefined-add-px-sizing: false; + +$nibblepoker-background-root: "/resources/NibblePoker/images/backgrounds"; diff --git a/resources/NibblePoker/scss/core/rounding/global.scss b/resources/NibblePoker/scss/core/rounding/global.scss index 7622357..f164cc4 100644 --- a/resources/NibblePoker/scss/core/rounding/global.scss +++ b/resources/NibblePoker/scss/core/rounding/global.scss @@ -13,6 +13,7 @@ @include global-rounding-maker("s", calc(#{$border-base-radius} * 0.75)); @include global-rounding-maker("m", #{$border-base-radius}); @include global-rounding-maker("l", calc(#{$border-base-radius} * 1.5)); +@include global-rounding-maker("xl", calc(#{$border-base-radius} * 2.0)); /* Utilities > Rounding > Global > Fixed Sizes */ @include global-rounding-maker("0", 0); diff --git a/resources/NibblePoker/scss/core/spacing/global.scss b/resources/NibblePoker/scss/core/spacing/global.scss index 22187c2..b4c9ad3 100644 --- a/resources/NibblePoker/scss/core/spacing/global.scss +++ b/resources/NibblePoker/scss/core/spacing/global.scss @@ -40,9 +40,12 @@ /* Utilities > Spacing > Global > Manual Extras */ -.p-mxs { - padding: calc(#{$margin-base-size} * 0.375); -} .p-xxs { padding: calc(#{$margin-base-size} * 0.25); } +.p-mxs { + padding: calc(#{$margin-base-size} * 0.375); +} +.p-ms { + padding: calc(#{$margin-base-size} * 0.625); +} diff --git a/resources/NibblePoker/scss/external/quantum.scss b/resources/NibblePoker/scss/external/quantum.scss index dc078e3..331d48d 100644 --- a/resources/NibblePoker/scss/external/quantum.scss +++ b/resources/NibblePoker/scss/external/quantum.scss @@ -3,6 +3,8 @@ // Massive thanks to "fontsquirrel.com" for allowing me to properly subset and compress the font <3 +/* External > Quantum */ + @font-face { font-family: 'Quantum'; src: url('/resources/Quantum/Quantum.min.woff2') format('woff2'), diff --git a/resources/NibblePoker/scss/nibblepoker.scss b/resources/NibblePoker/scss/nibblepoker.scss index 96bb460..595feef 100644 --- a/resources/NibblePoker/scss/nibblepoker.scss +++ b/resources/NibblePoker/scss/nibblepoker.scss @@ -13,6 +13,7 @@ /* Externals */ @import 'external/reset'; +@import 'external/quantum'; /* Variables */ @import 'variables'; @@ -36,21 +37,26 @@ @import 'core/spacing/axis'; @import 'core/spacing/sided'; -/* Site > Fonts */ -@import 'external/quantum'; +/* Site */ +@import 'site/base'; // Has manual disabling of some core stuff in specific situations and a shit-tier fix for tables & border on mobile. +@import 'site/text'; // Has some hardcoded width for font-awesome icons in sidebar and headings -/* Site > HTML Elements */ -@import 'site/commons'; -@import 'site/body'; -@import 'site/layout'; // Has manual disabling of some core stuff in specific situations and a shit-tier fix for tables. +/* Site > Elements */ @import 'site/hr'; @import 'site/scrollbar'; +@import 'site/input'; // Has ugly fix for download buttons +@import 'site/table'; // Uses copied paddings for cells & ugly rounding fix + +/* Site > Misc */ +@import 'site/backgrounds'; + +/* Site > Fixes */ +@import 'site/mobile'; // Has !important overrides for obvious reasons + +/* Site > Unsorted */ @import 'site/image'; @import 'site/wedge'; -@import 'site/input'; -@import 'site/text'; // Has hardcoded with for font-awesome icons in sidebar -@import 'site/backgrounds'; -@import 'site/table'; // Uses copied paddings for cells & ugly rounding fix @import 'site/code'; // Uses copied borders, roundings and paddings @import 'site/content'; // Uses fixed sizes and floats @import 'site/video'; +@import 'site/modal'; diff --git a/resources/NibblePoker/scss/site/backgrounds.scss b/resources/NibblePoker/scss/site/backgrounds.scss index 1d7ca18..2533e9d 100644 --- a/resources/NibblePoker/scss/site/backgrounds.scss +++ b/resources/NibblePoker/scss/site/backgrounds.scss @@ -1,17 +1,27 @@ // NibblePoker.lu CSS - (C) 2023 Bozet Herwin +/* Site > Misc > Backgrounds */ + .bkgd-blank { background: #{$color-background-main-headings}; } +.bkgd-surround { + background: #{$color-background-surround}; +} + +.bkgd-blank-dark { + background: mix($color-background-main, $color-background-surround, 50%); +} + .bkgd-grid { - background: #{$color-background-main-headings} url("/resources/NibblePoker/images/backgrounds/3px-tile-0.4.png") repeat scroll center center; + background: #{$color-background-main-headings} url("#{$nibblepoker-background-root}/3px-tile-0.4.png") repeat scroll center center; } .bkgd-squares { - background: #{$color-background-main-headings} url("/resources/NibblePoker/images/backgrounds/bright-squares-p100-0.125.png") repeat scroll center center; + background: #{$color-background-main-headings} url("#{$nibblepoker-background-root}/bright-squares-p100-0.125.png") repeat scroll center center; } .bkgd-math { - background: #{$color-background-main-headings} url("/resources/NibblePoker/images/backgrounds/old-mathematics-v2-0.25.png") repeat scroll center center; + background: #{$color-background-main-headings} url("#{$nibblepoker-background-root}/old-mathematics-v2-0.25.png") repeat scroll center center; } diff --git a/resources/NibblePoker/scss/site/base.scss b/resources/NibblePoker/scss/site/base.scss new file mode 100644 index 0000000..fc498ce --- /dev/null +++ b/resources/NibblePoker/scss/site/base.scss @@ -0,0 +1,155 @@ +// NibblePoker.lu CSS - (C) 2023 Bozet Herwin + +/* Site > Base */ + +/* Site > Base > Layout */ + +/* Site > Base > Layout > Root */ + +html, body { + min-width: 100vw; + min-height: 100vh; + width: 100vw !important; + height: 100vh !important; + max-width: 100vw; + max-height: 100vh; +} + +/* Site > Base > Layout > Main Grid */ + +body { + display: grid; + grid-template-columns: min-content 1fr; + grid-template-rows: min-content 1fr min-content; + gap: 0; + + & > nav { + grid-column: 1; + grid-row: 1 / span 2; + overflow-x: hidden; + overflow-y: auto; + z-index: #{$z-index-sidebar}; + } + + & > header { + grid-column: 2; + grid-row: 1; + + // Inner content + display: grid; + grid-template-columns: 1fr min-content; + grid-template-rows: min-content; + + & > h1 { + grid-column: 1; + } + & > #lang-selector { + grid-column: 2; + } + } + + & > main { + grid-column: 2; + grid-row: 2; + overflow-x: hidden; + overflow-y: auto; + position: relative; // Helps with some absolute alignments inside it + } + + & > footer { + grid-column: 1 / span 2; + grid-row: 3; + } +} + +/* Site > Base > Layout > Mobile Fixes */ + +@media only screen and (max-width: 768px) { + body { + & > nav { + border-right: 1px solid #{$color-border-all}; + } + + & > header { + grid-column: 1 / span 2; + } + + & > main { + grid-column: 1 / span 2; + // TODO: Remove scrolling here + } + } +} + +/* Site > Base > Coloring & Fonts */ + +body { + background-color: #{$color-background-body}; + + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +} + +header, nav, footer { + background-color: #{$color-background-surround}; +} + +main { + background-color: #{$color-background-main}; +} + +/* Site > Base > Sidebar */ + +// FIXME: For mobile, just use 2 media queries to define normal behaviour and inverted mobile behaviour. + +// FIXME: Might be easier to have it as absolute, shift it left when closing and using a blank spacing div tbh... +// Or nest content in div, and when retracted move it out at the same speed, idk... +.sidebar { + width: #{$size-sidebar}; + max-width: #{$size-sidebar}; + min-height: 100%; + + &.retracted { + width: 0; + padding-left: 0; + padding-right: 0; + overflow: hidden; + } + + .sidebar-entry { + display: flex; + align-items: center; + justify-content: left; + } +} + +/* Site > Base > Main */ + +main { + &.expanded { + border-left: 0; + border-radius: 0; + } +} + +/* Site > Base > Transitions */ + +main, .sidebar { + transition: width 0.4s, padding 0.4s, border-width 0.4s, border-radius 0.4s; + transition-timing-function: cubic-bezier(.25,.8,.25,1.1); +} + + +/* // HTML Elements > Layout > Trash */ + +// FIXME: Move it out too ! +.heading-main { + > h2, > h3, > h4 { + display: flex; + align-items: center; + justify-content: left; + } + &.heading-dyn-width-1 { + min-width: 75%; + } +} diff --git a/resources/NibblePoker/scss/site/body.scss b/resources/NibblePoker/scss/site/body.scss deleted file mode 100644 index b1d4b7b..0000000 --- a/resources/NibblePoker/scss/site/body.scss +++ /dev/null @@ -1,59 +0,0 @@ -// NibblePoker.lu CSS - (C) 2023 Bozet Herwin - -/* HTML Elements > HTML & Body */ - -//@import 'images'; - -html, body { - min-width: 100vw; - min-height: 100vh; - width: 100vw !important; - height: 100vh !important; - max-width: 100vw; - max-height: 100vh; - - background-color: #{$color-background-body}; -} - -body { - //z-index: -2; - - font-family: "Roboto", Arial, sans-serif; - - //&:before { - // content: ' '; - // display: block; - // position: absolute; - // left: 0; - // top: 0; - // width: 100%; - // height: 100%; - // z-index: -1; - //} - // - //&.background-grid:before { - // opacity: 0.3; // TODO: Set to .2 if in light. - // background-image: #{$img_grid}; - //} - // - //&.background-map:before { - // background-image: #{$img_map}; - // filter: contrast(200%) invert(75%) opacity(0.25) brightness(0.625); - //} -} - -body { - //background-color: var(--lm-base-body-bg-color); - //background-image: var(--lm-base-body-bg-image); - //color: var(--lm-base-text-color); - //font-size: var(--base-font-size); - //line-height: var(--base-line-height); - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, - "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - //font-weight: 400; -} - - -// TODO: Add that background to other classes through a common declaration -// And then separate only the body in a final declaration to unset the background from fixed to default ! -// It will reduce the number of CSS statements/selectors !!! diff --git a/resources/NibblePoker/scss/site/commons.scss b/resources/NibblePoker/scss/site/commons.scss deleted file mode 100644 index fcafb25..0000000 --- a/resources/NibblePoker/scss/site/commons.scss +++ /dev/null @@ -1,27 +0,0 @@ -// NibblePoker.lu CSS - (C) 2023 Bozet Herwin - -/* HTML Elements > Commons */ - -//* { -// margin: 0; -// padding: 0; -// -// color: #{$color-black-medium}; -// -// .dark-mode & { -// color: #{$color-white-light}; -// } -//} - -//.container, header, footer, form, .sidebar { -// border: 1px solid var(--l-border-color); -// -// .dark-mode & { -// border-color: var(--d-border-color); -// } -//} -// - -button + button, .button-link + .button-link > button { - margin-left: 0.75rem; -} diff --git a/resources/NibblePoker/scss/site/hr.scss b/resources/NibblePoker/scss/site/hr.scss index be2bdba..6f6bad0 100644 --- a/resources/NibblePoker/scss/site/hr.scss +++ b/resources/NibblePoker/scss/site/hr.scss @@ -1,19 +1,10 @@ // NibblePoker.lu CSS - (C) 2023 Bozet Herwin -/* HTML Elements > Horizontal Rule */ +/* Site > Elements > Horizontal Rule */ -hr { - //color: var(--dm-horizontal-rule-color); - //background-color: var(--dm-horizontal-rule-color); - - .dark-mode & { - - } - - &.subtle { - background-color: rgba(0,0,0,0) !important; - background: #5d5f61; - background: radial-gradient(circle, rgba(83, 85, 87, 0.8) 0%, rgba(65, 67, 69, 0.65) 75%, rgba(17, 20, 23, 0) 100%); - opacity: 0.1; - } +hr.subtle { + background-color: rgba(0,0,0,0) !important; + background: #5d5f61; + background: radial-gradient(circle, rgba(83, 85, 87, 0.8) 0%, rgba(65, 67, 69, 0.65) 75%, rgba(17, 20, 23, 0) 100%); + opacity: 0.1; } diff --git a/resources/NibblePoker/scss/site/input.scss b/resources/NibblePoker/scss/site/input.scss index 10ee9d2..4fb24bb 100644 --- a/resources/NibblePoker/scss/site/input.scss +++ b/resources/NibblePoker/scss/site/input.scss @@ -1,8 +1,8 @@ // NibblePoker.lu CSS - (C) 2023 Bozet Herwin -/* Site > Input */ +/* Site > Elements > Inputs */ -/* Site > Input > Commons */ +/* Site > Elements > Inputs > Commons */ button, input { border: 0; @@ -21,7 +21,7 @@ button, input { } } -/* Site > Input > Buttons */ +/* Site > Elements > Inputs > Buttons */ button { cursor: pointer; @@ -39,3 +39,40 @@ button { } } } + +// Ugly fix for download buttons +button + button, .button-link + .button-link > button { + margin-left: 0.75rem; +} + +/* Site > Elements > Inputs > Lang Selector */ + +#lang-selector { + position: relative; + white-space: nowrap; + + > summary { + cursor: pointer; + list-style: none; + user-select: none; + } + + > div { + position: absolute; + z-index: #{$z-index-lang-dropdown}; + top: 2rem; + right: 0; + min-width: 100%; + + // Visibility transition + //height: 0; + //transition: height 0.4s; + //transition-timing-function: cubic-bezier(.25,.8,.25,1.1); + } + + // TODO: Maybe force it to be visible when closes ? + + //&[open] > div { + // height: auto; + //} +} \ No newline at end of file diff --git a/resources/NibblePoker/scss/site/layout.scss b/resources/NibblePoker/scss/site/layout.scss deleted file mode 100644 index 4ab221e..0000000 --- a/resources/NibblePoker/scss/site/layout.scss +++ /dev/null @@ -1,69 +0,0 @@ -// NibblePoker.lu CSS - (C) 2023 Bozet Herwin - -/* HTML Elements > Layout */ - -// Fixing some alignment issues with the sidebar and header -// I hate everyone that worked on CSS with every fiber of my soul. -// TODO: Try .container-root > tbody > tr [ > td ] {} -tr, td { - vertical-align: top; -} - -.container-root { - width: 100vw !important; - min-height: 100vh !important; - height: 100vh !important; - max-height: 100vh !important; - overflow: hidden; -} - -header, nav, footer { - background-color: #{$color-background-surround}; -} - -// FIXME: Might be easier to have it as absolute, shift it left when closing and using a blank spacing div tbh... -// Or nest content in div, and when retracted move it out at the same speed, idk... -.sidebar { - width: #{$size-sidebar}; - max-width: #{$size-sidebar}; - min-height: 100%; - - &.retracted { - width: 0; - padding-left: 0; - padding-right: 0; - overflow: hidden; - } -} - -// TODO: Can be simplified in the DOM -.sidebar-entry { - display: flex; - align-items: center; - justify-content: left; -} - -main { - background-color: #{$color-background-main}; - - &.expanded { - border-left: 0; - border-radius: 0; - } -} - -main, .sidebar { - transition: width 0.4s, padding 0.4s, border-width 0.4s, border-radius 0.4s; - transition-timing-function: cubic-bezier(.25,.8,.25,1.1); -} - -.heading-main { - > h2, > h3, > h4 { - display: flex; - align-items: center; - justify-content: left; - } - &.heading-dyn-width-1 { - min-width: 75%; - } -} diff --git a/resources/NibblePoker/scss/site/mobile.scss b/resources/NibblePoker/scss/site/mobile.scss new file mode 100644 index 0000000..c3e3174 --- /dev/null +++ b/resources/NibblePoker/scss/site/mobile.scss @@ -0,0 +1,19 @@ +// NibblePoker.lu CSS - (C) 2023 Bozet Herwin + +/* Site > Fixes > Mobile */ + +@media only screen and (max-width: 768px) { + // Overrides the ".p-l" class used on "main". + main { + padding: calc(#{$margin-base-size} * 0.5) !important; + } + + // Overrides a style in "site/content.scss". + .content-search-entry > p { + width: 100% !important; + } + + .mobile-hide { + display: none; + } +} diff --git a/resources/NibblePoker/scss/site/modal.scss b/resources/NibblePoker/scss/site/modal.scss new file mode 100644 index 0000000..14335cf --- /dev/null +++ b/resources/NibblePoker/scss/site/modal.scss @@ -0,0 +1,34 @@ +// NibblePoker.lu CSS - (C) 2023 Bozet Herwin + +.modal { + position: absolute; + top: 0; + left: 0; + z-index: #{$z-index-modal}; + background-color: #000000CF; + width: 100vw; + height: 100vh; + + > #modal-content-cross { + cursor: pointer; + } + + > #modal-content-inner { + position: absolute; + //background-color: #00aaaa; + top: 0; + left: 0; + right: 0; + height: 100vh; + width: 75vw; + margin-left: auto; + margin-right: auto; + display: grid; + place-items: center; + } +} + +.modal-inner-image { + max-width: 100%; + max-height: 100%; +} diff --git a/resources/NibblePoker/scss/site/table.scss b/resources/NibblePoker/scss/site/table.scss index 5ceac8e..15421d5 100644 --- a/resources/NibblePoker/scss/site/table.scss +++ b/resources/NibblePoker/scss/site/table.scss @@ -1,5 +1,9 @@ // NibblePoker.lu CSS - (C) 2023 Bozet Herwin +tr, td { + vertical-align: top; +} + table.stylish { th { font-weight: bold; diff --git a/resources/NibblePoker/scss/site/text.scss b/resources/NibblePoker/scss/site/text.scss index 3a1f6e9..82b56ba 100644 --- a/resources/NibblePoker/scss/site/text.scss +++ b/resources/NibblePoker/scss/site/text.scss @@ -1,29 +1,77 @@ // NibblePoker.lu CSS - (C) 2023 Bozet Herwin -p, a, h1, h2, h3, td { +/* Site > Text */ + +/* Site > Text > Commons */ + +p, a, h1, h2, h3, h4, h5, h6, td, th, .code, summary { color: #{$color-text-regular-normal}; } +/* Site > Text > Paragraphs */ + p { line-height: 1.2; } -// Setting colors for bland links. -// Done before muted text to make the footer privacy link possible. +/* Site > Text > Links */ + a { - text-decoration: none; -} -a:hover { + // Base text-decoration: underline; + color: #{$color-link-blue}; - color: #{$color-link-hover}; + & * { + color: #{$color-link-blue}; + } - > * { - color: #{$color-link-hover}; - text-decoration: underline; + &:hover { + color: #{$color-link-blue-hover}; + + & * { + color: #{$color-link-blue-hover}; + text-decoration: underline; + } + } + + // Bland links + &.casper-link, &.bland-link { + text-decoration: none; + color: #{$color-text-regular-normal}; + + & * { + color: #{$color-text-regular-normal}; + } + + &:hover { + text-decoration: underline; + color: #{$color-link-hover}; + + & * { + color: #{$color-link-hover}; + } + + // FIXME: Not working, big F + //i { + // text-decoration: none !important; + //} + } + } + + // Special case for buttons + &.casper-link, &.button-link, &.text-link { + text-decoration: none; + &:hover { + text-decoration: none; // Only really applies to content listing entries... + & * { + text-decoration: none; + } + } } } +/* Site > Text > Helpers */ + .t-half-muted { opacity: 65%; } @@ -42,32 +90,14 @@ a:hover { opacity: 45%; } +/* Site > Text > Targeted Rules */ + .t-logo-text { font-size: 1.775em; line-height: 1; } -a:not(.bland-link) { - text-decoration: underline; - //text-decoration: overline; - - color: #{$color-link-blue} !important; - - & * { - color: #{$color-link-blue} !important; - } - - &:hover { - //text-decoration: underline; - - color: #{$color-link-blue-hover} !important; - - & * { - color: #{$color-link-blue-hover} !important; - } - } -} - +/* Site > Text > Targeted Rules > Sidebar */ // Special rules for the sidebar and FontAwesome icons .sidebar-entry { @@ -89,6 +119,8 @@ a:not(.bland-link) { //} } +/* Site > Text > Targeted Rules > Headings */ + // And now for the headings, the exceptions keep popping up :,) // TODO: Add a simple and nicer divider. .heading-main { diff --git a/resources/NibblePoker/scss/site/video.scss b/resources/NibblePoker/scss/site/video.scss index 0f95511..77e0535 100644 --- a/resources/NibblePoker/scss/site/video.scss +++ b/resources/NibblePoker/scss/site/video.scss @@ -1,3 +1,5 @@ +// NibblePoker.lu CSS - (C) 2023 Bozet Herwin + video { width: 100% !important; height: auto !important; diff --git a/resources/NibblePoker/scss/variables.scss b/resources/NibblePoker/scss/variables.scss index 9ae87fa..bc3b264 100644 --- a/resources/NibblePoker/scss/variables.scss +++ b/resources/NibblePoker/scss/variables.scss @@ -150,8 +150,6 @@ $color-scrollbar-border: $color-border-all; $scrollbar-size: 1.25em; - - /* Variables > Others */ $border-base-radius: 5px; @@ -164,3 +162,9 @@ $size-sidebar: 15rem; //$size-sidebar: 30rem; $content-search-image-size: 128px; + +/* Variables > Z Indexes */ + +$z-index-sidebar: 5; +$z-index-lang-dropdown: 10; +$z-index-modal: 99; diff --git a/tools/index.php b/tools/index.php index b30c572..07f4bb6 100644 --- a/tools/index.php +++ b/tools/index.php @@ -68,18 +68,15 @@ if($contentManager->hasError) {

- +
-
{ const eInputFiles = document.getElementById("tool-svg-to-png-files"); const eFileSelectButton = document.getElementById("tool-svg-to-png-btn-select"); @@ -13,7 +12,7 @@ document.addEventListener("DOMContentLoaded", () => { const eFileConvertButton = document.getElementById("tool-svg-to-png-btn-convert"); // Propagating the button click to the input element - eFileSelectButton.onclick = function () { + eFileSelectButton.onclick = function() { eInputFiles.click(); } @@ -30,7 +29,7 @@ document.addEventListener("DOMContentLoaded", () => { }); // Handling conversion - eFileConvertButton.onclick = function () { + eFileConvertButton.onclick = function() { const canvas = document.getElementById('conversion-canvas'); const ctx = canvas.getContext('2d');