Finished IBAN generator, Hotfixed standalone pages spacing, Imrpoved IBAN generator standalone appearance

Update commons.yml, iban-generator.yml, and 6 more files...
This commit is contained in:
2025-03-18 22:09:06 +01:00
parent 05ea0ca732
commit 374e6d018b
8 changed files with 101 additions and 20 deletions

View File

@@ -85,6 +85,7 @@ file.drop.selected.multiple: "You selected <span class=\"np-file-drop-count\">??
license.mit.single: "MIT License" license.mit.single: "MIT License"
format.download.as: "Download as"
format.raw: "Raw" format.raw: "Raw"
format.json: "JSON" format.json: "JSON"
format.yaml: "YAML" format.yaml: "YAML"

View File

@@ -10,3 +10,9 @@ option.prefer.numbers: "Prefer numbers over letters"
option.for.each: "Generate <i>X</i> for each country" option.for.each: "Generate <i>X</i> for each country"
option.sepa.enable: "Enable SEPA countries" option.sepa.enable: "Enable SEPA countries"
option.non-sepa.enable: "Enable non-SEPA countries" option.non-sepa.enable: "Enable non-SEPA countries"
license.1: "The code for this project is released in the public domain."
license.2: "The original source code can be found on <a href=\"https://github.com/aziascreations/Web-NibblePoker\">GitHub</a>."
license.3: "Data from Swift's
<a href=\"https://www.swift.com/standards/data-standards/iban-international-bank-account-number\">IBAN Registry</a>
was also used and may be licensed under different terms."

View File

@@ -85,6 +85,7 @@ file.drop.selected.multiple: "Vous avez séléctionné <span class=\"np-file-dro
license.mit.single: "License MIT" license.mit.single: "License MIT"
format.download.as: "Télécharger en"
format.raw: "Brut" format.raw: "Brut"
format.json: "JSON" format.json: "JSON"
format.yaml: "YAML" format.yaml: "YAML"

View File

@@ -10,3 +10,9 @@ option.prefer.numbers: "Favoriser les nombres aux lettres"
option.for.each: "Générer <i>X</i> pour chaque pays" option.for.each: "Générer <i>X</i> pour chaque pays"
option.sepa.enable: "Activer les pays SEPA" option.sepa.enable: "Activer les pays SEPA"
option.non-sepa.enable: "Activer les pays non-SEPA" option.non-sepa.enable: "Activer les pays non-SEPA"
license.1: "Le code de ce projet est publié dans le domaine public."
license.2: "Le code source original peut être trouvé sur <a href=\"https://github.com/aziascreations/Web-NibblePoker\">GitHub</a>."
license.3: "Les données du
<a href=\"https://www.swift.com/standards/data-standards/iban-international-bank-account-number\">Registre IBAN</a>
de Swift ont également été utilisées et peuvent être soumises à des conditions de licence différentes."

View File

@@ -49,6 +49,30 @@ import {initCore} from "../../js/nibblepoker-core.mjs";
let lastIBANs = []; let lastIBANs = [];
function onExclusionRulesChanged() {
let showSepa = eOptionEnableSepa.checked;
let showNonSepa = eOptionEnableNonSepa.checked;
eOptionCountry.querySelectorAll("option").forEach(eOption => {
/** @type {IbanSpecification} */
let countrySpec = countriesSpecs[eOption.value];
if(countrySpec.isSepa) {
eOption.disabled = !showSepa;
} else {
eOption.disabled = !showNonSepa;
}
});
if (eOptionCountry.options[eOptionCountry.selectedIndex]?.disabled) {
const eFirstEnabled = Array.from(eOptionCountry.options)
.find(option => !option.disabled);
if (eFirstEnabled) {
eFirstEnabled.selected = true;
}
}
}
/** @returns {number} */ /** @returns {number} */
function getDesiredCount() { function getDesiredCount() {
return getInputCount(eOptionCount, 1, 1000); return getInputCount(eOptionCount, 1, 1000);
@@ -62,7 +86,19 @@ import {initCore} from "../../js/nibblepoker-core.mjs";
} }
window.onload = function () { window.onload = function () {
// FIXME: Handle the exclusions properly // Exclusion rules
eOptionEnableSepa.addEventListener("change", function() {
if(!eOptionEnableSepa.checked && !eOptionEnableNonSepa.checked) {
eOptionEnableNonSepa.checked = true;
}
onExclusionRulesChanged();
});
eOptionEnableNonSepa.addEventListener("change", function() {
if(!eOptionEnableSepa.checked && !eOptionEnableNonSepa.checked) {
eOptionEnableSepa.checked = true;
}
onExclusionRulesChanged();
});
// Generation // Generation
eGenerateButton.addEventListener("click", function() { eGenerateButton.addEventListener("click", function() {
@@ -119,19 +155,19 @@ import {initCore} from "../../js/nibblepoker-core.mjs";
if (lastIBANs.length <= 0) { if (lastIBANs.length <= 0) {
return; return;
} }
downloadStringAsFile(lastIBANs.join("\n"), "uuids.txt", "text/plain"); downloadStringAsFile(lastIBANs.join("\n"), "ibans.txt", "text/plain");
}); });
eDownloadJsonButton.addEventListener("click", function() { eDownloadJsonButton.addEventListener("click", function() {
if (lastIBANs.length <= 0) { if (lastIBANs.length <= 0) {
return; return;
} }
downloadStringAsFile(JSON.stringify(lastIBANs, null, 4), "uuids.json", "application/json"); downloadStringAsFile(JSON.stringify(lastIBANs, null, 4), "ibans.json", "application/json");
}); });
eDownloadYamlButton.addEventListener("click", function() { eDownloadYamlButton.addEventListener("click", function() {
if (lastIBANs.length <= 0) { if (lastIBANs.length <= 0) {
return; return;
} }
downloadStringAsFile("- \"" + lastIBANs.join("\"\n- \"") + "\"", "uuids.yaml", "text/yaml"); downloadStringAsFile("- \"" + lastIBANs.join("\"\n- \"") + "\"", "ibans.yaml", "text/yaml");
}); });
}; };
} }

View File

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

View File

@@ -28,7 +28,7 @@
</head> </head>
<body class="layout-generic"> <body class="layout-generic">
<header class="w-full p-m pl-s"> <header class="p-m pl-s">
<h1 class="t-size-17 t-w-500"> <h1 class="t-size-17 t-w-500">
<i class="fad fa-home t-size-16 mr-s t-muted"></i>{% block header_title %}{% endblock %} <i class="fad fa-home t-size-16 mr-s t-muted"></i>{% block header_title %}{% endblock %}
</h1> </h1>
@@ -38,7 +38,7 @@
{% block main_content %}{% endblock %} {% block main_content %}{% endblock %}
</main> </main>
<footer class="d-flex flex-align-center w-full p-s py-xs"> <footer class="d-flex flex-align-center p-s py-xs">
<a href="{{ l10n_url_abs('/', raw_lang) }}"> <a href="{{ l10n_url_abs('/', raw_lang) }}">
<img id="logo-footer" <img id="logo-footer"
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjczIiBoZWlnaHQ9IjUxMiIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMzkyLjUgNTEyYy02LjYgMC0xMC4xLTUuMDYtNy43OS0xMS4yNEw1NTYuMjkgNDMuMjRjMi4zMS02LjE4IDYuMTEtNi4xOCA4LjQyIDBsNTUuNTggMTQ4LjE5YzIuMzEgNi4xOCAyLjMxIDE2LjI5IDAgMjIuNDdsLTIzLjU4IDYyLjg2Yy0yLjMxIDYuMTggMS4xOSAxMS4yNCA3Ljc5IDExLjI0aDQwYzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwzOS41OCAxMDUuNTJjMi4zMSA2LjE4LTEuMTkgMTEuMjQtNy43OSAxMS4yNGgtMTM2Yy02LjYgMC0xMy45IDUuMDYtMTYuMjEgMTEuMjRsLTI3LjU4IDczLjUyQzUxMC40IDUwNi45NCA1MDMuMSA1MTIgNDk2LjUgNTEyek01NzYuNzEgMTEuMjRDNTc0LjQgNS4wNiA1NzcuOSAwIDU4NC41IDBoMTA0YzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwxODMuNTggNDg5LjUyYzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzNlMzU0NiIvPjxwYXRoIGQ9Ik0xMjguNzEgNTAwLjc2QzEyNi40IDUwNi45NCAxMTkuMSA1MTIgMTEyLjUgNTEySDguNWMtNi42IDAtMTAuMS01LjA2LTcuNzktMTEuMjRsMTMxLjIxLTM0OS44OWMyLjMyLTYuMTggOS4yNy0xMy4xMyAxNS40NS0xNS40NUwyNzMuODUgODhjNi4xOC0yLjMyIDkuMzQuODQgNyA3eiIgZmlsbD0iIzkwNWVhOSIvPjxwYXRoIGQ9Ik0yMDAuNSA1MTJjLTYuNiAwLTEwLjEtNS4wNi03Ljc5LTExLjI0TDM1NS4zNCA2Ny4wOWMyLjMyLTYuMTggOS4yNy0xMy4wOSAxNS40NS0xNS40NUw0OTcuMjYgNC4yMWM2LjE4LTIuMzEgOS4zNC44NSA3IDdMMzIwLjcxIDUwMC43NkMzMTguNCA1MDYuOTQgMzExLjEgNTEyIDMwNC41IDUxMnpNNzY4LjcxIDExLjI0Yy0yLjMxLTYuMTguODUtOS4zNCA3LTdsMTI2LjUgNDcuNGM2LjE4IDIuMzIgMTMuMTMgOS4yNyAxNS40NSAxNS40NWwxNjIuNjMgNDMzLjY3YzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzZiM2U3NSIvPjxwYXRoIGQ9Ik05OTIuMTMgOTVjLTIuMzItNi4xOC44NC05LjM0IDctN2wxMjYuNDggNDcuNDJjNi4xOCAyLjMyIDEzLjEzIDkuMjcgMTUuNDUgMTUuNDVsMTMxLjIzIDM0OS44OWMyLjMxIDYuMTgtMS4xOSAxMS4yNC03Ljc5IDExLjI0aC0xMDRjLTYuNiAwLTEzLjktNS4wNi0xNi4yMS0xMS4yNHoiIGZpbGw9IiM5MDVlYTkiLz48L3N2Zz4=" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjczIiBoZWlnaHQ9IjUxMiIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMzkyLjUgNTEyYy02LjYgMC0xMC4xLTUuMDYtNy43OS0xMS4yNEw1NTYuMjkgNDMuMjRjMi4zMS02LjE4IDYuMTEtNi4xOCA4LjQyIDBsNTUuNTggMTQ4LjE5YzIuMzEgNi4xOCAyLjMxIDE2LjI5IDAgMjIuNDdsLTIzLjU4IDYyLjg2Yy0yLjMxIDYuMTggMS4xOSAxMS4yNCA3Ljc5IDExLjI0aDQwYzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwzOS41OCAxMDUuNTJjMi4zMSA2LjE4LTEuMTkgMTEuMjQtNy43OSAxMS4yNGgtMTM2Yy02LjYgMC0xMy45IDUuMDYtMTYuMjEgMTEuMjRsLTI3LjU4IDczLjUyQzUxMC40IDUwNi45NCA1MDMuMSA1MTIgNDk2LjUgNTEyek01NzYuNzEgMTEuMjRDNTc0LjQgNS4wNiA1NzcuOSAwIDU4NC41IDBoMTA0YzYuNiAwIDEzLjkgNS4wNiAxNi4yMSAxMS4yNGwxODMuNTggNDg5LjUyYzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzNlMzU0NiIvPjxwYXRoIGQ9Ik0xMjguNzEgNTAwLjc2QzEyNi40IDUwNi45NCAxMTkuMSA1MTIgMTEyLjUgNTEySDguNWMtNi42IDAtMTAuMS01LjA2LTcuNzktMTEuMjRsMTMxLjIxLTM0OS44OWMyLjMyLTYuMTggOS4yNy0xMy4xMyAxNS40NS0xNS40NUwyNzMuODUgODhjNi4xOC0yLjMyIDkuMzQuODQgNyA3eiIgZmlsbD0iIzkwNWVhOSIvPjxwYXRoIGQ9Ik0yMDAuNSA1MTJjLTYuNiAwLTEwLjEtNS4wNi03Ljc5LTExLjI0TDM1NS4zNCA2Ny4wOWMyLjMyLTYuMTggOS4yNy0xMy4wOSAxNS40NS0xNS40NUw0OTcuMjYgNC4yMWM2LjE4LTIuMzEgOS4zNC44NSA3IDdMMzIwLjcxIDUwMC43NkMzMTguNCA1MDYuOTQgMzExLjEgNTEyIDMwNC41IDUxMnpNNzY4LjcxIDExLjI0Yy0yLjMxLTYuMTguODUtOS4zNCA3LTdsMTI2LjUgNDcuNGM2LjE4IDIuMzIgMTMuMTMgOS4yNyAxNS40NSAxNS40NWwxNjIuNjMgNDMzLjY3YzIuMzEgNi4xOC0xLjE5IDExLjI0LTcuNzkgMTEuMjRoLTEwNGMtNi42IDAtMTMuOS01LjA2LTE2LjIxLTExLjI0eiIgZmlsbD0iIzZiM2U3NSIvPjxwYXRoIGQ9Ik05OTIuMTMgOTVjLTIuMzItNi4xOC44NC05LjM0IDctN2wxMjYuNDggNDcuNDJjNi4xOCAyLjMyIDEzLjEzIDkuMjcgMTUuNDUgMTUuNDVsMTMxLjIzIDM0OS44OWMyLjMxIDYuMTgtMS4xOSAxMS4yNC03Ljc5IDExLjI0aC0xMDRjLTYuNiAwLTEzLjktNS4wNi0xNi4yMS0xMS4yNHoiIGZpbGw9IiM5MDVlYTkiLz48L3N2Zz4="

View File

@@ -12,19 +12,26 @@
{% endblock %} {% endblock %}
{% block header_title %} {% block header_title %}
<i class="fad fa-briefcase t-size-16 mr-s t-muted"></i><a href="../" class="a-hidden">{{ l10n("header.root", "projects", user_lang) }}</a> {% if not is_standalone %}
<span class="mobile-hide"><span class="mx-s t-size-15"></span>{{ l10n(tool_data.metadata.general.title_key, tool_id, user_lang) }}</span> <i class="fad fa-briefcase t-size-16 mr-s t-muted"></i><a href="../" class="a-hidden">{{ l10n("header.root", "projects", user_lang) }}</a>
<span class="mobile-hide"><span class="mx-s t-size-15">❱</span>{{ l10n(tool_data.metadata.general.title_key, tool_id, user_lang) }}</span>
{% else %}
<span class="mobile-hide">NibblePoker<span class="mx-s t-size-15">❱</span></span>{{ l10n(tool_data.metadata.general.title_key, tool_id, user_lang) }}
{% endif %}
{% endblock %} {% endblock %}
{% block main_content %} {% block main_content %}
{{ render_h1( {% if not is_standalone %}
'<i class="' + tool_data.metadata.general.icon + ' t-size-16 mr-s t-muted"></i>' + {{ render_h1(
l10n(tool_data.metadata.general.title_key, tool_id, user_lang) '<i class="' + tool_data.metadata.general.icon + ' t-size-16 mr-s t-muted"></i>' +
) }} l10n(tool_data.metadata.general.title_key, tool_id, user_lang)
) }}
<div class="px-xxs"> <div class="p-s">
{% include 'applets/'+applet_data.id+'.jinja' %}
</div>
{% else %}
{% include 'applets/'+applet_data.id+'.jinja' %} {% include 'applets/'+applet_data.id+'.jinja' %}
</div> {% endif %}
{% endblock %} {% endblock %}
{% block extra_scripts %} {% block extra_scripts %}