Code Documentation
This commit is contained in:
parent
7da569db96
commit
4056781fac
40
README.md
40
README.md
@ -8,8 +8,6 @@
|
|||||||
|
|
||||||
Le projet est disponible sur [function.divlo.fr](https://function.divlo.fr/).
|
Le projet est disponible sur [function.divlo.fr](https://function.divlo.fr/).
|
||||||
|
|
||||||
[Projet uniquement en français]
|
|
||||||
|
|
||||||
[![FunctionProject](./img/FunctionProject.png)](https://function.divlo.fr/)
|
[![FunctionProject](./img/FunctionProject.png)](https://function.divlo.fr/)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
@ -35,39 +33,9 @@ Enjoy! =D
|
|||||||
* [jQuery UI](https://jqueryui.com/)
|
* [jQuery UI](https://jqueryui.com/)
|
||||||
* [Moment.js](https://momentjs.com/)
|
* [Moment.js](https://momentjs.com/)
|
||||||
|
|
||||||
## La liste des Fonctions Principales :
|
## Documentation
|
||||||
> Les fonctions principales se trouvent dans /scripts/fonctions_principales.js, n'hésitez pas à reprendre les fonctions pour vos projets personnels.
|
Pour le moment dans le dossier ```/__documentation```, bientôt un README.md pour bien comprendre comment fonctionne la doc.
|
||||||
|
La documentation est disponible sur [function.divlo.fr/__documentation](https://function.divlo.fr/__documentation).
|
||||||
|
|
||||||
| Nom | Description | Paramètre(s) |
|
## Licence
|
||||||
| -- | -- | -- |
|
|
||||||
| **weatherRequest()** | Affiche la météo et l'heure locale grâce à l'API : [openweathermap.org](https://openweathermap.org/). | Aucun paramètre, le nom de la ville où il faut récupérer la météo se récupère en php grâce au cookie fait en Javascript (voir main.js) |
|
|
||||||
| **randomNumber(min, max)** | Génère un nombre aléatoire entre un minimum inclus et un maximum inclus. | - min : Nombre Minimum - max : Nombre Maximum |
|
|
||||||
| **calculateAge(birthDate)** | Calcule l'âge de quelqu'un selon ça date de naissance. | - birthDate : date de naissance au format (dd/mm/yyyy). |
|
|
||||||
| **convertTemperature(degree,unit)** | Convertit des Degré Celsius en Degré Fahrenheit et l'inverse aussi. | - degre : Le nombre que vous voulez convertir - unite : l'unité du nombre que vous voulez convertir (°C ou °F) |
|
|
||||||
| **convertDistance (firstValue, unitFirstValue, unitFinalValue)** | Convertit la longueur (distance) avec les unités allant de picomètre au Téramètre. | - firstValue : Le nombre que vous voulez convertir - unitFirstValue : l'unité du nombre que vous voulez convertir - unitFinalValue : l'unité de votre nombre après la conversion |
|
|
||||||
| **filterStudents(filteredLetter, students)** | Affiche uniquement les prénoms (qui sont dans la liste) qui commence par la lettre souhaitée. | - filteredLetter : la lettre à filtré - students : la liste des prénoms |
|
|
||||||
| **randomQuote()** | Génère aléatoirement une citation ou un proverbe. | Aucun paramètre |
|
|
||||||
| **convertCurrency(value, currency, url)** | Convertis une valeur dans une devise dans une autre devise grâce à l'API [exchangeratesapi.io](https://exchangeratesapi.io/). | - value : la valeur à convertir - currency : la devise à avoir après conversion - url : l'url de la requête à l'API en fonction du paramètre dans l'url '?base=' |
|
|
||||||
| **convertArabicToRoman(nombre)** | Convertis un nombre arabe en nombre romain. | - nombre : le nombre à convertir |
|
|
||||||
| **convertRomanToArabic(str)** | Convertis un nombre romain en nombre arabe. | - str : le nombre romain à convertir |
|
|
||||||
| **armstrongNumber(nombre)** | Vérifie si un nombre fait partie des nombres d'Armstrong. | - nombre : le nombre à tester |
|
|
||||||
| **stringPermutations(string)** | Retourne un tableau contenant toutes les possibilités d'anagramme d'un mot | - string : le mot |
|
|
||||||
|
|
||||||
## La liste des Fonctions Annexes :
|
|
||||||
> Les fonctions annexes se trouvent dans /scripts/fonctions_annexes.js, n'hésitez pas à reprendre les fonctions pour vos projets personnels.
|
|
||||||
|
|
||||||
| Nom | Description | Paramètre(s) |
|
|
||||||
| -- | -- | -- |
|
|
||||||
| **isEmptyValue(value)** | Vérifie si une valeur est vide. | - value : valeur à testé |
|
|
||||||
| **formatNumberResult(num)** | Formate les nombres avec des espaces (ex : 76120 = 76 120). | - num : nombre à formaté |
|
|
||||||
| **isFloat(value)** | Vérifie si une string est un float (integer exclu). | - value : valeur à testé |
|
|
||||||
| **convertPuissanceToNumber(num)** | Convertit les puissances de 10 en nombre (ex: 1e+5 = 100 000). | - num : nombre à formaté |
|
|
||||||
| **capitalize (s)** | Majuscule à la 1ère lettre d'une string. | - s : string à formaté |
|
|
||||||
| **dateTimeUTC(utc)** | Donne la date et l'heure selon l'UTC (Universal Time Coordinated). | - utc : heure de décalage avec l'utc |
|
|
||||||
| **showDateTime(enteredOffset)** | Affiche la date et l'heure (format : dd/mm/yyyy - 00:00:00). | - enteredOffset : date à formaté |
|
|
||||||
| **realDateTime(id)** | Affiche l'heure en temps réel. | - id : l'id de votre span/div où vous voulez afficher l'heure en temps réel |
|
|
||||||
| **isValidDate(s)** | Vérifie si une date est valide par rapport à la date d'aujourd'hui. | - s : la date à verifier (format : dd/mm/yyyy) |
|
|
||||||
| **createSessionCookie(name, value)** | Créer un cookie de session | - name : nom du cookie - value : valeur du cookie |
|
|
||||||
|
|
||||||
## License
|
|
||||||
Ce projet est sous licence MIT - voir le fichier [LICENSE](./LICENSE) pour plus de détails.
|
Ce projet est sous licence MIT - voir le fichier [LICENSE](./LICENSE) pour plus de détails.
|
211
__documentation/fonctions_annexes.js.html
Normal file
211
__documentation/fonctions_annexes.js.html
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>JSDoc: Source: fonctions_annexes.js</title>
|
||||||
|
|
||||||
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
|
||||||
|
<h1 class="page-title">Source: fonctions_annexes.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint source linenums"><code>/* 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 une string 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=/";
|
||||||
|
} </code></pre>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#armstrongNumber">armstrongNumber</a></li><li><a href="global.html#binaryToDecimal">binaryToDecimal</a></li><li><a href="global.html#binaryToHexadecimal">binaryToHexadecimal</a></li><li><a href="global.html#binaryToText">binaryToText</a></li><li><a href="global.html#calculateAge">calculateAge</a></li><li><a href="global.html#capitalize">capitalize</a></li><li><a href="global.html#convertArabicToRoman">convertArabicToRoman</a></li><li><a href="global.html#convertCurrency">convertCurrency</a></li><li><a href="global.html#convertDistance">convertDistance</a></li><li><a href="global.html#convertRomanToArabic">convertRomanToArabic</a></li><li><a href="global.html#convertTemperature">convertTemperature</a></li><li><a href="global.html#createSessionCookie">createSessionCookie</a></li><li><a href="global.html#dateTimeUTC">dateTimeUTC</a></li><li><a href="global.html#decimalToBinary">decimalToBinary</a></li><li><a href="global.html#decimalToHexadecimal">decimalToHexadecimal</a></li><li><a href="global.html#filterStudents">filterStudents</a></li><li><a href="global.html#formatNumberResult">formatNumberResult</a></li><li><a href="global.html#getRandomQuote">getRandomQuote</a></li><li><a href="global.html#hexadecimalToBinary">hexadecimalToBinary</a></li><li><a href="global.html#hexadecimalToDecimal">hexadecimalToDecimal</a></li><li><a href="global.html#hexadecimalToText">hexadecimalToText</a></li><li><a href="global.html#isEmptyValue">isEmptyValue</a></li><li><a href="global.html#isFloat">isFloat</a></li><li><a href="global.html#isValidDate">isValidDate</a></li><li><a href="global.html#numberUnicodeToText">numberUnicodeToText</a></li><li><a href="global.html#randomNumber">randomNumber</a></li><li><a href="global.html#realDateTime">realDateTime</a></li><li><a href="global.html#showDateTime">showDateTime</a></li><li><a href="global.html#stringPermutations">stringPermutations</a></li><li><a href="global.html#textToBinary">textToBinary</a></li><li><a href="global.html#textToHexadecimal">textToHexadecimal</a></li><li><a href="global.html#textToNumberUnicode">textToNumberUnicode</a></li><li><a href="global.html#weatherRequest">weatherRequest</a></li></ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<br class="clear">
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Mon Nov 11 2019 17:45:44 GMT+0100 (GMT+01:00)
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script> prettyPrint(); </script>
|
||||||
|
<script src="scripts/linenumber.js"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
635
__documentation/fonctions_principales.js.html
Normal file
635
__documentation/fonctions_principales.js.html
Normal file
@ -0,0 +1,635 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>JSDoc: Source: fonctions_principales.js</title>
|
||||||
|
|
||||||
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
|
||||||
|
<h1 class="page-title">Source: fonctions_principales.js</h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint source linenums"><code>/* Fonctions Principales */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 /scripts/main.js} et {@link /php/getWeatherJson.php}
|
||||||
|
* @requires {@link fonctions_annexes.js: formatNumberResult, 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
|
||||||
|
* Ajoute au DOM de la page dans la div .results, la météo de la ville demandée.
|
||||||
|
*/
|
||||||
|
function weatherRequest() {
|
||||||
|
$.ajax({
|
||||||
|
url: '/php/getWeatherJson.php',
|
||||||
|
type: "POST",
|
||||||
|
success: function(data) {
|
||||||
|
try {
|
||||||
|
const json = jQuery.parseJSON(data);
|
||||||
|
const city = json.name;
|
||||||
|
const showDateTimeValue = dateTimeUTC((json.timezone / 60 / 60).toString()).showDateTimeValue;
|
||||||
|
|
||||||
|
$('.results').html(`🌎 Position : <a href='https://www.google.com/maps/search/?api=1&query=${json.coord.lat},${json.coord.lon}' class="yellow-color" target="_blank">${city}, ${json.sys.country}</a><br>⏰ Date et heure : ${showDateTimeValue}<br>☁️ Météo : ${capitalize(json.weather[0].description)}<br> 🌡️ Température : ${json.main.temp} °C<br> 💧 Humidité : ${json.main.humidity}% <br> <img src="https://openweathermap.org/img/wn/${json.weather[0].icon}@2x.png"/>`);
|
||||||
|
}
|
||||||
|
catch(error) {
|
||||||
|
$('.results').html("La ville que vous avez rentré n'existe pas (dans l'API).");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function randomNumber
|
||||||
|
* @description Génère un nombre aléatoire entre un minimum inclus et un maximum inclus.
|
||||||
|
* @param {number} min Nombre Minimum
|
||||||
|
* @param {number} max Nombre Maximum
|
||||||
|
* @returns {number} Nombre aléatoire
|
||||||
|
* @example randomNumber(1, 2) → retourne soit 1 ou 2
|
||||||
|
*/
|
||||||
|
function randomNumber(min, max) {
|
||||||
|
if (!isNaN(min) && !isNaN(max)) {
|
||||||
|
min = Math.ceil(min);
|
||||||
|
max = Math.floor(max);
|
||||||
|
return Math.floor(Math.random() * (max - min +1)) + min;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return messageError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function calculateAge
|
||||||
|
* @description Calcule l'âge de quelqu'un selon ça date de naissance.
|
||||||
|
* @requires {@link fonctions_annexes.js: formatNumberResult, isValidDate}
|
||||||
|
* @requires {@link "external:moment.js"}
|
||||||
|
* @see {@link https://momentjs.com/}
|
||||||
|
* @param {string} birthDateEntered - Date de naissance (dd/mm/yyyy)
|
||||||
|
* @returns {string} - L'âge en jours, mois et années
|
||||||
|
* @example calculateAge('31/03/2003')
|
||||||
|
*/
|
||||||
|
function calculateAge(birthDateEntered) {
|
||||||
|
// Les variables de la fonction
|
||||||
|
const birthDateDay = parseInt(birthDateEntered.substring(0, 2));
|
||||||
|
const birthDateMonth = parseInt((birthDateEntered.substring(3, 5)) - 1);
|
||||||
|
const birthDateYear = parseInt(birthDateEntered.substring(6, 10));
|
||||||
|
const currentDateObject = dateTimeUTC('0');
|
||||||
|
const day = parseInt(currentDateObject.day);
|
||||||
|
const month = parseInt(currentDateObject.month - 1);
|
||||||
|
const year = parseInt(currentDateObject.year);
|
||||||
|
|
||||||
|
let dateNow = moment([year, month, day]);
|
||||||
|
let birthDate = moment([birthDateYear, birthDateMonth, birthDateDay]);
|
||||||
|
|
||||||
|
// Calcule l'âge - Moment.js
|
||||||
|
let ageYears = dateNow.diff(birthDate, 'year');
|
||||||
|
birthDate.add(ageYears, 'years');
|
||||||
|
let ageMonths = dateNow.diff(birthDate, 'months');
|
||||||
|
birthDate.add(ageMonths, 'months');
|
||||||
|
let ageDays = dateNow.diff(birthDate, 'days');
|
||||||
|
|
||||||
|
const isValidDateFunction = isValidDate(birthDateDay + '/' + birthDateMonth + '/' + birthDateYear, currentDateObject.showDateTimeValue);
|
||||||
|
|
||||||
|
// Vérifie si la valeur entrée correspond à une date de naissance valide
|
||||||
|
if(isValidDateFunction === true && !isNaN(ageDays)) {
|
||||||
|
ageYears = formatNumberResult(ageYears);
|
||||||
|
// Si c'est ton anniversaire aujourd'hui
|
||||||
|
if(birthDateDay === day && parseInt(birthDateMonth) === month) {
|
||||||
|
return 'Vous avez ' + ageYears + ' ans. Joyeux Anniversaire! 🥳';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 'Vous avez ' + ageYears + ' ans, ' + ageMonths + ' mois et ' + ageDays + ' jour(s).';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return messageError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function convertTemperature
|
||||||
|
* @description Convertis des °C en °F et l'inverse aussi.
|
||||||
|
* @param {number} degree - Nombre de degrès
|
||||||
|
* @param {string} unit - Unité du nombre (°C ou °F)
|
||||||
|
* @returns {string} - degree unit = temperatureValue
|
||||||
|
* @example convertTemperature(23, '°C') → 23 °C = 73.4 °F
|
||||||
|
*/
|
||||||
|
function convertTemperature(degree, unit) {
|
||||||
|
if (!isNaN(degree) && unit === "°C") {
|
||||||
|
const temperatureValue = ((degree * 9/5) + 32) + " °F";
|
||||||
|
return degree + " " + unit + " = " + temperatureValue;
|
||||||
|
}
|
||||||
|
else if (!isNaN(degree) && unit === "°F") {
|
||||||
|
const temperatureValue = (degree - 32) * 5/9 + " °C";
|
||||||
|
return degree + " " + unit + " = " + temperatureValue;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return messageError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function convertDistance
|
||||||
|
* @description Convertis la longueur (distance) avec les unités allant de picomètre au Téramètre.
|
||||||
|
* @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
|
||||||
|
* @returns {string} - Conversion de longueur : firstValue unitFirstValue = result
|
||||||
|
* @example convertDistance(500, 'cm', 'm') → Conversion de longueur : 500 cm = 5 m
|
||||||
|
*/
|
||||||
|
function convertDistance (firstValue, unitFirstValue, unitFinalValue) {
|
||||||
|
|
||||||
|
const reference = ["pm",null,null,"nm",null,null,"µm",null,null,"mm","cm","dm","m","dam","hm","km",null,null,"Mm",null,null,"Gm",null,null,"Tm"];
|
||||||
|
const index1 = reference.indexOf(unitFirstValue);
|
||||||
|
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') {
|
||||||
|
// Conversion des longueurs :
|
||||||
|
const difference = index1 - index2;
|
||||||
|
const result = firstValue*Math.pow(10,difference);
|
||||||
|
return 'Conversion de longueur : ' + formatNumberResult(firstValue).toString() + ' ' + unitFirstValue + ' = ' + formatNumberResult(result) + ' ' + unitFinalValue;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return messageError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function filterStudents
|
||||||
|
* @description Affiche uniquement les prénoms (qui sont dans la liste) qui commencent par la lettre souhaitée.
|
||||||
|
* @param {string} filteredLetter - La lettre à filtré
|
||||||
|
* @param {array} students - La liste des prénoms
|
||||||
|
* @returns {string} - Prénoms qui commence par filteredLetter (totalfilteredLetterStudents) : filteredStudents
|
||||||
|
* @example filterStudents('P', ['Prénom1', 'Prénom2', 'Divlo']) → Prénoms qui commence par P (2) : Prénom1 et Prénom2.
|
||||||
|
*/
|
||||||
|
function filterStudents(filteredLetter, students)
|
||||||
|
{
|
||||||
|
let filteredStudents = [];
|
||||||
|
for(let i = 0; i < students.length; i++) {
|
||||||
|
let studentBoucle = capitalize(students[i]);
|
||||||
|
if (studentBoucle[0] === filteredLetter) {
|
||||||
|
filteredStudents.push(studentBoucle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (filteredStudents.length === 1) {
|
||||||
|
return ("Prénom qui commence par " + filteredLetter + " : " + filteredStudents + '.');
|
||||||
|
}
|
||||||
|
else if (filteredStudents.length >= 2) {
|
||||||
|
// Affiche la liste des prénoms...
|
||||||
|
const last = filteredStudents[filteredStudents.length - 1]; // Accéde au dernier élément du tableau
|
||||||
|
const totalfilteredLetterStudents = filteredStudents.length;
|
||||||
|
filteredStudents.pop(); // Supprime le dernier élément du tableau
|
||||||
|
// filteredStudents.join(', ') permet de rajouter un espace entre chaque élément du tableau
|
||||||
|
return ("Prénoms qui commence par " + filteredLetter + " (" + totalfilteredLetterStudents + ") : " + filteredStudents.join(', ') + ' et ' + last + '.');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return ("Il n'y a pas de prénom commencant par " + filteredLetter + ".");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function getRandomQuote
|
||||||
|
* @description Génère aléatoirement une citation ou un proverbe.
|
||||||
|
* @requires {@link variables.js: quotes}
|
||||||
|
* @requires {@link fonctions_principales.js: randomNumber}
|
||||||
|
* @returns {string} - une citation au hasard à partir de la constante 'quotes' dans variables.js
|
||||||
|
* @example getRandomQuote() → " Ne fais jamais rien contre ta conscience, même si l'Etat te le demande. " <br> <br> - Albert Einstein
|
||||||
|
*/
|
||||||
|
function getRandomQuote() {
|
||||||
|
const randomNbr = randomNumber(0, (quotes.length - 1));
|
||||||
|
const randomQuotes = quotes[randomNbr];
|
||||||
|
return '" ' + randomQuotes["quote"] + ' " <br> <br> - ' + randomQuotes["source"];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function convertCurrency
|
||||||
|
* @description Convertis une valeur dans une devise dans une autre devise grâce à l'API exchangeratesapi.io.
|
||||||
|
* @requires {@link fonctions_annexes.js: formatNumberResult}
|
||||||
|
* @requires {@link variables.js: correspondancesMonnaie}
|
||||||
|
* @see {@link https://jquery.com/} Requête en AJAX avec jQuery
|
||||||
|
* @see {@link https://api.exchangeratesapi.io/} API de taux de change
|
||||||
|
* @param {number} value - la valeur à convertir
|
||||||
|
* @param {string} currency - la devise à avoir après conversion
|
||||||
|
* @param {string} url - l'url de la requête à l'API en fonction du paramètre dans l'url '?base='
|
||||||
|
* @example convertCurrency(50, "$ Américain", "https://api.exchangeratesapi.io/latest?base=EUR")
|
||||||
|
* Ajoute au DOM de la page dans la div .results et .rateDate :
|
||||||
|
* 50 EUR = 55.17 $ Américain
|
||||||
|
* Dernier rafraîchissement du taux d'échange : 08/11/2019
|
||||||
|
*/
|
||||||
|
function convertCurrency(value, currency, url) {
|
||||||
|
function currencyTest(currencyToTest) {
|
||||||
|
for (let index in correspondancesMonnaie) {
|
||||||
|
if(currencyToTest === correspondancesMonnaie[index]['currency']) {
|
||||||
|
return correspondancesMonnaie[index]['symbol'];
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
url : url,
|
||||||
|
dataType : "json",
|
||||||
|
success: function (jsonFixer) {
|
||||||
|
try {
|
||||||
|
let currencySymboleAPI = eval(`jsonFixer.rates.${currencyTest(currency)}`);
|
||||||
|
if (currencySymboleAPI === undefined) {
|
||||||
|
currencySymboleAPI = 1;
|
||||||
|
}
|
||||||
|
$('.results').html(formatNumberResult(value) + ' ' + jsonFixer.base + ' = ' + formatNumberResult((currencySymboleAPI * value).toFixed(2)) + ' ' + currency);
|
||||||
|
$('.rateDate').html(`Dernier rafraîchissement du taux d'échange : ${jsonFixer.date[8] + jsonFixer.date[9]}/${jsonFixer.date[5] + jsonFixer.date[6]}/${jsonFixer.date[0] + jsonFixer.date[1] + jsonFixer.date[2] + jsonFixer.date[3]}`);
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
$('.results').html(messageError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convertis des nombres de différentes bases et convertis en UTF-8. (source : http://jsfiddle.net/47zwb41o)
|
||||||
|
/**
|
||||||
|
* @function decimalToBinary
|
||||||
|
* @description Convertis un nombre décimal en binaire.
|
||||||
|
* @param {string} value - Le nombre à convertir en string
|
||||||
|
* @returns {string} - Le nombre en binaire
|
||||||
|
* @example decimalToBinary('2') → '10'
|
||||||
|
*/
|
||||||
|
function decimalToBinary(value) {
|
||||||
|
value = value.replace(" ", "");
|
||||||
|
value = Number(value);
|
||||||
|
if (isNaN(value)) {
|
||||||
|
return messageError;
|
||||||
|
} else {
|
||||||
|
return value.toString(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function binaryToDecimal
|
||||||
|
* @description Convertis un nombre binaire en décimal.
|
||||||
|
* @requires {@link fonctions_annexes.js: formatNumberResult}
|
||||||
|
* @param {string} value - Le nombre à convertir
|
||||||
|
* @returns {(number|string)} - Le nombre en décimal soit en nombre ou soit en string si supérieur à 1000 car pour 1000 par exemple formatNumberResult renvoie '1 000'
|
||||||
|
* @example binaryToDecimal('10') → 2
|
||||||
|
*/
|
||||||
|
function binaryToDecimal(value) {
|
||||||
|
const result = parseInt(Number(value), 2);
|
||||||
|
if (isNaN(result)) {
|
||||||
|
return messageError;
|
||||||
|
} else {
|
||||||
|
return formatNumberResult(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function decimalToHexadecimal
|
||||||
|
* @description Convertis un nombre décimal en hexadécimal.
|
||||||
|
* @param {string} value - Le nombre à convertir
|
||||||
|
* @returns {string} - Le nombre en hexadécimal
|
||||||
|
* @example decimalToHexadecimal('15') → 'F'
|
||||||
|
*/
|
||||||
|
function decimalToHexadecimal(value) {
|
||||||
|
value = value.replace(" ", "");
|
||||||
|
value = Number(value);
|
||||||
|
if (isNaN(value)) {
|
||||||
|
return messageError;
|
||||||
|
} else {
|
||||||
|
return value.toString(16).toUpperCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function hexadecimalToDecimal
|
||||||
|
* @description Convertis un nombre hexadécimal en décimal.
|
||||||
|
* @requires {@link fonctions_annexes.js: formatNumberResult}
|
||||||
|
* @param {string} value - Le nombre à convertir
|
||||||
|
* @returns {(number|string)} - Le nombre en décimal soit en nombre ou soit en string si supérieur à 1000 car pour 1000 par exemple formatNumberResult renvoie '1 000'
|
||||||
|
* @example hexadecimalToDecimal('F') → 15
|
||||||
|
*/
|
||||||
|
function hexadecimalToDecimal(value) {
|
||||||
|
const result = parseInt(value, 16);
|
||||||
|
if (isNaN(result)) {
|
||||||
|
return messageError;
|
||||||
|
} else {
|
||||||
|
return formatNumberResult(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function binaryToHexadecimal
|
||||||
|
* @description Convertis un nombre binaire en hexadécimal.
|
||||||
|
* @param {string} value - Le nombre à convertir
|
||||||
|
* @returns {string} - Le nombre en hexadécimal
|
||||||
|
* @example binaryToHexadecimal('1111') → 'F'
|
||||||
|
*/
|
||||||
|
function binaryToHexadecimal(value) {
|
||||||
|
value = Number(value);
|
||||||
|
value = parseInt(value, 2);
|
||||||
|
if (isNaN(value)) {
|
||||||
|
return messageError;
|
||||||
|
} else {
|
||||||
|
return parseInt(value).toString(16).toUpperCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function hexadecimalToBinary
|
||||||
|
* @description Convertis un nombre hexadécimal en binaire.
|
||||||
|
* @param {string} value - Le nombre à convertir
|
||||||
|
* @returns {string} - Le nombre en binaire
|
||||||
|
* @example hexadecimalToBinary('F') → '1111'
|
||||||
|
*/
|
||||||
|
function hexadecimalToBinary(value) {
|
||||||
|
value = parseInt(value, 16);
|
||||||
|
if (isNaN(value)) {
|
||||||
|
return messageError;
|
||||||
|
} else {
|
||||||
|
return parseInt(value).toString(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function textToNumberUnicode
|
||||||
|
* @description Convertis chaque caractère d'une string en codePoint Unicode.
|
||||||
|
* @param {string} value - La chaîne de caractère à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example textToNumberUnicode('abc') → '97 98 99'
|
||||||
|
*/
|
||||||
|
function textToNumberUnicode(string) {
|
||||||
|
try {
|
||||||
|
let resultat = "";
|
||||||
|
for (let index in string) {
|
||||||
|
resultat = resultat + string.codePointAt(index) + " ";
|
||||||
|
}
|
||||||
|
return resultat;
|
||||||
|
}
|
||||||
|
catch(error) {
|
||||||
|
return messageError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function numberUnicodeToText
|
||||||
|
* @description Convertis chaque codePoint Unicode en caractère.
|
||||||
|
* @param {string} string - Nombre Unicode à convertir espacé par un espace à chaque fois
|
||||||
|
* @returns {string}
|
||||||
|
* @example numberUnicodeToText('97 98 99') → 'abc'
|
||||||
|
*/
|
||||||
|
function numberUnicodeToText(string) {
|
||||||
|
try {
|
||||||
|
const array = string.split(" ");
|
||||||
|
let resultat = "";
|
||||||
|
for (let index in array) {
|
||||||
|
resultat = resultat + String.fromCodePoint(parseInt(array[index]).toString());
|
||||||
|
}
|
||||||
|
return resultat;
|
||||||
|
}
|
||||||
|
catch(error) {
|
||||||
|
return messageError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function textToBinary
|
||||||
|
* @description Convertis un Texte en Binaire (UTF-8).
|
||||||
|
* @param {string} s - La chaîne de caractère à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example textToBinary('abc') → '01100001 01100010 01100011'
|
||||||
|
*/
|
||||||
|
function textToBinary(s) {
|
||||||
|
try {
|
||||||
|
s = unescape( encodeURIComponent(s));
|
||||||
|
let chr, i = 0, l = s.length, out = '';
|
||||||
|
for( ; i < l; i ++ ){
|
||||||
|
chr = s.charCodeAt( i ).toString(2);
|
||||||
|
while(chr.length % 8 != 0 ){ chr = '0' + chr; }
|
||||||
|
out += chr;
|
||||||
|
}
|
||||||
|
return out.replace(/(\d{8})/g, '$1 ').replace(/(^\s+|\s+$)/,'');
|
||||||
|
} catch (error) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function binaryToText
|
||||||
|
* @description Convertis du Binaire (UTF-8) en Texte.
|
||||||
|
* @param {string} s - La chaîne de caractère contenant tous les octets à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example binaryToText('01100001 01100010 01100011') → 'abc'
|
||||||
|
*/
|
||||||
|
function binaryToText(s){
|
||||||
|
try {
|
||||||
|
s = s.replace(/\s/g,'')
|
||||||
|
let i = 0, l = s.length, chr, out = '';
|
||||||
|
for( ; i < l; i += 8){
|
||||||
|
chr = parseInt( s.substr(i, 8 ), 2).toString(16);
|
||||||
|
out += '%' + ((chr.length % 2 == 0) ? chr : '0' + chr);
|
||||||
|
}
|
||||||
|
return decodeURIComponent(out);
|
||||||
|
} catch (error) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function textToHexadecimal
|
||||||
|
* @description Convertis un Texte en Hexadécimal (UTF-8).
|
||||||
|
* @param {string} s - La chaîne de caractère à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example textToHexadecimal('abc') → '61 62 63'
|
||||||
|
*/
|
||||||
|
function textToHexadecimal (s) {
|
||||||
|
try {
|
||||||
|
s = unescape( encodeURIComponent( s ) );
|
||||||
|
let chr, i = 0, l = s.length, out = '';
|
||||||
|
for( ; i < l; i++ ){
|
||||||
|
chr = s.charCodeAt( i ).toString( 16 );
|
||||||
|
out += ( chr.length % 2 == 0 ) ? chr : '0' + chr;
|
||||||
|
out += " ";
|
||||||
|
}
|
||||||
|
return out.toUpperCase();
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function hexadecimalToText
|
||||||
|
* @description Convertis de l'Hexadécimal (UTF-8) en Texte.
|
||||||
|
* @param {string} s - La chaîne de caractère contenant tous les nombres Hexadécimal à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example hexadecimalToText('61 62 63') → 'abc'
|
||||||
|
*/
|
||||||
|
function hexadecimalToText (s) {
|
||||||
|
try {
|
||||||
|
s = s.replace(/\s/g,'');
|
||||||
|
return decodeURIComponent( s.replace( /../g, '%$&' ) );
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function convertArabicToRoman
|
||||||
|
* @description Convertis un nombre arabe en nombre romain.
|
||||||
|
* @requires {@link variables.js: correspondancesRomainArabe}
|
||||||
|
* @param {number} nombre - Le nombre arabe à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example convertArabicToRoman(24) → 'XXIV'
|
||||||
|
*/
|
||||||
|
function convertArabicToRoman(nombre) {
|
||||||
|
// Initialisation de la variable qui va contenir le résultat de la conversion
|
||||||
|
let chiffresRomains = "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
Étapes pour écrire un nombre romain :
|
||||||
|
|
||||||
|
On vérifie quand le nombre arabe est >= à la plus grande valeur possible dans la table de correspondance des nombres romains de haut en bas puis on rajoute la lettre romaine correspondante à la plus grande valeur possible dans la variable chiffresRomains et on soustrait la valeur du chiffre romain qu'on vient d'ajouter au nombre arabe puis on répète l'opération jusqu'à nombre arabe vaut 0...
|
||||||
|
|
||||||
|
Exemple avec 27 :
|
||||||
|
27 - X (10) = 17
|
||||||
|
17 - X (10) = 7
|
||||||
|
7 - V (5) = 2
|
||||||
|
2 - I (1) = 1
|
||||||
|
1 - I (1) = 0
|
||||||
|
XXVII
|
||||||
|
*/
|
||||||
|
|
||||||
|
function extraireChiffreRomain(valeurLettre, lettres) {
|
||||||
|
while (nombre >= valeurLettre) {
|
||||||
|
chiffresRomains = chiffresRomains + lettres;
|
||||||
|
nombre = nombre - valeurLettre;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
correspondancesRomainArabe.forEach(correspondance => {
|
||||||
|
extraireChiffreRomain(correspondance[0], correspondance[1]);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (chiffresRomains === '') {
|
||||||
|
return messageError;
|
||||||
|
} else {
|
||||||
|
return chiffresRomains;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function convertRomanToArabic
|
||||||
|
* @description Convertis un nombre romain en nombre arabe.
|
||||||
|
* @requires {@link variables.js: correspondancesRomainArabe}
|
||||||
|
* @param {string} str - Le nombre romain à convertir
|
||||||
|
* @returns {number}
|
||||||
|
* @example convertRomanToArabic('XXIV') → 24
|
||||||
|
*/
|
||||||
|
function convertRomanToArabic(str) {
|
||||||
|
let result = 0;
|
||||||
|
for (let i = 0;i < correspondancesRomainArabe.length; i++) {
|
||||||
|
while (str.indexOf(correspondancesRomainArabe[i][1]) === 0){
|
||||||
|
// Adding the decimal value to our result counter
|
||||||
|
result += correspondancesRomainArabe[i][0];
|
||||||
|
// Remove the matched Roman letter from the beginning
|
||||||
|
str = str.replace(correspondancesRomainArabe[i][1],'');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (str != '') {
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function armstrongNumber
|
||||||
|
* @description Vérifie si un nombre fait partie des nombres d'Armstrong.
|
||||||
|
* @param {number} number - Le nombre à tester
|
||||||
|
* @returns {string}
|
||||||
|
* @example armstrongNumber(153) → 153 est un nombre d'Armstrong, car 1<sup>3</sup> + 5<sup>3</sup> + 3<sup>3</sup> = 153.
|
||||||
|
*/
|
||||||
|
function armstrongNumber(number) {
|
||||||
|
let numberString = number.toString();
|
||||||
|
let numberStringLength = numberString.length;
|
||||||
|
|
||||||
|
let result = 0;
|
||||||
|
let resultString = "";
|
||||||
|
for (let i = 0; i < numberStringLength; i++) {
|
||||||
|
result = result + parseInt(numberString[i])**numberStringLength;
|
||||||
|
resultString = resultString + " + " + numberString[i] + "<sup>" + numberStringLength + "</sup>";
|
||||||
|
}
|
||||||
|
|
||||||
|
number = formatNumberResult(number);
|
||||||
|
if (result === number) {
|
||||||
|
return `${number} est un nombre d'Armstrong, car ${resultString.slice(2)} = ${formatNumberResult(result)}.`;
|
||||||
|
} else {
|
||||||
|
return `${number} n'est pas un nombre d'Armstrong, car ${resultString.slice(2)} = ${formatNumberResult(result)}.`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function stringPermutations
|
||||||
|
* @description Retourne un tableau contenant toutes les possibilités d'anagramme d'un mot.
|
||||||
|
* @param {string} string - La chaîne de caractère à permuter
|
||||||
|
* @returns {array}
|
||||||
|
* @example stringPermutations('abc') → ["abc", "acb", "bac", "bca", "cab", "cba"]
|
||||||
|
*/
|
||||||
|
function stringPermutations(string) {
|
||||||
|
let results = [];
|
||||||
|
|
||||||
|
if (string.length === 1) {
|
||||||
|
results.push(string);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < string.length; i++) {
|
||||||
|
let firstChar = string[i];
|
||||||
|
let charsLeft = string.substring(0, i) + string.substring(i + 1);
|
||||||
|
let innerPermutations = stringPermutations(charsLeft);
|
||||||
|
for (let i = 0; i < innerPermutations.length; i++) {
|
||||||
|
results.push(firstChar + innerPermutations[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
} </code></pre>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#armstrongNumber">armstrongNumber</a></li><li><a href="global.html#binaryToDecimal">binaryToDecimal</a></li><li><a href="global.html#binaryToHexadecimal">binaryToHexadecimal</a></li><li><a href="global.html#binaryToText">binaryToText</a></li><li><a href="global.html#calculateAge">calculateAge</a></li><li><a href="global.html#capitalize">capitalize</a></li><li><a href="global.html#convertArabicToRoman">convertArabicToRoman</a></li><li><a href="global.html#convertCurrency">convertCurrency</a></li><li><a href="global.html#convertDistance">convertDistance</a></li><li><a href="global.html#convertRomanToArabic">convertRomanToArabic</a></li><li><a href="global.html#convertTemperature">convertTemperature</a></li><li><a href="global.html#createSessionCookie">createSessionCookie</a></li><li><a href="global.html#dateTimeUTC">dateTimeUTC</a></li><li><a href="global.html#decimalToBinary">decimalToBinary</a></li><li><a href="global.html#decimalToHexadecimal">decimalToHexadecimal</a></li><li><a href="global.html#filterStudents">filterStudents</a></li><li><a href="global.html#formatNumberResult">formatNumberResult</a></li><li><a href="global.html#getRandomQuote">getRandomQuote</a></li><li><a href="global.html#hexadecimalToBinary">hexadecimalToBinary</a></li><li><a href="global.html#hexadecimalToDecimal">hexadecimalToDecimal</a></li><li><a href="global.html#hexadecimalToText">hexadecimalToText</a></li><li><a href="global.html#isEmptyValue">isEmptyValue</a></li><li><a href="global.html#isFloat">isFloat</a></li><li><a href="global.html#isValidDate">isValidDate</a></li><li><a href="global.html#numberUnicodeToText">numberUnicodeToText</a></li><li><a href="global.html#randomNumber">randomNumber</a></li><li><a href="global.html#realDateTime">realDateTime</a></li><li><a href="global.html#showDateTime">showDateTime</a></li><li><a href="global.html#stringPermutations">stringPermutations</a></li><li><a href="global.html#textToBinary">textToBinary</a></li><li><a href="global.html#textToHexadecimal">textToHexadecimal</a></li><li><a href="global.html#textToNumberUnicode">textToNumberUnicode</a></li><li><a href="global.html#weatherRequest">weatherRequest</a></li></ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<br class="clear">
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Mon Nov 11 2019 17:45:44 GMT+0100 (GMT+01:00)
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script> prettyPrint(); </script>
|
||||||
|
<script src="scripts/linenumber.js"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
__documentation/fonts/OpenSans-Bold-webfont.eot
Normal file
BIN
__documentation/fonts/OpenSans-Bold-webfont.eot
Normal file
Binary file not shown.
1830
__documentation/fonts/OpenSans-Bold-webfont.svg
Normal file
1830
__documentation/fonts/OpenSans-Bold-webfont.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 116 KiB |
BIN
__documentation/fonts/OpenSans-Bold-webfont.woff
Normal file
BIN
__documentation/fonts/OpenSans-Bold-webfont.woff
Normal file
Binary file not shown.
BIN
__documentation/fonts/OpenSans-BoldItalic-webfont.eot
Normal file
BIN
__documentation/fonts/OpenSans-BoldItalic-webfont.eot
Normal file
Binary file not shown.
1830
__documentation/fonts/OpenSans-BoldItalic-webfont.svg
Normal file
1830
__documentation/fonts/OpenSans-BoldItalic-webfont.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 118 KiB |
BIN
__documentation/fonts/OpenSans-BoldItalic-webfont.woff
Normal file
BIN
__documentation/fonts/OpenSans-BoldItalic-webfont.woff
Normal file
Binary file not shown.
BIN
__documentation/fonts/OpenSans-Italic-webfont.eot
Normal file
BIN
__documentation/fonts/OpenSans-Italic-webfont.eot
Normal file
Binary file not shown.
1830
__documentation/fonts/OpenSans-Italic-webfont.svg
Normal file
1830
__documentation/fonts/OpenSans-Italic-webfont.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 120 KiB |
BIN
__documentation/fonts/OpenSans-Italic-webfont.woff
Normal file
BIN
__documentation/fonts/OpenSans-Italic-webfont.woff
Normal file
Binary file not shown.
BIN
__documentation/fonts/OpenSans-Light-webfont.eot
Normal file
BIN
__documentation/fonts/OpenSans-Light-webfont.eot
Normal file
Binary file not shown.
1831
__documentation/fonts/OpenSans-Light-webfont.svg
Normal file
1831
__documentation/fonts/OpenSans-Light-webfont.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 114 KiB |
BIN
__documentation/fonts/OpenSans-Light-webfont.woff
Normal file
BIN
__documentation/fonts/OpenSans-Light-webfont.woff
Normal file
Binary file not shown.
BIN
__documentation/fonts/OpenSans-LightItalic-webfont.eot
Normal file
BIN
__documentation/fonts/OpenSans-LightItalic-webfont.eot
Normal file
Binary file not shown.
1835
__documentation/fonts/OpenSans-LightItalic-webfont.svg
Normal file
1835
__documentation/fonts/OpenSans-LightItalic-webfont.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 120 KiB |
BIN
__documentation/fonts/OpenSans-LightItalic-webfont.woff
Normal file
BIN
__documentation/fonts/OpenSans-LightItalic-webfont.woff
Normal file
Binary file not shown.
BIN
__documentation/fonts/OpenSans-Regular-webfont.eot
Normal file
BIN
__documentation/fonts/OpenSans-Regular-webfont.eot
Normal file
Binary file not shown.
1831
__documentation/fonts/OpenSans-Regular-webfont.svg
Normal file
1831
__documentation/fonts/OpenSans-Regular-webfont.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 117 KiB |
BIN
__documentation/fonts/OpenSans-Regular-webfont.woff
Normal file
BIN
__documentation/fonts/OpenSans-Regular-webfont.woff
Normal file
Binary file not shown.
5607
__documentation/global.html
Normal file
5607
__documentation/global.html
Normal file
File diff suppressed because it is too large
Load Diff
76
__documentation/index.html
Normal file
76
__documentation/index.html
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>JSDoc: Home</title>
|
||||||
|
|
||||||
|
<script src="scripts/prettify/prettify.js"> </script>
|
||||||
|
<script src="scripts/prettify/lang-css.js"> </script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
|
||||||
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="main">
|
||||||
|
|
||||||
|
<h1 class="page-title">FunctionProject</h1>
|
||||||
|
|
||||||
|
<h3> </h3>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<article>
|
||||||
|
<p><img src="https://cloud.divlo.fr/public_files/others/Trash/under_dev.svg" alt="Badge Status"></p>
|
||||||
|
<p><a href="https://divlo.fr/">À propos de Divlo</a> | <a href="https://www.youtube.com/c/Divlo">Youtube</a> | <a href="https://www.twitch.tv/divlo">Twitch</a> | <a href="https://twitter.com/Divlo_FR">Twitter</a> | <a href="mailto:contact@divlo.fr">E-mail</a></p>
|
||||||
|
<h2>À propos de FunctionProject</h2>
|
||||||
|
<p><a href="https://function.divlo.fr/">FunctionProject</a> est un projet créé par <a href="https://divlo.fr/">Divlo</a> qui a pour but de rassembler plein de mini-programmes permettant de faire plusieurs choses comme <strong>savoir la météo</strong>, générer un <strong>nombre aléatoire</strong>, etc.</p>
|
||||||
|
<p>Le projet est disponible sur <a href="https://function.divlo.fr/">function.divlo.fr</a>.</p>
|
||||||
|
<p><a href="https://function.divlo.fr/"><img src="../img/FunctionProject.png" alt="FunctionProject"></a></p>
|
||||||
|
<h2>Installation</h2>
|
||||||
|
<p><strong>Note :</strong> Vous aurez besoin d’un serveur Apache pour utiliser PHP (exemple: <a href="https://www.apachefriends.org">XAMPP</a>).</p>
|
||||||
|
<p>Cloner le dépôt en utilisant git :</p>
|
||||||
|
<pre class="prettyprint source lang-text"><code>git clone https://github.com/Divlo/FunctionProject
|
||||||
|
</code></pre>
|
||||||
|
<p>Puis créer un nouveau fichier dans <code>/php</code> du nom de <code>keyVariable.php</code>, puis vous mettrez ce code à l'intérieur, il faudra modifier la valeur de la variable '$apiWeather' par votre clé d'api de <a href="https://openweathermap.org/">openweathermap.org</a>.</p>
|
||||||
|
<pre class="prettyprint source lang-php"><code><?php
|
||||||
|
$apiWeather = 'votre clé api pour openweathermap.org';
|
||||||
|
</code></pre>
|
||||||
|
<p>Enjoy! =D</p>
|
||||||
|
<h2>Librairies</h2>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://fontawesome.com/">Fontawesome</a></li>
|
||||||
|
<li><a href="https://getbootstrap.com/">Bootstrap</a></li>
|
||||||
|
<li><a href="https://jquery.com/">jQuery</a></li>
|
||||||
|
<li><a href="https://jqueryui.com/">jQuery UI</a></li>
|
||||||
|
<li><a href="https://momentjs.com/">Moment.js</a></li>
|
||||||
|
</ul>
|
||||||
|
<h2>Documentation</h2>
|
||||||
|
<p>Pour le moment dans le dossier <code>/__documentation</code>, bientôt un README.md pour bien comprendre comment fonctionne la doc.</p>
|
||||||
|
<h2>Licence</h2>
|
||||||
|
<p>Ce projet est sous licence MIT - voir le fichier <a href="./LICENSE">LICENSE</a> pour plus de détails.</p></article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<nav>
|
||||||
|
<h2><a href="index.html">Home</a></h2><h3><a href="./global.html">Global</a></h3><ul><li><a href="global.html#armstrongNumber">armstrongNumber</a></li><li><a href="global.html#binaryToDecimal">binaryToDecimal</a></li><li><a href="global.html#binaryToHexadecimal">binaryToHexadecimal</a></li><li><a href="global.html#binaryToText">binaryToText</a></li><li><a href="global.html#calculateAge">calculateAge</a></li><li><a href="global.html#capitalize">capitalize</a></li><li><a href="global.html#convertArabicToRoman">convertArabicToRoman</a></li><li><a href="global.html#convertCurrency">convertCurrency</a></li><li><a href="global.html#convertDistance">convertDistance</a></li><li><a href="global.html#convertRomanToArabic">convertRomanToArabic</a></li><li><a href="global.html#convertTemperature">convertTemperature</a></li><li><a href="global.html#createSessionCookie">createSessionCookie</a></li><li><a href="global.html#dateTimeUTC">dateTimeUTC</a></li><li><a href="global.html#decimalToBinary">decimalToBinary</a></li><li><a href="global.html#decimalToHexadecimal">decimalToHexadecimal</a></li><li><a href="global.html#filterStudents">filterStudents</a></li><li><a href="global.html#formatNumberResult">formatNumberResult</a></li><li><a href="global.html#getRandomQuote">getRandomQuote</a></li><li><a href="global.html#hexadecimalToBinary">hexadecimalToBinary</a></li><li><a href="global.html#hexadecimalToDecimal">hexadecimalToDecimal</a></li><li><a href="global.html#hexadecimalToText">hexadecimalToText</a></li><li><a href="global.html#isEmptyValue">isEmptyValue</a></li><li><a href="global.html#isFloat">isFloat</a></li><li><a href="global.html#isValidDate">isValidDate</a></li><li><a href="global.html#numberUnicodeToText">numberUnicodeToText</a></li><li><a href="global.html#randomNumber">randomNumber</a></li><li><a href="global.html#realDateTime">realDateTime</a></li><li><a href="global.html#showDateTime">showDateTime</a></li><li><a href="global.html#stringPermutations">stringPermutations</a></li><li><a href="global.html#textToBinary">textToBinary</a></li><li><a href="global.html#textToHexadecimal">textToHexadecimal</a></li><li><a href="global.html#textToNumberUnicode">textToNumberUnicode</a></li><li><a href="global.html#weatherRequest">weatherRequest</a></li></ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<br class="clear">
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.3</a> on Mon Nov 11 2019 17:45:44 GMT+0100 (GMT+01:00)
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script> prettyPrint(); </script>
|
||||||
|
<script src="scripts/linenumber.js"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
25
__documentation/scripts/linenumber.js
Normal file
25
__documentation/scripts/linenumber.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
/*global document */
|
||||||
|
(() => {
|
||||||
|
const source = document.getElementsByClassName('prettyprint source linenums');
|
||||||
|
let i = 0;
|
||||||
|
let lineNumber = 0;
|
||||||
|
let lineId;
|
||||||
|
let lines;
|
||||||
|
let totalLines;
|
||||||
|
let anchorHash;
|
||||||
|
|
||||||
|
if (source && source[0]) {
|
||||||
|
anchorHash = document.location.hash.substring(1);
|
||||||
|
lines = source[0].getElementsByTagName('li');
|
||||||
|
totalLines = lines.length;
|
||||||
|
|
||||||
|
for (; i < totalLines; i++) {
|
||||||
|
lineNumber++;
|
||||||
|
lineId = `line${lineNumber}`;
|
||||||
|
lines[i].id = lineId;
|
||||||
|
if (lineId === anchorHash) {
|
||||||
|
lines[i].className += ' selected';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
202
__documentation/scripts/prettify/Apache-License-2.0.txt
Normal file
202
__documentation/scripts/prettify/Apache-License-2.0.txt
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
2
__documentation/scripts/prettify/lang-css.js
Normal file
2
__documentation/scripts/prettify/lang-css.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n"]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com",
|
||||||
|
/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]);
|
28
__documentation/scripts/prettify/prettify.js
Normal file
28
__documentation/scripts/prettify/prettify.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
|
||||||
|
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
|
||||||
|
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
|
||||||
|
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
|
||||||
|
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
|
||||||
|
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
|
||||||
|
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
|
||||||
|
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
|
||||||
|
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
|
||||||
|
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
|
||||||
|
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
|
||||||
|
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
|
||||||
|
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
|
||||||
|
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
|
||||||
|
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
|
||||||
|
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
|
||||||
|
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
|
||||||
|
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
|
||||||
|
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
|
||||||
|
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
|
||||||
|
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
|
||||||
|
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
|
||||||
|
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
|
||||||
|
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
|
||||||
|
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
|
||||||
|
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
|
||||||
|
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
|
||||||
|
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
|
358
__documentation/styles/jsdoc-default.css
Normal file
358
__documentation/styles/jsdoc-default.css
Normal file
@ -0,0 +1,358 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url('../fonts/OpenSans-Regular-webfont.eot');
|
||||||
|
src:
|
||||||
|
local('Open Sans'),
|
||||||
|
local('OpenSans'),
|
||||||
|
url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),
|
||||||
|
url('../fonts/OpenSans-Regular-webfont.woff') format('woff'),
|
||||||
|
url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Open Sans Light';
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
src: url('../fonts/OpenSans-Light-webfont.eot');
|
||||||
|
src:
|
||||||
|
local('Open Sans Light'),
|
||||||
|
local('OpenSans Light'),
|
||||||
|
url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),
|
||||||
|
url('../fonts/OpenSans-Light-webfont.woff') format('woff'),
|
||||||
|
url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
html
|
||||||
|
{
|
||||||
|
overflow: auto;
|
||||||
|
background-color: #fff;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body
|
||||||
|
{
|
||||||
|
font-family: 'Open Sans', sans-serif;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #4d4e53;
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
a, a:visited, a:active {
|
||||||
|
color: #0095dd;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
header
|
||||||
|
{
|
||||||
|
display: block;
|
||||||
|
padding: 0px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tt, code, kbd, samp {
|
||||||
|
font-family: Consolas, Monaco, 'Andale Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.class-description {
|
||||||
|
font-size: 130%;
|
||||||
|
line-height: 140%;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.class-description:empty {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main {
|
||||||
|
float: left;
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
|
||||||
|
article dl {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
article img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
section
|
||||||
|
{
|
||||||
|
display: block;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 12px 24px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
margin-right: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.variation {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.signature-attributes {
|
||||||
|
font-size: 60%;
|
||||||
|
color: #aaa;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav
|
||||||
|
{
|
||||||
|
display: block;
|
||||||
|
float: right;
|
||||||
|
margin-top: 28px;
|
||||||
|
width: 30%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-left: 1px solid #ccc;
|
||||||
|
padding-left: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav ul {
|
||||||
|
font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
|
||||||
|
font-size: 100%;
|
||||||
|
line-height: 17px;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav ul a, nav ul a:visited, nav ul a:active {
|
||||||
|
font-family: Consolas, Monaco, 'Andale Mono', monospace;
|
||||||
|
line-height: 18px;
|
||||||
|
color: #4D4E53;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav h3 {
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav li {
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
display: block;
|
||||||
|
padding: 6px;
|
||||||
|
margin-top: 12px;
|
||||||
|
font-style: italic;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4 {
|
||||||
|
font-weight: 200;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1
|
||||||
|
{
|
||||||
|
font-family: 'Open Sans Light', sans-serif;
|
||||||
|
font-size: 48px;
|
||||||
|
letter-spacing: -2px;
|
||||||
|
margin: 12px 24px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2, h3.subsection-title
|
||||||
|
{
|
||||||
|
font-size: 30px;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3
|
||||||
|
{
|
||||||
|
font-size: 24px;
|
||||||
|
letter-spacing: -0.5px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4
|
||||||
|
{
|
||||||
|
font-size: 18px;
|
||||||
|
letter-spacing: -0.33px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
color: #4d4e53;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5, .container-overview .subsection-title
|
||||||
|
{
|
||||||
|
font-size: 120%;
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
margin: 8px 0 3px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6
|
||||||
|
{
|
||||||
|
font-size: 100%;
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
margin: 6px 0 3px 0;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
table
|
||||||
|
{
|
||||||
|
border-spacing: 0;
|
||||||
|
border: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
td, th
|
||||||
|
{
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
margin: 0px;
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
padding: 4px 6px;
|
||||||
|
display: table-cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
thead tr
|
||||||
|
{
|
||||||
|
background-color: #ddd;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
th { border-right: 1px solid #aaa; }
|
||||||
|
tr > th:last-child { border-right: 1px solid #ddd; }
|
||||||
|
|
||||||
|
.ancestors, .attribs { color: #999; }
|
||||||
|
.ancestors a, .attribs a
|
||||||
|
{
|
||||||
|
color: #999 !important;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear
|
||||||
|
{
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.important
|
||||||
|
{
|
||||||
|
font-weight: bold;
|
||||||
|
color: #950B02;
|
||||||
|
}
|
||||||
|
|
||||||
|
.yes-def {
|
||||||
|
text-indent: -1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.type-signature {
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name, .signature {
|
||||||
|
font-family: Consolas, Monaco, 'Andale Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.details { margin-top: 14px; border-left: 2px solid #DDD; }
|
||||||
|
.details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; }
|
||||||
|
.details dd { margin-left: 70px; }
|
||||||
|
.details ul { margin: 0; }
|
||||||
|
.details ul { list-style-type: none; }
|
||||||
|
.details li { margin-left: 30px; padding-top: 6px; }
|
||||||
|
.details pre.prettyprint { margin: 0 }
|
||||||
|
.details .object-value { padding-top: 0; }
|
||||||
|
|
||||||
|
.description {
|
||||||
|
margin-bottom: 1em;
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-caption
|
||||||
|
{
|
||||||
|
font-style: italic;
|
||||||
|
font-size: 107%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.source
|
||||||
|
{
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
width: 80%;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prettyprint.source {
|
||||||
|
width: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.source code
|
||||||
|
{
|
||||||
|
font-size: 100%;
|
||||||
|
line-height: 18px;
|
||||||
|
display: block;
|
||||||
|
padding: 4px 12px;
|
||||||
|
margin: 0;
|
||||||
|
background-color: #fff;
|
||||||
|
color: #4D4E53;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prettyprint code span.line
|
||||||
|
{
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prettyprint.linenums
|
||||||
|
{
|
||||||
|
padding-left: 70px;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prettyprint.linenums ol
|
||||||
|
{
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prettyprint.linenums li
|
||||||
|
{
|
||||||
|
border-left: 3px #ddd solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prettyprint.linenums li.selected,
|
||||||
|
.prettyprint.linenums li.selected *
|
||||||
|
{
|
||||||
|
background-color: lightyellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prettyprint.linenums li *
|
||||||
|
{
|
||||||
|
-webkit-user-select: text;
|
||||||
|
-moz-user-select: text;
|
||||||
|
-ms-user-select: text;
|
||||||
|
user-select: text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.params .name, .props .name, .name code {
|
||||||
|
color: #4D4E53;
|
||||||
|
font-family: Consolas, Monaco, 'Andale Mono', monospace;
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.params td.description > p:first-child,
|
||||||
|
.props td.description > p:first-child
|
||||||
|
{
|
||||||
|
margin-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.params td.description > p:last-child,
|
||||||
|
.props td.description > p:last-child
|
||||||
|
{
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.disabled {
|
||||||
|
color: #454545;
|
||||||
|
}
|
111
__documentation/styles/prettify-jsdoc.css
Normal file
111
__documentation/styles/prettify-jsdoc.css
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/* JSDoc prettify.js theme */
|
||||||
|
|
||||||
|
/* plain text */
|
||||||
|
.pln {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* string content */
|
||||||
|
.str {
|
||||||
|
color: #006400;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a keyword */
|
||||||
|
.kwd {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a comment */
|
||||||
|
.com {
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a type name */
|
||||||
|
.typ {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a literal value */
|
||||||
|
.lit {
|
||||||
|
color: #006400;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* punctuation */
|
||||||
|
.pun {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* lisp open bracket */
|
||||||
|
.opn {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* lisp close bracket */
|
||||||
|
.clo {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a markup tag name */
|
||||||
|
.tag {
|
||||||
|
color: #006400;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a markup attribute name */
|
||||||
|
.atn {
|
||||||
|
color: #006400;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a markup attribute value */
|
||||||
|
.atv {
|
||||||
|
color: #006400;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a declaration */
|
||||||
|
.dec {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a variable name */
|
||||||
|
.var {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* a function name */
|
||||||
|
.fun {
|
||||||
|
color: #000000;
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Specify class=linenums on a pre to get line numbering */
|
||||||
|
ol.linenums {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
132
__documentation/styles/prettify-tomorrow.css
Normal file
132
__documentation/styles/prettify-tomorrow.css
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
/* Tomorrow Theme */
|
||||||
|
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
|
||||||
|
/* Pretty printing styles. Used with prettify.js. */
|
||||||
|
/* SPAN elements with the classes below are added by prettyprint. */
|
||||||
|
/* plain text */
|
||||||
|
.pln {
|
||||||
|
color: #4d4d4c; }
|
||||||
|
|
||||||
|
@media screen {
|
||||||
|
/* string content */
|
||||||
|
.str {
|
||||||
|
color: #718c00; }
|
||||||
|
|
||||||
|
/* a keyword */
|
||||||
|
.kwd {
|
||||||
|
color: #8959a8; }
|
||||||
|
|
||||||
|
/* a comment */
|
||||||
|
.com {
|
||||||
|
color: #8e908c; }
|
||||||
|
|
||||||
|
/* a type name */
|
||||||
|
.typ {
|
||||||
|
color: #4271ae; }
|
||||||
|
|
||||||
|
/* a literal value */
|
||||||
|
.lit {
|
||||||
|
color: #f5871f; }
|
||||||
|
|
||||||
|
/* punctuation */
|
||||||
|
.pun {
|
||||||
|
color: #4d4d4c; }
|
||||||
|
|
||||||
|
/* lisp open bracket */
|
||||||
|
.opn {
|
||||||
|
color: #4d4d4c; }
|
||||||
|
|
||||||
|
/* lisp close bracket */
|
||||||
|
.clo {
|
||||||
|
color: #4d4d4c; }
|
||||||
|
|
||||||
|
/* a markup tag name */
|
||||||
|
.tag {
|
||||||
|
color: #c82829; }
|
||||||
|
|
||||||
|
/* a markup attribute name */
|
||||||
|
.atn {
|
||||||
|
color: #f5871f; }
|
||||||
|
|
||||||
|
/* a markup attribute value */
|
||||||
|
.atv {
|
||||||
|
color: #3e999f; }
|
||||||
|
|
||||||
|
/* a declaration */
|
||||||
|
.dec {
|
||||||
|
color: #f5871f; }
|
||||||
|
|
||||||
|
/* a variable name */
|
||||||
|
.var {
|
||||||
|
color: #c82829; }
|
||||||
|
|
||||||
|
/* a function name */
|
||||||
|
.fun {
|
||||||
|
color: #4271ae; } }
|
||||||
|
/* Use higher contrast and text-weight for printable form. */
|
||||||
|
@media print, projection {
|
||||||
|
.str {
|
||||||
|
color: #060; }
|
||||||
|
|
||||||
|
.kwd {
|
||||||
|
color: #006;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.com {
|
||||||
|
color: #600;
|
||||||
|
font-style: italic; }
|
||||||
|
|
||||||
|
.typ {
|
||||||
|
color: #404;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.lit {
|
||||||
|
color: #044; }
|
||||||
|
|
||||||
|
.pun, .opn, .clo {
|
||||||
|
color: #440; }
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
color: #006;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.atn {
|
||||||
|
color: #404; }
|
||||||
|
|
||||||
|
.atv {
|
||||||
|
color: #060; } }
|
||||||
|
/* Style */
|
||||||
|
/*
|
||||||
|
pre.prettyprint {
|
||||||
|
background: white;
|
||||||
|
font-family: Consolas, Monaco, 'Andale Mono', monospace;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 1.5;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
padding: 10px; }
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Specify class=linenums on a pre to get line numbering */
|
||||||
|
ol.linenums {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0; }
|
||||||
|
|
||||||
|
/* IE indents via margin-left */
|
||||||
|
li.L0,
|
||||||
|
li.L1,
|
||||||
|
li.L2,
|
||||||
|
li.L3,
|
||||||
|
li.L4,
|
||||||
|
li.L5,
|
||||||
|
li.L6,
|
||||||
|
li.L7,
|
||||||
|
li.L8,
|
||||||
|
li.L9 {
|
||||||
|
/* */ }
|
||||||
|
|
||||||
|
/* Alternate shading for lines */
|
||||||
|
li.L1,
|
||||||
|
li.L3,
|
||||||
|
li.L5,
|
||||||
|
li.L7,
|
||||||
|
li.L9 {
|
||||||
|
/* */ }
|
@ -1,11 +1,23 @@
|
|||||||
/* Fonctions Annexes */
|
/* Fonctions Annexes */
|
||||||
|
|
||||||
// Vérifie si une valeur est vide
|
/**
|
||||||
|
* @function isEmptyValue
|
||||||
|
* @description Vérifie si une valeur est vide.
|
||||||
|
* @param {string} value
|
||||||
|
* @returns {boolean}
|
||||||
|
* @example isEmptyValue(null) → true
|
||||||
|
*/
|
||||||
function isEmptyValue(value) {
|
function isEmptyValue(value) {
|
||||||
return value === '' || value === null || value === undefined;
|
return value === '' || value === null || value === undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Formate les nombres avec des espaces (ex : 76120 = 76 120)
|
/**
|
||||||
|
* @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) {
|
function formatNumberResult(num) {
|
||||||
if(!isNaN(num) && num >= 1000) {
|
if(!isNaN(num) && num >= 1000) {
|
||||||
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1 ');
|
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1 ');
|
||||||
@ -13,32 +25,54 @@ function formatNumberResult(num) {
|
|||||||
else {
|
else {
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vérifie si une string est un float (integer exclu)
|
/**
|
||||||
|
* @function isFloat
|
||||||
|
* @description Vérifie si une string est un float (integer exclu).
|
||||||
|
* @param {number} value
|
||||||
|
* @returns {boolean}
|
||||||
|
* @example isFloat(76120.474) → true
|
||||||
|
*/
|
||||||
function isFloat(value) {
|
function isFloat(value) {
|
||||||
return !isNaN(value) && value.toString().includes('.');
|
return !isNaN(value) && value.toString().includes('.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convertit les puissances de 10 en nombre (ex: 1e+20 = 100 000 000 000 000 000 000), ne peut pas dépasser 1e+20 (21 ne fonctionne pas)
|
/**
|
||||||
function convertPuissanceToNumber(num) {
|
* @function capitalize
|
||||||
return formatNumberResult((num).toFixed(0));
|
* @description Majuscule à la 1ère lettre d'une string.
|
||||||
}
|
* @param {string} s
|
||||||
|
* @returns {string}
|
||||||
// Majuscule à la 1ère lettre d'une string
|
* @example capitalize('hello world!') → 'Hello world!'
|
||||||
function capitalize (s) {
|
*/
|
||||||
|
function capitalize(s) {
|
||||||
if (typeof s !== 'string') return ''
|
if (typeof s !== 'string') return ''
|
||||||
return s.charAt(0).toUpperCase() + s.slice(1)
|
return s.charAt(0).toUpperCase() + s.slice(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Donne la date et l'heure selon l'UTC (Universal Time Coordinated)
|
/**
|
||||||
|
* @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) {
|
function dateTimeUTC(utc) {
|
||||||
const enteredOffset = parseFloat(utc)*60;
|
const enteredOffset = parseFloat(utc)*60;
|
||||||
timeNow.setMinutes(timeNow.getMinutes() + enteredOffset);
|
timeNow.setMinutes(timeNow.getMinutes() + enteredOffset);
|
||||||
return showDateTime(enteredOffset);
|
return showDateTime(enteredOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Affiche la date et l'heure (format : dd/mm/yyyy - 00:00:00)
|
/**
|
||||||
|
* @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) {
|
function showDateTime(enteredOffset) {
|
||||||
const year = timeNow.getFullYear();
|
const year = timeNow.getFullYear();
|
||||||
const month = ('0'+(timeNow.getMonth()+1)).slice(-2);
|
const month = ('0'+(timeNow.getMonth()+1)).slice(-2);
|
||||||
@ -62,7 +96,13 @@ function showDateTime(enteredOffset) {
|
|||||||
return objectDateTime;
|
return objectDateTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Affiche l'heure en temps réel
|
/**
|
||||||
|
* @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) {
|
function realDateTime(id) {
|
||||||
const realDateTimeNow = new Date;
|
const realDateTimeNow = new Date;
|
||||||
// const year = realDateTimeNow.getFullYear();
|
// const year = realDateTimeNow.getFullYear();
|
||||||
@ -79,7 +119,16 @@ function realDateTime(id) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vérifie si une date est valide par rapport à la date d'aujourd'hui
|
/**
|
||||||
|
* @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) {
|
function isValidDate(verifyDate, currentDate) {
|
||||||
// Date à vérifier
|
// Date à vérifier
|
||||||
const toVerifyDate = verifyDate.split('/');
|
const toVerifyDate = verifyDate.split('/');
|
||||||
@ -101,7 +150,12 @@ function isValidDate(verifyDate, currentDate) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Créer un cookie de session
|
/**
|
||||||
|
* @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) {
|
function createSessionCookie(name, value) {
|
||||||
document.cookie = escape(name) + "=" + escape(value) + " ; path=/";
|
document.cookie = escape(name) + "=" + escape(value) + " ; path=/";
|
||||||
}
|
}
|
@ -1,6 +1,17 @@
|
|||||||
/* Fonctions Principales */
|
/* Fonctions Principales */
|
||||||
|
|
||||||
// Affiche la météo et l'heure locale.
|
/**
|
||||||
|
* @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 /scripts/main.js} et {@link /php/getWeatherJson.php}
|
||||||
|
* @requires {@link fonctions_annexes.js: formatNumberResult, 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
|
||||||
|
* Ajoute au DOM de la page dans la div .results, la météo de la ville demandée.
|
||||||
|
*/
|
||||||
function weatherRequest() {
|
function weatherRequest() {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/php/getWeatherJson.php',
|
url: '/php/getWeatherJson.php',
|
||||||
@ -20,7 +31,14 @@ function weatherRequest() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Génère un nombre aléatoire entre un minimum inclus et un maximum inclus
|
/**
|
||||||
|
* @function randomNumber
|
||||||
|
* @description Génère un nombre aléatoire entre un minimum inclus et un maximum inclus.
|
||||||
|
* @param {number} min Nombre Minimum
|
||||||
|
* @param {number} max Nombre Maximum
|
||||||
|
* @returns {number} Nombre aléatoire
|
||||||
|
* @example randomNumber(1, 2) → retourne soit 1 ou 2
|
||||||
|
*/
|
||||||
function randomNumber(min, max) {
|
function randomNumber(min, max) {
|
||||||
if (!isNaN(min) && !isNaN(max)) {
|
if (!isNaN(min) && !isNaN(max)) {
|
||||||
min = Math.ceil(min);
|
min = Math.ceil(min);
|
||||||
@ -30,9 +48,18 @@ function randomNumber(min, max) {
|
|||||||
else {
|
else {
|
||||||
return messageError;
|
return messageError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calcule l'âge de quelqu'un selon ça date de naissance
|
/**
|
||||||
|
* @function calculateAge
|
||||||
|
* @description Calcule l'âge de quelqu'un selon ça date de naissance.
|
||||||
|
* @requires {@link fonctions_annexes.js: formatNumberResult, isValidDate}
|
||||||
|
* @requires {@link "external:moment.js"}
|
||||||
|
* @see {@link https://momentjs.com/}
|
||||||
|
* @param {string} birthDateEntered - Date de naissance (dd/mm/yyyy)
|
||||||
|
* @returns {string} - L'âge en jours, mois et années
|
||||||
|
* @example calculateAge('31/03/2003')
|
||||||
|
*/
|
||||||
function calculateAge(birthDateEntered) {
|
function calculateAge(birthDateEntered) {
|
||||||
// Les variables de la fonction
|
// Les variables de la fonction
|
||||||
const birthDateDay = parseInt(birthDateEntered.substring(0, 2));
|
const birthDateDay = parseInt(birthDateEntered.substring(0, 2));
|
||||||
@ -69,9 +96,16 @@ function calculateAge(birthDateEntered) {
|
|||||||
else {
|
else {
|
||||||
return messageError;
|
return messageError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convertis des °C en °F et l'inverse aussi
|
/**
|
||||||
|
* @function convertTemperature
|
||||||
|
* @description Convertis des °C en °F et l'inverse aussi.
|
||||||
|
* @param {number} degree - Nombre de degrès
|
||||||
|
* @param {string} unit - Unité du nombre (°C ou °F)
|
||||||
|
* @returns {string} - degree unit = temperatureValue
|
||||||
|
* @example convertTemperature(23, '°C') → 23 °C = 73.4 °F
|
||||||
|
*/
|
||||||
function convertTemperature(degree, unit) {
|
function convertTemperature(degree, unit) {
|
||||||
if (!isNaN(degree) && unit === "°C") {
|
if (!isNaN(degree) && unit === "°C") {
|
||||||
const temperatureValue = ((degree * 9/5) + 32) + " °F";
|
const temperatureValue = ((degree * 9/5) + 32) + " °F";
|
||||||
@ -84,9 +118,17 @@ function convertTemperature(degree, unit) {
|
|||||||
else {
|
else {
|
||||||
return messageError;
|
return messageError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convertis la longueur (distance) avec les unités allant de picomètre au Téramètre
|
/**
|
||||||
|
* @function convertDistance
|
||||||
|
* @description Convertis la longueur (distance) avec les unités allant de picomètre au Téramètre.
|
||||||
|
* @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
|
||||||
|
* @returns {string} - Conversion de longueur : firstValue unitFirstValue = result
|
||||||
|
* @example convertDistance(500, 'cm', 'm') → Conversion de longueur : 500 cm = 5 m
|
||||||
|
*/
|
||||||
function convertDistance (firstValue, unitFirstValue, unitFinalValue) {
|
function convertDistance (firstValue, unitFirstValue, unitFinalValue) {
|
||||||
|
|
||||||
const reference = ["pm",null,null,"nm",null,null,"µm",null,null,"mm","cm","dm","m","dam","hm","km",null,null,"Mm",null,null,"Gm",null,null,"Tm"];
|
const reference = ["pm",null,null,"nm",null,null,"µm",null,null,"mm","cm","dm","m","dam","hm","km",null,null,"Mm",null,null,"Gm",null,null,"Tm"];
|
||||||
@ -98,15 +140,21 @@ function convertDistance (firstValue, unitFirstValue, unitFinalValue) {
|
|||||||
// Conversion des longueurs :
|
// Conversion des longueurs :
|
||||||
const difference = index1 - index2;
|
const difference = index1 - index2;
|
||||||
const result = firstValue*Math.pow(10,difference);
|
const result = firstValue*Math.pow(10,difference);
|
||||||
const response = 'Conversion de longueur : ' + formatNumberResult(firstValue).toString() + ' ' + unitFirstValue + ' = ' + formatNumberResult(result) + ' ' + unitFinalValue;
|
return 'Conversion de longueur : ' + formatNumberResult(firstValue).toString() + ' ' + unitFirstValue + ' = ' + formatNumberResult(result) + ' ' + unitFinalValue;
|
||||||
return response;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return messageError;
|
return messageError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Affiche uniquement les prénoms (qui sont dans la liste) qui commencent par la lettre souhaitée
|
/**
|
||||||
|
* @function filterStudents
|
||||||
|
* @description Affiche uniquement les prénoms (qui sont dans la liste) qui commencent par la lettre souhaitée.
|
||||||
|
* @param {string} filteredLetter - La lettre à filtré
|
||||||
|
* @param {array} students - La liste des prénoms
|
||||||
|
* @returns {string} - Prénoms qui commence par filteredLetter (totalfilteredLetterStudents) : filteredStudents
|
||||||
|
* @example filterStudents('P', ['Prénom1', 'Prénom2', 'Divlo']) → Prénoms qui commence par P (2) : Prénom1 et Prénom2.
|
||||||
|
*/
|
||||||
function filterStudents(filteredLetter, students)
|
function filterStudents(filteredLetter, students)
|
||||||
{
|
{
|
||||||
let filteredStudents = [];
|
let filteredStudents = [];
|
||||||
@ -130,16 +178,37 @@ function filterStudents(filteredLetter, students)
|
|||||||
else {
|
else {
|
||||||
return ("Il n'y a pas de prénom commencant par " + filteredLetter + ".");
|
return ("Il n'y a pas de prénom commencant par " + filteredLetter + ".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Génère aléatoirement une citation ou un proverbe
|
/**
|
||||||
|
* @function getRandomQuote
|
||||||
|
* @description Génère aléatoirement une citation ou un proverbe.
|
||||||
|
* @requires {@link variables.js: quotes}
|
||||||
|
* @requires {@link fonctions_principales.js: randomNumber}
|
||||||
|
* @returns {string} - une citation au hasard à partir de la constante 'quotes' dans variables.js
|
||||||
|
* @example getRandomQuote() → " Ne fais jamais rien contre ta conscience, même si l'Etat te le demande. " <br> <br> - Albert Einstein
|
||||||
|
*/
|
||||||
function getRandomQuote() {
|
function getRandomQuote() {
|
||||||
const randomNbr = randomNumber(0, (quotes.length - 1));
|
const randomNbr = randomNumber(0, (quotes.length - 1));
|
||||||
const randomQuotes = quotes[randomNbr];
|
const randomQuotes = quotes[randomNbr];
|
||||||
return '" ' + randomQuotes["quote"] + ' " <br> <br> - ' + randomQuotes["source"];
|
return '" ' + randomQuotes["quote"] + ' " <br> <br> - ' + randomQuotes["source"];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convertis une valeur dans une devise dans une autre devise
|
/**
|
||||||
|
* @function convertCurrency
|
||||||
|
* @description Convertis une valeur dans une devise dans une autre devise grâce à l'API exchangeratesapi.io.
|
||||||
|
* @requires {@link fonctions_annexes.js: formatNumberResult}
|
||||||
|
* @requires {@link variables.js: correspondancesMonnaie}
|
||||||
|
* @see {@link https://jquery.com/} Requête en AJAX avec jQuery
|
||||||
|
* @see {@link https://api.exchangeratesapi.io/} API de taux de change
|
||||||
|
* @param {number} value - la valeur à convertir
|
||||||
|
* @param {string} currency - la devise à avoir après conversion
|
||||||
|
* @param {string} url - l'url de la requête à l'API en fonction du paramètre dans l'url '?base='
|
||||||
|
* @example convertCurrency(50, "$ Américain", "https://api.exchangeratesapi.io/latest?base=EUR")
|
||||||
|
* Ajoute au DOM de la page dans la div .results et .rateDate :
|
||||||
|
* 50 EUR = 55.17 $ Américain
|
||||||
|
* Dernier rafraîchissement du taux d'échange : 08/11/2019
|
||||||
|
*/
|
||||||
function convertCurrency(value, currency, url) {
|
function convertCurrency(value, currency, url) {
|
||||||
function currencyTest(currencyToTest) {
|
function currencyTest(currencyToTest) {
|
||||||
for (let index in correspondancesMonnaie) {
|
for (let index in correspondancesMonnaie) {
|
||||||
@ -158,11 +227,8 @@ function convertCurrency(value, currency, url) {
|
|||||||
if (currencySymboleAPI === undefined) {
|
if (currencySymboleAPI === undefined) {
|
||||||
currencySymboleAPI = 1;
|
currencySymboleAPI = 1;
|
||||||
}
|
}
|
||||||
const exchangeRateYear = jsonFixer.date[0] + jsonFixer.date[1] + jsonFixer.date[2] + jsonFixer.date[3];
|
|
||||||
const exchangeRateMonth = jsonFixer.date[5] + jsonFixer.date[6];
|
|
||||||
const exchangeRateDay = jsonFixer.date[8] + jsonFixer.date[9];
|
|
||||||
$('.results').html(formatNumberResult(value) + ' ' + jsonFixer.base + ' = ' + formatNumberResult((currencySymboleAPI * value).toFixed(2)) + ' ' + currency);
|
$('.results').html(formatNumberResult(value) + ' ' + jsonFixer.base + ' = ' + formatNumberResult((currencySymboleAPI * value).toFixed(2)) + ' ' + currency);
|
||||||
$('.rateDate').html(`Dernier rafraîchissement du taux d'échange : ${exchangeRateDay}/${exchangeRateMonth}/${exchangeRateYear}`);
|
$('.rateDate').html(`Dernier rafraîchissement du taux d'échange : ${jsonFixer.date[8] + jsonFixer.date[9]}/${jsonFixer.date[5] + jsonFixer.date[6]}/${jsonFixer.date[0] + jsonFixer.date[1] + jsonFixer.date[2] + jsonFixer.date[3]}`);
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
$('.results').html(messageError);
|
$('.results').html(messageError);
|
||||||
@ -172,7 +238,13 @@ function convertCurrency(value, currency, url) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Convertis des nombres de différentes bases et convertis en UTF-8. (source : http://jsfiddle.net/47zwb41o)
|
// Convertis des nombres de différentes bases et convertis en UTF-8. (source : http://jsfiddle.net/47zwb41o)
|
||||||
// DecimalToBinary
|
/**
|
||||||
|
* @function decimalToBinary
|
||||||
|
* @description Convertis un nombre décimal en binaire.
|
||||||
|
* @param {string} value - Le nombre à convertir en string
|
||||||
|
* @returns {string} - Le nombre en binaire
|
||||||
|
* @example decimalToBinary('2') → '10'
|
||||||
|
*/
|
||||||
function decimalToBinary(value) {
|
function decimalToBinary(value) {
|
||||||
value = value.replace(" ", "");
|
value = value.replace(" ", "");
|
||||||
value = Number(value);
|
value = Number(value);
|
||||||
@ -181,18 +253,32 @@ function decimalToBinary(value) {
|
|||||||
} else {
|
} else {
|
||||||
return value.toString(2);
|
return value.toString(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// BinaryToDecimal
|
|
||||||
|
/**
|
||||||
|
* @function binaryToDecimal
|
||||||
|
* @description Convertis un nombre binaire en décimal.
|
||||||
|
* @requires {@link fonctions_annexes.js: formatNumberResult}
|
||||||
|
* @param {string} value - Le nombre à convertir
|
||||||
|
* @returns {(number|string)} - Le nombre en décimal soit en nombre ou soit en string si supérieur à 1000 car pour 1000 par exemple formatNumberResult renvoie '1 000'
|
||||||
|
* @example binaryToDecimal('10') → 2
|
||||||
|
*/
|
||||||
function binaryToDecimal(value) {
|
function binaryToDecimal(value) {
|
||||||
value = Number(value);
|
const result = parseInt(Number(value), 2);
|
||||||
const result = formatNumberResult(parseInt(value, 2));
|
|
||||||
if (isNaN(result)) {
|
if (isNaN(result)) {
|
||||||
return messageError;
|
return messageError;
|
||||||
} else {
|
} else {
|
||||||
return result
|
return formatNumberResult(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// DecimalToHexadecimal
|
|
||||||
|
/**
|
||||||
|
* @function decimalToHexadecimal
|
||||||
|
* @description Convertis un nombre décimal en hexadécimal.
|
||||||
|
* @param {string} value - Le nombre à convertir
|
||||||
|
* @returns {string} - Le nombre en hexadécimal
|
||||||
|
* @example decimalToHexadecimal('15') → 'F'
|
||||||
|
*/
|
||||||
function decimalToHexadecimal(value) {
|
function decimalToHexadecimal(value) {
|
||||||
value = value.replace(" ", "");
|
value = value.replace(" ", "");
|
||||||
value = Number(value);
|
value = Number(value);
|
||||||
@ -201,17 +287,32 @@ function decimalToHexadecimal(value) {
|
|||||||
} else {
|
} else {
|
||||||
return value.toString(16).toUpperCase();
|
return value.toString(16).toUpperCase();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// HexadecimalToDecimal
|
|
||||||
|
/**
|
||||||
|
* @function hexadecimalToDecimal
|
||||||
|
* @description Convertis un nombre hexadécimal en décimal.
|
||||||
|
* @requires {@link fonctions_annexes.js: formatNumberResult}
|
||||||
|
* @param {string} value - Le nombre à convertir
|
||||||
|
* @returns {(number|string)} - Le nombre en décimal soit en nombre ou soit en string si supérieur à 1000 car pour 1000 par exemple formatNumberResult renvoie '1 000'
|
||||||
|
* @example hexadecimalToDecimal('F') → 15
|
||||||
|
*/
|
||||||
function hexadecimalToDecimal(value) {
|
function hexadecimalToDecimal(value) {
|
||||||
const result = formatNumberResult(parseInt(value, 16));
|
const result = parseInt(value, 16);
|
||||||
if (isNaN(result)) {
|
if (isNaN(result)) {
|
||||||
return messageError;
|
return messageError;
|
||||||
} else {
|
} else {
|
||||||
return result;
|
return formatNumberResult(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// BinaryToHexadecimal
|
|
||||||
|
/**
|
||||||
|
* @function binaryToHexadecimal
|
||||||
|
* @description Convertis un nombre binaire en hexadécimal.
|
||||||
|
* @param {string} value - Le nombre à convertir
|
||||||
|
* @returns {string} - Le nombre en hexadécimal
|
||||||
|
* @example binaryToHexadecimal('1111') → 'F'
|
||||||
|
*/
|
||||||
function binaryToHexadecimal(value) {
|
function binaryToHexadecimal(value) {
|
||||||
value = Number(value);
|
value = Number(value);
|
||||||
value = parseInt(value, 2);
|
value = parseInt(value, 2);
|
||||||
@ -221,17 +322,30 @@ function binaryToHexadecimal(value) {
|
|||||||
return parseInt(value).toString(16).toUpperCase();
|
return parseInt(value).toString(16).toUpperCase();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// HexadecimalToBinary
|
|
||||||
|
/**
|
||||||
|
* @function hexadecimalToBinary
|
||||||
|
* @description Convertis un nombre hexadécimal en binaire.
|
||||||
|
* @param {string} value - Le nombre à convertir
|
||||||
|
* @returns {string} - Le nombre en binaire
|
||||||
|
* @example hexadecimalToBinary('F') → '1111'
|
||||||
|
*/
|
||||||
function hexadecimalToBinary(value) {
|
function hexadecimalToBinary(value) {
|
||||||
value = Number(value);
|
|
||||||
value = parseInt(value, 16);
|
value = parseInt(value, 16);
|
||||||
if (isNaN(value)) {
|
if (isNaN(value)) {
|
||||||
return messageError;
|
return messageError;
|
||||||
} else {
|
} else {
|
||||||
return parseInt(value).toString(2);
|
return parseInt(value).toString(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Each letters has its own codePoint (Unicode Code)
|
|
||||||
|
/**
|
||||||
|
* @function textToNumberUnicode
|
||||||
|
* @description Convertis chaque caractère d'une string en codePoint Unicode.
|
||||||
|
* @param {string} value - La chaîne de caractère à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example textToNumberUnicode('abc') → '97 98 99'
|
||||||
|
*/
|
||||||
function textToNumberUnicode(string) {
|
function textToNumberUnicode(string) {
|
||||||
try {
|
try {
|
||||||
let resultat = "";
|
let resultat = "";
|
||||||
@ -244,7 +358,14 @@ function textToNumberUnicode(string) {
|
|||||||
return messageError;
|
return messageError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Each codePoint has its own letter
|
|
||||||
|
/**
|
||||||
|
* @function numberUnicodeToText
|
||||||
|
* @description Convertis chaque codePoint Unicode en caractère.
|
||||||
|
* @param {string} string - Nombre Unicode à convertir espacé par un espace à chaque fois
|
||||||
|
* @returns {string}
|
||||||
|
* @example numberUnicodeToText('97 98 99') → 'abc'
|
||||||
|
*/
|
||||||
function numberUnicodeToText(string) {
|
function numberUnicodeToText(string) {
|
||||||
try {
|
try {
|
||||||
const array = string.split(" ");
|
const array = string.split(" ");
|
||||||
@ -258,7 +379,14 @@ function numberUnicodeToText(string) {
|
|||||||
return messageError;
|
return messageError;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Texte en Binaire (UTF-8)
|
|
||||||
|
/**
|
||||||
|
* @function textToBinary
|
||||||
|
* @description Convertis un Texte en Binaire (UTF-8).
|
||||||
|
* @param {string} s - La chaîne de caractère à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example textToBinary('abc') → '01100001 01100010 01100011'
|
||||||
|
*/
|
||||||
function textToBinary(s) {
|
function textToBinary(s) {
|
||||||
try {
|
try {
|
||||||
s = unescape( encodeURIComponent(s));
|
s = unescape( encodeURIComponent(s));
|
||||||
@ -273,7 +401,14 @@ function textToBinary(s) {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Binaire (UTF-8) en Texte
|
|
||||||
|
/**
|
||||||
|
* @function binaryToText
|
||||||
|
* @description Convertis du Binaire (UTF-8) en Texte.
|
||||||
|
* @param {string} s - La chaîne de caractère contenant tous les octets à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example binaryToText('01100001 01100010 01100011') → 'abc'
|
||||||
|
*/
|
||||||
function binaryToText(s){
|
function binaryToText(s){
|
||||||
try {
|
try {
|
||||||
s = s.replace(/\s/g,'')
|
s = s.replace(/\s/g,'')
|
||||||
@ -286,8 +421,16 @@ function binaryToText(s){
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Texte en Hexadécimal (UTF-8)
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function textToHexadecimal
|
||||||
|
* @description Convertis un Texte en Hexadécimal (UTF-8).
|
||||||
|
* @param {string} s - La chaîne de caractère à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example textToHexadecimal('abc') → '61 62 63'
|
||||||
|
*/
|
||||||
function textToHexadecimal (s) {
|
function textToHexadecimal (s) {
|
||||||
try {
|
try {
|
||||||
s = unescape( encodeURIComponent( s ) );
|
s = unescape( encodeURIComponent( s ) );
|
||||||
@ -303,7 +446,14 @@ function textToHexadecimal (s) {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Hexadécimal (UTF-8) en Texte
|
|
||||||
|
/**
|
||||||
|
* @function hexadecimalToText
|
||||||
|
* @description Convertis de l'Hexadécimal (UTF-8) en Texte.
|
||||||
|
* @param {string} s - La chaîne de caractère contenant tous les nombres Hexadécimal à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example hexadecimalToText('61 62 63') → 'abc'
|
||||||
|
*/
|
||||||
function hexadecimalToText (s) {
|
function hexadecimalToText (s) {
|
||||||
try {
|
try {
|
||||||
s = s.replace(/\s/g,'');
|
s = s.replace(/\s/g,'');
|
||||||
@ -314,7 +464,14 @@ function hexadecimalToText (s) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convertis un nombre arabe en nombre romain
|
/**
|
||||||
|
* @function convertArabicToRoman
|
||||||
|
* @description Convertis un nombre arabe en nombre romain.
|
||||||
|
* @requires {@link variables.js: correspondancesRomainArabe}
|
||||||
|
* @param {number} nombre - Le nombre arabe à convertir
|
||||||
|
* @returns {string}
|
||||||
|
* @example convertArabicToRoman(24) → 'XXIV'
|
||||||
|
*/
|
||||||
function convertArabicToRoman(nombre) {
|
function convertArabicToRoman(nombre) {
|
||||||
// Initialisation de la variable qui va contenir le résultat de la conversion
|
// Initialisation de la variable qui va contenir le résultat de la conversion
|
||||||
let chiffresRomains = "";
|
let chiffresRomains = "";
|
||||||
@ -342,16 +499,23 @@ function convertArabicToRoman(nombre) {
|
|||||||
|
|
||||||
correspondancesRomainArabe.forEach(correspondance => {
|
correspondancesRomainArabe.forEach(correspondance => {
|
||||||
extraireChiffreRomain(correspondance[0], correspondance[1]);
|
extraireChiffreRomain(correspondance[0], correspondance[1]);
|
||||||
})
|
});
|
||||||
|
|
||||||
if (chiffresRomains === '') {
|
if (chiffresRomains === '') {
|
||||||
return messageError;
|
return messageError;
|
||||||
} else {
|
} else {
|
||||||
return chiffresRomains;
|
return chiffresRomains;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convertis un nombre romain en nombre arabe
|
/**
|
||||||
|
* @function convertRomanToArabic
|
||||||
|
* @description Convertis un nombre romain en nombre arabe.
|
||||||
|
* @requires {@link variables.js: correspondancesRomainArabe}
|
||||||
|
* @param {string} str - Le nombre romain à convertir
|
||||||
|
* @returns {number}
|
||||||
|
* @example convertRomanToArabic('XXIV') → 24
|
||||||
|
*/
|
||||||
function convertRomanToArabic(str) {
|
function convertRomanToArabic(str) {
|
||||||
let result = 0;
|
let result = 0;
|
||||||
for (let i = 0;i < correspondancesRomainArabe.length; i++) {
|
for (let i = 0;i < correspondancesRomainArabe.length; i++) {
|
||||||
@ -366,9 +530,15 @@ function convertRomanToArabic(str) {
|
|||||||
result = 0;
|
result = 0;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vérifie si un nombre fait partie des nombres d'Armstrong
|
/**
|
||||||
|
* @function armstrongNumber
|
||||||
|
* @description Vérifie si un nombre fait partie des nombres d'Armstrong.
|
||||||
|
* @param {number} number - Le nombre à tester
|
||||||
|
* @returns {string}
|
||||||
|
* @example armstrongNumber(153) → 153 est un nombre d'Armstrong, car 1<sup>3</sup> + 5<sup>3</sup> + 3<sup>3</sup> = 153.
|
||||||
|
*/
|
||||||
function armstrongNumber(number) {
|
function armstrongNumber(number) {
|
||||||
let numberString = number.toString();
|
let numberString = number.toString();
|
||||||
let numberStringLength = numberString.length;
|
let numberStringLength = numberString.length;
|
||||||
@ -386,9 +556,15 @@ function armstrongNumber(number) {
|
|||||||
} else {
|
} else {
|
||||||
return `${number} n'est pas un nombre d'Armstrong, car ${resultString.slice(2)} = ${formatNumberResult(result)}.`;
|
return `${number} n'est pas un nombre d'Armstrong, car ${resultString.slice(2)} = ${formatNumberResult(result)}.`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retourne un tableau contenant toutes les possibilités d'anagramme d'un mot
|
/**
|
||||||
|
* @function stringPermutations
|
||||||
|
* @description Retourne un tableau contenant toutes les possibilités d'anagramme d'un mot.
|
||||||
|
* @param {string} string - La chaîne de caractère à permuter
|
||||||
|
* @returns {array}
|
||||||
|
* @example stringPermutations('abc') → ["abc", "acb", "bac", "bca", "cab", "cba"]
|
||||||
|
*/
|
||||||
function stringPermutations(string) {
|
function stringPermutations(string) {
|
||||||
let results = [];
|
let results = [];
|
||||||
|
|
||||||
@ -406,4 +582,4 @@ function stringPermutations(string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
Reference in New Issue
Block a user