diff --git a/data/applets/iban-generator.yml b/data/applets/iban-generator.yml new file mode 100644 index 0000000..2532046 --- /dev/null +++ b/data/applets/iban-generator.yml @@ -0,0 +1,7 @@ +applets: + - id: "iban-generator" + resources: + scripts: + - "applet://iban-generator.mjs" + stylesheets: + - "applet://iban-generator.css" diff --git a/data/strings/en/ico-maker.yml b/data/strings/en/ico-maker.yml index 98428fb..a23e215 100644 --- a/data/strings/en/ico-maker.yml +++ b/data/strings/en/ico-maker.yml @@ -1,3 +1,11 @@ # EN - Ico Maker -t01: "" +meta.title: "Icon Maker" +meta.description: "..." + + + + +enable.expert.mode: "Enable expert mode" +enable.binary.blobs: "Allow binary blobs" +enable.binary.blobs.subtext: "Enables upload and inclusion in final .ico file." diff --git a/data/strings/fr/ico-maker.yml b/data/strings/fr/ico-maker.yml index cdc645c..3f85b63 100644 --- a/data/strings/fr/ico-maker.yml +++ b/data/strings/fr/ico-maker.yml @@ -1,3 +1,11 @@ # FR - Ico Maker -t01: "" +meta.title: "Fabricateur d'icônes" +meta.description: "..." + + + + +enable.expert.mode: "Activer le mode expert" +enable.binary.blobs: "Autoriser les blobs binaires" +enable.binary.blobs.subtext: "Active le support et l'inclusion dans le fichier .ico final." diff --git a/data/tools/iban-generator.yml b/data/tools/iban-generator.yml new file mode 100644 index 0000000..c7d281c --- /dev/null +++ b/data/tools/iban-generator.yml @@ -0,0 +1,31 @@ + +tools: + - id: "iban-generator" + applet_id: "iban-generator" + metadata: + head: + title_key: "meta.title" + description_key: "meta.description" + opengraph: + title_key: "meta.title" + description_key: "meta.description" + type: null + url: null + image_url: "/resources/NibblePoker/images/tools/iban-generator/main.png" + image_type: null + twitter: + title_key: "meta.title" + description_key: "meta.description" + index: + priority: 100 + enable: true + title_key: "meta.title" + preamble_key: "meta.description" + image_url: "/resources/NibblePoker/images/tools/iban-generator/main.png" + image_alt_key: "" + general: + icon: "fa-duotone fa-solid fa-credit-card-front" + title_key: "meta.title" + subtitle_key: "article.subtitle" + tags: + - "undefined" diff --git a/scripts/compile-js-site.cmd b/scripts/compile-js-site.cmd index 8676ef5..975d1bf 100644 --- a/scripts/compile-js-site.cmd +++ b/scripts/compile-js-site.cmd @@ -54,6 +54,16 @@ call "%~dp0node_modules\.bin\terser" excel-password-remover.js -c -m -o excel-pa popd +:js-applet-iban-generator +echo Minifying IBAN Generator +pushd %CD% +cd %~dp0\..\static\resources\NibblePoker\applets\iban-generator\ +echo ^> static\resources\NibblePoker\applets\iban-generator\iban-generator.mjs +call "%~dp0node_modules\.bin\rollup" iban-generator.mjs --file iban-generator.js +call "%~dp0node_modules\.bin\terser" iban-generator.js -c -m -o iban-generator.min.js +popd + + :js-applet-ico-maker echo Minifying Ico Maker pushd %CD% diff --git a/static/resources/NibblePoker/applets/iban-generator/iban-generator.css b/static/resources/NibblePoker/applets/iban-generator/iban-generator.css new file mode 100644 index 0000000..e69de29 diff --git a/static/resources/NibblePoker/applets/iban-generator/iban-generator.mjs b/static/resources/NibblePoker/applets/iban-generator/iban-generator.mjs new file mode 100644 index 0000000..8ce39bd --- /dev/null +++ b/static/resources/NibblePoker/applets/iban-generator/iban-generator.mjs @@ -0,0 +1,752 @@ +// NibblePoker - IBAN Generator +// Author: Herwin Bozet (@NibblePoker) +// License: Public Domain (This code) +// Sources: +// * https://www.swift.com/standards/data-standards/iban-international-bank-account-number (Updated December 2024) + +export class Iban { + /** @type {string} */ + countryCode; + /** @type {number} */ + checksum; + /** @type {string[]} */ + parts; + /** @type {IbanSpecification|null} */ + relevantSpec; +} + +export class IbanSpecification { + /** + * ISO-3166 Country Code + * @type {string} + */ + countryCode; + /** @type {string} */ + countryName; + /** @type {number} */ + ibanLength; + /** @type {string} */ + ibanFormat; + /** @type {number} */ + bbanLength; + /** @type {string} */ + bbanFormat; + /** @type {RegExp} */ + ibanRegex; + /** @type {boolean} */ + isSepa; + + /** + * @param countryCode {string} + * @param countryName {string} + * @param ibanLength {number} + * @param ibanFormat {string} + * @param bbanLength {number} + * @param bbanFormat {string} + * @param ibanRegex {RegExp} + * @param isSepa {boolean} + */ + constructor(countryCode, countryName, ibanLength, ibanFormat, + bbanLength, bbanFormat, ibanRegex, isSepa) { + this.countryCode = countryCode; + this.countryName = countryName; + this.ibanLength = ibanLength; + this.ibanFormat = ibanFormat; + this.bbanLength = bbanLength; + this.bbanFormat = bbanFormat; + this.ibanRegex = ibanRegex; + this.isSepa = isSepa; + } + + /** + * Returns the Bank Identifier from the given IBAN. + * The Bank Identifier may or may not include the Branch Identifier. + * @param iban {string} + * @returns {string} + */ + getFormattedBankId(iban) { + return ""; + } + + /** + * @param iban {string} + * @returns {string} + */ + getFormattedBranchId(iban) { + return ""; + } + + /** + * Formats the IBAN by adding spaces and other characters where necessary. + * @param iban {string} + * @returns {string} + */ + getFormattedIban(iban) { + return iban.match(/.{1,4}/g).join(' '); + } +} + +export const countriesIbanSpecs = { + AD: new IbanSpecification( + "AD", 'Andorra', + 24, "AD2!n4!n4!n12!c", + 20, "4!n4!n12!c", + new RegExp( + "^(?AD)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{4})" + + "(?[0-9]{4})" + + "([0-9a-zA-Z]{12})" + + ")$", "g"), + true + ), + AE: new IbanSpecification( + "AE", 'United Arab Emirates (The)', + 23, "AE2!n3!n16!n", + 19, "3!n16!n", + new RegExp( + "^(?AE)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{3})" + + "([0-9]{16})" + + ")$", "g"), + false + ), + AL: new IbanSpecification( + "AL", 'Albania', + 28, "AL2!n8!n16!c", + 24, "8!n16!c", + new RegExp( + "^(?AL)" + + "(?[0-9]{2})" + + "(?" + + "(?" + + "[0-9]{3}" + + "(?[0-9]{4})" + + "[0-9]{1}" + + ")" + + "([0-9a-zA-Z]{16})" + + ")$", "g"), + false + // FIXME: Has a special bank id format "212-1100-9" + ), + AT: new IbanSpecification( + "AT", 'Austria', + 20, "AT2!n5!n11!n", + 16, "5!n11!n", + new RegExp( + "^(?AT)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{5})" + + "([0-9]{11})" + + ")$", "g"), + true + ), + AZ: new IbanSpecification( + "AZ", 'Azerbaijan', + 28, "AZ2!n4!a20!c", + 24, "4!a20!c", + new RegExp( + "^(?AZ)" + + "(?[0-9]{2})" + + "(?" + + "(?[A-Z]{4})" + + "([0-9a-zA-Z]{20})" + + ")$", "g"), + false + ), + BA: new IbanSpecification( + "BA", 'Bosnia and Herzegovina', + 20, "BA2!n3!n3!n8!n2!n", + 16, "3!n3!n8!n2!n", + new RegExp( + "^(?BA)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{3})" + + "(?[0-9]{3})" + + "([0-9]{8})" + + "([0-9]{2})" + + ")$", "g"), + false + ), + BE: new IbanSpecification( + "BE", 'Belgium', + 16, "BE2!n3!n7!n2!n", + 12, "3!n7!n2!n", + new RegExp( + "^(?BE)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{3})" + + "([0-9]{7})" + + "([0-9]{2})" + + ")$", "g"), + true + ), + BG: new IbanSpecification( + "BG", 'Bulgaria', + 22, "BG2!n4!a4!n2!n8!c", + 18, "4!a4!n2!n8!c", + new RegExp( + "^(?BG)" + + "(?[0-9]{2})" + + "(?" + + "(?[A-Z]{4})" + + "(?[0-9]{4})" + + "([0-9]{2})" + + "([0-9a-zA-Z]{8})" + + ")$", "g"), + true + ), + BH: new IbanSpecification( + "BH", 'Bahrain', + 22, "BH2!n4!a14!c", + 18, "4!a14!c", + new RegExp( + "^(?BH)" + + "(?[0-9]{2})" + + "(?" + + "(?[A-Z]{4})" + + "([0-9a-zA-Z]{14})" + + ")$", "g"), + false + ), + BI: Object.assign(new IbanSpecification( + "BI", 'Burundi', + 27, "BI2!n5!n5!n11!n2!n", + 23, "5!n5!n11!n2!n", + new RegExp( + "^(?BI)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{5})" + + "(?[0-9]{5})" + + "([0-9]{11})" + + "([0-9]{2})" + + ")$", "g"), + false + ), { + getFormattedIban(iban) { + return [ + iban.substring(0, 4), + iban.substring(4, 9), + iban.substring(9, 14), + iban.substring(14, 25), + iban.substring(25, 27), + ].join(' '); + } + }), + BR: new IbanSpecification( + "BR", 'Brazil', + 29, "BR2!n8!n5!n10!n1!a1!c", + 25, "8!n5!n10!n1!a1!c", + new RegExp( + "^(?BR)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{8})" + + "(?[0-9]{5})" + + "([0-9]{10})" + + "([A-Z])" + + "([0-9a-zA-Z])" + + ")$", "g"), + false + ), + BY: new IbanSpecification( + "BY", 'Republic of Belarus\n', + 28, "BY2!n4!c4!n16!c", + 24, "4!c4!n16!c", + new RegExp( + "^(?BY)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9a-zA-Z]{4})" + + "([0-9]{4})" + + "([0-9a-zA-Z]{16})" + + ")$", "g"), + false + ), + CH: new IbanSpecification( + "CH", 'Switzerland', + 21, "CH2!n5!n12!c", + 17, "5!n12!c", + new RegExp( + "^(?CH)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{5})" + + "([0-9a-zA-Z]{12})" + + ")$", "g"), + true + ), + CR: new IbanSpecification( + "CR", 'Costa Rica', + 22, "CR2!n4!n14!n", + 18, "4!n14!n", + new RegExp( + "^(?CR)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{4})" + + "([0-9]{14})" + + ")$", "g"), + false + ), + CY: new IbanSpecification( + "CY", 'Cyprus', + 28, "CY2!n3!n5!n16!c", + 24, "3!n5!n16!c", + new RegExp( + "^(?CY)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{3})" + + "(?[0-9]{5})" + + "([0-9a-zA-Z]{16})" + + ")$", "g"), + true + ), + CZ: new IbanSpecification( + "CZ", 'Czech Republic', + 24, "CZ2!n4!n6!n10!n\n", + 20, "4!n6!n10!n", + new RegExp( + "^(?CZ)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{4})" + + "([0-9]{6})" + + "([0-9]{10})" + + ")$", "g"), + true + ), + DE: new IbanSpecification( + "DE", 'Germany', + 22, "DE2!n8!n10!n\n", + 18, "8!n10!n", + new RegExp( + "^(?DE)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{8})" + + "([0-9]{10})" + + ")$", "g"), + true + ), + DJ: new IbanSpecification( + "DJ", 'Djibouti', + 27, "DJ2!n5!n5!n11!n2!n\n", + 23, "5!n5!n11!n2!n\n", + new RegExp( + "^(?DJ)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{5})" + + "(?[0-9]{5})" + + "([0-9]{11})" + + "([0-9]{2})" + + ")$", "g"), + false + ), + DK: new IbanSpecification( + "DK", 'Denmark', + 18, "DK2!n4!n9!n1!n", + 14, "4!n9!n1!n", + new RegExp( + "^(?DK)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{4})" + + "([0-9]{9})" + + "([0-9])" + + ")$", "g"), + true + ), + DO: new IbanSpecification( + "DO", 'Dominican Republic', + 28, "DO2!n4!c20!n", + 24, "4!c20!n", + new RegExp( + "^(?DO)" + + "(?[0-9]{2})" + + "(?" + + "(?[A-Z]{4})" + + "([0-9]{20})" + + ")$", "g"), + false + ), + EE: new IbanSpecification( + "EE", 'Estonia', + 20, "EE2!n2!n14!n", + 16, "2!n14!n", + new RegExp( + "^(?EE)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{2})" + + "([0-9]{14})" + + ")$", "g"), + true + ), + EG: Object.assign(new IbanSpecification( + "EG", 'Egypt', + 29, "EG2!n4!n4!n17!n", + 25, "4!n4!n17!n", + new RegExp( + "^(?EG)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{4})" + + "(?[0-9]{4})" + + "([0-9]{17})" + + ")$", "g"), + false + ), { + getFormattedIban(iban) { + return iban; + } + }), + ES: new IbanSpecification( + "ES", 'Spain', + 24, "4!n4!n1!n1!n10!n", + 20, "ES2!n4!n4!n1!n1!n10!n", + new RegExp( + "^(?ES)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{4})" + + "(?[0-9]{4})" + + "([0-9])" + + "([0-9])" + + "([0-9]{10})" + + ")$", "g"), + true + ), + FI: new IbanSpecification( + "FI", 'Finland', + 18, "3!n11!n", + 14, "FI2!n3!n11!n", + new RegExp( + "^(?FI)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{3})" + + "([0-9]{11})" + + ")$", "g"), + true + // FIXME: Includes AX + ), + FK: new IbanSpecification( + "FK", 'Falkland Islands', + 18, "2!a12!n", + 14, "FK2!n2!a12!n", + new RegExp( + "^(?FK)" + + "(?[0-9]{2})" + + "(?" + + "(?[A-Z]{1})" + + "([0-9]{12})" + + ")$", "g"), + false + ), + FO: new IbanSpecification( + "FO", 'Faroe Islands', + 18, "FO2!n4!n9!n1!n", + 14, "4!n9!n1!n", + new RegExp( + "^(?FO)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{4})" + + "([0-9]{9})" + + "([0-9])" + + ")$", "g"), + false + ), + FR: new IbanSpecification( + "FR", 'France', + 27, "FR2!n5!n5!n11!c2!n", + 23, "5!n5!n11!c2!n", + new RegExp( + "^(?FR)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{5})" + + "([0-9]{5})" + + "([0-9a-zA-Z]{11})" + + "([0-9]{2})" + + ")$", "g"), + true + // FIXME: Includes a ton of extra countries + ), + GB: new IbanSpecification( + "GB", 'United Kingdom', + 22, "GB2!n4!a6!n8!n", + 18, "4!a6!n8!n", + new RegExp( + "^(?GB)" + + "(?[0-9]{2})" + + "(?" + + "(?[A-Z]{4})" + + "(?[0-9]{6})" + + "([0-9]{8})" + + ")$", "g"), + true + // FIXME: Includes extra countries + ), + GE: new IbanSpecification( + "GE", 'Georgia', 22, "U02F16", + new RegExp("^GE[0-9]{2}([A-Z]{2})([0-9]{16})$", "g") + ), + GI: new IbanSpecification( + "GI", 'Gibraltar', 23, "U04A15", + new RegExp("^GI[0-9]{2}([A-Z]{4})([0-9a-zA-Z]{15})$", "g") + ), + GL: new IbanSpecification( + "GL", 'Greenland', 18, "F04F09F01", + new RegExp("^GL[0-9]{2}([0-9]{4})([0-9]{9})([0-9])$", "g") + ), + GR: new IbanSpecification( + "GR", 'Greece', 27, "F03F04A16", + new RegExp("^GR[0-9]{2}([0-9]{3})([0-9]{4})([0-9a-zA-Z]{16})$", "g") + ), + GT: new IbanSpecification( + "GT", 'Guatemala', 28, "A04A20", + new RegExp("^GT[0-9]{2}([0-9a-zA-Z]{4})([0-9a-zA-Z]{20})$", "g") + ), + HR: new IbanSpecification( + "HR", 'Croatia', 21, "F07F10", + new RegExp("^HR[0-9]{2}([0-9]{7})([0-9]{10})$", "g") + ), + HU: new IbanSpecification( + "HU", 'Hungary', 28, "F03F04F01F15F01", + new RegExp("^HU[0-9]{2}([0-9]{3})([0-9]{4})([0-9])([0-9]{15})([0-9])$", "g") + ), + IE: new IbanSpecification( + "IE", 'Ireland', 22, "U04F06F08", + new RegExp("^IE[0-9]{2}([A-Z]{7})([0-9]{6})([0-9]{8})$", "g") + ), + IL: new IbanSpecification( + "IL", 'Israel', 23, "F03F03F13", + new RegExp("^IL[0-9]{2}([0-9]{3})([0-9]{3})([0-9]{13})$", "g") + ), + //IQ: new IbanSpecification("IQ", 'Iraq', 23), + IS: new IbanSpecification( + "IS", 'Iceland', 26, "F04F02F06F10", + new RegExp("^IS[0-9]{2}([0-9]{4})([0-9]{2})([0-9]{6})([0-9]{10})$", "g") + ), + IT: new IbanSpecification( + "IT", 'Italy', 27, "U01F05F05A12", + new RegExp("^IT[0-9]{2}([A-Z])([0-9]{5})([0-9]{5})([0-9a-zA-Z]{12})$", "g") + ), + JO: new IbanSpecification( + "JO", 'Jordan', 30, "U04F04A18", + new RegExp("^JO[0-9]{2}([A-Z]{4})([0-9]{4})([0-9a-zA-Z]{18})$", "g") + ), + KW: new IbanSpecification( + "KW", 'Kuwait', 30, "U04A22", + new RegExp("^KW[0-9]{2}([A-Z]{4})([0-9a-zA-Z]{22})$", "g") + ), + KZ: new IbanSpecification( + "KZ", 'Kazakhstan', 20, "F03A13", + new RegExp("^KZ[0-9]{2}([0-9]{3})([0-9a-zA-Z]{13})$", "g") + ), + LB: new IbanSpecification( + "LB", 'Lebanon', 28, "F04A20", + new RegExp("^LB[0-9]{2}([0-9]{4})([0-9a-zA-Z]{20})$", "g") + ), + LC: new IbanSpecification( + "LC", 'Saint Lucia', 32, "U04A24", + new RegExp("^LC[0-9]{2}([A-Z]{4})([0-9a-zA-Z]{24})$", "g") + ), + LI: new IbanSpecification( + "LI", 'Liechtenstein', 21, "F05A12", + new RegExp("^LI[0-9]{2}([0-9]{5})([0-9a-zA-Z]{12})$", "g") + ), + LT: new IbanSpecification( + "LT", 'Lithuania', 20, "F05F11", + new RegExp("^LT[0-9]{2}([0-9]{5})([0-9]{11})$", "g") + ), + LU: new IbanSpecification( + "LU", 'Luxembourg', 20, "F03A13", + new RegExp("^LU[0-9]{2}([0-9]{3})([0-9a-zA-Z]{13})$", "g") + ), + LV: new IbanSpecification( + "LV", 'Latvia', 21, "U04A13", + new RegExp("^LV[0-9]{2}([A-Z]{4})([0-9a-zA-Z]{13})$", "g") + ), + //LY: new IbanSpecification("LY", 'Libya', 25), + MC: new IbanSpecification( + "MC", 'Monaco', 27, "F05F05A11F02", + new RegExp("^MC[0-9]{2}([0-9]{5})([0-9]{5})([0-9a-zA-Z]{11})([0-9]{2})$", "g") + ), + MD: new IbanSpecification( + "MD", 'Moldova', 24, "A02A18", + new RegExp("^MD[0-9]{2}([0-9a-zA-Z]{2})([0-9a-zA-Z]{18})$", "g") + ), + ME: new IbanSpecification( + "ME", 'Montenegro', 22, "F03F13F02", + new RegExp("^ME[0-9]{2}([0-9]{3})([0-9]{13})([0-9]{2})$", "g") + ), + MK: new IbanSpecification( + "MK", 'North Macedonia', 19, "F03A10F02", + new RegExp("^MK[0-9]{2}([0-9]{3})([0-9a-zA-Z]{10})([0-9]{2})$", "g") + ), + MR: new IbanSpecification( + "MR", 'Mauritania', 27, "F05F05F11F02", + new RegExp("^MR[0-9]{2}([0-9]{5})([0-9]{5})([0-9]{11})([0-9]{2})$", "g") + ), + MT: new IbanSpecification( + "MT", 'Malta', 31, "U04F05A18", + new RegExp("^MT[0-9]{2}([A-Z]{4})([0-9]{5})([0-9a-zA-Z]{18})$", "g") + ), + MU: new IbanSpecification( + "MU", 'Mauritius', 30, "U04F02F02F12F03U03", + new RegExp("^MU[0-9]{2}([A-Z]{4})([0-9]{2})([0-9]{2})([0-9]{12})([0-9]{3})([A-Z]{3})$", "g") + ), + NL: new IbanSpecification( + "NL", 'Netherlands', 18, "U04F10", + new RegExp("^NL[0-9]{2}([A-Z]{4})([0-9]{10})$", "g") + ), + NO: new IbanSpecification( + "NO", 'Norway', 15, "F04F06F01", + new RegExp("^NO[0-9]{2}([0-9]{4})([0-9]{6})([0-9])$", "g") + ), + PK: new IbanSpecification( + "PK", 'Pakistan', 24, "U04A16", + new RegExp("^PK[0-9]{2}([A-Z]{4})([0-9a-zA-Z]{16})$", "g") + ), + PL: new IbanSpecification( + "PL", 'Poland', 28, "F08F16", + new RegExp("^PL[0-9]{2}([0-9]{8})([0-9]{16})$", "g") + ), + PS: new IbanSpecification( + "PS", 'Palestine', 29, "U04A21", + new RegExp("^PS\"[0-9]{2}([A-Z]{4})([0-9a-zA-Z]{21})$", "g") + ), + PT: new IbanSpecification( + "PT", 'Portugal', 25, "F04F04F11F02", + new RegExp("^PT[0-9]{2}([0-9]{4})([0-9]{4})([0-9]{11})([0-9]{2})$", "g") + ), + QA: new IbanSpecification( + "QA", 'Qatar', 29, "U04A21", + new RegExp("^QA[0-9]{2}([A-Z]{4})([0-9a-zA-Z]{21})$", "g") + ), + RO: new IbanSpecification( + "RO", 'Romania', 24, "U04A16", + new RegExp("^RO[0-9]{2}([A-Z]{4})([0-9a-zA-Z]{16})$", "g") + ), + RS: new IbanSpecification( + "RS", 'Serbia', 22, "F03F13F02", + new RegExp("^RS[0-9]{2}([0-9]{3})([0-9]{13})([0-9]{2})$", "g") + ), + SA: new IbanSpecification( + "SA", 'Saudi Arabia', 24, "F02A18", + new RegExp("^SA[0-9]{2}([0-9]{2})([0-9a-zA-Z]{18})$", "g") + ), + SC: new IbanSpecification( + "SC", 'Seychelles', 31, "U04F02F02F16U03", + new RegExp("^SC[0-9]{2}([A-Z]{4})([0-9]{2})([0-9]{2})([0-9]{16})([A-Z]{3})$", "g") + ), + //SD: new IbanSpecification("SD", 'Sudan', 18), + SE: new IbanSpecification( + "SE", 'Sweden', 24, "F03F16F01", + new RegExp("^SE[0-9]{2}([0-9]{3})([0-9]{16})([0-9])$", "g") + ), + SI: new IbanSpecification( + "SI", 'Slovenia', 19, "F05F08F02", + new RegExp("^SI[0-9]{2}([0-9]{5})([0-9]{8})([0-9]{2})$", "g") + ), + SK: new IbanSpecification( + "SK", 'Slovakia', 24, "F04F06F10", + new RegExp("^SK[0-9]{2}([0-9]{4})([0-9]{6})([0-9]{10})$", "g") + ), + SM: new IbanSpecification( + "SM", 'San Marino', 27, "U01F05F05A12", + new RegExp("^SM[0-9]{2}([A-Z])([0-9]{5})([0-9]{5})([0-9a-zA-Z]{12})$", "g") + ), + //SO: new IbanSpecification("SO", 'Somalia', 23), + ST: new IbanSpecification( + "ST", 'São Tomé and Príncipe', 25, "F08F11F02", + new RegExp("^ST[0-9]{2}([0-9]{8})([0-9]{11})([0-9]{2})$", "g") + ), + //SV: new IbanSpecification("SV", 'El Salvador', 28), + TL: new IbanSpecification( + "TL", 'Timor-Leste', 23, "F03F14F02", + new RegExp("^TL[0-9]{2}([0-9]{3})([0-9]{14})([0-9]{2})$", "g") + ), + TN: new IbanSpecification( + "TN", 'Tunisia', 24, "F02F03F13F02", + new RegExp("^TN[0-9]{2}([0-9]{2})([0-9]{3})([0-9]{13})([0-9]{2})$", "g") + ), + TR: new IbanSpecification( + "TR", 'Turkey', 26, "F05A01A16", + new RegExp("^TR[0-9]{2}([0-9]{5})([0-9a-zA-Z])([0-9a-zA-Z]{16})$", "g") + ), + UA: new IbanSpecification( + "UA", 'Ukraine', 29, "F06A19", + new RegExp("^UA[0-9]{2}([0-9]{6})([0-9a-zA-Z]{19})$", "g") + ), + VA: new IbanSpecification( + "VA", 'Vatican City State\n', + 22, "VA2!n3!n15!n", + 18, "3!n15!n", + new RegExp( + "^(?VA)" + + "(?[0-9]{2})" + + "(?" + + "(?[A-Z]{3})" + + "([0-9]{15})" + + ")$", "g"), + false + // FIXME: Has empty data for SEPA !!! + ), + VG: new IbanSpecification( + "VG", 'Virgin Islands', + 24, "VG2!n4!a16!n", + 20, "4!a16!n", + new RegExp( + "^(?VG)" + + "(?[0-9]{2})" + + "(?" + + "(?[A-Z]{4})" + + "([0-9]{16})" + + ")$", "g"), + false + ), + XK: new IbanSpecification( + "XK", 'Kosovo', + 20, "XK2!n4!n10!n2!n", + 16, "4!n10!n2!n", + new RegExp( + "^(?XK)" + + "(?[0-9]{2})" + + "(?" + + "(?[0-9]{2})" + + "(?[0-9]{2})" + + "([0-9]{10})" + + "([0-9]{2})" + + ")$", "g"), + false + ), + YE: new IbanSpecification( + "YE", 'Yemen', + 30, "YE2!n4!a4!n18!c", + 26, "4!a4!n18!c", + new RegExp( + "^(?YE)" + + "(?[0-9]{2})" + + "(?" + + "(?[A-Z]{4})" + + "(?[0-9]{4})" + + "([0-9a-zA-Z]{18})" + + ")$", "g"), + false + ), +}; + +console.log(countriesIbanSpecs); diff --git a/templates/applets/iban-generator.jinja b/templates/applets/iban-generator.jinja new file mode 100644 index 0000000..e69de29 diff --git a/templates/applets/ico-maker.jinja b/templates/applets/ico-maker.jinja index b17b0a2..d5401a5 100644 --- a/templates/applets/ico-maker.jinja +++ b/templates/applets/ico-maker.jinja @@ -25,7 +25,9 @@ {{ l10n("enable.binary.blobs", applet_data.id, user_lang) }}: - Enables upload and inclusion in final .ico file. + + {{ l10n("enable.binary.blobs.subtext", applet_data.id, user_lang) }} +