WikiLerni/front/public/JS/index.app.js

222 lines
43 KiB
JavaScript
Raw Normal View History

/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
2021-07-05 12:12:51 +02:00
/******/ (function() { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "../config/instance.js":
/*!*****************************!*\
!*** ../config/instance.js ***!
\*****************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
eval("const users = __webpack_require__(/*! ./users */ \"../config/users.js\");\n\nconst questionnaires = __webpack_require__(/*! ./questionnaires */ \"../config/questionnaires.js\");\n\nmodule.exports = {\n apiUrl: \"https://apitest.wikilerni.com/api\",\n siteUrl: \"https://test.wikilerni.com\",\n adminName: \"Fabrice\",\n adminEmail: \"dev@wikilerni.com\",\n senderName: \"WikiLerni (démo)\",\n senderEmail: \"bonjour@wikilerni.com\",\n adminLang: \"fr\",\n theme: \"wikilerni\",\n // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration.\n availableLangs: [\"fr\"],\n // Languages in which the site is available. The first one is the default one.\n siteName: \"WikiLerni (démo)\",\n beginCodeGodfather: \"WL\",\n // case-sensitive and can't contain \"@\" !\n defaultReceiptDays: \"147\",\n // Par défaut, quel(s) jour(s) de la semaine, l'utilisateur reçoit-il quelque chose ? (1=dimanche, 2=lundi... 7=samedi)\n cronTimingAlertInSeconde: 120,\n // for logs\n responseTimingAlertInSeconde: 3,\n // idem\n tokenSignupValidationTimeInHours: \"48h\",\n // https://github.com/zeit/ms\n tokenLoginLinkTimeInHours: \"1h\",\n tokenConnexionMinTimeInHours: \"24h\",\n tokenConnexionMaxTimeInDays: \"180 days\",\n tokenLoginChangingTimeInHours: \"1h\",\n // for email & password changing\n tokenDeleteUserTimeInHours: \"1h\",\n tokenUnsubscribeLinkTimeInDays: \"7 days\",\n // token send with subscription's emails\n freeAccountTimingInDays: 0,\n // if 0 = unlimited\n freeAccountExpirationNotificationInDays: 2,\n accountExpirationFirstNotificationInDays: 15,\n accountExpirationSecondNotificationInDays: 3,\n inactiveAccountTimeToDeleteInDays: 180,\n // Questionnaires:\n nbQuestionsMin: 1,\n // minimum number of questions for the questionnaire to be publishable\n nbQuestionsMax: 0,\n // if 0 = not maximum\n nbChoicesMax: 10,\n nbNewQuestionnaires: 12,\n // for RSS, etc.\n hourGiveNewQuestionnaireBegin: 3,\n // in user local time\n hourGiveNewQuestionnaireEnd: 8,\n // idem\n maxQuestionnaireSendedAtSameTime: 50,\n // for subscription's e-mailing\n minSearchQuestionnaires: 3,\n fieldNewQuestionnaires: \"publishingAt\",\n // field to be used to create the list of the last questionnaires, can be \"createdAt\", \"updatedAt\" or \"publishingAt\"\n // Groups :\n nbQuestionnairesByGroupMin: 1,\n nbQuestionnairesByGroupMax: 0,\n // Illustrations:\n nbIllustrationsMin: 1,\n nbIllustrationsMax: 1,\n maxIllustrationSizeinOctet: 1000000,\n // pas contrôlé pour l'instant. À revoir.\n mimeTypesForIllustration: [\"image/jpg\", \"image/jpeg\", \"image/png\", \"image/gif\", \"image/png\"],\n // -- Upload and resize:\n illustrationsWidthMaxInPx: 500,\n illustrationsMiniaturesWidthMaxInPx: 200,\n // Links:\n nbLinksMin: 1,\n nbLinksMax: 0,\n // Questions & responses:\n nbQuestionsMin: 1,\n nbQuestionsMax: 0,\n nbChoicesMax: 10,\n // à supprimer quand tous les \"require\" à jour:\n passwordMinLength: users.password.minlength,\n dirCacheUsers: users.dirCacheUsers,\n dirCacheUsersAnswers: users.dirCacheUsersAnswers,\n dirCacheQuestionnaires: questionnaires.dirCacheQuestionnaires,\n dirCacheQuestions: questionnaires.dirCacheQuestions,\n dirCacheUsersQuestionnaires: questionnaires.dirCacheUsersQuestionnaires,\n dirHTMLQuestionnaires: questionnaires.dirHTMLQuestionnaires,\n dirWebQuestionnaires: questionnaires.dirWebQuestionnaires\n};\n\n//# sourceURL=webpack://wikilerni/../config/instance.js?");
/***/ }),
/***/ "../config/matomo.js":
/*!***************************!*\
!*** ../config/matomo.js ***!
\***************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
eval("// Si non utilisé, supprimer l'appel des JS front-end puis recompiler.\n// Revoir comment réorganiser cela sous-forme de module indépendant.\nmodule.exports = {\n // Stats Matomo :\n matomo: {\n url: \"https://stats.le-fab-lab.com/\",\n siteId: \"5\"\n }\n};\n\n//# sourceURL=webpack://wikilerni/../config/matomo.js?");
/***/ }),
/***/ "../config/questionnaires.js":
/*!***********************************!*\
!*** ../config/questionnaires.js ***!
\***********************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
eval("module.exports = {\n // API'routes (after \"apiUrl\" defined in instance.js)\n questionnaireRoutes: \"/questionnaire\",\n // la base à laquelle s'ajoute les routes suivantes\n getListNextQuestionnaires: \"/getlistnextquestionnaires/\",\n getQuestionnaireRoutes: \"/get\",\n getRandomQuestionnairesRoute: \"/getrandom\",\n getStatsQuestionnaires: \"/stats/\",\n previewQuestionnaireRoutes: \"/preview\",\n publishedQuestionnaireRoutes: \"/quiz/\",\n regenerateHTML: \"/htmlregenerated\",\n searchAdminQuestionnairesRoute: \"/searchadmin\",\n searchQuestionnairesRoute: \"/search\",\n // -- groupes :\n groupRoutes: \"/group\",\n getGroupRoute: \"/get/\",\n previewGroupRoutes: \"/preview\",\n searchGroupsRoute: \"/search\",\n // -- questions & choices :\n questionsRoute: \"/question/\",\n // -- tags :\n tagsSearchRoute: \"/tags/search/\",\n // -- answers :\n getAdminStats: \"/getadminstats/\",\n getPreviousAnswers: \"/user/answers/\",\n getStatsAnswers: \"/user/anwswers/stats/\",\n // fonctionne aussi pour les groupes\n saveAnswersRoute: \"/answer/\",\n // idem\n // forms : à compléter avec valeurs par défaut, etc. cf modèle\n Questionnaire: {\n title: {\n maxlength: 255,\n required: true\n },\n slug: {\n maxlength: 150\n },\n // champ requis mais calculé à partir du titre qd laissé vide dans le formulaire\n introduction: {\n required: true\n }\n },\n searchQuestionnaires: {\n minlength: 3,\n required: true\n },\n Group: {\n title: {\n maxlength: 255,\n required: true\n },\n slug: {\n maxlength: 150\n } // champ requis mais calculé à partir du titre qd laissé vide dans le formulaire\n\n },\n Question: {\n text: {\n maxlength: 255,\n required: true\n },\n rank: {\n required: true,\n min: 1,\n defaultValue: 1\n }\n },\n Choice: {\n text: {\n maxlength: 255,\n required: true\n }\n },\n search: {\n minlength: 3,\n required: true\n },\n searchGroups: {\n minlength: 3,\n required: true\n },\n // Emplacement des fichiers JSON générés :\n dirCacheGroups: \"datas/questionnaires/groups\",\n dirCacheQuestionnaires: \"datas/questionnaires\",\n dirCacheQuestions: \"datas/questionnaires/questions\",\n dirCacheTags: \"datas/questionnaires/tags\",\n dirCacheUsersQuestionnaires: \"datas/users/questionnaires\",\n // Emplacement des fichiers HTML générés :\n dirHTMLGroups: \"front/public/quiz/gp\",\n dirHTMLQuestionnaires: \"front/public/quiz\",\n dirHTMLNews: \"front/public/quizs\",\n dirHTMLTags: \"front/public/quizs\",\n // Idem mais pour urls :\n dirWebGroups: \"quiz/gp\",\n dirWebQuestionnaires: \"quiz\",\n dirWebNews: \"quizs/\",\n dirWebTags: \"quizs/\",\n // limite des résultat du moteur de recherche, quand demande de résultats au hasard :\n nbRandomResults: 3,\n\n /* Valeurs en fait définies dans instance.js donc à supprimer quand plus utilisées ailleurs : */\n nbQuestionsMin: 1,\n nbQuestionsMax: 0,\n nbChoicesMax: 10,\n nbTagsMin: 0,\n nbTagsMax: 0 // 0 = not max \n\n};\n\n//# sourceURL=webpack://wikilerni/../config/questionnaires.js?");
/***/ }),
/***/ "../config/users.js":
/*!**************************!*\
!*** ../config/users.js ***!
\**************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
eval("module.exports = {\n // API'routes (after \"apiUrl\" defined in instance.js)\n userRoutes: \"/user\",\n checkDeleteLinkRoute: \"/confirmdelete/\",\n checkIfIsEmailfreeRoute: \"/isemailfree\",\n checkLoginRoute: \"/checklogin/\",\n checkNewLoginLinkRoute: \"/confirmnewlogin/\",\n checkSubscribeTokenRoute: \"/validation/\",\n connectionRoute: \"/login\",\n connectionWithLinkRoute: \"/checkloginlink\",\n createUserRoute: \"/create\",\n getAdminStats: \"/getadminstats/\",\n getGodChilds: \"/getgodchilds/\",\n getGodfatherRoute: \"/getgodfatherid\",\n getLoginLinkRoute: \"/getloginlink\",\n getPayments: \"/payment/getforoneuser/\",\n getUserInfos: \"/get/\",\n getUsersQuestionnairesRoute: \"/getusersquestionnaires/\",\n // les questionnaires auxquels l'utilisateur a déjà eu accès via son abonnement \n searchUserRoute: \"/search/\",\n signupCompletionRoute: \"/signupcompletion/\",\n subscribeRoute: \"/signup\",\n unsubscribeRoute: \"/subscription/stop/\",\n updateUserInfos: \"/modify/\",\n validateUserRoute: \"/validate/\",\n // forms : à compléter avec valeurs par défaut, etc. cf modèle\n name: {\n maxlength: 70,\n required: true\n },\n email: {\n maxlength: 255,\n required: true\n },\n password: {\n minlength: 8,\n maxlength: 72,\n required: true\n },\n // https://www.npmjs.com/package/bcrypt#security-issues-and-concerns\n newPassword: {\n minlength: 8,\n maxlength: 72\n },\n codeGodfather: {\n maxlength: 255\n },\n cguOk: {\n value: \"true\",\n required: true\n },\n search: {\n minlength: 1,\n required: true\n },\n timeDifferenceMin: -720,\n timeDifferenceMax: 840,\n // JSON dir\n dirCacheUsers: \"datas/users\",\n dirCacheUsersAnswers: \"datas/users/questionnaires/answers\",\n dirCacheUsersWithoutAnswers: \"datas/users/questionnaires/without\"\n};\n\n//# sourceURL=webpack://wikilerni/../config/users.js?");
/***/ }),
/***/ "./src/index.js":
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _config_instance_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../config/instance.js */ \"../config/instance.js\");\n/* harmony import */ var _config_instance_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_instance_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tools/clientstorage.js */ \"./src/tools/clientstorage.js\");\n/* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/everywhere.js */ \"./src/tools/everywhere.js\");\n/* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/matomo.js */ \"./src/tools/matomo.js\");\n/* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/users.js */ \"./src/tools/users.js\");\n// -- SCRIPT DE BASE APPELÉ DANS LES PAGES TYPE ACCUEIL DU SITE\n// Fichier de configuration tirés du backend :\n\nconst lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.availableLangs[0];\n\nconst configTemplate = __webpack_require__(\"../views sync recursive ^\\\\.\\\\/.*\\\\.js$\")(\"./\" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.theme + \"/config/\" + lang + \".js\");\n\n\n\n\n\n(0,_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__.helloDev)(); // Test de connexion de l'utilisateur pour adapter le lien du menu...\n\nconst initialise = async () => {\n try {\n const isConnected = await (0,_tools_users_js__WEBPACK_IMPORTED_MODULE_4__.checkSession)();\n\n if (isConnected) {\n // on change le lien d'accès au compte\n const user = (0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.getLocaly)(\"user\", true);\n (0,_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__.updateAccountLink)(user.status, configTemplate);\n } else (0,_tools_matomo_js__WEBPACK_IMPORTED_MODULE_3__.loadMatomo)();\n } catch (e) {\n console.error(e);\n }\n};\n\ninitialise();\n\n//# sourceURL=webpack://wikilerni/./src/index.js?");
/***/ }),
2021-07-05 12:12:51 +02:00
/***/ "./src/tools/clientstorage.js":
/*!************************************!*\
!*** ./src/tools/clientstorage.js ***!
\************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"saveLocaly\": function() { return /* binding */ saveLocaly; },\n/* harmony export */ \"getLocaly\": function() { return /* binding */ getLocaly; },\n/* harmony export */ \"removeLocaly\": function() { return /* binding */ removeLocaly; }\n/* harmony export */ });\n// FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.)\n// Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie\nconst saveLocaly = (name, data) => {\n localStorage.setItem(name, JSON.stringify(data));\n};\nconst getLocaly = (name, json = false) => {\n if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name);\n};\nconst removeLocaly = name => {\n localStorage.removeItem(name);\n};\n\n//# sourceURL=webpack://wikilerni/./src/tools/clientstorage.js?");
2021-07-05 12:12:51 +02:00
/***/ }),
/***/ "./src/tools/everywhere.js":
/*!*********************************!*\
!*** ./src/tools/everywhere.js ***!
\*********************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"helloDev\": function() { return /* binding */ helloDev; },\n/* harmony export */ \"updateAccountLink\": function() { return /* binding */ updateAccountLink; }\n/* harmony export */ });\n// Ce script fournit des fonctions utilisées sur toutes les pages du site\nconst helloDev = () => {\n console.log(\"**** Hello ami développeur :-)\\n\\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\\n\\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****\");\n return true;\n};\nconst updateAccountLink = (status, configTemplate) => {\n const link = document.getElementById(\"accountHeadLink\");\n const homePage = status + \"HomePage\";\n link.href = \"/\" + configTemplate[homePage];\n};\n\n//# sourceURL=webpack://wikilerni/./src/tools/everywhere.js?");
2021-07-05 12:12:51 +02:00
/***/ }),
/***/ "./src/tools/matomo.js":
/*!*****************************!*\
!*** ./src/tools/matomo.js ***!
\*****************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"loadMatomo\": function() { return /* binding */ loadMatomo; }\n/* harmony export */ });\n/* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../config/matomo.js */ \"../config/matomo.js\");\n/* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_matomo_js__WEBPACK_IMPORTED_MODULE_0__);\n // Fonction chargeant le code matomo\n\nconst loadMatomo = () => {\n // chargement de matomo\n var _paq = window._paq = window._paq || []; //ajout cnil :\n\n\n _paq.push([function () {\n var self = this;\n\n function getOriginalVisitorCookieTimeout() {\n var now = new Date(),\n nowTs = Math.round(now.getTime() / 1000),\n visitorInfo = self.getVisitorInfo();\n var createTs = parseInt(visitorInfo[2]);\n var cookieTimeout = 33696000; // 13 mois en secondes\n\n var originalTimeout = createTs + cookieTimeout - nowTs;\n return originalTimeout;\n }\n\n this.setVisitorCookieTimeout(getOriginalVisitorCookieTimeout());\n }]); //--fin ajout cnil\n\n\n _paq.push(['trackPageView']);\n\n _paq.push(['enableLinkTracking']);\n\n (function () {\n var u = _config_matomo_js__WEBPACK_IMPORTED_MODULE_0__.matomo.url;\n\n _paq.push(['setTrackerUrl', u + 'matomo.php']);\n\n _paq.push(['setSiteId', _config_matomo_js__WEBPACK_IMPORTED_MODULE_0__.matomo.siteId]);\n\n var d = document,\n g = d.createElement('script'),\n s = d.getElementsByTagName('script')[0];\n g.type = 'text/javascript';\n g.async = true;\n g.src = u + 'matomo.js';\n s.parentNode.insertBefore(g, s);\n })();\n};\n\n//# sourceURL=webpack://wikilerni/./src/tools/matomo.js?");
2021-07-05 12:12:51 +02:00
/***/ }),
/***/ "./src/tools/users.js":
/*!****************************!*\
!*** ./src/tools/users.js ***!
\****************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getTimeDifference\": function() { return /* binding */ getTimeDifference; },\n/* harmony export */ \"setSession\": function() { return /* binding */ setSession; },\n/* harmony export */ \"checkAnswerDatas\": function() { return /* binding */ checkAnswerDatas; },\n/* harmony export */ \"checkSession\": function() { return /* binding */ checkSession; }\n/* harmony export */ });\n/* harmony import */ var _config_instance_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../config/instance.js */ \"../config/instance.js\");\n/* harmony import */ var _config_instance_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_instance_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _config_users_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../config/users.js */ \"../config/users.js\");\n/* harmony import */ var _config_users_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_config_users_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ \"./src/tools/clientstorage.js\");\n/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ \"../tools/main.js\");\n/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__);\n\nconst lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.availableLangs[0];\n\nconst configTemplate = __webpack_require__(\"../views sync recursive ^\\\\.\\\\/.*\\\\.js$\")(\"./\" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.theme + \"/config/\" + lang + \".js\");\n\n\n\n\nconst getTimeDifference = () => {\n // multiplier par -1, car c'est ce qu'il faut \"ajouter\" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse\n const timeLocal = new Date().getTimezoneOffset() * -1;\n if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__.timeDifferenceMax || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__.timeDifferenceMin) return 0;else return timeLocal;\n}; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite\n// Seul le serveur pourra vérifier que les identifiants sont (toujours) valides.\n\nconst setSession = (userId, token, durationTS) => {\n const storageUser = {\n id: userId,\n token: token,\n duration: durationTS\n };\n (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.saveLocaly)(\"user\", storageUser);\n}; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs\n// Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas\n\nconst checkAnswerDatas = datas => {\n const lastAnswer = (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.getLocaly)(\"lastAnswer\");\n\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(lastAnswer)) {\n const answer = JSON.parse(lastAnswer);\n\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(answer.duration) && !(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(answer.nbCorrectAnswers) && !(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(answer.nbQuestions) && (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(answer.QuestionnaireId) || !(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(answer.GroupId))) {\n datas.duration = answer.duration;\n datas.nbCorrectAnswers = answer.nbCorrectAnswers;\n datas.nbQuestions = answer.nbQuestions;\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(answer.QuestionnaireId)) datas.QuestionnaireId = answer.QuestionnaireId;else datas.GroupId = answer.GroupId;\n }\n }\n\n return datas;\n}; // Cette fonction teste la connexion de l'utilisateur d'une page\n// On peut fourn
2021-07-05 12:12:51 +02:00
/***/ }),
/***/ "../tools/main.js":
/*!************************!*\
!*** ../tools/main.js ***!
\************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
eval("// Quelques fonctions utiles pour les chaînes\nclass Tool {\n static isEmpty(myVar) {\n if (myVar === undefined || myVar === null) return true;else {\n myVar += \"\"; // si autre chose qu'une chaîne envoyé...\n\n myVar = myVar.trim();\n if (myVar === \"\") return true;else return false;\n }\n }\n\n static trimIfNotNull(myString) {\n if (Tool.isEmpty(myString)) myString = null;else {\n myString += \"\"; // si autre chose qu'une chaîne envoyé...\n\n myString = myString.trim();\n }\n return myString;\n }\n\n static shortenIfLongerThan(myString, max) {\n myString += \"\"; // au cas où cela ne serait pas une chaîne...\n\n if (myString.length > max) myString = myString.substring(0, max - 3) + \"…\";\n return myString;\n } // source : https://stackoverflow.com/questions/15604140/replace-multiple-strings-with-multiple-other-strings\n\n\n static replaceAll(myString, mapObj) {\n const replaceElts = new RegExp(Object.keys(mapObj).join(\"|\"), \"gi\");\n return myString.replace(replaceElts, matched => {\n return mapObj[matched];\n });\n } // source : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random\n\n\n static getRandomInt(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n } // à compléter : https://en.wikipedia.org/wiki/Date_format_by_country\n\n\n static dateFormat(dateString, lang = \"fr\") {\n if (Tool.isEmpty(dateString)) return \"\";\n let myDate = new Date(dateString);\n let myDay = myDate.getDate() + \"\";\n if (myDay.length === 1) myDay = \"0\" + myDay;\n let myMounth = myDate.getMonth() + 1 + \"\";\n if (myMounth.length === 1) myMounth = \"0\" + myMounth;\n let myYear = myDate.getFullYear();\n if (lang === \"fr\") return myDay + \"/\" + myMounth + \"/\" + myYear;else if (lang === \"form\") // 2014-02-09\n return myYear + \"-\" + myMounth + \"-\" + myDay;else return myMounth + \"/\" + myDay + \"/\" + myYear;\n } // On enlève volontairement les 0/O pour éviter les confusions !\n // Et mieux vaut aussi débuter et finir par une lettre simple.\n\n\n static getPassword(nbCarMin, nbCarMax) {\n const nbCar = nbCarMin + Math.floor(Math.random() * (nbCarMax - nbCarMin));\n const letters = \"ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz\";\n const others = \"123456789!?.*-_%@&ÉÀÈÙ€$ÂÊÛÎ\";\n let password = letters[Math.floor(Math.random() * letters.length)];\n\n for (let i = 1; i < nbCar - 1; i++) {\n if (i % 2 === 1) password += others[Math.floor(Math.random() * others.length)];else password += letters[Math.floor(Math.random() * letters.length)];\n }\n\n password += letters[Math.floor(Math.random() * letters.length)];\n return password;\n }\n\n}\n\nmodule.exports = Tool;\n\n//# sourceURL=webpack://wikilerni/../tools/main.js?");
/***/ }),
/***/ "../views/default/config/fr.js":
/*!*************************************!*\
!*** ../views/default/config/fr.js ***!
\*************************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
eval("module.exports = {\n headLinks: [{\n anchor: \"Accueil\",\n attributes: {\n href: \"/\"\n }\n }, {\n anchor: \"Mon compte\",\n attributes: {\n href: \"/connexion.html\",\n id: \"accountHeadLink\"\n }\n }, {\n anchor: \"À propos\",\n attributes: {\n href: \"/a-propos.html\"\n }\n }, {\n anchor: \"Contact\",\n attributes: {\n href: \"/contact.html\"\n }\n }],\n footLinks: [{\n anchor: \"Crédits\",\n attributes: {\n href: \"/credits.html\"\n }\n }, {\n anchor: \"Mentions légales\",\n attributes: {\n href: \"/mentions-legales.html\",\n rel: \"nofollow\"\n }\n }, {\n anchor: \"Données personnelles\",\n attributes: {\n href: \"/donnees.html\"\n }\n }, {\n anchor: \"C.G.U.\",\n attributes: {\n href: \"/cgu.html\",\n rel: \"nofollow\"\n }\n }, {\n anchor: \"C.G.V.\",\n attributes: {\n href: \"/cgv.html\",\n rel: \"nofollow\"\n }\n }],\n maxQuestionnairesByPage: 10,\n userHomePage: \"accueil.html\",\n adminHomePage: \"admin.html\",\n managerHomePage: \"gestion.html\",\n subscribePage: \"inscription.html\",\n connectionPage: \"connexion.html\",\n accountPage: \"compte.html\",\n questionnairesManagementPage: \"gestion-quizs.html\",\n usersManagementPage: \"gestion-utilisateurs.html\",\n nbQuestionnairesUserHomePage: 10,\n illustrationDir: \"/img/quizs/\",\n siteSlogan: \"Cultivons notre jardin !\",\n homeTitle1: \"De nature curieuse ?\",\n homeP1: \"Avec WikiLerni vous apprenez chaque jour de nouvelles choses.<br>Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.<br>De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \\\"jardin\\\".\",\n homeTitle2: \"La culture en liberté\",\n homeP2: \"Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.<br>Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.<br>Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.<br>Vous pouvez venir y \\\"cultiver votre jardin\\\" en toute tranquillité.<br><br><small><em>(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.</em></small>\",\n newQuestionnairesTitle: \"Les derniers quizs publiés sur WikiLerni\",\n newQuestionnairesIntro: \"Liste des derniers quizs publiés sur WikiLerni.\",\n explanationTitle: \"Vous découvrez WikiLerni ?\",\n explanationTxt: \"Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.<br>Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.<br><br>Toutes les réponses se trouvent dans l'article proposé à la lecture. <b>Vous êtes ici pour apprendre de nouvelles choses</b>, mais libre à vous d'essayer d'y répondre immédiatement.<br><br>Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)<br><br>Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.<br>Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.<br><br>Mais <b>la création de ce compte est facultative</b> et <a href='/quizs/' title='Les derniers quizs publiés'>vous pouvez parcourir WikiLerni librement</a>.\",\n noJSNotification: \"Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.\",\n tagsListTxt: \"Parcourir les rubriques :\"\n};\n\n//# sourceURL=webpack://wikilerni/../views/default/config/fr.js?");
2020-08-07 12:38:19 +02:00
/***/ }),
/***/ "../views/wikilerni/config/fr.js":
/*!***************************************!*\
!*** ../views/wikilerni/config/fr.js ***!
\***************************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
2020-08-07 12:38:19 +02:00
eval("module.exports = {\n // liens de l'interface\n headLinks: [{\n anchor: \"Contact\",\n attributes: {\n href: \"/contact.html\",\n rel: \"nofollow\"\n }\n }, {\n anchor: \"Parcourir\",\n attributes: {\n href: \"/quizs/\",\n id: \"indexHeadLink\",\n title: \"Les dernières publications\"\n }\n }, {\n anchor: \"Mon compte\",\n attributes: {\n href: \"/connexion.html\",\n id: \"accountHeadLink\",\n title: \"Accéder ou créez votre compte WikiLerni\"\n }\n }, {\n anchor: \"À propos\",\n attributes: {\n href: \"/a-propos.html\",\n title: \"En savoir + sur WikiLerni\"\n }\n }, {\n anchor: \"Accueil\",\n attributes: {\n href: \"/\",\n title: \"Page d'accueil\"\n }\n }],\n footLinks: [{\n anchor: \"Blog\",\n attributes: {\n href: \"https://diaspora-fr.org/people/815767c0c09e0139ec6f32a01d0dfba2\",\n title: \"Le blog WikiLerni sur diaspora*\"\n }\n }, {\n anchor: \"Crédits\",\n attributes: {\n href: \"/credits.html\",\n title: \"Qui a créé WikiLerni ? Quels sont vos droits ?\"\n }\n }, {\n anchor: \"Mentions légales\",\n attributes: {\n href: \"/mentions-legales.html\",\n rel: \"nofollow\"\n }\n }, {\n anchor: \"Données personnelles\",\n attributes: {\n href: \"/donnees.html\",\n title: \"Vos données personnelles sur WikiLerni\"\n }\n }, {\n anchor: \"CGV & CGU\",\n attributes: {\n href: \"/CGV-CGU.html\",\n rel: \"nofollow\"\n }\n }],\n accountPage: \"compte.html\",\n aboutPage: \"a-propos.html\",\n adminHomePage: \"admin.html\",\n cguPage: \"CGV-CGU.html\",\n connectionPage: \"connexion.html\",\n deleteLinkPage: \"aurevoir.html?t=\",\n loginLinkPage: \"login.html?t=\",\n managerHomePage: \"gestion.html\",\n newLoginLinkPage: \"newlogin.html?t=\",\n questionnairesManagementPage: \"gestion-quizs.html\",\n stopMailPage: \"stop-mail.html?t=\",\n subscribePage: \"inscription.html\",\n updateAccountPage: \"compte.html\",\n userHomePage: \"accueil.html\",\n userHomePageTxt: \"Ma page d'accueil.\",\n usersManagementPage: \"gestion-utilisateurs.html\",\n validationLinkPage: \"validation.html?t=\",\n\n /* Textes (général) */\n siteSlogan: \"Cultivons notre jardin !\",\n noJSNotification: \"Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.\",\n mailRecipientTxt: \"Message envoyé à :\",\n licenceTxt: \"@copyleft Le contenu de WikiLerni <a href=\\\"/credits.html\\\" title=\\\"En savoir plus ?\\\">est libre</a> et vous est offert sans publicité. Vous pouvez <a href=\\\"/participer-financement.html\\\" title=\\\"Financement participatif avec contre-parties\\\">participer à son financement en cliquant ici</a>.\",\n\n /* Page d'accueil */\n homePageTxt: \"Page d'accueil\",\n homeTitle1: \"De nature curieuse ?\",\n homeP1: \"<b>Avec WikiLerni, vous apprenez régulièrement de nouvelles choses</b>.<br>Vous recevez de courts articles, lisibles en quelques minutes.<br>Des quizs vous permettent ensuite de tester ce que vous avez retenu.<br>De jour en jour <b>de nouvelles graines de culture sont ainsi semées dans votre jardin</b>.\",\n homeTitle2: \"La culture générale en liberté\",\n homeP2: \"<b>Pas de faits alternatifs</b>, tous les contenus sont <b>sourcés par des articles Wikipédia</b>.<br>Et tout comme sur Wikipédia, le logiciel et le contenu publié sur WikiLerni <a href=\\\"/credits.html\\\" title=\\\"En savoir plus sur ce sujet\\\">sont partagés sous licences libres</a>.<br>Le tout sans publicité, ni commercialisation de vos données.<br><b>Sur WikiLerni, vous cultivez votre jardin en toute tranquillité.</b>\",\n homeBtnAboutTxt: \"En savoir plus sur WikiLerni ?\",\n homeBtnSubscribeTxt: \"Testez WikiLerni\",\n homeSubcriptionFormTitle: \"Recevez les prochains articles WikiLerni\",\n\n /* Page dernières publications... */\n newQuestionnairesTitle: \"Culture générale - apprenez de nouvelles choses avec WikiLerni\",\n newQu
/***/ }),
2021-07-05 12:12:51 +02:00
/***/ "../views sync recursive ^\\.\\/.*\\.js$":
/*!***********************************!*\
!*** ../views/ sync ^\.\/.*\.js$ ***!
\***********************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
eval("var map = {\n\t\"./default/config/fr.js\": \"../views/default/config/fr.js\",\n\t\"./wikilerni/config/fr.js\": \"../views/wikilerni/config/fr.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"../views sync recursive ^\\\\.\\\\/.*\\\\.js$\";\n\n//# sourceURL=webpack://wikilerni/../views/_sync_^\\.\\/.*\\.js$?");
2021-07-05 12:12:51 +02:00
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ !function() {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function() { return module['default']; } :
/******/ function() { return module; };
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ !function() {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = function(exports, definition) {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ }();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ !function() {
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
/******/ }();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ !function() {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ }();
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval devtool is used.
/******/ var __webpack_exports__ = __webpack_require__("./src/index.js");
/******/
2021-07-05 12:12:51 +02:00
/******/ })()
;