284 lines
69 KiB
JavaScript
284 lines
69 KiB
JavaScript
/*
|
||
* 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/).
|
||
*/
|
||
/******/ (function() { // webpackBootstrap
|
||
/******/ var __webpack_modules__ = ({
|
||
|
||
/***/ "../config/instance.js":
|
||
/*!*****************************!*\
|
||
!*** ../config/instance.js ***!
|
||
\*****************************/
|
||
/***/ (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: \"http://localhost:3000/api\",\n siteUrl: \"http://localhost:8080\",\n adminName: \"Fabrice\",\n adminEmail: \"dev@wikilerni.com\",\n senderName: \"WikiLerni (local)\",\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 (local)\",\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: 3,\n accountExpirationFirstNotificationInDays: 10,\n accountExpirationSecondNotificationInDays: 3,\n inactiveAccountTimeToDeleteInDays: 180,\n // Questionnaires:\n nbQuestionsMin: 1,\n // minimum number of questions for the questionnaire to be publishable\n nbQuestionsMax: 2,\n // if 0 = not maximum\n nbChoicesMax: 10,\n nbNewQuestionnaires: 12,\n // for RSS, etc.\n hourGiveNewQuestionnaireBegin: 7,\n // in user local time\n hourGiveNewQuestionnaireEnd: 21,\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 ***!
|
||
\***************************/
|
||
/***/ (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 ***!
|
||
\***********************************/
|
||
/***/ (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 ***!
|
||
\**************************/
|
||
/***/ (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/groupElement.js":
|
||
/*!*****************************!*\
|
||
!*** ./src/groupElement.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_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/dom.js */ \"./src/tools/dom.js\");\n/* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/everywhere.js */ \"./src/tools/everywhere.js\");\n/* harmony import */ var _tools_forms_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/forms.js */ \"./src/tools/forms.js\");\n/* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tools/matomo.js */ \"./src/tools/matomo.js\");\n/* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/users.js */ \"./src/tools/users.js\");\n// -- PAGE AFFICHANT L'ÉLÉMENT D'UN GROUPE DE QUIZ ET PROPOSANT DE CRÉER SON COMPTE DE MANIÈRE SIMPLIFIÉE\n/// L'utilisateur peut avoir répondu à un quiz avant de lancer la création de son compte\n/// Dans ce cas il faut enregistrer son résultat en même temps que les informations de son compte\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\"); // besoin de toutes les déclarations, car appel dynamique : configTemplate[homePage]\n\n\nconst configUsers = __webpack_require__(/*! ../../config/users */ \"../config/users.js\"); // idem pour configurer formulaire\n// Importation des fonctions utiles au script :\n\n\n\n\n\n\n\n // Dictionnaires :\n\nconst {\n serverError\n} = __webpack_require__(\"../lang sync recursive ^\\\\.\\\\/.*\\\\/general$\")(\"./\" + lang + \"/general\");\n\nconst {\n needUniqueEmail\n} = __webpack_require__(\"../lang sync recursive ^\\\\.\\\\/.*\\\\/user$\")(\"./\" + lang + \"/user\"); // Principaux éléments du DOM manipulés :\n\n\nconst btnSubmit = document.getElementById(\"submitDatas\");\nconst divResponse = document.getElementById(\"response\");\nconst emailInput = document.getElementById(\"email\");\nconst myForm = document.getElementById(\"subscription\"); // Test de connexion de l'utilisateur + affichage formulaire d'inscription :\n\nconst initialise = async () => {\n try {\n let isConnected = await (0,_tools_users_js__WEBPACK_IMPORTED_MODULE_6__.checkSession)(),\n user;\n\n if (isConnected) {\n user = (0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.getLocaly)(\"user\", true);\n (0,_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__.updateAccountLink)(user.status, configTemplate); // lien vers le compte adapté pour les utilisateurs connectés\n } else {\n (0,_tools_matomo_js__WEBPACK_IMPORTED_MODULE_5__.loadMatomo)();\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configUsers, myForm);\n myForm.style.display = \"block\";\n }\n } catch (e) {\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, \"p\", serverError, \"\", [\"error\"]);\n console.error(e);\n }\n};\n\ninitialise();\n(0,_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__.helloDev)(); // Test si l'e-mail saisi est déjà utilisé par un autre compte.\n// Si c'est le cas, la validation du formulaire est bloquée.\n\nemailInput.addEventListener(\"focus\", function (e) {\n document.getElementById(\"emailMessage\").innerHTML = \"\"; // pour supprimer l'éventuel message d'erreur déjà affiché\n});\nemailInput.addEventListener(\"blur\", function (e) {\n const emailValue = emailInput.value.trim();\n\n if (emailValue !== \"\") {\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configUsers.userRoutes + configUsers.checkIfIsEmailfreeRoute);\n\n xhr.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if (this.status === 200 && response.free !== undefined && response.free === false) {\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(document.getElementById(\"emailMessage\"), \"div\", needUniqueEmail.replace(\"#URL\", configTemplate.connectionPage), \"\", [\"error\"]);\n btnSubmit.setAttribute(\"disabled\", true);\n } else btnSubmit.removeAttribute(\"disabled\");\n }\n };\n\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n const datas = {\n emailTest: emailValue\n };\n xhr.send(JSON.stringify(datas));\n }\n}); // Traitement de l'envoi des données d'inscription :\n\nmyForm.addEventListener(\"submit\", function (e) {\n try {\n e.preventDefault();\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configUsers.userRoutes + configUsers.subscribeRoute);\n\n xhr.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if (this.status === 201) {\n myForm.style.display = \"none\";\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, \"p\", response.message, \"\", [\"success\"]);\n (0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.removeLocaly)(\"lastAnswer\"); // !! important, pour ne pas enregister plusieurs fois le résultat.\n } else if (response.errors) {\n if (Array.isArray(response.errors)) response.errors = response.errors.join(\"<br>\");else response.errors = serverError;\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, \"p\", response.errors, \"\", [\"error\"]);\n } else (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, \"p\", serverError, \"\", [\"error\"]);\n }\n };\n\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(myForm);\n\n if (datas) {\n datas.timeDifference = (0,_tools_users_js__WEBPACK_IMPORTED_MODULE_6__.getTimeDifference)(configUsers); // Si l'utilisateur a précédement répondu à un quiz, on ajoute les données de son résultat :\n\n datas = (0,_tools_users_js__WEBPACK_IMPORTED_MODULE_6__.checkAnswerDatas)(datas);\n xhr.send(JSON.stringify(datas));\n }\n } catch (e) {\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, \"p\", serverError, \"\", [\"error\"]);\n console.error(e);\n }\n});\n\n//# sourceURL=webpack://wikilerni/./src/groupElement.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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 = function (name) {\n let json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 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?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/tools/dom.js":
|
||
/*!**************************!*\
|
||
!*** ./src/tools/dom.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 */ \"addElement\": function() { return /* binding */ addElement; }\n/* harmony export */ });\n/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ \"../tools/main.js\");\n/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__);\n // Fonction associant les attributs fournis à un champ de formulaire\n\nconst addElement = function (eltParent, eltType) {\n let eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"\";\n let eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : \"\";\n let eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n let eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n let replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true;\n if ((0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(eltType) || (0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(eltParent)) return false;else {\n const newElement = document.createElement(eltType);\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ?\n newElement.id = eltId;\n\n if (Array.isArray(eltClass) && eltClass.length != 0) {\n for (let i in eltClass) newElement.classList.add(eltClass[i]);\n }\n\n if (typeof eltAttributes === \"object\") // !! tous les objets ne sont pas ok\n {\n for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]);\n }\n\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(eltContent)) newElement.innerHTML = eltContent.replace(/\\n/g, \"<br>\"); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc.\n\n if (replace) eltParent.innerHTML = \"\";\n eltParent.appendChild(newElement);\n }\n};\n\n//# sourceURL=webpack://wikilerni/./src/tools/dom.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./src/tools/forms.js":
|
||
/*!****************************!*\
|
||
!*** ./src/tools/forms.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 */ \"setAttributesToInputs\": function() { return /* binding */ setAttributesToInputs; },\n/* harmony export */ \"getDatasFromInputs\": function() { return /* binding */ getDatasFromInputs; },\n/* harmony export */ \"empyForm\": function() { return /* binding */ empyForm; },\n/* harmony export */ \"empyAndHideForm\": function() { return /* binding */ empyAndHideForm; }\n/* harmony export */ });\n/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ \"../tools/main.js\");\n/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__);\n // Fonction associant les attributs fournis à un champ de formulaire\n\nconst setAttributesToInputs = (inputsConf, myForm) => {\n for (let i in myForm.elements) {\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(myForm.elements[i].id)) {\n let idInput = myForm.elements[i].id;\n\n if (inputsConf[idInput] !== undefined) {\n let inputHTML = document.getElementById(idInput);\n\n for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]);\n }\n }\n }\n\n return true;\n}; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc.\n\nconst getDatasFromInputs = myForm => {\n const datas = {};\n const formData = new FormData(myForm);\n\n for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1];\n\n return datas;\n}; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc.\n// Revoir pour les select\n\nconst empyForm = myForm => {\n const formData = new FormData(myForm);\n\n for (let entrie of formData.entries()) {\n if (myForm.elements[entrie[0]].type == \"checkbox\" || myForm.elements[entrie[0]].type == \"radio\") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = \"\";\n }\n\n return true;\n}; // Vide et cache le formulaire\n\nconst empyAndHideForm = myForm => {\n empyForm(myForm);\n myForm.style.display = \"none\";\n};\n\n//# sourceURL=webpack://wikilerni/./src/tools/forms.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "./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 fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté\n\nconst checkSession = async function () {\n let status = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let urlRedirection = arguments.length > 1 ? arguments[1] : undefined;\n let message = arguments.length > 2 ? arguments[2] : undefined;\n let urlWanted = arguments.length > 3 ? arguments[3] : undefined;\n return new Promise((resolve, reject) => {\n const userDatas = (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.getLocaly)(\"user\");\n\n if ((0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(userDatas)) {\n redirectUser(urlRedirection, message, urlWanted);\n resolve(false);\n } else {\n const user = JSON.parse(userDatas);\n\n if ((0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(user.id) || (0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(user.token) || (0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(user.duration) || user.duration < Date.now()) {\n (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.removeLocaly)(\"user\");\n redirectUser(urlRedirection, message, urlWanted);\n resolve(false);\n } else {\n const xhr = new XMLHttpRequest();\n xhr.open(\"GET\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + _config_users_js__WEBPACK_IMPORTED_MODULE_1__.userRoutes + _config_users_js__WEBPACK_IMPORTED_MODULE_1__.checkLoginRoute + user.token);\n\n xhr.onload = () => {\n let response = JSON.parse(xhr.responseText);\n\n if (xhr.status === 200 && response.isValid && response.id != undefined) {\n if (response.id === user.id) {\n user.name = response.name;\n user.language = response.language;\n user.timeDifference = response.timeDifference;\n user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API\n\n (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.saveLocaly)(\"user\", user); // si il s'agit d'un \"user\" et que son abonnement a expiré, je le redirige vers la caisse :-)\n\n if (response.status === \"user\" && response.nbDaysOk <= 0) {\n const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.siteUrl + \"/\" + configTemplate.accountPage;\n if (window.location.href.indexOf(urlAccount) === -1) window.location.assign(\"/\" + configTemplate.accountPage + \"#subscribe\"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !?\n\n resolve(true);\n } else {\n if (status.length !== 0 && status.indexOf(response.status) === -1) {\n redirectUser(urlRedirection, message, urlWanted);\n resolve(false);\n } else resolve(true);\n }\n } else {\n (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.removeLocaly)(\"user\");\n redirectUser(urlRedirection, message, urlWanted);\n resolve(false);\n }\n } else {\n (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.removeLocaly)(\"user\");\n redirectUser(urlRedirection, message, urlWanted);\n resolve(false);\n }\n };\n\n xhr.onerror = () => reject(xhr.statusText);\n\n xhr.send();\n }\n }\n });\n}; // Cette fonction sert à la précédente en cas de connexion non valide\n\nconst redirectUser = (urlRedirection, message, urlWanted) => {\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(message)) (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.saveLocaly)(\"message\", message);\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(urlWanted)) (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.saveLocaly)(\"url\", urlWanted);\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(urlRedirection)) window.location.assign(urlRedirection);\n};\n\n//# sourceURL=webpack://wikilerni/./src/tools/users.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../lang/fr/general.js":
|
||
/*!*****************************!*\
|
||
!*** ../lang/fr/general.js ***!
|
||
\*****************************/
|
||
/***/ (function(module) {
|
||
|
||
eval("module.exports = {\n addBtnTxt: \"Ajouter\",\n addOkMessage: \"Les données ont bien été enregistrées.\",\n alertNewWindow: \"nouvelle fenêtre\",\n badUrl: \"Tentative d'accès à une page n'existant pas :\",\n btnLinkToQuestionnaire: \"Afficher !\",\n btnProposeConnection: \"Je me connecte.\",\n btnProposeSubscribe: \"Je crée mon compte.\",\n btnShowOnWebSite: \"Lire la suite sur #SITE_NAME\",\n deleteBtnTxt: \"Supprimer\",\n deleteFailMessage: \"La suppression de l'enregistrement #ID a échoué.\",\n deleteOkMessage: \"La suppression a bien été enregistrée.\",\n failAuth: \"Erreur d'authentification.\",\n failAuthCron: \"Tentative de lancement d'un cron sans le bon token.\",\n failAuthHeader: \"Absence de header Authorization.\",\n failAuthId: \"Identifiant non valide : \",\n failAuthToken: \"Token invalide ou utilisateur non trouvé.\",\n neededParams: \"Des paramètres nécessaires manquants sont manquants.\",\n nextPage: \"Page suivante\",\n notAllowed: \"Vous n'avez pas les droits nécessaires pour cette action.\",\n notRequired: \"Facultatif.\",\n notValidFormat: \"Format non valide.\",\n previousPage: \"Page précédente\",\n serverError: \"Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.\",\n serverErrorAdmin: \"Bug de l'application :\",\n siteHTMLTitle: \"WikiLerni : la culture générale en liberté\",\n siteMetaDescription: \"Avec WikiLerni, vous apprenez régulièrement de nouvelles choses. Vous recevez de courts articles lisibles en quelques minutes. Des quizs vous permettent ensuite de tester ce que vous avez retenu.\",\n scriptTimingAlert: \"*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL\",\n scriptTimingInfo: \"Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL\",\n statsAdmin: \"Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.<br>En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.<br>Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium.\",\n subscriptionCall: \"Inscrivez-vous !\",\n updateBtnTxt: \"Modifier\",\n updateOkMessage: \"La mise à jour à jour a bien été enregistrée.\"\n};\n\n//# sourceURL=webpack://wikilerni/../lang/fr/general.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../lang/fr/user.js":
|
||
/*!**************************!*\
|
||
!*** ../lang/fr/user.js ***!
|
||
\**************************/
|
||
/***/ (function(module) {
|
||
|
||
eval("module.exports = {\n alreadyConnected: \"Vous êtes déjà connecté au site !\",\n badLinkValidationMessage: \"Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau <a href='#URL'>en cliquant ici</a>.\",\n badPassword: \"Aucun compte utilisateur ne correspond aux informations saisies.\",\n byebyeMessage: \"Si vous voyez ce message, c'est que votre déconnexion s'est bien déroulée.<br>À bientôt !\",\n connectionOk: \"Connexion réussie.\",\n creationOkMessage: \"Le nouvel utilisateur a bien été enregistré.\",\n cronDeleteUnvalidedUsersMessage: \" comptes utilisateurs non validés ont été supprimés.\",\n deleteFailMessage: \"Tentative de suppression d'un utilisateur inexistant : \",\n deleteInactiveUsersMessage: \" comptes utilisateurs inactifs ont été supprimés.\",\n deleteOkMessage: \"L'utilisateur a bien été supprimé.\",\n emailNotFound: \"Aucun compte utilisateur n'a été trouvé pour cette adresse e-mail.\",\n failBotTest: \"Un problème a été rencontré durant votre inscription. En cas de difficulté, n'hésitez pas contacter l'administrateur du site.\",\n failBotTestLog: \"Une inscription a été bloquée, parce que le champ email2 était renseigné avec : \",\n formsEmailLabel: \"E-mail :\",\n formsEmailPlaceholder: \"Votre adresse e-mail\",\n formsEmail2Placeholder: \"Si vous voyez ce champ, laissez-le vide\",\n //champ qui ne devrait pas être visible par des humains\n formsCGUOkLabel: \"J'accepte <a href=#link target=\\\"_blank\\\" rel=\\\"noopener\\\" title=\\\"À lire :)\\\">les Conditions Générale d'Utilisation</a> du site (requis).\",\n formsSubmitTxt: \"Je m'abonne !\",\n godfatherFound: \"Votre \\\"parrain\\\" a bien été trouvé. Cette personne sera avertie que vous l'avez désignée.\",\n godfatherNotFound: \"Désolé mais aucun utilisateur n'a été trouvé pour ce code / e-mail de parrainage :(\",\n infosAdminGodfather: \"Cet utilisateur a été parrainé par \",\n infosAdminNbGodChilds: \"Ses #NB filleuls : \",\n infosUserForAdmin: \"Cet utilisateur (id: ID_USER) a <b>créé son compte le DATE_CREA</b>, la dernière mise à jour datant du DATE_UPDATE.<br><b>Date de sa dernière connexion : DATE_CONNECTION.</b>\",\n infosUserNbGodChilds: \"Voici les #NB utilisateur(s) inscrit(s) en vous désignant comme \\\"parrain\\\" : \",\n infosUserNoGodchilds: \"Pour l'instant, aucune personne ne s'est inscrite, en vous désignant comme \\\"parrain\\\".\",\n mailDeleteBodyHTML: \"<h3>Bonjour USER_NAME,</h3><p>Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.</p>\",\n mailDeleteBodyTxt: \"Bonjour USER_NAME,\\n\\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\\nLINK_URL\",\n mailDeleteLinkAlreadyMessage: \"Il semble que vous ayez déjà validé la suppression de votre compte.\",\n mailDeleteLinkFailMessage: \"Votre lien de suppression n'est pas valide ou alors il a expiré.\",\n mailDeleteLinkMessage: \"Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.\",\n mailDeleteLinkOkMessage: \"Votre compte a bien été supprimé. Merci d'avoir utilisé nos services.\",\n mailDeleteLinkTxt: \"Confirmer.\",\n mailDeleteSubject: \"Confirmer la suppression de votre compte.\",\n mailLoginLinkBodyHTML: \"<h3>Bonjour USER_NAME,</h3><p>Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :</p>\",\n mailLoginLinkBodyTxt: \"Bonjour USER_NAME,\\n\\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\\nLINK_URL\",\n mailLoginLinkMessage: \"Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant *TIMING* !\",\n mailLoginLinkSubject: \"Votre lien de connexion.\",\n mailLoginLinkTxt: \"Me connecter.\",\n mailThankGodfatherBodyHTML: \"<h3>Bonjour USER_NAME,</h3><p>Grâce à vous, un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.<br>Si dans l'avenir cette personne souscrit un abonnement prémium, votre propre abonnement sera prolongé de 30 jours.</p><p>Encore merci et à bientôt !</p>\",\n mailThankGodfatherBodyTxt: \"Bonjour USER_NAME,\\nGrâce à vous, un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\\nSi dans l'avenir cette personne souscrit un abonnement prémium, votre propre abonnement sera prolongé de 30 jours.\\nEncore merci et à bientôt !\",\n mailThankGodfatherLinkTxt: \"Me connecter à mon compte.\",\n mailThankGodfatherSubject: \"Merci !\",\n mailUpdateLoginBodyHTML: \"<h3>Bonjour USER_NAME,</h3><p>Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.</p>\",\n mailUpdateLoginBodyTxt: \"Bonjour USER_NAME,\\n\\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\\nLINK_URL\",\n mailUpdateLoginLinkMessage: \"Cependant, vous avez modifié au moins un de vos identifiants de connexion (e-mail et/ou mot de passe) et <b>vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement</b>.<br>En attendant, merci de continuer à utiliser vos anciens identifiants.\",\n mailUpdateLoginLinkTxt: \"Valider.\",\n mailUpdateLoginOkMessage: \"La mise à jour de vos identifiants a bien été enregistrée.\",\n mailUpdateLoginSubject: \"Merci de valider vos nouveaux identifiants.\",\n mailValidationLinkSBodyHTML: \"<h3>Bonjour USER_NAME,</h3><p>Pour valider et compléter votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.</p>\",\n mailValidationLinkSBodyTxt: \"Bonjour USER_NAME,\\n\\nPour valider et compléter votre inscription, merci de cliquer sur le lien suivant dans les 24h :\\nLINK_URL\",\n mailValidationLinkSubject: \"Merci de valider votre inscription\",\n mailValidationLinkTxt: \"Valider mon compte.\",\n mailValidationMessage: \"Votre inscription est bien enregistrée.\\nPour la finaliser, merci de cliquer dans les 24 H sur le lien de confirmation qui vient d'être envoyé à votre adresse e-mail (#EMAIL).\",\n mailWelcomeBodyHTML: \"<h3>Bonjour USER_NAME,</h3><p>Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !<br><br>Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à <b>EMAIL</b>.<br><br>Je vous conseille d'ailleurs d'ajouter <b>EMAIL</b> à votre carnet d'adresses <b>pour éviter que les prochains envois de NOM_SITE n'arrivent en <i>spam</i></b>.<br><br>Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi le contenu du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.<br><br>Pour ce faire, utilisez le lien ci-dessous.<br><br>À bientôt sur NOM_SITE.\",\n mailWelcomeBodyTxt: \"Bonjour USER_NAME,\\n\\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\\n\\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\\n\\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois de NOM_SITE n'arrivent en \\\"spam\\\".\\n\\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi le contenu du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\\n\\nPour ce faire, utilisez le lien suivant : LINK_URL\\n\\nÀ bientôt sur NOM_SITE.\",\n mailWelcomeLinkTxt: \"Me connecter à mon compte.\",\n mailWelcomeSubject: \"Bienvenue !\",\n needBeConnected: \"Vous devez être connecté pour accéder à cette page.\",\n needChooseLoginWay: \"Vous devez soit saisir votre mot de passe, soit cocher la case vous permettant de recevoir un lien de connexion par e-mail.\",\n needEmail: \"Merci de saisir votre adresse e-mail.\",\n needKnowNewsletterOk: \"Il faut savoir si l'utilisateur accepte ou refuse de recevoir la newsletter.\",\n needLanguage: \"Il manque le code langue.\",\n needLongPassWord: \"Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.\",\n needMaxTimeDifference: \"Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.\",\n needMinTimeDifference: \"Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.\",\n needName: \"Merci de choisir un nom d'utilisateur.\",\n needNotTooLongName: \"Merci de choisir un nom d'utilisateur ne comptant pas plus de 70 caractères.\",\n needNotTooLongEmail: \"Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.\",\n needPassWord: \"Merci de fournir un mot de passe.\",\n needSMTP: \"Il manque le serveur SMTP.\",\n needSMTPNotFound: \"Il manque un serveur SMTP valide.\",\n needStatus: \"Il manque le statut.\",\n needTimeDifference: \"Il faut connaître le nombre de minutes du décalage horaire.\",\n needUGCOk: \"Merci d'accepter les CGU pour créer votre compte.\",\n needUniqueEmail: \"L'adresse e-mail que vous avez saisie est déjà utilisée pour un compte utilisateur. Si vous avez déjà un compte, <a href='/#URL'>cliquez-ici pour vous connecter</a>.\",\n needValidationToLogin: \"Vous devez d'abord valider votre compte avant de pouvoir vous connecter. Pour ce faire, un nouveau lien vient de vous être envoyé par e-mail.\",\n needValidLastConnectionDate: \"La date de dernière connexion n'est pas valide.\",\n passwordCopied: \"Le mot de passe généré a été copié dans le presse-papier de votre ordinateur (ou mobile). Vous pouvez le \\\"coller\\\" où vous le souhaitez.\",\n searchUsersWithoutResult: \"L'utilisateur n'a pas été trouvé.\",\n tooManyLoginFails: \"Désolé mais il y a eu trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.\",\n updatedFailedGodfatherNotFound: \"L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.\",\n updatedNeedGoodEmail: \"Mais la nouvelle adresse e-mail n'a pu être enregistrée, car elle n'a pas un format correct.\",\n updatedNeedGoodGodfather: \"Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.\",\n updatedNeedUniqueEmail: \"Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.\",\n updatedNeedValidatedUser: \"L'utilisateur que vous souhaitez modifier n'existe pas/plus ou n'a pas encore validé son compte.\",\n updatedOkMessage: \"Vos informations ont bien été mises à jour.\",\n validationAlreadyMessage: \"Il semble que vous ayez déjà validé votre compte. Vous pouvez vous y connecter <a href='#URL'>en cliquant ici</a>.\",\n validationAlreadyMessageAdmin: \"Ce compte a déjà été validé.\",\n validationMessage: \"Votre compte vient bien d'être validé. Merci et bienvenue !<br>Vous pouvez compléter les informations de votre abonnement ci-dessous.\",\n validationMessageAdmin: \"Le compte a bien été validé.\",\n welcomeMessage: \"Bienvenue #NAME !\"\n};\n\n//# sourceURL=webpack://wikilerni/../lang/fr/user.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../tools/main.js":
|
||
/*!************************!*\
|
||
!*** ../tools/main.js ***!
|
||
\************************/
|
||
/***/ (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) {\n let lang = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"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 ***!
|
||
\*************************************/
|
||
/***/ (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?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../views/wikilerni/config/fr.js":
|
||
/*!***************************************!*\
|
||
!*** ../views/wikilerni/config/fr.js ***!
|
||
\***************************************/
|
||
/***/ (function(module) {
|
||
|
||
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 newQuestionnairesIntro: \"WikiLerni : testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.\",\n newsListTitle: \"<p><b>Avec WikiLerni, vous apprenez chaque jour quelque chose de nouveau</b><br>Si dessous les dernières publications. Vous pouvez aussi <a href='/quizs/themes.html'>parcourir le site par thèmes ou mots-clés</a>.</p>\",\n\n /* Plan du site, liste des tags */\n tagListTitle: \"Culture générale - des articles et quizs sur de nombreux thèmes !\",\n tagListMetaDesc: \"WikiLerni : découvrir les différents thèmes abordés par WikiLerni. Inxex du site.\",\n tagListIntro: \"<h3>Avec WikiLerni, devenez fort en thèmes... Oui mais quels thèmes ? :)</h3><blockquote>Aristote : « L’homme a naturellement la passion de connaître… »</blockquote>\",\n\n /* Page quizs */\n answersExplanationsLinkText: \"Relire\",\n quizElementLinksIntro: \"En savoir plus\",\n quizElementSubcriptionFormTitle: \"Recevez les prochains articles WikiLerni\",\n explanationTitle: \"Vous découvrez WikiLerni ?\",\n explanationTxt: \"<p>Le principe est simple : <b>vous commencez par lire l’article Wikipédia dont le lien vous est proposé</b>. Puis vous <b>afficher le quiz pour vérifier ce que vous avez retenu de votre lecture</b>. Suivant les questions, <b>une ou plusieurs réponses peuvent être correctes</b> et doivent donc être cochées. C’est toujours <b>le contenu de l’article Wikipédia qui fait foi</b> concernant les « bonnes » réponses. C’est une façon de tester à la fois votre capacité d’attention et votre mémoire. Les articles de Wikipédia peuvent évoluer, donc n’hésitez pas <a href='/contact.html'>à me signaler une erreur</a>.</p><p><b>WikiLerni vous propose d’autres solutions pour améliorer votre culture générale</b>. Pour en savoir plus, cliquez sur le bouton ci-dessous.</p>\",\n explanationElementTxt: \"<p>WikiLerni vous propose de <b>recevoir par e-mail à la fréquence choisie, de courts articles lisibles en quelques minutes</b> et portant sur des sujets très variés de <b>culture générale</b> (arts, histoire, littérature, sciences, etc.).</p><p>Ces articles sont basés sur <b>une ou plusieurs pages de Wikipédia</b> (fournies en lien), dont <b>ils extraient certaines informations</b>.</p><p>Chaque série d’articles est <b>suivie d’un quiz</b> permettant de tester ce que vous en avez retenu.</p><p><b>Vous apprenez ainsi régulièrement de nouvelles choses</b> très simplement.</p>\",\n\n /* Autres */\n illustrationDir: \"/img/quizs/\",\n twitterAccount: \"WikiLerni\",\n maxQuestionnairesByPage: 12,\n maxQuestionnairesSiteHomePage: 3,\n nbQuestionnairesUserHomePage: 3\n};\n\n//# sourceURL=webpack://wikilerni/../views/wikilerni/config/fr.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../lang sync recursive ^\\.\\/.*\\/general$":
|
||
/*!***************************************!*\
|
||
!*** ../lang/ sync ^\.\/.*\/general$ ***!
|
||
\***************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval("var map = {\n\t\"./fr/general\": \"../lang/fr/general.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 = \"../lang sync recursive ^\\\\.\\\\/.*\\\\/general$\";\n\n//# sourceURL=webpack://wikilerni/../lang/_sync_^\\.\\/.*\\/general$?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../lang sync recursive ^\\.\\/.*\\/user$":
|
||
/*!************************************!*\
|
||
!*** ../lang/ sync ^\.\/.*\/user$ ***!
|
||
\************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval("var map = {\n\t\"./fr/user\": \"../lang/fr/user.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 = \"../lang sync recursive ^\\\\.\\\\/.*\\\\/user$\";\n\n//# sourceURL=webpack://wikilerni/../lang/_sync_^\\.\\/.*\\/user$?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../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$?");
|
||
|
||
/***/ })
|
||
|
||
/******/ });
|
||
/************************************************************************/
|
||
/******/ // 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/groupElement.js");
|
||
/******/
|
||
/******/ })()
|
||
; |