From c9706d5cd1117887a39a6b834c21c724c2fd3b11 Mon Sep 17 00:00:00 2001 From: Divlo Date: Wed, 1 Jan 2020 16:56:52 +0100 Subject: [PATCH] Hotfix: Organisation fonctions annexes/ variables --- incl/footer.php | 2 - php/config.php | 14 +- .../functiondivlofr_feedback.sql | 0 php/{ => database_structure}/short_links.sql | 0 .../execute-function/convertCurrency_DOM.js | 20 ++ .../execute-function/convertDistance_DOM.js | 1 + .../execute-function/convertEncoding_DOM.js | 1 + .../convertRomanArabicNumbers_DOM.js | 5 +- .../convertTemperature_DOM.js | 3 + .../execute-function/filterStudents_DOM.js | 2 + scripts/execute-function/heapAlgorithm_DOM.js | 2 + scripts/execute-function/randomNumber_DOM.js | 2 + .../execute-function/weatherRequest_DOM.js | 1 + scripts/fonctions_annexes.js | 183 ------------------ .../fonctions_annexes/capitalize_Function.js | 14 ++ .../cookiesManagement_Functions.js | 34 ++++ .../dateTimeManagement_Functions.js | 50 +++++ .../formatNumberResult_Function.js | 18 ++ .../isEmptyValue_Function.js | 13 ++ .../fonctions_annexes/isFloat_Function.js | 13 ++ .../fonctions_annexes/isValidDate_Function.js | 33 ++++ .../armstrongNumber_Function.js | 2 + .../calculateAge_Function.js | 7 +- .../convertCurrency_Function.js | 3 + .../convertDistance_Function.js | 5 +- .../convertRomanArabicNumbers_Functions.js | 6 +- .../convertTemperature_Function.js | 7 +- .../filterStudents_Function.js | 3 + .../randomQuote_Function.js | 1 + .../weatherRequest_Function.js | 5 +- scripts/main.js | 35 +++- scripts/pagesJS/home-page.js | 2 + scripts/pagesJS/quote-list.js | 4 +- scripts/pagesJS/short_links-list.js | 6 +- scripts/variables/currencyReference.js | 46 +++++ scripts/variables/homeFunctionExample.js | 21 ++ .../{variables.js => variables/listQuotes.js} | 102 +--------- .../variables/romanArabicNumbersReference.js | 19 ++ scripts/variables/timesVariables.js | 8 + 39 files changed, 384 insertions(+), 309 deletions(-) rename php/{ => database_structure}/functiondivlofr_feedback.sql (100%) rename php/{ => database_structure}/short_links.sql (100%) delete mode 100644 scripts/fonctions_annexes.js create mode 100644 scripts/functions/fonctions_annexes/capitalize_Function.js create mode 100644 scripts/functions/fonctions_annexes/cookiesManagement_Functions.js create mode 100644 scripts/functions/fonctions_annexes/dateTimeManagement_Functions.js create mode 100644 scripts/functions/fonctions_annexes/formatNumberResult_Function.js create mode 100644 scripts/functions/fonctions_annexes/isEmptyValue_Function.js create mode 100644 scripts/functions/fonctions_annexes/isFloat_Function.js create mode 100644 scripts/functions/fonctions_annexes/isValidDate_Function.js create mode 100644 scripts/variables/currencyReference.js create mode 100644 scripts/variables/homeFunctionExample.js rename scripts/{variables.js => variables/listQuotes.js} (72%) create mode 100644 scripts/variables/romanArabicNumbersReference.js create mode 100644 scripts/variables/timesVariables.js diff --git a/incl/footer.php b/incl/footer.php index 931bbe9..4541529 100644 --- a/incl/footer.php +++ b/incl/footer.php @@ -26,8 +26,6 @@ - - '); + $scripts = array(''); break; case '/views/function-list.php': $title = 'Liste des fonctions'; $description = 'La liste des mini-programmes.'; $image = 'https://function.divlo.fr/img/FunctionProject_icon.png'; $functionlistActive = 'active'; - $scripts = array(''); + $scripts = array(''); break; case '/views/feedback-form_view.php': $title = 'Feedback Formulaire'; $description = "Vous pouvez m'envoyer votre avis sur le projet grâce à ce formulaire 📝."; $image = 'https://function.divlo.fr/img/Feedback-Formulaire.png'; $feedbackActive = 'active'; - $scripts = array(''); + $scripts = array(''); break; case '/views/feedback-list.php': $title = 'Liste des feedback'; @@ -81,7 +81,7 @@ switch ($currentpage) { $title = 'Liste des citations'; $description = "La liste de toutes les citations ou proverbes (aimé par Divlo)."; $image = 'https://function.divlo.fr/img/function-image/randomQuote.png'; - $scripts = array(''); + $scripts = array(''); break; case '/views/function-views/convertCurrency.php': $title = 'Conversion de devise'; @@ -123,20 +123,20 @@ switch ($currentpage) { $title = "Raccourcisseurs de liens"; $description = "Une URL trop longue ? Raccourcissez-là !"; $image = 'https://function.divlo.fr/img/function-image/linkShortener.png'; - $scripts = array(''); + $scripts = array(''); break; case '/views/short_links-list.php': $title = 'Liste des liens récemment raccourcit'; $description = "La liste de vos liens raccourcit les plus récents."; $image = 'https://function.divlo.fr/img/function-image/linkShortener.png'; - $scripts = array(''); + $scripts = array(''); break; case '/views/function-views/toDoList.php': $title = 'Liste de choses à faire'; $description = "La liste des choses à faire."; $image = 'https://function.divlo.fr/img/function-image/toDoList.png'; $toDoListCSS = true; - $scripts = array(''); + $scripts = array(''); break; default: $title = 'Erreur 404'; diff --git a/php/functiondivlofr_feedback.sql b/php/database_structure/functiondivlofr_feedback.sql similarity index 100% rename from php/functiondivlofr_feedback.sql rename to php/database_structure/functiondivlofr_feedback.sql diff --git a/php/short_links.sql b/php/database_structure/short_links.sql similarity index 100% rename from php/short_links.sql rename to php/database_structure/short_links.sql diff --git a/scripts/execute-function/convertCurrency_DOM.js b/scripts/execute-function/convertCurrency_DOM.js index e69de29..6d5f1b1 100644 --- a/scripts/execute-function/convertCurrency_DOM.js +++ b/scripts/execute-function/convertCurrency_DOM.js @@ -0,0 +1,20 @@ +import { convertCurrency } from '../functions/fonctions_principales/convertCurrency_Function.js'; +import { isEmptyValue } from '../functions/fonctions_annexes/isEmptyValue_Function.js'; + +$(function () { + $("#convertCurrencyForm").submit(() => { + event.preventDefault(); + let value = $('#value').val(); + const currencyOfTheValue = $("#currencyOfTheValue option:selected").val(); + const currencyAfter = $("#currencyAfter option:selected").val(); + if(isEmptyValue(value) || isNaN(parseFloat(value))) { + $('.rateDate').html(''); + $('.results').html(emptyMessageError); + } + else { + const url = 'https://api.exchangeratesapi.io/latest?base=' + currencyOfTheValue; + value = parseFloat(value); + convertCurrency(value, currencyAfter, url); + } + }); +}); \ No newline at end of file diff --git a/scripts/execute-function/convertDistance_DOM.js b/scripts/execute-function/convertDistance_DOM.js index e759065..bd9bff3 100644 --- a/scripts/execute-function/convertDistance_DOM.js +++ b/scripts/execute-function/convertDistance_DOM.js @@ -1,4 +1,5 @@ import { convertDistance } from '../functions/fonctions_principales/convertDistance_Function.js'; +import { isEmptyValue } from '../functions/fonctions_annexes/isEmptyValue_Function.js'; $(function () { $("#convertDistanceForm").submit((event) => { diff --git a/scripts/execute-function/convertEncoding_DOM.js b/scripts/execute-function/convertEncoding_DOM.js index ebc7175..74ad34c 100644 --- a/scripts/execute-function/convertEncoding_DOM.js +++ b/scripts/execute-function/convertEncoding_DOM.js @@ -1,4 +1,5 @@ import { decimalToBinary, binaryToDecimal, decimalToHexadecimal, hexadecimalToDecimal, binaryToHexadecimal, hexadecimalToBinary, textToNumberUnicode, numberUnicodeToText, textToBinary, binaryToText, textToHexadecimal, hexadecimalToText } from '../functions/fonctions_principales/convertEncoding_Functions.js'; +import { isEmptyValue } from '../functions/fonctions_annexes/isEmptyValue_Function.js'; $(function () { $("#convertEncodingForm").submit((event) => { diff --git a/scripts/execute-function/convertRomanArabicNumbers_DOM.js b/scripts/execute-function/convertRomanArabicNumbers_DOM.js index 2ff2af2..4f518b5 100644 --- a/scripts/execute-function/convertRomanArabicNumbers_DOM.js +++ b/scripts/execute-function/convertRomanArabicNumbers_DOM.js @@ -1,4 +1,7 @@ import { convertArabicToRoman, convertRomanToArabic } from '../functions/fonctions_principales/convertRomanArabicNumbers_Functions.js'; +import { isEmptyValue } from '../functions/fonctions_annexes/isEmptyValue_Function.js'; +import { formatNumberResult } from '../functions/fonctions_annexes/formatNumberResult_Function.js'; +import { isFloat } from '../functions/fonctions_annexes/isFloat_Function.js'; $(function () { $("#convertRomanArabicNumbersForm").submit((event) => { @@ -13,7 +16,7 @@ $(function () { if (convertNumberType === "Nombre Romain") { const result = convertArabicToRoman(parseInt(numbersValue)); let numbersValueFormat = formatNumberResult(numbersValue); - if (result === messageError || isFloat(numbersValue)) { + if (result === '' || isFloat(numbersValue)) { $('.results').html(messageError); } else { $('.results').html(`${numbersValueFormat} s'écrit ${result} en chiffres romains.`); diff --git a/scripts/execute-function/convertTemperature_DOM.js b/scripts/execute-function/convertTemperature_DOM.js index df30f49..e4d8ea9 100644 --- a/scripts/execute-function/convertTemperature_DOM.js +++ b/scripts/execute-function/convertTemperature_DOM.js @@ -1,4 +1,5 @@ import { convertTemperature } from '../functions/fonctions_principales/convertTemperature_Function.js'; +import { isEmptyValue } from '../functions/fonctions_annexes/isEmptyValue_Function.js'; $(function () { $("#convertTemperatureForm").submit((event) => { @@ -8,6 +9,8 @@ $(function () { const unit = temperatureValue.slice(temperatureValue.length - 2); if(isEmptyValue(temperatureValue)) { $('.results').html(emptyMessageError); + } else if (isNaN(degree) && (!unit === "°C" || !unit === "°F")) { + $('.results').html(messageError); } else { $('.results').html(convertTemperature(degree, unit)); diff --git a/scripts/execute-function/filterStudents_DOM.js b/scripts/execute-function/filterStudents_DOM.js index 6dac337..a8e52a5 100644 --- a/scripts/execute-function/filterStudents_DOM.js +++ b/scripts/execute-function/filterStudents_DOM.js @@ -1,4 +1,6 @@ import { filterStudents } from '../functions/fonctions_principales/filterStudents_Function.js'; +import { isEmptyValue } from '../functions/fonctions_annexes/isEmptyValue_Function.js'; +import { capitalize } from '../functions/fonctions_annexes/capitalize_Function.js'; $(function () { $("#filterStudentsForm").submit((event) => { diff --git a/scripts/execute-function/heapAlgorithm_DOM.js b/scripts/execute-function/heapAlgorithm_DOM.js index 2a72a65..38b847c 100644 --- a/scripts/execute-function/heapAlgorithm_DOM.js +++ b/scripts/execute-function/heapAlgorithm_DOM.js @@ -1,4 +1,6 @@ import { heapAlgorithm } from '../functions/fonctions_principales/heapAlgorithm_Function.js'; +import { isEmptyValue } from '../functions/fonctions_annexes/isEmptyValue_Function.js'; +import { formatNumberResult } from '../functions/fonctions_annexes/formatNumberResult_Function.js'; $(function () { $("#heapAlgorithmForm").submit((event) => { diff --git a/scripts/execute-function/randomNumber_DOM.js b/scripts/execute-function/randomNumber_DOM.js index 76e03d3..4667b25 100644 --- a/scripts/execute-function/randomNumber_DOM.js +++ b/scripts/execute-function/randomNumber_DOM.js @@ -1,4 +1,6 @@ import { randomNumber } from '../functions/fonctions_principales/randomNumber_Function.js'; +import { isEmptyValue } from '../functions/fonctions_annexes/isEmptyValue_Function.js'; +import { formatNumberResult } from '../functions/fonctions_annexes/formatNumberResult_Function.js'; $(function () { $("#randomNumberForm").submit((event) => { diff --git a/scripts/execute-function/weatherRequest_DOM.js b/scripts/execute-function/weatherRequest_DOM.js index c5e9004..11a1cd7 100644 --- a/scripts/execute-function/weatherRequest_DOM.js +++ b/scripts/execute-function/weatherRequest_DOM.js @@ -1,4 +1,5 @@ import { weatherRequest } from '../functions/fonctions_principales/weatherRequest_Function.js'; +import { isEmptyValue } from '../functions/fonctions_annexes/isEmptyValue_Function.js'; $(function () { $("#weatherForm").submit((event) => { diff --git a/scripts/fonctions_annexes.js b/scripts/fonctions_annexes.js deleted file mode 100644 index 81ff16d..0000000 --- a/scripts/fonctions_annexes.js +++ /dev/null @@ -1,183 +0,0 @@ -/* Fonctions Annexes */ - -/** - * @function isEmptyValue - * @description Vérifie si une valeur est vide. - * @param {string} value - * @returns {boolean} - * @example isEmptyValue(null) → true - */ -function isEmptyValue(value) { - return value === '' || value === null || value === undefined; -} - -/** - * @function formatNumberResult - * @description Formate un nombre avec des espaces. - * @param {number} num - * @returns {(number|string)} - Le nombre formaté soit en nombre ou soit en string si supérieur à 1000 car pour 1000 par exemple formatNumberResult renvoie '1 000' - * @example formatNumberResult(76120) → '76 120' - */ -function formatNumberResult(num) { - if(!isNaN(num) && num >= 1000) { - return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1 '); - } - else { - return num; - } -} - -/** - * @function isFloat - * @description Vérifie si un nombre est un float (integer exclu). - * @param {number} value - * @returns {boolean} - * @example isFloat(76120.474) → true - */ -function isFloat(value) { - return !isNaN(value) && value.toString().includes('.'); -} - -/** - * @function capitalize - * @description Majuscule à la 1ère lettre d'une string. - * @param {string} s - * @returns {string} - * @example capitalize('hello world!') → 'Hello world!' - */ -function capitalize(s) { - if (typeof s !== 'string') return '' - return s.charAt(0).toUpperCase() + s.slice(1) -} - -/** - * @function dateTimeUTC - * @description Donne la date et l'heure selon l'UTC (Universal Time Coordinated). - * @requires {@link fonctions_annexes.js: showDateTime} - * @requires {@link variables.js: timeNow, utcOffset, timeNow.setMinutes(timeNow.getMinutes() + utcOffset)} - * @param {string} utc Heure de décalage par rapport à l'UTC - * @returns {function} → showDateTime(enteredOffset) → Retourne l'exécution de la fonction showDateTime - * @example dateTimeUTC('0') - */ -function dateTimeUTC(utc) { - const enteredOffset = parseFloat(utc)*60; - timeNow.setMinutes(timeNow.getMinutes() + enteredOffset); - return showDateTime(enteredOffset); -} - -/** - * @function showDateTime - * @description Affiche la date et l'heure (format : dd/mm/yyyy - 00:00:00). - * @requires {@link fonctions_annexes.js: showDateTime} - * @param {string} utc Heure de décalage par rapport à l'UTC - * @returns {object} Retourne un objet contenant l'année, le mois, le jour, l'heure, les minutes, les secondes et la date formaté - * @example dateTimeUTC('0') → dateTimeUTC vous renvoie l'exécution de showDateTime - */ -function showDateTime(enteredOffset) { - const year = timeNow.getFullYear(); - const month = ('0'+(timeNow.getMonth()+1)).slice(-2); - const day = ('0'+timeNow.getDate()).slice(-2); - const hour = ('0'+timeNow.getHours()).slice(-2); - const minute = ('0'+timeNow.getMinutes()).slice(-2); - const second = ('0'+timeNow.getSeconds()).slice(-2); - - const showDateTimeValue = day + "/" + month + "/" + year + " - " + hour + ":" + minute + ":" + second; - const objectDateTime = { - year: year, - month: month, - day: day, - hour: hour, - minute: minute, - second: second, - showDateTimeValue: showDateTimeValue - }; - timeNow.setMinutes(timeNow.getMinutes() - enteredOffset) - - return objectDateTime; -} - -/** - * @function realDateTime - * @description Affiche l'heure en temps réel. - * @param {string} id - * @returns {boolean} true → Toujours true - * @example window.onload = realDateTime('realDateTime') → va afficher l'heure en temps réel au chargement de la page dans la balise avec l'id realDateTime - */ -function realDateTime(id) { - const realDateTimeNow = new Date; - // const year = realDateTimeNow.getFullYear(); - // const month = ('0'+(realDateTimeNow.getMonth()+1)).slice(-2); - // const day = ('0'+realDateTimeNow.getDate()).slice(-2); - const hour = ('0'+realDateTimeNow.getHours()).slice(-2); - const minute = ('0'+realDateTimeNow.getMinutes()).slice(-2); - const second = ('0'+realDateTimeNow.getSeconds()).slice(-2); - - const resultat = hour + ":" + minute + ":" + second; - - document.getElementById(id).innerHTML = resultat; - setTimeout('realDateTime("'+id+'");','1000'); - return true; -} - -/** - * @function isValidDate - * @description Vérifie si une date est valide (si la variable verifyDate a déjà exister avant la variable currentDate). - * @param {string} verifyDate (format : dd/mm/yyyy) sachant qu'il faut faire -1 au mois car de 0 à 11 donc par exemple 14/12/2019 sera le 14 novembre 2019 - * @param {string} currentDate (format : dd/mm/yyyy) pas besoin de faire -1 au mois donc par exemple 14/12/2019 sera le 14 décembre 2019 - * @returns {boolean} - * @example - * isValidDate('10/11/2019', '11/11/2019') → false → Comparaison entre le 10 décembre 2019 et le 11 novembre 2019 - * isValidDate('10/10/2019', '11/11/2019') → true → Comparison entre le 10 novembre 2019 et le 11 novembre 2019 - */ -function isValidDate(verifyDate, currentDate) { - // Date à vérifier - const toVerifyDate = verifyDate.split('/'); - const splitedToVerifyDate = toVerifyDate[2] + '-' + (parseInt(toVerifyDate[1]) + 1) + '-' + toVerifyDate[0]; - const msToVerifyDate = Date.parse(splitedToVerifyDate); - - // Date courante - currentDate = currentDate.substr(0,10); - const currentDateSplited = currentDate.split('/'); - const currentDateFormat = currentDateSplited[2] + '-' + currentDateSplited[1] + '-' + currentDateSplited[0]; - const msCurrentDate = Date.parse(currentDateFormat); - - if(msToVerifyDate <= msCurrentDate) { - return true; - } else if(msToVerifyDate > msCurrentDate) { - return false; - } else { - return messageError; - } -} - -/** - * @function createSessionCookie - * @description Créer un cookie de session. - * @param {string} name Nom du cookie - * @param {string} value Valeur du cookie - */ -function createSessionCookie(name, value) { - document.cookie = escape(name) + "=" + escape(value) + " ; path=/"; -} - -/** - * @function getCookieValue - * @description Récupère la valeur d'un cookie. - * @param {string} name Nom du cookie - * @param {string} value Valeur du cookie - */ -function getCookieValue(cname) { - const name = cname + "="; - const decodedCookie = decodeURIComponent(document.cookie); - const ca = decodedCookie.split(';'); - for(let i = 0; i < ca.length; i++) { - let c = ca[i]; - while (c.charAt(0) == ' ') { - c = c.substring(1); - } - if (c.indexOf(name) == 0) { - return c.substring(name.length, c.length); - } - } - return ""; -} \ No newline at end of file diff --git a/scripts/functions/fonctions_annexes/capitalize_Function.js b/scripts/functions/fonctions_annexes/capitalize_Function.js new file mode 100644 index 0000000..d16a212 --- /dev/null +++ b/scripts/functions/fonctions_annexes/capitalize_Function.js @@ -0,0 +1,14 @@ +/** + * @function capitalize + * @description Majuscule à la 1ère lettre d'une string. + * @param {string} s + * @returns {string} + * @example capitalize('hello world!') → 'Hello world!' + */ +function capitalize(s) { + if (typeof s !== 'string') return '' + return s.charAt(0).toUpperCase() + s.slice(1) +} + +/* Exports */ +export { capitalize }; \ No newline at end of file diff --git a/scripts/functions/fonctions_annexes/cookiesManagement_Functions.js b/scripts/functions/fonctions_annexes/cookiesManagement_Functions.js new file mode 100644 index 0000000..b104c25 --- /dev/null +++ b/scripts/functions/fonctions_annexes/cookiesManagement_Functions.js @@ -0,0 +1,34 @@ +/** + * @function createSessionCookie + * @description Créer un cookie de session. + * @param {string} name Nom du cookie + * @param {string} value Valeur du cookie + */ +function createSessionCookie(name, value) { + document.cookie = escape(name) + "=" + escape(value) + " ; path=/"; +} + +/** + * @function getCookieValue + * @description Récupère la valeur d'un cookie. + * @param {string} name Nom du cookie + * @param {string} value Valeur du cookie + */ +function getCookieValue(cname) { + const name = cname + "="; + const decodedCookie = decodeURIComponent(document.cookie); + const ca = decodedCookie.split(';'); + for(let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) == ' ') { + c = c.substring(1); + } + if (c.indexOf(name) == 0) { + return c.substring(name.length, c.length); + } + } + return ""; +} + +/* Exports */ +export { createSessionCookie, getCookieValue }; \ No newline at end of file diff --git a/scripts/functions/fonctions_annexes/dateTimeManagement_Functions.js b/scripts/functions/fonctions_annexes/dateTimeManagement_Functions.js new file mode 100644 index 0000000..9daa883 --- /dev/null +++ b/scripts/functions/fonctions_annexes/dateTimeManagement_Functions.js @@ -0,0 +1,50 @@ +import { timeNow, utcOffset } from '../../variables/timesVariables.js'; + +/** + * @function dateTimeUTC + * @description Donne la date et l'heure selon l'UTC (Universal Time Coordinated). + * @requires {@link fonctions_annexes.js: showDateTime} + * @requires {@link variables.js: timeNow, utcOffset, timeNow.setMinutes(timeNow.getMinutes() + utcOffset)} + * @param {string} utc Heure de décalage par rapport à l'UTC + * @returns {function} → showDateTime(enteredOffset) → Retourne l'exécution de la fonction showDateTime + * @example dateTimeUTC('0') + */ +function dateTimeUTC(utc) { + const enteredOffset = parseFloat(utc)*60; + timeNow.setMinutes(timeNow.getMinutes() + enteredOffset); + return showDateTime(enteredOffset); +} + +/** + * @function showDateTime + * @description Affiche la date et l'heure (format : dd/mm/yyyy - 00:00:00). + * @requires {@link fonctions_annexes.js: showDateTime} + * @param {string} utc Heure de décalage par rapport à l'UTC + * @returns {object} Retourne un objet contenant l'année, le mois, le jour, l'heure, les minutes, les secondes et la date formaté + * @example dateTimeUTC('0') → dateTimeUTC vous renvoie l'exécution de showDateTime + */ +function showDateTime(enteredOffset) { + const year = timeNow.getFullYear(); + const month = ('0'+(timeNow.getMonth()+1)).slice(-2); + const day = ('0'+timeNow.getDate()).slice(-2); + const hour = ('0'+timeNow.getHours()).slice(-2); + const minute = ('0'+timeNow.getMinutes()).slice(-2); + const second = ('0'+timeNow.getSeconds()).slice(-2); + + const showDateTimeValue = day + "/" + month + "/" + year + " - " + hour + ":" + minute + ":" + second; + const objectDateTime = { + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + showDateTimeValue: showDateTimeValue + }; + timeNow.setMinutes(timeNow.getMinutes() - enteredOffset) + + return objectDateTime; +} + +/* Exports */ +export { dateTimeUTC, showDateTime }; \ No newline at end of file diff --git a/scripts/functions/fonctions_annexes/formatNumberResult_Function.js b/scripts/functions/fonctions_annexes/formatNumberResult_Function.js new file mode 100644 index 0000000..09fdc6b --- /dev/null +++ b/scripts/functions/fonctions_annexes/formatNumberResult_Function.js @@ -0,0 +1,18 @@ +/** + * @function formatNumberResult + * @description Formate un nombre avec des espaces. + * @param {number} num + * @returns {(number|string)} - Le nombre formaté soit en nombre ou soit en string si supérieur à 1000 car pour 1000 par exemple formatNumberResult renvoie '1 000' + * @example formatNumberResult(76120) → '76 120' + */ +function formatNumberResult(num) { + if(!isNaN(num) && num >= 1000) { + return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1 '); + } + else { + return num; + } +} + +/* Exports */ +export { formatNumberResult }; \ No newline at end of file diff --git a/scripts/functions/fonctions_annexes/isEmptyValue_Function.js b/scripts/functions/fonctions_annexes/isEmptyValue_Function.js new file mode 100644 index 0000000..b88aa52 --- /dev/null +++ b/scripts/functions/fonctions_annexes/isEmptyValue_Function.js @@ -0,0 +1,13 @@ +/** + * @function isEmptyValue + * @description Vérifie si une valeur est vide. + * @param {string} value + * @returns {boolean} + * @example isEmptyValue(null) → true + */ +function isEmptyValue(value) { + return value === '' || value === null || value === undefined; +} + +/* Exports */ +export { isEmptyValue }; \ No newline at end of file diff --git a/scripts/functions/fonctions_annexes/isFloat_Function.js b/scripts/functions/fonctions_annexes/isFloat_Function.js new file mode 100644 index 0000000..bd1fa95 --- /dev/null +++ b/scripts/functions/fonctions_annexes/isFloat_Function.js @@ -0,0 +1,13 @@ +/** + * @function isFloat + * @description Vérifie si un nombre est un float (integer exclu). + * @param {number} value + * @returns {boolean} + * @example isFloat(76120.474) → true + */ +function isFloat(value) { + return !isNaN(value) && value.toString().includes('.'); +} + +/* Exports */ +export { isFloat }; \ No newline at end of file diff --git a/scripts/functions/fonctions_annexes/isValidDate_Function.js b/scripts/functions/fonctions_annexes/isValidDate_Function.js new file mode 100644 index 0000000..a4f32f6 --- /dev/null +++ b/scripts/functions/fonctions_annexes/isValidDate_Function.js @@ -0,0 +1,33 @@ +/** + * @function isValidDate + * @description Vérifie si une date est valide (si la variable verifyDate a déjà exister avant la variable currentDate). + * @param {string} verifyDate (format : dd/mm/yyyy) sachant qu'il faut faire -1 au mois car de 0 à 11 donc par exemple 14/12/2019 sera le 14 novembre 2019 + * @param {string} currentDate (format : dd/mm/yyyy) pas besoin de faire -1 au mois donc par exemple 14/12/2019 sera le 14 décembre 2019 + * @returns {boolean} + * @example + * isValidDate('10/11/2019', '11/11/2019') → false → Comparaison entre le 10 décembre 2019 et le 11 novembre 2019 + * isValidDate('10/10/2019', '11/11/2019') → true → Comparison entre le 10 novembre 2019 et le 11 novembre 2019 + */ +function isValidDate(verifyDate, currentDate) { + // Date à vérifier + const toVerifyDate = verifyDate.split('/'); + const splitedToVerifyDate = toVerifyDate[2] + '-' + (parseInt(toVerifyDate[1]) + 1) + '-' + toVerifyDate[0]; + const msToVerifyDate = Date.parse(splitedToVerifyDate); + + // Date courante + currentDate = currentDate.substr(0,10); + const currentDateSplited = currentDate.split('/'); + const currentDateFormat = currentDateSplited[2] + '-' + currentDateSplited[1] + '-' + currentDateSplited[0]; + const msCurrentDate = Date.parse(currentDateFormat); + + if(msToVerifyDate <= msCurrentDate) { + return true; + } else if(msToVerifyDate > msCurrentDate) { + return false; + } else { + return messageError; + } +} + +/* Exports */ +export { isValidDate }; \ No newline at end of file diff --git a/scripts/functions/fonctions_principales/armstrongNumber_Function.js b/scripts/functions/fonctions_principales/armstrongNumber_Function.js index c405eea..1460224 100644 --- a/scripts/functions/fonctions_principales/armstrongNumber_Function.js +++ b/scripts/functions/fonctions_principales/armstrongNumber_Function.js @@ -1,3 +1,5 @@ +import { formatNumberResult } from '../fonctions_annexes/formatNumberResult_Function.js'; + /** * @function armstrongNumber * @description Vérifie si un nombre fait partie des nombres d'Armstrong. diff --git a/scripts/functions/fonctions_principales/calculateAge_Function.js b/scripts/functions/fonctions_principales/calculateAge_Function.js index d682478..7d790b1 100644 --- a/scripts/functions/fonctions_principales/calculateAge_Function.js +++ b/scripts/functions/fonctions_principales/calculateAge_Function.js @@ -1,7 +1,12 @@ +import { formatNumberResult } from '../fonctions_annexes/formatNumberResult_Function.js'; +import { isValidDate } from '../fonctions_annexes/isValidDate_Function.js'; +import { dateTimeUTC } from '../fonctions_annexes/dateTimeManagement_Functions.js'; + /** * @function calculateAge * @description Calcule l'âge de quelqu'un selon ça date de naissance. - * @requires {@link fonctions_annexes.js: formatNumberResult, isValidDate} + * @requires {@link fonctions_annexes.js: formatNumberResult, isValidDate, dateTimeUTC} + * @requires {@link main.js: messageError} * @requires {@link "external:moment.js"} * @see {@link https://momentjs.com/} * @param {string} birthDateEntered - Date de naissance (dd/mm/yyyy) diff --git a/scripts/functions/fonctions_principales/convertCurrency_Function.js b/scripts/functions/fonctions_principales/convertCurrency_Function.js index 7e53f23..c891570 100644 --- a/scripts/functions/fonctions_principales/convertCurrency_Function.js +++ b/scripts/functions/fonctions_principales/convertCurrency_Function.js @@ -1,3 +1,6 @@ +import { formatNumberResult } from '../fonctions_annexes/formatNumberResult_Function.js'; +import { correspondancesMonnaie } from '../../variables/currencyReference.js'; + /** * @function convertCurrency * @description Convertis une valeur dans une devise dans une autre devise grâce à l'API exchangeratesapi.io. diff --git a/scripts/functions/fonctions_principales/convertDistance_Function.js b/scripts/functions/fonctions_principales/convertDistance_Function.js index c74a77c..ae0ceb5 100644 --- a/scripts/functions/fonctions_principales/convertDistance_Function.js +++ b/scripts/functions/fonctions_principales/convertDistance_Function.js @@ -1,6 +1,9 @@ +import { formatNumberResult } from '../fonctions_annexes/formatNumberResult_Function.js'; + /** * @function convertDistance * @description Convertis la longueur (distance) avec les unités allant de picomètre au Téramètre. + * @requires {@link fonctions_annexes.js: formatNumberResult} * @param {number} firstValue - Le nombre que vous voulez convertir * @param {string} unitFirstValue - L'unité du nombre que vous voulez convertir * @param {string} unitFinalValue - L'unité de votre nombre après la conversion @@ -14,7 +17,7 @@ function convertDistance (firstValue, unitFirstValue, unitFinalValue) { const index2 = reference.indexOf(unitFinalValue); // Condition qui vérifie si les valeurs entrées sont justes - if (!isNaN(firstValue) && typeof unitFirstValue === 'string' && typeof unitFinalValue === 'string' && (index1.toString() && index2.toString()) != '-1') { + if ((index1.toString() && index2.toString()) !== '-1') { // Conversion des longueurs : const difference = index1 - index2; const result = firstValue*Math.pow(10,difference); diff --git a/scripts/functions/fonctions_principales/convertRomanArabicNumbers_Functions.js b/scripts/functions/fonctions_principales/convertRomanArabicNumbers_Functions.js index 0240baa..eb5e662 100644 --- a/scripts/functions/fonctions_principales/convertRomanArabicNumbers_Functions.js +++ b/scripts/functions/fonctions_principales/convertRomanArabicNumbers_Functions.js @@ -1,3 +1,5 @@ +import { correspondancesRomainArabe } from '../../variables/romanArabicNumbersReference.js'; + /** * @function convertArabicToRoman * @description Convertis un nombre arabe en nombre romain. @@ -35,11 +37,7 @@ function convertArabicToRoman(nombre) { extraireChiffreRomain(correspondance[0], correspondance[1]); }); - if (chiffresRomains === '') { - return messageError; - } else { return chiffresRomains; - } } /** diff --git a/scripts/functions/fonctions_principales/convertTemperature_Function.js b/scripts/functions/fonctions_principales/convertTemperature_Function.js index 0b11ce8..57859f2 100644 --- a/scripts/functions/fonctions_principales/convertTemperature_Function.js +++ b/scripts/functions/fonctions_principales/convertTemperature_Function.js @@ -7,17 +7,14 @@ * @example convertTemperature(23, '°C') → 23 °C = 73.4 °F */ function convertTemperature(degree, unit) { - if (!isNaN(degree) && unit === "°C") { + if (unit === "°C") { const temperatureValue = ((degree * 9/5) + 32) + " °F"; return degree + " " + unit + " = " + temperatureValue; } - else if (!isNaN(degree) && unit === "°F") { + else if (unit === "°F") { const temperatureValue = (degree - 32) * 5/9 + " °C"; return degree + " " + unit + " = " + temperatureValue; } - else { - return messageError; - } } /* Exports */ diff --git a/scripts/functions/fonctions_principales/filterStudents_Function.js b/scripts/functions/fonctions_principales/filterStudents_Function.js index aa284b4..c571e77 100644 --- a/scripts/functions/fonctions_principales/filterStudents_Function.js +++ b/scripts/functions/fonctions_principales/filterStudents_Function.js @@ -1,6 +1,9 @@ +import { capitalize } from '../fonctions_annexes/capitalize_Function.js'; + /** * @function filterStudents * @description Affiche uniquement les prénoms (qui sont dans la liste) qui commencent par la lettre souhaitée. + * @requires {@link fonctions_annexes.js: capitalize} * @param {string} filteredLetter - La lettre à filtré * @param {array} students - La liste des prénoms * @returns {string} - Prénoms qui commence par filteredLetter (totalfilteredLetterStudents) : filteredStudents diff --git a/scripts/functions/fonctions_principales/randomQuote_Function.js b/scripts/functions/fonctions_principales/randomQuote_Function.js index 1a847a0..6c40b3a 100644 --- a/scripts/functions/fonctions_principales/randomQuote_Function.js +++ b/scripts/functions/fonctions_principales/randomQuote_Function.js @@ -1,4 +1,5 @@ import { randomNumber } from './randomNumber_Function.js'; +import { quotes } from '../../variables/listQuotes.js'; /** * @function randomQuote diff --git a/scripts/functions/fonctions_principales/weatherRequest_Function.js b/scripts/functions/fonctions_principales/weatherRequest_Function.js index ca004e1..8984127 100644 --- a/scripts/functions/fonctions_principales/weatherRequest_Function.js +++ b/scripts/functions/fonctions_principales/weatherRequest_Function.js @@ -1,10 +1,13 @@ +import { dateTimeUTC } from '../fonctions_annexes/dateTimeManagement_Functions.js'; +import { capitalize } from '../fonctions_annexes/capitalize_Function.js'; + /** * @function weatherRequest * @description Affiche la météo et l'heure locale grâce à l'API : openweathermap.org. * Le nom de la ville se récupère en Javascript qui créé un cookie pour récupérer cette variable en php. * Ainsi PHP va récupérer le JSON de l'api openweathermap.org puis ajax va se charger d'afficher le résultat. * Plus d'informations : {@link /php/getWeatherJson.php} - * @requires {@link fonctions_annexes.js: formatNumberResult, dateTimeUTC, showDateTime, capitalize} + * @requires {@link fonctions_annexes.js: dateTimeUTC, showDateTime, capitalize} * @see {@link https://jquery.com/} Requête en AJAX avec jQuery * @see {@link https://openweathermap.org/} API de météo * @example diff --git a/scripts/main.js b/scripts/main.js index 8bc5e09..c15df9c 100644 --- a/scripts/main.js +++ b/scripts/main.js @@ -16,13 +16,40 @@ $(function () { $(window).resize(widthWindowChange); widthWindowChange(); - /* Permet d'afficher l'heure en temps réel sur le footer */ - realDateTime('realDateTime'); + /** + * @function realDateTime + * @description Affiche l'heure en temps réel. + * @param {HTMLElement} htmlElement + * @returns {boolean} true → Toujours true + */ + function realDateTime(htmlElement) { + const realDateTimeNow = new Date; + // const year = realDateTimeNow.getFullYear(); + // const month = ('0'+(realDateTimeNow.getMonth()+1)).slice(-2); + // const day = ('0'+realDateTimeNow.getDate()).slice(-2); + const hour = ('0'+realDateTimeNow.getHours()).slice(-2); + const minute = ('0'+realDateTimeNow.getMinutes()).slice(-2); + const second = ('0'+realDateTimeNow.getSeconds()).slice(-2); - /* Window Scroll Top Button */ + const resultat = hour + ":" + minute + ":" + second; + + htmlElement.innerHTML = resultat; + setTimeout(() => { + realDateTime(htmlElement); + }, 1000); + return true; + } + /* Permet d'afficher l'heure en temps réel sur le footer */ + realDateTime(document.getElementById('realDateTime')); + + /* Scroll agréable (flèche footer) */ const $btnScrollTop = $('.scroll-top-arrow'); $btnScrollTop.on('click', function () { $('html, body').animate({scrollTop: 0}, 800); return false; }); -}); \ No newline at end of file +}); + +/* Messages d'erreur */ +const emptyMessageError = "Vous ne pouvez pas rentré de valeur vide."; +const messageError = "Vous n'avez pas rentré de valeur valide."; \ No newline at end of file diff --git a/scripts/pagesJS/home-page.js b/scripts/pagesJS/home-page.js index 59a63ef..0019ab9 100644 --- a/scripts/pagesJS/home-page.js +++ b/scripts/pagesJS/home-page.js @@ -1,3 +1,5 @@ +import { texteFonctionChange } from '../variables/homeFunctionExample.js'; + $(function () { /* Changement du texte accueil (exemples de fonction) */ let index=-1; diff --git a/scripts/pagesJS/quote-list.js b/scripts/pagesJS/quote-list.js index 9303bd4..f9463ee 100644 --- a/scripts/pagesJS/quote-list.js +++ b/scripts/pagesJS/quote-list.js @@ -1,8 +1,10 @@ +import { quotes } from '../variables/listQuotes.js'; + $(function () { /* Permet d'afficher la liste des citations/proverbes */ $('.totalLengthQuote').html('Total de ' + quotes.length + ' citations.'); let resultat = ""; - for (index in quotes) { + for (let index in quotes) { resultat = resultat + ` ${quotes[index]["source"]} ${quotes[index]["quote"]} `; } $(".quote-list").append(resultat); diff --git a/scripts/pagesJS/short_links-list.js b/scripts/pagesJS/short_links-list.js index 83d5b50..6d72e6d 100644 --- a/scripts/pagesJS/short_links-list.js +++ b/scripts/pagesJS/short_links-list.js @@ -1,10 +1,12 @@ +import { getCookieValue } from '../functions/fonctions_annexes/cookiesManagement_Functions.js'; + $(function () { /* Permet d'afficher la liste des liens récemment raccourcit */ try { const shortcuts = JSON.parse(getCookieValue("shortcuts")); - window.onload = $('.totalLengthLinksList').html(`Total de ${shortcuts.length} lien(s) raccourcit récemment.`); + $('.totalLengthLinksList').html(`Total de ${shortcuts.length} lien(s) raccourcit récemment.`); let resultat = ""; - for (element of shortcuts) { + for (let element of shortcuts) { resultat += ` ${element["url"]} ${element["shortcut"]} `; } $(".links-list").append(resultat); diff --git a/scripts/variables/currencyReference.js b/scripts/variables/currencyReference.js new file mode 100644 index 0000000..bdc823b --- /dev/null +++ b/scripts/variables/currencyReference.js @@ -0,0 +1,46 @@ +/* Variable pour convertCurrency */ +const correspondancesMonnaie = [ + { + currency:"£", + symbol:"GBP" + }, + { + currency: "$ Américain", + symbol: "USD" + }, + { + currency: "$ Canadien", + symbol: "CAD" + }, + { + currency: "$ Australien", + symbol: "AUD" + }, + { + currency: "$ Mexicain", + symbol: "MXN" + }, + { + currency: "CHF", + symbol: "CHF" + }, + { + currency: "₽", + symbol: "RUB" + }, + { + currency: "R$", + symbol: "BRL" + }, + { + currency: "¥", + symbol: "JPY" + }, + { + currency: "€", + symbol: "EUR" + }, +]; + +/* Exports */ +export { correspondancesMonnaie }; \ No newline at end of file diff --git a/scripts/variables/homeFunctionExample.js b/scripts/variables/homeFunctionExample.js new file mode 100644 index 0000000..78ede3d --- /dev/null +++ b/scripts/variables/homeFunctionExample.js @@ -0,0 +1,21 @@ +/* Variable du texte accueil (exemples de fonction) */ +const texteFonctionChange = [ + 'générer des nombres aléatoires', + `calculer votre âge`, + 'convertir des températures', + 'convertir des distances', + 'trier des prénoms par leur première lettre', + 'générer des citations', + 'convertir des devises', + 'convertir des nombres de différentes bases.', + 'convertir des nombres arabes en nombres romains', + `vérifier si un nombre fait partie des nombres d'Armstrong`, + `génèrer toutes les permutations uniques possibles d'une chaîne de caractère`, + 'convertir du Markdown en HTML', + 'raccourcir les liens trop longs', + 'faire une liste de choses à faire', + 'connaître la météo' +]; + +/* Exports */ +export { texteFonctionChange }; \ No newline at end of file diff --git a/scripts/variables.js b/scripts/variables/listQuotes.js similarity index 72% rename from scripts/variables.js rename to scripts/variables/listQuotes.js index 8c42aa8..f423f89 100644 --- a/scripts/variables.js +++ b/scripts/variables/listQuotes.js @@ -1,99 +1,4 @@ -/* LES VARIABLES */ - -let chemin = window.location.pathname; - -/* Messages d'erreur */ -const emptyMessageError = "Vous ne pouvez pas rentré de valeur vide."; -const messageError = "Vous n'avez pas rentré de valeur valide."; - -/* Variable du texte accueil (exemples de fonction) */ -texteFonctionChange = [ - 'générer des nombres aléatoires', - `calculer votre âge`, - 'convertir des températures', - 'convertir des distances', - 'trier des prénoms par leur première lettre', - 'générer des citations', - 'convertir des devises', - 'convertir des nombres de différentes bases.', - 'convertir des nombres arabes en nombres romains', - `vérifier si un nombre fait partie des nombres d'Armstrong`, - `génèrer toutes les permutations uniques possibles d'une chaîne de caractère`, - 'convertir du Markdown en HTML', - 'raccourcir les liens trop longs', - 'faire une liste de choses à faire', - 'connaître la météo' -]; - -/* Variables pour les fonctions */ -let timeNow = new Date(); -let utcOffset = timeNow.getTimezoneOffset(); -timeNow.setMinutes(timeNow.getMinutes() + utcOffset); - -// Variable pour convertRomanArabicNumbers -const correspondancesRomainArabe = -[ - [1000, "M"], - [900, "CM"], - [500, "D"], - [400, "CD"], - [100, "C"], - [90, "XC"], - [50, "L"], - [40, "XL"], - [10, "X"], - [9, "IX"], - [5, "V"], - [4, "IV"], - [1, "I"], -]; - -// Variable pour convertCurrency -const correspondancesMonnaie = -[ -{ - currency:"£", - symbol:"GBP" -}, -{ - currency: "$ Américain", - symbol: "USD" -}, -{ - currency: "$ Canadien", - symbol: "CAD" -}, -{ - currency: "$ Australien", - symbol: "AUD" -}, -{ - currency: "$ Mexicain", - symbol: "MXN" -}, -{ - currency: "CHF", - symbol: "CHF" -}, -{ - currency: "₽", - symbol: "RUB" -}, -{ - currency: "R$", - symbol: "BRL" -}, -{ - currency: "¥", - symbol: "JPY" -}, -{ - currency: "€", - symbol: "EUR" -}, -]; - -// Variable pour randomQuote +/* Variable pour randomQuote */ const quotes = [ { @@ -288,4 +193,7 @@ const quotes = quote:"Rien n'est plus puissant qu'une idée dont l'heure est venue.", source:"Victor Hugo" } -]; \ No newline at end of file +]; + +/* Exports */ +export { quotes }; \ No newline at end of file diff --git a/scripts/variables/romanArabicNumbersReference.js b/scripts/variables/romanArabicNumbersReference.js new file mode 100644 index 0000000..8fa79c3 --- /dev/null +++ b/scripts/variables/romanArabicNumbersReference.js @@ -0,0 +1,19 @@ +/* Variable pour convertRomanArabicNumbers */ +const correspondancesRomainArabe = [ + [1000, "M"], + [900, "CM"], + [500, "D"], + [400, "CD"], + [100, "C"], + [90, "XC"], + [50, "L"], + [40, "XL"], + [10, "X"], + [9, "IX"], + [5, "V"], + [4, "IV"], + [1, "I"], +]; + +/* Exports */ +export { correspondancesRomainArabe }; \ No newline at end of file diff --git a/scripts/variables/timesVariables.js b/scripts/variables/timesVariables.js new file mode 100644 index 0000000..280f4fc --- /dev/null +++ b/scripts/variables/timesVariables.js @@ -0,0 +1,8 @@ +/* Variables de temps */ +let timeNow = new Date(); +let utcOffset = timeNow.getTimezoneOffset(); +timeNow.setMinutes(timeNow.getMinutes() + utcOffset); + + +/* Exports */ +export { timeNow, utcOffset }; \ No newline at end of file