diff --git "a/m\303\251li-m\303\251lo/2024-10-datatable-utilities/css/wb-pspc-datatable-utility.css" "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/css/wb-pspc-datatable-utility.css" new file mode 100644 index 000000000..57c8b3523 --- /dev/null +++ "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/css/wb-pspc-datatable-utility.css" @@ -0,0 +1,3 @@ +.wb-col-sum { + font-weight: bold; +} \ No newline at end of file diff --git "a/m\303\251li-m\303\251lo/2024-10-datatable-utilities/data/datatable-utility.json" "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/data/datatable-utility.json" new file mode 100644 index 000000000..19530fab2 --- /dev/null +++ "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/data/datatable-utility.json" @@ -0,0 +1,328 @@ +{ + "data": [ + { + "DepartmentEN": "Agriculture and Agri-Food Canada", + "DepartmentFR": "Agriculture et Agroalimentaire Canada", + "ContactEmail": "steveb@bozzit.com", + "Custom study titleEN": "2022 Survey on Consumer Perceptions of Food, Wave VI", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleFR": "Sondage de 2022 sur les perceptions des consommateurs à l’égard des aliments, vague VI", + "Registration number": "POR 124-22", + "Supplier": "Ipsos Limited Partnership", + "Contract value": "62698.95" + }, + { + "DepartmentEN": "Agriculture and Agri-Food Canada", + "DepartmentFR": "Agriculture et Agroalimentaire Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "2022 to 2023 Qualitative Research on Consumer Perceptions of Sustainability-Oriented Assurance Systems", + "Custom study titleFR": "Recherche qualitative sur les perceptions des consommateurs en matière de systèmes d'assurance alimentaire axés sur la durabilité 2022 à 2023", + "Registration number": "POR 084-22", + "Supplier": "Earnscliffe Strategy Group GP", + "Contract value": "74994.71" + }, + { + "DepartmentEN": "Agriculture and Agri-Food Canada", + "DepartmentFR": "Agriculture et Agroalimentaire Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Creative Concepts in Support of the AgriCommunication Campaign", + "Custom study titleFR": "Concepts créatifs à l'appui de la campagne AgriCommunication", + "Registration number": "POR 085-21", + "Supplier": "Narrative Research Inc.", + "Contract value": "17780.55" + }, + { + "DepartmentEN": "Canada Energy Regulator", + "DepartmentFR": "Régie de l’énergie du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Canada Energy Regulator Annual Public Opinion Research Measures", + "Custom study titleFR": "Recherche sur l'opinion publique sur les mesures de la Régie de l'énergie du Canada, rapport annuel", + "Registration number": "POR 120-22", + "Supplier": "Environics Research Group Limited", + "Contract value": "157646.30" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "2022 to 2023 Annual Corporate Research", + "Custom study titleFR": "Recherche d'entreprise annuelle de 2022 à 2023", + "Registration number": "POR 105-22", + "Supplier": "Quorus Consulting Group Inc.", + "Contract value": "174047.12" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "2022 to 2023 Canada Child Benefit, Satisfaction Survey", + "Custom study titleFR": "Allocation canadienne pour enfants, sondage sur la satisfaction 2022 à 2023", + "Registration number": "POR 113-22", + "Supplier": "Nanos Research Corporation", + "Contract value": "124912.46" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "2022 to 2023 Canada Revenue Agency Annual Corporate Research, Qualitative Component", + "Custom study titleFR": "Recherche d'entreprise annuelle de l'Agence du revenu du Canada 2022 à 2023, constatations qualitatives", + "Registration number": "POR 147-22", + "Supplier": "Phoenix SPI", + "Contract value": "169403.95" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "2022 to 2023 Canada Revenue Agency Benefits and Credits Campaign, Advertising Campaign Evaluation Tool", + "Custom study titleFR": "Campagne relative aux prestations et crédits de l'Agence du revenu du Canada 2022 à 2023, Outil d’évaluation de campagnes publicitaires", + "Registration number": "POR 150-22", + "Supplier": "Ipsos Limited Partnership", + "Contract value": "30284.00" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "2022 to 2023 ePayroll Survey", + "Custom study titleFR": "Sondage de 2022 à 2023 sur la paie électronique", + "Registration number": "POR 135-22", + "Supplier": "Nanos Research Corporation", + "Contract value": "203932.66" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Accessibility Testing of Canada Revenue Agency's Forms and Guides", + "Custom study titleFR": "Mise à l’essai de l’accessibilité des formulaires et des guides de l'Agence du revenu du Canada", + "Registration number": "POR 016-22", + "Supplier": "Quorus Consulting Group Inc.", + "Contract value": "88818.00" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Digital Acceleration Research, Phase 2", + "Custom study titleFR": "Recherche sur l'accélération numérique, phase 2", + "Registration number": "POR 122-21", + "Supplier": "Phoenix SPI", + "Contract value": "7130.68" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Measuring Agency Strategic Performance Framework Outcomes 2022 to 2023", + "Custom study titleFR": "Mesure des résultats du cadre de performance stratégique de l'Agence 2022 à 2023", + "Registration number": "POR 121-22", + "Supplier": "Ipsos Limited Partnership", + "Contract value": "112265.16" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Official Language Minority Community Experiences with Canada Revenue Agency Programs and Services", + "Custom study titleFR": "Expériences des communautés de langue officielle en situation minoritaire par rapport aux programmes et services de l'Agence du revenu du Canada", + "Registration number": "POR 151-22", + "Supplier": "Nanos Research Corporation", + "Contract value": "112858.75" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Qualitative Research on Canada Revenue Agency's Secure Portals With Tax Intermediaries", + "Custom study titleFR": "Recherche qualitative sur les portails sécurisés de l'Agence du revenu du Canada avec des intermédiaires fiscaux", + "Registration number": "POR 032-22", + "Supplier": "Sage Research Corporation", + "Contract value": "62381.65" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Qualitative Research on First-Time Tax Filing With Newcomers to Canada", + "Custom study titleFR": "Recherche qualitative sur la première déclaration de revenus auprès des nouveaux arrivants au Canada", + "Registration number": "POR 132-22", + "Supplier": "Environics Research Group Limited", + "Contract value": "57969.00" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Qualitative Research on Scientific Research and Experimental Development Client Portal", + "Custom study titleFR": "Recherche qualitative sur le portail client de la recherche scientifique et du développement expérimental", + "Registration number": "POR 065-22", + "Supplier": "Environics Research Group Limited", + "Contract value": "71048.75" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Qualitative Research on the Perceptions of Tax Obligations and Related Non-compliance in the Real Estate Sector", + "Custom study titleFR": "Recherche qualitative sur la perception des obligations fiscales et l’inobservation dans le secteur des biens immobiliers", + "Registration number": "POR 109-22", + "Supplier": "Gregg, Kelly, Sullivan & Woolstencroft: The Strategic Counsel", + "Contract value": "93899.61" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Taxpayer Feedback on Crypto Tax Knowledge and Obligations", + "Custom study titleFR": "Rétroaction des contribuables sur la connaissance et les obligations fiscales liées aux cryptomonnaies", + "Registration number": "POR 137-22", + "Supplier": "Ekos Research Associates Inc.", + "Contract value": "113251.43" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Underground Economy in Canada in Today’s Post-Pandemic Environment", + "Custom study titleFR": "L’économie souterraine au Canada dans l’environnement postpandémique d’aujourd’hui", + "Registration number": "POR 082-22", + "Supplier": "Gregg, Kelly, Sullivan & Woolstencroft: The Strategic Counsel", + "Contract value": "122345.10" + }, + { + "DepartmentEN": "Canada Revenue Agency", + "DepartmentFR": "Agence du revenu du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Voluntary Disclosures Program Research", + "Custom study titleFR": "Recherche sur le Programme des divulgations volontaires", + "Registration number": "POR 123-22", + "Supplier": "Ipsos Limited Partnership", + "Contract value": "90493.23" + }, + { + "DepartmentEN": "Canada School of Public Service", + "DepartmentFR": "École de la fonction publique du Canada", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Gathering Training, Learning and Developmental Needs of Federal Public Servants", + "Custom study titleFR": "Regroupement des besoins de formation, d’apprentissage et de perfectionnement des fonctionnaires fédéraux", + "Registration number": "POR 110-22", + "Supplier": "Nanos Research Corporation", + "Contract value": "222587.40" + }, + { + "DepartmentEN": "Canadian Food Inspection Agency", + "DepartmentFR": "Agence canadienne d'inspection des aliments", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Canadian Food Inspection Agency, Compliance Promotion Qualitative Public Opinion Research, Data Analysis and Statistical Review", + "Custom study titleFR": "Recherche qualitative de l'opinion publique, analyse des données et revue statistique sur la promotion de la conformité par l'Agence canadienne d'inspection des aliments", + "Registration number": "POR 125-22", + "Supplier": "Patterson, Langlois Consultants", + "Contract value": "28035.30" + }, + { + "DepartmentEN": "Canadian Food Inspection Agency", + "DepartmentFR": "Agence canadienne d'inspection des aliments", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Public Opinion Research with Canadians on Pet Trade 2022 to 2023", + "Custom study titleFR": "Recherche sur l'opinion publique auprès des Canadiens sur le commerce des animaux de compagnie 2022 à 2023", + "Registration number": "POR 091-22", + "Supplier": "Ekos Research Associates Inc.", + "Contract value": "98084.00" + }, + { + "DepartmentEN": "Canadian Food Inspection Agency", + "DepartmentFR": "Agence canadienne d'inspection des aliments", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Public Opinion Research with Canadians to Support Communications on African Swine Fever 2022 to 2023", + "Custom study titleFR": "Recherche sur l’opinion publique auprès des Canadiens pour appuyer les communications sur la peste porcine africaine 2022 à 2023", + "Registration number": "POR 086-22", + "Supplier": "Quorus Consulting Group Inc.", + "Contract value": "104928.14" + }, + { + "DepartmentEN": "Canadian Food Inspection Agency", + "DepartmentFR": "Agence canadienne d'inspection des aliments", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Public Opinion Research with Consumers and Regulated Parties for the Canadian Food Inspection Agency Annual Reputation Survey 2022 to 2023", + "Custom study titleFR": "Recherche sur l'opinion publique auprès des consommateurs et des parties réglementées pour le sondage annuel sur la réputation de l'Agence canadienne d'inspection des aliments 2022 à 2023", + "Registration number": "POR 095-22", + "Supplier": "Pollara", + "Contract value": "194738.55" + }, + { + "DepartmentEN": "Canadian Food Inspection Agency", + "DepartmentFR": "Agence canadienne d'inspection des aliments", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "Public Opinion Research with Food Businesses to Support Compliance with Food Safety Regulations 2022 to 2023", + "Custom study titleFR": "Recherche sur l’opinion publique auprès des entreprises du secteur alimentaire pour appuyer la conformité au Règlement sur la salubrité des aliments au Canada de 2022 à 2023", + "Registration number": "POR 087-22", + "Supplier": "Pollara", + "Contract value": "194908.05" + }, + { + "DepartmentEN": "Canadian Heritage", + "DepartmentFR": "Patrimoine canadien", + "ContactEmail": "Steve.Bourgeois@tpsgc-pwgsc.gc.ca", + "Custom study titleEN-url": "https://www.bozzit.com", + "Custom study titleFR-url": "https://www.bozzit.com", + "Custom study titleEN": "2023 Status of the High Performance Athlete Survey", + "Custom study titleFR": "Étude sur la situation de l’athlète de haut niveau en 2023", + "Registration number": "POR 108-22", + "Supplier": "Ekos Research Associates Inc.", + "Contract value": "80184.80" + } + ] +} \ No newline at end of file diff --git "a/m\303\251li-m\303\251lo/2024-10-datatable-utilities/datatable-utilities-doc-en.html" "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/datatable-utilities-doc-en.html" new file mode 100644 index 000000000..719b5acd1 --- /dev/null +++ "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/datatable-utilities-doc-en.html" @@ -0,0 +1,122 @@ +--- +title: DataTable Utilities - Documentation +language: en +description: List of utilities to manipulate DataTables tables. +tag: DataTable +altLangPage: datatable-utilities-doc-fr.html +dateModified: 2024-11-01 +--- + +

DataTable Utilities, includes Data Manipulation Classes for emails, Urls and Money. Also Includes Datatable Footer Totals.

+

Having this plugin intergrated will make the transition to Canada.ca easier as these features are already in use on https://www.tpsgc-pwgsc.gc.ca, currently some of the pages that make use of this plugin and other pages that make use of Other Javascripts are just pointed to from Canada.ca

+

The Public at Large, the plugin makes DataTables more user friendly with Clickable Links, and they are used to this functionality our PRE Canada.ca Pages.

+ +

GCWeb implementation plan

+ +{% assign implPlan = site.pages | where: "output", "false" | where: "componentName", "2024-10-datatable-utilities" | first %} + + + +

Todo and for future consideration

+ + +

Sponsor: PSPC - {{ implPlan.sponsor }}

+ +
+ +

Working examples

+ + +

Configuration options

+ +

Enable the plugin for the targeted table by adding the CSS class wb-tables-utility to the table. Add the attribute data-wb-tables-utility to configure the options.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (column-name, column-name-url) + + + + + + +
OptionDescriptionHow to configureValues
debugPrint Debug messages to the consoledata-wb-tables-utility="{"debug":true}" +
+
false (default)
+
Suppress Printing of debug messages.
+
true
+
Show debug messages to the console.
+
+
filteredsumColumn Totals to reflect Filtered DataTable Datadata-wb-tables-utility="{"filteredsum":false}" +
+
true (default):
+
As Data is Filtered adjust Totals to match filtered Data.
+
false:
+
Show Grand Total Regardless of data filtered.
+
+
wb-col-sumWhen this class is applied to a column, a column footer total is calculated"columnDefs": [{ "className": "wb-col-sum", "targets": [3]}] + wb-col-sum +
wb-col-moneyWhen this class is applied to a column, the data is manipulated to reflect currency with $"columnDefs": [{ "className": "wb-col-money", "targets": [3]}] + wb-col-money +
wb-col-cur-thousandWhen this class is applied to a column, the data is manipulated to reflect currency without $"columnDefs": [{ "className": "wb-col-cur-thousand", "targets": [3]}] + wb-col-cur-thousand +
wb-col-mailtoWhen this class is applied to a column, the data is searched with an email partern, and when found are wrapped with <a href="mailto:...">...</a> to make it a clikcable link."columnDefs": [{ "className": "wb-col-mailto", "targets": [3]}] + wb-col-mailto +
wb-col-urlWhen this class is applied to a column, dataTable Utilites looks for a second column with the same name as this column that is ending with -url + and the 2 are stiched into a single column wrapped with <a href="column-name-url">column-name</a> to make it a clikcable link."columnDefs": [{ "className": "wb-col-url", "targets": [3]}] + wb-col-url +
\ No newline at end of file diff --git "a/m\303\251li-m\303\251lo/2024-10-datatable-utilities/datatable-utilities-doc-fr.html" "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/datatable-utilities-doc-fr.html" new file mode 100644 index 000000000..f0821b9af --- /dev/null +++ "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/datatable-utilities-doc-fr.html" @@ -0,0 +1,121 @@ +--- +title: Utilitaires DataTables - Documentation +language: fr +description: Liste d'utilitaires permettant la modification de tableaux DataTables. +tag: DataTable +altLangPage: datatable-utilities-doc-fr.html +dateModified: 2024-11-01 +--- +

Les utilitaires de table de données incluent des classes de manipulation de données pour les courriels, les URL et l’argent. Ils comprennent également des totaux dans le pied de page de la table de données.

+

L'intégration de ce plugin facilitera la transition vers Canada.ca, car ces fonctionnalités sont déjà mises en œuvre sur https://www.tpsgc-pwgsc.gc.ca. Actuellement, certaines pages utilisant ce plugiciel, ainsi que d'autres pages qui utilisent différents JavaScripts, sont simplement liées directement de Canada.ca.

+

Pour le grand public, le plugiciel rend les tables de données plus conviviales en fournissant des liens cliquables, et les utilisateurs sont déjà habitués à cette fonctionnalité sur nos anciennes pages Canada.ca.

+ +

Plan de mise en œuvre de GCWeb

+ +{% assign implPlan = site.pages | where: "output", "false" | where: "componentName", "2024-10-datatable-utilities" | first %} + + + +

Todo and for future consideration

+ + +

Commanditaire : SPAC - {{ implPlan.sponsor }}

+ +
+ +

Exemples pratiques

+ + +

Options de configuration

+ +

Activez le plugiciel pour le tableau ciblé en ajoutant la classe CSS wb-tables-utility au tableau. Ajoutez l'attribut data-wb-tables-utility pour configurer les options.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (column-name, column-name-url) + + + + + + +
OptionDescriptionHow to configureValues
debugPrint Debug messages to the consoledata-wb-tables-utility="{&quot;debug&quot;:true}" +
+
false (default)
+
Suppress Printing of debug messages.
+
true
+
Show debug messages to the console.
+
+
filteredsumColumn Totals to reflect Filtered DataTable Datadata-wb-tables-utility="{&quot;filteredsum&quot;:false}" +
+
true (default):
+
As Data is Filtered adjust Totals to match filtered Data.
+
false:
+
Show Grand Total Regardless of data filtered.
+
+
wb-col-sumWhen this class is applied to a column, a column footer total is calculated"columnDefs": [{ "className": "wb-col-sum", "targets": [3]}] + wb-col-sum +
wb-col-moneyWhen this class is applied to a column, the data is manipulated to reflect currency with $"columnDefs": [{ "className": "wb-col-money", "targets": [3]}] + wb-col-money +
wb-col-cur-thousandWhen this class is applied to a column, the data is manipulated to reflect currency without $"columnDefs": [{ "className": "wb-col-cur-thousand", "targets": [3]}] + wb-col-cur-thousand +
wb-col-mailtoWhen this class is applied to a column, the data is searched with an email partern, and when found are wrapped with <a href="mailto:...">...</a> to make it a clikcable link."columnDefs": [{ "className": "wb-col-mailto", "targets": [3]}] + wb-col-mailto +
wb-col-urlWhen this class is applied to a column, dataTable Utilites looks for a second column with the same name as this column that is ending with -url + and the 2 are stiched into a single column wrapped with <a href="column-name-url">column-name</a> to make it a clikcable link."columnDefs": [{ "className": "wb-col-url", "targets": [3]}] + wb-col-url +
\ No newline at end of file diff --git "a/m\303\251li-m\303\251lo/2024-10-datatable-utilities/index-en.html" "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/index-en.html" new file mode 100644 index 000000000..62f714e2f --- /dev/null +++ "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/index-en.html" @@ -0,0 +1,292 @@ +--- +title: DataTable Utilities +dateModified: 2024-10-31 +description: "Utilities that allow Columns to be MONEY Formatted, Emails wrapped with mailto, url's to be clickable and Footer totals that can be affected by filtered Data Or not." +lang: en +altLangPage: "index-fr.html" +script: [ "js/wb-pspc-datatable-utility.js" ] +css: [ "css/wb-pspc-datatable-utility.css"] +--- + +
+ +

Documentation

+ +

On this page

+ + +

Control Table with Raw Data

+ + + + + + + + + + + + + +
+ Table 1: Raw Data +
DepartmentContact EmailCustom studyCustom study URLReg#Contract value
+ +

Column Data Manipulation Example 1

+ + + +
+    <table class="wb-tables table table-striped table-hover table-condensed small wb-tables-utility" id="t2"
+            data-wb-tables='{ "ajax":"data/datatable-utility.json",
+                            "columns": [{ "data": "DepartmentEN" },
+                                        { "data": "ContactEmail" },
+                                        { "data": "Custom study titleEN" },
+                                        { "data": "Registration number" },
+                                        { "data": "Contract value" }],
+                                    "columnDefs": [{ "className": "text-left", "targets": [0]},
+                                            { "className": "text-left wb-col-mailto", "targets": [1] },
+                                            { "className": "text-left wb-col-url", "targets": [2] },
+                                            { "className": "text-left", "targets": [3] },
+                                            { "className": "text-right wb-col-money", "targets": [4] }],
+                                                         "lengthMenu": [ [5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"] ]}'>
+
+ +
+ + + + + + + + + + + +
+ Table 2: Example of JSON Data Manipulation +
DepartmentContact EmailCustom studyReg#Contract value
+
+ +

Column Data Manipulation Example 2

+ +

.wb-col-cur-thousand Format numbers with thousands separator with 2 decimals.

+ +
+    <table class="wb-tables table table-striped table-hover table-condensed small wb-tables-utility" id="t3"
+            data-wb-tables='{ "ajax":"data/datatable-utility.json",
+                            "columns": [{ "data": "DepartmentEN" },
+                                        { "data": "ContactEmail" },
+                                        { "data": "Custom study titleEN" },
+                                        { "data": "Registration number" },
+                                        { "data": "Contract value" }],
+                                    "columnDefs": [{ "className": "text-left", "targets": [0]},
+                                            { "className": "text-left", "targets": [1] },
+                                            { "className": "text-left", "targets": [2] },
+                                            { "className": "text-left", "targets": [3] },
+                                            { "className": "text-right wb-col-cur-thousand", "targets": [4] }],
+                                                         "lengthMenu": [ [5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"] ]}'>
+
+ +
+ + + + + + + + + + + +
+ Table 3: Second Example of JSON Data Manipulation +
DepartmentContact EmailCustom studyReg#Contract value
+
+ +

Table Footer With Static Totals

+ +

.wb-col-sum class on the column to perform column Total

+

Add a Placehoder <tfoot> at the bottom of the Table.

+ +
+        <tfoot>
+        <tr class="active">
+        <th colspan="4">Total</th>
+        <td>&nbsp;</td>
+        </tr>
+        </tfoot>
+
+ +

Code

+

Pass false via filteredsum to the plugin data-wb-tables-utility="{"filteredsum":false}" as the default is true

+ +
+    <table class="wb-tables table table-striped table-hover table-condensed small wb-tables-utility" id="t4"
+    data-wb-tables-utility="{"filteredsum":false}"
+            data-wb-tables='{ "ajax":"data/datatable-utility.json",
+                            "columns": [{ "data": "DepartmentEN" },
+                                        { "data": "ContactEmail" },
+                                        { "data": "Custom study titleEN" },
+                                        { "data": "Registration number" },
+                                        { "data": "Contract value" }],
+                                    "columnDefs": [{ "className": "text-left", "targets": [0]},
+                                            { "className": "text-left wb-col-mailto", "targets": [1] },
+                                            { "className": "text-left wb-col-url", "targets": [2] },
+                                            { "className": "text-left", "targets": [3] },
+                                            { "className": "text-right wb-col-sum wb-col-money", "targets": [4] }],
+                                                "lengthMenu": [ [5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"] ]}'>
+
+ +
+ + + + + + + + + + + + + + + + + +
+ Table 4: Static Totals in Table Footer Example +
DepartmentContact EmailCustom studyReg#Contract value
Total 
+
+ +

Table Footer With Dynamic Totals updated when Filtered

+ +

.wb-col-sum class on the column to perform column Total

+

Add a Placehoder <tfoot> at the bottom of the Table.

+ +
+        <tfoot>
+            <tr class="active">
+                <th colspan="4">Total</th>
+                <td>&nbsp;</td>
+            </tr>
+        </tfoot>
+
+ +

Code

+ +
+    <table class="wb-tables table table-striped table-hover table-condensed small wb-tables-utility" id="t5"
+            data-wb-tables='{ "ajax":"data/datatable-utility.json",
+                            "columns": [{ "data": "DepartmentEN" },
+                                        { "data": "ContactEmail" },
+                                        { "data": "Custom study titleEN" },
+                                        { "data": "Registration number" },
+                                        { "data": "Contract value" }],
+                                    "columnDefs": [{ "className": "text-left", "targets": [0]},
+                                            { "className": "text-left wb-col-mailto", "targets": [1] },
+                                            { "className": "text-left wb-col-url", "targets": [2] },
+                                            { "className": "text-left", "targets": [3] },
+                                            { "className": "text-right wb-col-sum wb-col-money", "targets": [4] }],
+                                                "lengthMenu": [ [5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"] ]}'>
+
+ +
+ + + + + + + + + + + + + + + + + +
+ Table 5: Dynamic Totals in Table Footer Example +
DepartmentContact EmailCustom studyReg#Contract value
Total 
+
\ No newline at end of file diff --git "a/m\303\251li-m\303\251lo/2024-10-datatable-utilities/index-fr.html" "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/index-fr.html" new file mode 100644 index 000000000..db8801d63 --- /dev/null +++ "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/index-fr.html" @@ -0,0 +1,293 @@ +--- +title: Utilitaire DataTable +dateModified: 2024-10-31 +description: "Utilities that allow Columns to be MONEY Formatted, Emails wrapped with mailto, url's to be clickable and Footer totals that can be affected by filtered Data Or not." +lang: fr +altLangPage: "index-en.html" +script: [ "js/wb-pspc-datatable-utility.js" ] +css: [ "css/wb-pspc-datatable-utility.css" ] +--- + +
+ +

Documentation

+ +

Sur cette page

+ + +

Table de contrôle avec données brute

+ + + + + + + + + + + + + +
+ Tableau 1 : données brute +
MinistèreCourrielTitre de l’étude multi-intérêtsURL de l’étude multi-intérêtsReg#Valeur des contrats
+ +

Exemple 1 de manipulation des données de colonne

+ + + +
+    <table class="wb-tables table table-striped table-hover table-condensed small wb-tables-utility" id="t2"
+            data-wb-tables='{ "ajax":"data/datatable-utility.json",
+                            "columns": [{ "data": "DepartmentFR" },
+                                        { "data": "ContactEmail" },
+                                        { "data": "Custom study titleFR" },
+                                        { "data": "Registration number" },
+                                        { "data": "Contract value" }],
+                                    "columnDefs": [{ "className": "text-left", "targets": [0]},
+                                            { "className": "text-left wb-col-mailto", "targets": [1] },
+                                            { "className": "text-left wb-col-url", "targets": [2] },
+                                            { "className": "text-left", "targets": [3] },
+                                            { "className": "text-right wb-col-money", "targets": [4] }],
+                                                "lengthMenu": [ [5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"] ]}'>
+
+ +
+ + + + + + + + + + + +
+ Tableau 2 : Exemple de manipulation des données JSON +
MinistèreCourrielTitre de l’étude multi-intérêtsReg#Valeur des contrats
+
+ +

Exemple 2 de manipulation des données de colonne

+ +

.wb-col-cur-thousand Formater les nombres en tant que montant d'argent sans le signe $.

+ +
+    <table class="wb-tables table table-striped table-hover table-condensed small wb-tables-utility" id="t3"
+            data-wb-tables='{ "ajax":"data/datatable-utility.json",
+                            "columns": [{ "data": "DepartmentFR" },
+                                        { "data": "ContactEmail" },
+                                        { "data": "Custom study titleFR" },
+                                        { "data": "Registration number" },
+                                        { "data": "Contract value" }],
+                                    "columnDefs": [{ "className": "text-left", "targets": [0]},
+                                            { "className": "text-left wb-col-mailto", "targets": [1] },
+                                            { "className": "text-left wb-col-url", "targets": [2] },
+                                            { "className": "text-left", "targets": [3] },
+                                            { "className": "text-right wb-col-money", "targets": [4] }],
+                                                "lengthMenu": [ [5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"] ]}'>
+
+ +
+ + + + + + + + + + + +
+ Tableau 3 : Deuxième exemple de manipulation des données JSON +
MinistèreCourrielTitre de l’étude multi-intérêtsReg#Valeur des contrats
+
+ +

Pied de page de table avec totaux statiques

+ +

.wb-col-sum classe sur la colonne pour effectuer le total de la colonne.

+

Ajouter un espace réservé <tfoot> en bas de la table.

+ +
+    <tfoot>
+        <tr class="active">
+            <th colspan="4">Total</th>
+            <td>&nbsp;</td>
+        </tr>
+    </tfoot>
+
+ +

Code

+ +

Définissez le paramètre filteredsum a « false » dans le plugiciel data-wb-tables-utility="{\"filteredsum\":false}", car la valeur par défaut est « true ».

+ +
+    <table class="wb-tables table table-striped table-hover table-condensed small wb-tables-utility" id="t4"
+            data-wb-tables-utility="{"filteredsum":false}"
+            data-wb-tables='{ "ajax":"data/datatable-utility.json",
+                            "columns": [{ "data": "DepartmentFR" },
+                                        { "data": "ContactEmail" },
+                                        { "data": "Custom study titleFR" },
+                                        { "data": "Registration number" },
+                                        { "data": "Contract value" }],
+                                    "columnDefs": [{ "className": "text-left", "targets": [0]},
+                                            { "className": "text-left wb-col-mailto", "targets": [1] },
+                                            { "className": "text-left wb-col-url", "targets": [2] },
+                                            { "className": "text-left", "targets": [3] },
+                                            { "className": "text-right wb-col-sum wb-col-money", "targets": [4] }],
+                                                "lengthMenu": [ [5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"] ]}'>
+
+ +
+ + + + + + + + + + + + + + + + + +
+ Tableau 4 : Exemple de totaux statiques dans le pied de page de table +
MinistèreCourrielTitre de l’étude multi-intérêtsReg#Valeur des contrats
Total 
+
+ +

Pied de page de table avec totaux dynamiques mis à jour lors du filtrage

+ +

.wb-col-sum classe sur la colonne pour effectuer le total de la colonne.

+

Ajouter un espace réservé <tfoot> en bas de la table.

+ +
+    <tfoot>
+        <tr class="active">
+            <th colspan="4">Total</th>
+            <td>&nbsp;</td>
+        </tr>
+    </tfoot>
+
+ +

Code

+ +
+    <table class="wb-tables table table-striped table-hover table-condensed small wb-tables-utility" id="t5"
+            data-wb-tables='{ "ajax":"data/datatable-utility.json",
+                            "columns": [{ "data": "DepartmentFR" },
+                                        { "data": "ContactEmail" },
+                                        { "data": "Custom study titleFR" },
+                                        { "data": "Registration number" },
+                                        { "data": "Contract value" }],
+                                    "columnDefs": [{ "className": "text-left", "targets": [0]},
+                                            { "className": "text-left wb-col-mailto", "targets": [1] },
+                                            { "className": "text-left wb-col-url", "targets": [2] },
+                                            { "className": "text-left", "targets": [3] },
+                                            { "className": "text-right wb-col-sum wb-col-money", "targets": [4] }],
+                                                "lengthMenu": [ [5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"] ]}'>
+
+ +
+ + + + + + + + + + + + + + + + + +
+ Table 5 : Exemple de totaux dynamiques dans le pied de page +
MinistèreCourrielTitre de l’étude multi-intérêtsReg#Valeur des contrats
Total 
+
\ No newline at end of file diff --git "a/m\303\251li-m\303\251lo/2024-10-datatable-utilities/js/wb-pspc-datatable-utility.js" "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/js/wb-pspc-datatable-utility.js" new file mode 100644 index 000000000..9a74790d5 --- /dev/null +++ "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/js/wb-pspc-datatable-utility.js" @@ -0,0 +1,474 @@ +/******************************************************************************************** + * + * Program: Wet-Boew Plugin that will add Column Totals to the Table's element + * Additionally this plugin can format data that is loaded via AJAX, such as Money + * + * Author: Steve Bourgeois + * + * + * + * Version History: 1.1.1 + * Implement Wet-Boew Team recomendations Post Pull Request + * 1. Suggestion: create a separate documentation page for all the options instead of having them in the JS file + * 2. Please add an implementation plan item: "Produce accessibility conformance report" + * 3. I don't see a working example for the following option: wb-col-cur-thousand. + * + * Version History: 1.1.0 + * Implement Wet-Boew Team recomendations + * 1. Remove formatting on Totals in favor of css + * 2. Change Init Event to a single function instead + * 3. French Translation of Examples Page + * + * Version History: 1.0.4 + * Footercallback Applied to ALL wb-tables, added code to check the current Table for its Settings + * Footer Total in French displayed as NaN + * + * Fix for wb-col-mailto not Working + * + * Version History: 1.0.2 + * Small Fix that has to do with Assigning values to unintialized Variables + * + * 1.0.1 + * Small Fix that has to do with Assigning values to unintialized Variables + * + * 1.0.0 + * Initial Release + * + * Sample Usage: add class wb-tables-utility to your wb-tables section + * + *
+ * + * Paramaters: filteredsum Total of Filtered Results Only or All if nothing was filtered + * Default Value: true + * + * wb-col-sum Class added to the columnDefs option of data-wb-tables to let the plugin know that this column needs to be totaled + * + * Formatting Options: wb-col-money Turns raw numbers such as 123987.10 to Localized Money $123,987.10 (en) 123 987,10 $ (fr) + * + * wb-col-mailto Scan for email addresses in column and add the + { + i18n[key] = data.pluginlabels[0][key]; + }); + } + + debugMsg('PSPC: wb-pspc-datatable-utility plugin Version 1.1.1 Initialized'); + debugMsg(data); + + } + + function toFrenchMoney(amount, noDecimals) + { + if (arguments.length == 1) // Means second parameter is not passed + { + noDecimals = 2; + } + return intVal(amount).toFixed(noDecimals).replace(/\d(?=(\d{3})+\.)/g, '$& ').replace(/\./, ',') + ' $' + } + + function toEnglishMoney(amount, noDecimals) + { + if (arguments.length == 1) // Means second parameter is not passed + { + noDecimals = 2; + } + return '$' + intVal(amount).toFixed(noDecimals).replace(/\d(?=(\d{3})+\.)/g, '$&,') + } + + var intVal = function (i) + { + + if (typeof i === 'string' && wb.lang == 'fr') + { + i = i.replace(/[,]/g, '.'); + } + + return typeof i === 'string' ? i.replace(/[\$,\s%]/g, '') * 1 : + typeof i === 'number' ? + i : 0; + }; + + /** + * This applies to all wb-tables, so if the plugin is initialized + **/ + + if (window["wb-tables"]) + { + console.error("Can not initialize wb-table global settings as it is already define."); + } + else + { + window["wb-tables"] = { + footerCallback: function (tfoot, aData, start, end, display) + { + /* Only do the footerCallback if the wb-tables has the wb-tables-utility class */ + + if (!$(this).hasClass("wb-tables-utility")) + { + return; + } + + var data = $(this).data('wb-tables-utility'); + + debugMsg('wb-datatable-utility: footerCallback Executed'); + + var api = this.api(); + + var searchApplied = { search: 'applied' }; + + if (typeof (data) !== "undefined") + { + if (data && !data.filteredsum) + { + searchApplied = {}; + } + } + + api.columns('.wb-col-sum', {}).every(function (index) + { + var GrandTotal = api.column(index, searchApplied).data().reduce(function (a, b) + { + return intVal(a) + intVal(b); + }, 0); + + var formatedGrandTotal = 0; + + if ($(this.header()).hasClass('wb-col-money')) + { + if (wb.lang == 'fr') + { + formatedGrandTotal = toFrenchMoney(GrandTotal); + } + else + { + formatedGrandTotal = toEnglishMoney(GrandTotal); + } + } + else if ($(this.header()).hasClass('cur-thousand-col') || $(this.header()).hasClass('wb-col-cur-thousand')) + { + var GrandTotal = api.column(index, searchApplied).data().reduce(function (a, b) + { + return intVal(a) + intVal(b); + }, 0); + + formatedNumber = parseFloat(GrandTotal).toFixed(2) + + formatedGrandTotal = Number(formatedNumber).toLocaleString(wb.lang, { + minimumFractionDigits: 2, + maximumFractionDigits: 2, + }); + } + else + { + formatedGrandTotal = GrandTotal; + } + + $(api.column(index).footer()).html('' + formatedGrandTotal.toString().replace(/\s/g, ' ') + ''); + }); + } + }; + /** set a flag that we where able to intialize wb-tables with our footerCallback */ + window["wb-tables"][componentName] = true; + } + + /******************************************************************************************** + * + * Add Classes to Datatable Columns to force column Specific Formating + * + * wb-col-mailto: Scan for email addresses in column and add the )([a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})/g); + + if (allEmails) + { + allEmails.forEach(function (email) + { + var emailhref = '' + email.toLowerCase() + ''; + celldata = celldata.replace(email, emailhref); + }); + } + } + + oRow[i][column] = celldata; + }); + + /** Process Columns that have Urls [wb-col-url] */ + urlColTarget.forEach(function (column) + { + var anchorText = oRow[i][column]; + var urlValue = ''; + + if (oRow[i][column + "-url"]) + { + urlValue = oRow[i][column + "-url"]; + } + + if (urlValue) + { + oRow[i][column] = `${anchorText}`; + } + else + { + var allUrls = anchorText.match(/(https?:\/\/[^ ]*)/); + + if (allUrls) + { + allUrls.forEach(function (singleUrl) + { + var urlhref = `${singleUrl}`; + oRow[i][column] = anchorText.replace(singleUrl, urlhref); + }); + } + } + }); + } + }); + + // Bind the init event of the plugin + $document.on("timerpoke.wb " + initEvent, selector, init); + + // Add the timer poke to initialize the plugin + wb.add(selector); + +})(jQuery, window, wb); \ No newline at end of file diff --git "a/m\303\251li-m\303\251lo/2024-10-datatable-utilities/meta.md" "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/meta.md" new file mode 100644 index 000000000..df3e32436 --- /dev/null +++ "b/m\303\251li-m\303\251lo/2024-10-datatable-utilities/meta.md" @@ -0,0 +1,73 @@ +--- +feature: méli-mélo +"@context": + "@version": 1.0.4 + dct: http://purl.org/dc/terms/ + title: + "@id": dct:title + "@container": "@language" + description: dct:description + modified: dct:modified + +title: + en: Data Table Utilities + fr: (FR) Data Table Utilities +description: Examples of how to use these Utilities +modified: 2024-10-01 +componentName: 2024-10-datatable-utilities +sponsor: Steve Bourgeois (steve.bourgeois@tpsgc-pwgsc.gc.ca) + +pages: + examples: + - title: Home + language: en + path: index-eng.html + +implementationPlan: + - due: 2024-09-24 + what: "Initial Development Completed" + - due: 2024-10-01 + what: "Get Intial Feedback from Wet-Boew Team Before Pull Request Completed" + - due: 2024-10-08 + what: "Fix Issue Identified by Wet-Boew Team Completed" + - due: 2024-10-12 + what: "Get French Sample page Translated Completed" + - due: 2024-10-15 + what: "Get Pages throuh our QC cycle and our WACR Team Completed" + - due: 2024-10-22 + what: "Fix Identified problems and accesibility issues Completed" + - due: 2024-10-24 + what: "Submit Pull Request Completed" + - due: 2025-11-30 + what: "Produce accessibility conformance report Todo" + - due: 2025-06-30 + what: "Work toward a provisional plugin In Progress" + +implementationPlanFR: + - due: 2024-09-24 + what: "Dévélopement initial Completé" + - due: 2024-10-01 + what: "Obtenir des rétroaction de l'équipe Wet-Boew avant la demande de tirage Completé" + - due: 2024-10-08 + what: "Corriger tout problèmes identifiés par l'équipe Wet-Boew Completé" + - due: 2024-10-12 + what: "Faire traduire la page d'exemple en français Completé" + - due: 2024-10-15 + what: "Soumettre les pages à notre processus de CQ et à notre équipe ECAW Completé" + - due: 2024-10-22 + what: "Corriger les problèmes identifiés et les problèmes d'accessibilité Completé" + - due: 2024-10-24 + what: "Soumettre la demandes de tirage Completé" + - due: 2025-11-30 + what: "Produce accessibility conformance report A faire" + - due: 2025-06-30 + what: "Travailler vers un plugiciel provisoire En cours" + +todos: + - Add Other Data Manipulation Classes Maybe (percentage)? + +todosFR: + - Envisager d'ajouter d'autres classes de manipulation de données (pourcentage)? + +output: false +--- \ No newline at end of file