374 lines
114 KiB
JavaScript
374 lines
114 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/illustrations.js":
|
||
/*!**********************************!*\
|
||
!*** ../config/illustrations.js ***!
|
||
\**********************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval("const instance = __webpack_require__(/*! ./instance */ \"../config/instance.js\");\n\nmodule.exports = {\n // API'routes (after \"apiUrl\" defined in instance.js)\n illustrationsRoute: \"/illustration/\",\n // forms : à compléter avec valeurs par défaut, etc. cf modèle\n Illustration: {\n alt: {\n maxlength: 255\n },\n title: {\n maxlength: 255\n },\n caption: {\n maxlength: 255\n },\n image: {\n required: true,\n accept: instance.mimeTypesForIllustration.join(\",\")\n }\n },\n // files upload tempory dir\n dirIllustrationsTmp: \"temp\",\n dirIllustrations: \"front/public/img/quizs\"\n};\n\n//# sourceURL=webpack://wikilerni/../config/illustrations.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../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/links.js":
|
||
/*!**************************!*\
|
||
!*** ../config/links.js ***!
|
||
\**************************/
|
||
/***/ (function(module) {
|
||
|
||
eval("module.exports = {\n // API'routes (after \"apiUrl\" defined in instance.js)\n linksRoute: \"/link/\",\n // forms : à compléter avec valeurs par défaut, etc. cf modèle\n Link: {\n url: {\n maxlength: 255,\n required: true\n },\n anchor: {\n maxlength: 150,\n required: true\n }\n }\n};\n\n//# sourceURL=webpack://wikilerni/../config/links.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/manageQuestionnaires.js":
|
||
/*!*************************************!*\
|
||
!*** ./src/manageQuestionnaires.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_main__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../tools/main */ \"../tools/main.js\");\n/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/url.js */ \"./src/tools/url.js\");\n/* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/users.js */ \"./src/tools/users.js\");\n// -- GESTION DU FORMULAIRE PERMETTANT DE SAISIR / ÉDITER LES QUIZS ET LEURS DÉPENDANCES (LIENS, IMAGES, TAGS, ETC.)\n/// Vérifie que l'utilisateur est bien connecté, a le bon statut et le redirige vers le formulaire d'inscription si ce n'est pas le cas.\n/// Si c'est ok, propose un moteur de recherche permettant de chercher un quiz\n/// Si un id est passé par l'url on affiche les informations du quiz dans un formulaire permettant de l'éditer/supprimer avec une liste des éléments liés (liens, illustrations, questions...) pouvant eux-mêmes être édités/supprimés.\n/// Si le nombre max configuré pour chacun de ses éléments n'est pas atteint, il est aussi proposé d'ajouter un nouvel élément.\n/// Si pas d'id passé par l'url, on affiche un formulaire vide permettant de saisir un nouveau quiz.\n// Fichiers de configuration :\n\nconst lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.availableLangs[0];\n\nconst config = __webpack_require__(/*! ../../config/instance.js */ \"../config/instance.js\");\n\nconst configIllustrations = __webpack_require__(/*! ../../config/illustrations.js */ \"../config/illustrations.js\");\n\nconst configLinks = __webpack_require__(/*! ../../config/links.js */ \"../config/links.js\");\n\nconst configQuestionnaires = __webpack_require__(/*! ../../config/questionnaires.js */ \"../config/questionnaires.js\");\n\nconst configTemplate = __webpack_require__(\"../views sync recursive ^\\\\.\\\\/.*\\\\.js$\")(\"./\" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.theme + \"/config/\" + lang + \".js\"); // Fonctions :\n\n\n\n\n\n\n\n\n // Dictionnaires :\n\nconst {\n addOkMessage,\n deleteBtnTxt,\n serverError,\n updateBtnTxt\n} = __webpack_require__(\"../lang sync recursive ^\\\\.\\\\/.*\\\\/general$\")(\"./\" + lang + \"/general\");\n\nconst {\n addIllustrationTxt,\n defaultAlt,\n introNoIllustration,\n introTitleForIllustration\n} = __webpack_require__(\"../lang sync recursive ^\\\\.\\\\/.*\\\\/illustration$\")(\"./\" + lang + \"/illustration\");\n\nconst {\n addLinkTxt,\n defaultValueForLink,\n introNoLink,\n introTitleForLink\n} = __webpack_require__(\"../lang sync recursive ^\\\\.\\\\/.*\\\\/link$\")(\"./\" + lang + \"/link\");\n\nconst {\n addQuestionTxt,\n introNoQuestion,\n introTitleForQuestion\n} = __webpack_require__(\"../lang sync recursive ^\\\\.\\\\/.*\\\\/question$\")(\"./\" + lang + \"/question\");\n\nconst {\n needGroupIfRank,\n nextDateWithoutQuestionnaire,\n nextQuestionnairesList,\n questionnaireNeedBeCompleted,\n searchQuestionnaireWithNoResult\n} = __webpack_require__(\"../lang sync recursive ^\\\\.\\\\/.*\\\\/questionnaire$\")(\"./\" + lang + \"/questionnaire\");\n\nconst {\n needBeConnected\n} = __webpack_require__(\"../lang sync recursive ^\\\\.\\\\/.*\\\\/user$\")(\"./\" + lang + \"/user\"); // Principaux éléments du DOM manipulés :\n\n\nconst btnNewQuestionnaire = document.getElementById(\"wantNewQuestionnaire\");\nconst btnPreviewQuestionnaire = document.getElementById(\"previewQuestionnaire\");\nconst deleteCheckBox = document.getElementById(\"deleteOkLabel\");\nconst divCrash = document.getElementById(\"crash\");\nconst divIllustrations = document.getElementById(\"illustrationsList\");\nconst divLinks = document.getElementById(\"linksList\");\nconst divMain = document.getElementById(\"main-content\");\nconst divMessage = document.getElementById(\"message\");\nconst divQuestionnaires = document.getElementById(\"questionnairesList\");\nconst divQuestions = document.getElementById(\"questionsList\");\nconst divResponse = document.getElementById(\"response\");\nconst divSearchResult = document.getElementById(\"searchResult\");\nconst formLink = document.getElementById(\"links\");\nconst formIllustration = document.getElementById(\"illustrations\");\nconst formQuestion = document.getElementById(\"questions\");\nconst formQuestionnaire = document.getElementById(\"questionnaires\");\nconst formSearch = document.getElementById(\"search\");\nconst helpClassification = document.getElementById(\"helpClassification\");\nconst helpGroup = document.getElementById(\"helpGroup\");\nconst helpPublishingAt = document.getElementById(\"helpPublishingAt\");\nconst inputClassification = document.getElementById(\"classification\");\nconst inputGroup = document.getElementById(\"group\");\nconst inputRankInGroup = document.getElementById(\"rankInGroup\"); // Vide et cache tous les formulaires annexes au questionnaire :\n\nconst hideAllForms = () => {\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.empyAndHideForm)(formLink);\n if (defaultValueForLink != 0) document.getElementById(\"anchor\").value = defaultValueForLink;\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.empyAndHideForm)(formIllustration);\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.empyAndHideForm)(formQuestion);\n}; // Affiche les données d'un lien dans le formulaire adhoc :\n\n\nconst showFormLinkInfos = Link => {\n // On commence par cacher et vider tous les formulaires annexes\n hideAllForms(); // Puis on affiche celui concerné\n\n formLink.style.display = \"block\"; // + Les contraintes de champ & valeurs par défaut :\n\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configLinks.Link, formLink);\n\n for (let data in Link) {\n if (formLink.elements[data] !== undefined) formLink.elements[data].value = Link[data];\n }\n}; // Affiche les infos connues concernant les liens du questionnaire affiché :\n\n\nconst showLinkInfos = (Links, token) => {\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divLinks, \"h2\", introTitleForLink);\n let listLinks = \"\";\n\n for (let i in Links) listLinks += \"<li><a href='\" + Links[i].url + \"' target='_blank'>\" + Links[i].anchor + \"</a><br><a href='#updateLink\" + Links[i].id + \"' id='#updateLink\" + Links[i].id + \"' class='button' >\" + updateBtnTxt + \"</a> <a href='#deleteLink\" + Links[i].id + \"' id='#deleteLink\" + Links[i].id + \"' class='button' >\" + deleteBtnTxt + \"</a></li>\";\n\n if (listLinks === \"\") listLinks = \"<li>\" + introNoLink + \"</li>\";\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divLinks, \"ul\", listLinks, \"\", [], \"\", false); // ! à intégrer d'abord dans le DOM pour pouvoir ajouter les Listeners ensuite\n\n for (let i in Links) {\n document.getElementById(\"#updateLink\" + Links[i].id).addEventListener(\"click\", function (e) {\n e.preventDefault();\n showFormLinkInfos(Links[i]);\n window.location.assign(\"#links\");\n });\n document.getElementById(\"#deleteLink\" + Links[i].id).addEventListener(\"click\", function (e) {\n e.preventDefault();\n showFormLinkInfos(Links[i]);\n formLink.elements[\"deleteOk\"].value = true;\n sendLinkForm(token);\n });\n }\n\n if (Links.length < config.nbLinksMax || config.nbLinksMax === 0) {\n let newBtn = \"<a href='#newLink' id='newLink' class='button'>\" + addLinkTxt + \"</a>\";\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divLinks, \"p\", newBtn, \"\", [], {}, false);\n document.getElementById(\"newLink\").addEventListener(\"click\", function (e) {\n e.preventDefault();\n hideAllForms();\n formLink.style.display = \"block\";\n formLink.elements[\"QuestionnaireId\"].value = formQuestionnaire.elements[\"id\"].value;\n window.location.assign(\"#links\");\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configLinks, formLink);\n });\n }\n}; // Envoi des données d'un lien.\n\n\nconst sendLinkForm = token => {\n const divResponseLink = document.getElementById(\"responseLink\");\n divResponseLink.innerHTML = \"\";\n let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(formLink);\n const xhrLinkDatas = new XMLHttpRequest();\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.id) && !(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.deleteOk)) xhrLinkDatas.open(\"DELETE\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configLinks.linksRoute + datas.id);else if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.id)) xhrLinkDatas.open(\"PUT\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configLinks.linksRoute + datas.id);else xhrLinkDatas.open(\"POST\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configLinks.linksRoute);\n\n xhrLinkDatas.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if ((this.status === 200 || this.status === 201) && response.message != undefined && response.questionnaire != undefined) {\n if (Array.isArray(response.message)) response.message = response.message.join(\"<br>\");else response.message = response.message;\n showLinkInfos(response.questionnaire.Links, token); // le serveur retourne une version actualisée de la liste des liens\n\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divLinks, \"p\", response.message, \"\", [\"success\"], \"\", false);\n hideAllForms();\n window.location.assign(\"#linksList\");\n showNextQuestionnaires(token); // peut avoir évolué suivant ce qui s'est passé\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)(divResponseLink, \"p\", response.errors, \"\", [\"error\"]);\n } else (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponseLink, \"p\", serverError, \"\", [\"error\"]);\n }\n };\n\n xhrLinkDatas.setRequestHeader(\"Content-Type\", \"application/json\");\n xhrLinkDatas.setRequestHeader(\"Authorization\", \"Bearer \" + token);\n xhrLinkDatas.send(JSON.stringify(datas));\n}; // Affiche les données d'une illustration dans le formulaire adhoc :\n\n\nconst showFormIllustrationInfos = Illustration => {\n // On commence par cacher et vider tous les formulaires annexes\n hideAllForms(); // Puis on affiche celui concerné\n\n formIllustration.style.display = \"block\"; // + Les contraintes de champ & valeurs par défaut\n\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configIllustrations.Illustration, formIllustration); // Mais le champ file n'est plus requis, quand un fichier existe déjà\n\n formIllustration.elements[\"image\"].removeAttribute(\"required\");\n\n for (let data in Illustration) {\n if (formIllustration.elements[data] !== undefined) formIllustration.elements[data].value = Illustration[data];\n }\n}; // Affiche les infos connues concernant les illustrations du questionnaire affiché :\n\n\nconst showIllustrationInfos = (Illustrations, token) => {\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divIllustrations, \"h2\", introTitleForIllustration);\n let listIllustrations = \"\";\n\n for (let i in Illustrations) listIllustrations += \"<li><a href='\" + configTemplate.illustrationDir + Illustrations[i].url + \"' target='_blank'><img src='\" + configTemplate.illustrationDir + Illustrations[i].url + \"' alt='\" + defaultAlt + \"' style='max-height:150px'></a><br><a href='#updateIllustration\" + Illustrations[i].id + \"' id='#updateIllustration\" + Illustrations[i].id + \"' class='button'>\" + updateBtnTxt + \"</a> <a href='#deleteIllustration\" + Illustrations[i].id + \"' id='#deleteIllustration\" + Illustrations[i].id + \"' class='button'>\" + deleteBtnTxt + \"</a></li>\";\n\n if (listIllustrations === \"\") listIllustrations = \"<li>\" + introNoIllustration + \"</li>\";\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divIllustrations, \"ul\", listIllustrations, \"\", [], \"\", false); // ! à intégrer d'abord dans le DOM pour pouvoir ajouter les Listeners ensuite\n\n for (let i in Illustrations) {\n document.getElementById(\"#updateIllustration\" + Illustrations[i].id).addEventListener(\"click\", function (e) {\n e.preventDefault();\n showFormIllustrationInfos(Illustrations[i]);\n window.location.assign(\"#illustrations\");\n });\n document.getElementById(\"#deleteIllustration\" + Illustrations[i].id).addEventListener(\"click\", function (e) {\n e.preventDefault();\n showFormIllustrationInfos(Illustrations[i]);\n formIllustration.elements[\"deleteOk\"].value = true;\n sendIllustrationForm(token);\n });\n }\n\n if (Illustrations.length < config.nbIllustrationsMax || config.nbIllustrationsMax === 0) {\n let newBtn = \"<a href='#newIllustration' id='newIllustration' class='button'>\" + addIllustrationTxt + \"</a>\";\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divIllustrations, \"p\", newBtn, \"\", [], {}, false);\n document.getElementById(\"newIllustration\").addEventListener(\"click\", function (e) {\n e.preventDefault();\n hideAllForms();\n formIllustration.style.display = \"block\";\n formIllustration.elements[\"QuestionnaireId\"].value = formQuestionnaire.elements[\"id\"].value;\n window.location.assign(\"#illustrations\");\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configIllustrations, formIllustration);\n });\n }\n}; // Envoi des données d'une illustration.\n\n\nconst sendIllustrationForm = token => {\n const divResponseIllustration = document.getElementById(\"responseIllustration\");\n divResponseIllustration.innerHTML = \"\";\n let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(formIllustration);\n let datasWithFiles = new FormData(formIllustration); // car il me manque les informations du fichier avec la fonction getDatasFromInputs\n\n const xhrIllustrationDatas = new XMLHttpRequest();\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.id) && !(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.deleteOk)) xhrIllustrationDatas.open(\"DELETE\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configIllustrations.illustrationsRoute + datas.id);else if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.id)) xhrIllustrationDatas.open(\"PUT\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configIllustrations.illustrationsRoute + datas.id);else xhrIllustrationDatas.open(\"POST\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configIllustrations.illustrationsRoute);\n\n xhrIllustrationDatas.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if ((this.status === 200 || this.status === 201) && response.message != undefined && response.questionnaire != undefined) {\n if (Array.isArray(response.message)) response.message = response.message.join(\"<br>\");else response.message = response.message;\n showIllustrationInfos(response.questionnaire.Illustrations, token); // le serveur retourne une version actualisée de la liste des liens\n\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divIllustrations, \"p\", response.message, \"\", [\"success\"], \"\", false);\n hideAllForms();\n window.location.assign(\"#illustrationsList\");\n showNextQuestionnaires(token); // peut avoir évolué suivant ce qui s'est passé\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)(divResponseIllustration, \"p\", response.errors, \"\", [\"error\"]);\n } else (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponseIllustration, \"p\", serverError, \"\", [\"error\"]);\n }\n };\n\n xhrIllustrationDatas.setRequestHeader(\"Authorization\", \"Bearer \" + token);\n xhrIllustrationDatas.send(datasWithFiles);\n}; // Affiche les données d'une question + ses réponses possibles dans le formulaire adhoc\n\n\nconst showFormQuestionInfos = Question => {\n // On commence par cacher et vider tous les formulaires annexes\n hideAllForms(); // Puis on affiche celui concerné\n\n formQuestion.style.display = \"block\";\n\n for (let data in Question.Question) {\n if (formQuestion.elements[data] !== undefined) formQuestion.elements[data].value = Question.Question[data];\n } // + Les contraintes de champ & les valeurs par défaut\n\n\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configQuestionnaires.Question, formQuestion);\n\n for (let data in Question.Choices) {\n if (formQuestion.elements[\"choiceText\" + data] !== undefined) {\n formQuestion.elements[\"choiceText\" + data].value = Question.Choices[data].text;\n if (Question.Choices[data].isCorrect == true) formQuestion.elements[\"choiceIsCorrect\" + data].checked = true;\n formQuestion.elements[\"idChoice\" + data].value = Question.Choices[data].id;\n }\n }\n}; // Affiche les infos des questions du quiz affiché :\n\n\nconst showQuestionInfos = (Questions, token) => {\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestions, \"h2\", introTitleForQuestion);\n let listQuestions = \"\";\n\n for (let i in Questions) listQuestions += \"<li>\" + Questions[i].Question.rank + \" - \" + Questions[i].Question.text + \"<br><a href='#updateQuestion\" + Questions[i].Question.id + \"' id='#updateQuestion\" + Questions[i].Question.id + \"' class='button'>\" + updateBtnTxt + \"</a> <a href='#deleteQuestion\" + Questions[i].Question.id + \"' id='#deleteQuestion\" + Questions[i].Question.id + \"' class='button'>\" + deleteBtnTxt + \"</a></li>\";\n\n if (listQuestions === \"\") listQuestions = \"<li>\" + introNoQuestion + \"</li>\";\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestions, \"ul\", listQuestions, \"\", [], \"\", false); // à intégrer d'abord dans le DOM pour pouvoir ajouter les Listeners ensuite\n\n for (let i in Questions) {\n document.getElementById(\"#updateQuestion\" + Questions[i].Question.id).addEventListener(\"click\", function (e) {\n e.preventDefault();\n showFormQuestionInfos(Questions[i]);\n window.location.assign(\"#questions\");\n });\n document.getElementById(\"#deleteQuestion\" + Questions[i].Question.id).addEventListener(\"click\", function (e) {\n e.preventDefault();\n showFormQuestionInfos(Questions[i]);\n formQuestion.elements[\"deleteOk\"].value = true;\n sendQuestionForm(token);\n });\n }\n\n if (Questions.length < config.nbQuestionsMax || config.nbQuestionsMax === 0) {\n let newBtn = \"<a href='#newQuestion' id='newQuestion' class='button'>\" + addQuestionTxt + \"</a>\";\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestions, \"p\", newBtn, \"\", [], {}, false);\n document.getElementById(\"newQuestion\").addEventListener(\"click\", function (e) {\n e.preventDefault();\n hideAllForms();\n formQuestion.style.display = \"block\";\n formQuestion.elements[\"QuestionnaireId\"].value = formQuestionnaire.elements[\"id\"].value;\n formQuestion.elements[\"rank\"].value = Questions.length === 0 ? configQuestionnaires.Question.rank.defaultValue : Questions.length + 1;\n window.location.assign(\"#questions\");\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configQuestionnaires.Question, formQuestion);\n });\n }\n}; // Envoi des données d'une question et de ses réponse. Peut être généré par le bouton submit ou par le lien \"supprimer\".\n\n\nconst sendQuestionForm = token => {\n const divResponseQuestion = document.getElementById(\"responseQuestion\");\n divResponseQuestion.innerHTML = \"\";\n let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(formQuestion);\n const xhrQuestionDatas = new XMLHttpRequest();\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.id) && !(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.deleteOk)) xhrQuestionDatas.open(\"DELETE\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionsRoute + datas.id);else if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.id)) xhrQuestionDatas.open(\"PUT\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionsRoute + datas.id); // mise à jour d'une question\n else xhrQuestionDatas.open(\"POST\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionsRoute); // nouvelle question\n\n xhrQuestionDatas.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if ((this.status === 200 || this.status === 201) && response.message != undefined && response.questionnaire != undefined) {\n if (Array.isArray(response.message)) response.message = response.message.join(\"<br>\");else response.message = response.message;\n showQuestionInfos(response.questionnaire.Questions, token); // le serveur me retourne une version actualisée de la liste des questions\n\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestions, \"p\", response.message, \"\", [\"success\"], \"\", false);\n hideAllForms();\n window.location.assign(\"#questionsList\");\n showNextQuestionnaires(token); // car peut avoir évolué suivant ce qui s'est passé\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)(divResponseQuestion, \"p\", response.errors, \"\", [\"error\"]);\n } else (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponseQuestion, \"p\", serverError, \"\", [\"error\"]);\n }\n };\n\n xhrQuestionDatas.setRequestHeader(\"Content-Type\", \"application/json\");\n xhrQuestionDatas.setRequestHeader(\"Authorization\", \"Bearer \" + token);\n xhrQuestionDatas.send(JSON.stringify(datas));\n}; // Affichant les infos connues concernant un questionnaire et ses dépendances\n\n\nconst showFormQuestionnaireInfos = (id, token) => {\n const xhrGetInfos = new XMLHttpRequest();\n xhrGetInfos.open(\"GET\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + configQuestionnaires.getQuestionnaireRoutes + \"/\" + id);\n\n xhrGetInfos.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if (this.status === 200 && response.Questionnaire != undefined) {\n formQuestionnaire.reset(); // pour ne pas garder les données déjà affichées si vide dans ce qui est retourné\n\n for (let data in response.Questionnaire) {\n if (formQuestionnaire.elements[data] !== undefined) {\n if (data === \"publishingAt\" && response.Questionnaire[data] !== null) formQuestionnaire.elements[data].value = (0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.dateFormat)(response.Questionnaire[data], \"form\"); // !! revoir car format pouvant poser soucis si navigateur ne gère pas les champs de type \"date\"\n else formQuestionnaire.elements[data].value = response.Questionnaire[data];\n }\n }\n\n deleteCheckBox.style.display = \"block\";\n } // ajouter gestion des retours en erreur ?\n\n\n if (response.Tags != undefined) {\n let classification = \"\";\n\n for (let i in response.Tags) {\n if (i == 0) classification += response.Tags[i].name;else classification += \",\" + response.Tags[i].name;\n }\n\n formQuestionnaire.elements[\"classification\"].value = classification;\n }\n\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(response.Group)) formQuestionnaire.elements[\"group\"].value = response.Group.Group.title + \" (\" + response.Group.Group.id + \")\";\n divLinks.style.display = \"block\";\n divQuestions.style.display = \"block\";\n divIllustrations.style.display = \"block\";\n if (response.Links != undefined) showLinkInfos(response.Links, token);\n if (response.Questions != undefined) showQuestionInfos(response.Questions, token);\n if (response.Illustrations != undefined) showIllustrationInfos(response.Illustrations, token);\n helpPublishingAt.style.display = \"none\"; // info uniquement utile pour \"placer\" un nouveau quiz\n // à revoir : remplacer lien pour un bouton + reset complet du formulaire, y compris champs hidden :\n\n btnNewQuestionnaire.style.display = \"block\";\n btnNewQuestionnaire.setAttribute(\"href\", configTemplate.questionnairesManagementPage);\n btnPreviewQuestionnaire.style.display = \"block\";\n if (response.Questionnaire[\"isPublished\"] === false) btnPreviewQuestionnaire.setAttribute(\"href\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + configQuestionnaires.previewQuestionnaireRoutes + \"/\" + id + \"/\" + token);else btnPreviewQuestionnaire.setAttribute(\"href\", config.siteUrl + configQuestionnaires.publishedQuestionnaireRoutes + response.Questionnaire[\"slug\"] + \".html\");\n }\n };\n\n xhrGetInfos.send();\n}; // Affiche les questionnaires bientôt publiés.\n\n\nconst showNextQuestionnaires = token => {\n const xhrNextQuestionnaires = new XMLHttpRequest();\n xhrNextQuestionnaires.open(\"GET\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + configQuestionnaires.getListNextQuestionnaires);\n\n xhrNextQuestionnaires.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if (this.status === 200 && Array.isArray(response.questionnaires)) {\n let listHTML = \"\",\n dayStr,\n optionsDayStr = {\n weekday: 'long'\n };\n\n for (let i in response.questionnaires) {\n dayStr = new Intl.DateTimeFormat(lang, optionsDayStr).format(new Date(response.questionnaires[i].datePublishing));\n listHTML += \"<li>\" + dayStr + \" \" + (0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.dateFormat)(response.questionnaires[i].datePublishing, \"fr\") + \": <a href='\" + configTemplate.questionnairesManagementPage + \"?id=\" + response.questionnaires[i].id + \"' id='questionnaire_\" + response.questionnaires[i].id + \"'>\" + response.questionnaires[i].title + \"</a>\";\n if (response.questionnaires[i].isPublishable === false) listHTML += \" <span class='error'>(\" + questionnaireNeedBeCompleted + \")</li>\";\n listHTML += \"</li>\";\n }\n\n if (response.questionnaires.length !== 0) (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestionnaires, \"h3\", nextQuestionnairesList.replace(\"#NB\", response.questionnaires.length));\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(helpPublishingAt, \"em\", nextDateWithoutQuestionnaire + (0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.dateFormat)(new Date(response.dateNeeded), \"fr\"));\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestionnaires, \"ul\", listHTML, \"\", \"\", \"\", false);\n\n for (let i in response.questionnaires) {\n document.getElementById(\"questionnaire_\" + response.questionnaires[i].id).addEventListener(\"click\", function (e) {\n e.preventDefault();\n showFormQuestionnaireInfos(e.target.id.split(\"_\")[1], token);\n window.location.assign(\"#questionnaires\");\n });\n }\n } // ajouter gestion erreurs reçues du serveur ?\n\n }\n };\n\n xhrNextQuestionnaires.setRequestHeader(\"Authorization\", \"Bearer \" + token);\n xhrNextQuestionnaires.send();\n};\n\nconst initialise = async () => {\n try {\n const isConnected = await (0,_tools_users_js__WEBPACK_IMPORTED_MODULE_7__.checkSession)([\"manager\", \"admin\"], \"/\" + configTemplate.connectionPage, {\n message: needBeConnected,\n color: \"error\"\n }, window.location);\n\n if (isConnected) {\n divMain.style.display = \"block\";\n\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)((0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.getLocaly)(\"message\"))) {\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divMessage, \"p\", (0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.getLocaly)(\"message\", true).message, \"\", [(0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.getLocaly)(\"message\", true).color], \"\", false);\n (0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.removeLocaly)(\"message\");\n }\n\n const user = (0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.getLocaly)(\"user\", true); // Mise à jour du lien \"compte\" du header :\n\n (0,_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__.updateAccountLink)(user.status, configTemplate); // Initialisation des formulaires :\n\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configQuestionnaires, formSearch);\n (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configQuestionnaires.Questionnaire, formQuestionnaire); // Vide/cache les éléments inutiles en mode création :\n\n btnPreviewQuestionnaire.style.display = \"none\";\n deleteCheckBox.style.display = \"none\";\n hideAllForms(); // Si un id est passé par l'url, on essaye d'afficher le questionnaire :\n\n let urlDatas = (0,_tools_url_js__WEBPACK_IMPORTED_MODULE_6__.getUrlParams)();\n if (urlDatas && urlDatas.id !== undefined) showFormQuestionnaireInfos(urlDatas.id, user.token); // les prochaines publications :\n\n showNextQuestionnaires(user.token); // Lancement d'une recherche :\n\n formSearch.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(formSearch);\n const xhrSearch = new XMLHttpRequest();\n xhrSearch.open(\"POST\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + configQuestionnaires.searchAdminQuestionnairesRoute);\n\n xhrSearch.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if (this.status === 200 && Array.isArray(response)) {\n if (response.length === 0) (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divSearchResult, \"p\", searchQuestionnaireWithNoResult, \"\", [\"info\"]);else {\n let selectHTML = \"<option value=''></option>\";\n\n for (let i in response) selectHTML += \"<option value='\" + response[i].id + \"'>\" + response[i].title + \"</option>\";\n\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divSearchResult, \"select\", selectHTML, \"selectSearch\");\n const searchSelect = document.getElementById(\"selectSearch\");\n searchSelect.addEventListener(\"change\", function () {\n if (searchSelect.value !== \"\") showFormQuestionnaireInfos(searchSelect.value, user.token);\n });\n }\n } else (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divSearchResult, \"p\", serverError, \"\", [\"error\"]);\n }\n };\n\n xhrSearch.setRequestHeader(\"Content-Type\", \"application/json\");\n xhrSearch.setRequestHeader(\"Authorization\", \"Bearer \" + user.token);\n if (datas) xhrSearch.send(JSON.stringify(datas));\n }); // Aide à la saisie pour le classement du quiz\n\n inputClassification.addEventListener(\"input\", function (e) {\n divResponse.innerHTML = \"\";\n const tags = inputClassification.value.split(\",\");\n tags.reverse();\n const lastTag = tags[0].trim();\n\n if (lastTag.length >= 2) {\n const xhrSearchTags = new XMLHttpRequest();\n xhrSearchTags.open(\"POST\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + configQuestionnaires.tagsSearchRoute);\n\n xhrSearchTags.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if (this.status === 200 && Array.isArray(response)) {\n helpClassification.innerHTML = \"\";\n\n for (let i in response) {\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(helpClassification, \"a\", response[i].name, \"#tag\" + response[i].id, [\"info\"], {\n href: \"#tag\" + response[i].id\n }, false);\n document.getElementById(\"#tag\" + response[i].id).addEventListener(\"click\", function (e) {\n e.preventDefault();\n tags[0] = e.target.innerHTML;\n tags.reverse();\n inputClassification.value = tags.join(\",\");\n helpClassification.innerHTML = \"\";\n });\n }\n }\n }\n };\n\n xhrSearchTags.setRequestHeader(\"Content-Type\", \"application/json\");\n xhrSearchTags.setRequestHeader(\"Authorization\", \"Bearer \" + user.token);\n xhrSearchTags.send(JSON.stringify({\n search: lastTag\n }));\n }\n }); // Aide à la sélection d'un groupe pour le quiz\n\n inputGroup.addEventListener(\"input\", function (e) {\n formQuestionnaire[\"GroupId\"].value = \"\";\n const groupInput = inputGroup.value.trim();\n\n if (groupInput.length >= configQuestionnaires.searchGroups.minlength) {\n const xhrSearchGroups = new XMLHttpRequest();\n xhrSearchGroups.open(\"POST\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.groupRoutes + configQuestionnaires.searchGroupsRoute);\n\n xhrSearchGroups.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if (this.status === 200 && Array.isArray(response)) {\n helpGroup.innerHTML = \"\";\n\n for (let i in response) {\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(helpGroup, \"a\", response[i].title, \"#group\" + response[i].id, [\"info\"], {\n href: \"#group\" + response[i].id\n }, false);\n document.getElementById(\"#group\" + response[i].id).addEventListener(\"click\", function (e) {\n e.preventDefault();\n inputGroup.value = response[i].title + \" (\" + response[i].id + \")\";\n formQuestionnaire[\"GroupId\"].value = response[i].id;\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(response[i].maxRank)) inputRankInGroup.value = response[i].maxRank + 1;else inputRankInGroup.value = 1;\n helpGroup.innerHTML = \"\";\n });\n }\n }\n }\n };\n\n xhrSearchGroups.setRequestHeader(\"Content-Type\", \"application/json\");\n xhrSearchGroups.setRequestHeader(\"Authorization\", \"Bearer \" + user.token);\n xhrSearchGroups.send(JSON.stringify({\n searchGroups: groupInput\n }));\n }\n }); // Traitement de l'envoi du formulaire des infos de base du quiz\n\n formQuestionnaire.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n divResponse.innerHTML = \"\";\n let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(formQuestionnaire);\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.rankInGroup) && (0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.GroupId)) (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, \"p\", needGroupIfRank, \"\", [\"error\"]);else {\n if ((0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.rankInGroup) && !(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.GroupId)) datas.rankInGroup = 1;\n const xhrQuestionnaireDatas = new XMLHttpRequest();\n if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.id) && datas.deleteOk !== undefined) xhrQuestionnaireDatas.open(\"DELETE\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + \"/\" + datas.id);else if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.id)) xhrQuestionnaireDatas.open(\"PUT\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + \"/\" + datas.id);else xhrQuestionnaireDatas.open(\"POST\", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + \"/\");\n\n xhrQuestionnaireDatas.onreadystatechange = function () {\n if (this.readyState == XMLHttpRequest.DONE) {\n let response = JSON.parse(this.responseText);\n\n if (this.status === 201 && response.id != undefined) {\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, \"p\", addOkMessage, \"\", [\"success\"]);\n datas.id = response.id;\n showNextQuestionnaires(user.token); // peut avoir évolué suivant ce qui s'est passé\n } else if (this.status === 200 && response.message != undefined) {\n if (Array.isArray(response.message)) response.message = response.message.join(\"<br>\");else response.message = response.message;\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, \"p\", response.message, \"\", [\"success\"]);\n showNextQuestionnaires(user.token); // peut avoir évolué suivant ce qui s'est passé\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 if (datas.deleteOk === undefined && response.errors === undefined) showFormQuestionnaireInfos(datas.id, user.token); // on actualise les données\n else if (response.errors === undefined) {\n formQuestionnaire.reset();\n divLinks.innerHTML = \"\";\n divIllustrations.innerHTML = \"\";\n divQuestions.innerHTML = \"\";\n }\n }\n };\n\n xhrQuestionnaireDatas.setRequestHeader(\"Content-Type\", \"application/json\");\n xhrQuestionnaireDatas.setRequestHeader(\"Authorization\", \"Bearer \" + user.token);\n if (datas) xhrQuestionnaireDatas.send(JSON.stringify(datas));\n }\n });\n formLink.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n sendLinkForm(user.token);\n });\n formIllustration.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n sendIllustrationForm(user.token);\n });\n formQuestion.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n sendQuestionForm(user.token);\n });\n }\n } catch (e) {\n console.error(e);\n (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divCrash, \"p\", serverError, \"\", [\"error\"]);\n }\n};\n\ninitialise();\n(0,_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__.helloDev)();\n\n//# sourceURL=webpack://wikilerni/./src/manageQuestionnaires.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/url.js":
|
||
/*!**************************!*\
|
||
!*** ./src/tools/url.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 */ \"getUrlParams\": function() { return /* binding */ getUrlParams; }\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 récupérant les paramètres passés par l'url\n\nconst getUrlParams = () => {\n if ((0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(location.search)) return false;\n const parameters = location.search.substring(1).split(\"&\");\n if (!Array.isArray(parameters) || parameters.length === 0) return false;\n let param,\n datas = {};\n\n for (let i in parameters) {\n param = parameters[i].split(\"=\");\n if (param.length === 2) datas[param[0]] = decodeURI(param[1]);\n }\n\n return datas;\n};\n\n//# sourceURL=webpack://wikilerni/./src/tools/url.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/illustration.js":
|
||
/*!**********************************!*\
|
||
!*** ../lang/fr/illustration.js ***!
|
||
\**********************************/
|
||
/***/ (function(module) {
|
||
|
||
eval("module.exports = {\n addedOkMessage: \"L'illustration a bien été enregistrée.\",\n addIllustrationTxt: \"Ajouter une illustration\",\n defaultAlt: \"Illustration du quiz\",\n deletedOkMessage: \"L'illustration a bien été supprimée.\",\n introNoIllustration: \"Aucune illustration pour l'instant.\",\n introTitleForIllustration: \"Illustrations du quiz\",\n needGoodFile: \"Votre fichier n'a pas été accepté.\",\n needGoodLongAlt: \"Le texte de la propriété 'alt' ne doit pas compter plus de 255 caractères.\",\n needGoodLongCaption: \"Le texte de la légende de l'image ne doit pas compter plus de 255 caractères.\",\n needGoodLongTitle: \"Le texte de la propriété 'title' ne doit pas compter plus de 255 caractères.\",\n needGoodLongUrl: \"L'url de l'image doit contenir entre 5 et 255 caractères.\",\n needMaxIllustrationsForQuestionnaire: \"Vous avez déjà atteint le nombre maximal d'illustrations pour ce questionnaire.\",\n needQuestionnaireForIllustration: \"Tentative d'ajout/mise à jour/suppreession d'une illustration pour un questionnaire n'ayant pas été trouvé.\",\n needUniqueUrl: \"L'url est déjà utilisée par une autre image.\",\n needUrl: \"Merci de fournir une url pour l'image.\",\n notFound: \"L'enregistrement de l'illustration n'a pas été trouvé : \",\n updatedOkMessage: \"L'illustration a bien été modifiée.\"\n};\n\n//# sourceURL=webpack://wikilerni/../lang/fr/illustration.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../lang/fr/link.js":
|
||
/*!**************************!*\
|
||
!*** ../lang/fr/link.js ***!
|
||
\**************************/
|
||
/***/ (function(module) {
|
||
|
||
eval("module.exports = {\n addedOkMessage: \"Le lien a bien été ajouté.\",\n addLinkTxt: \"Ajouter un lien\",\n defaultValueForLink: \"Lire l'article sur Wikipédia.\",\n deletedOkMessage: \"Le lien a bien été supprimé.\",\n introNoLink: \"Aucun lien pour l'instant.\",\n introTitleForLink: \"Lectures proposées\",\n needAnchor: \"Merci de fournir une ancre pour ce lien.\",\n needGoodLongAnchor: \"Merci de fournir une ancre pour ce lien comptant entre 5 et 150 caractères.\",\n needMaxLinksForQuestionnaire: \"Vous avez déjà atteint le nombre maximal de liens pour ce questionnaire.\",\n needNotTooLongUrl: \"Merci de saisir un url ne comptant pas plus de 255 caractères.\",\n needQuestionnaire: \"Le questionnaire du lien n'a pas été trouvé.\",\n needUrl: \"Merci de saisir l'url du lien.\",\n needValidUrl: \"Merci de saisir un url ayant un format valide.\",\n notFound: \"L'enregistrement du lien n'a pas été trouvé.\",\n updatedOkMessage: \"Le lien a bien été modifié.\"\n};\n\n//# sourceURL=webpack://wikilerni/../lang/fr/link.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../lang/fr/question.js":
|
||
/*!******************************!*\
|
||
!*** ../lang/fr/question.js ***!
|
||
\******************************/
|
||
/***/ (function(module) {
|
||
|
||
eval("module.exports = {\n addOkMessage: \"La question a bien été ajoutée.\",\n addQuestionTxt: \"Ajouter une question\",\n deleteOkMessage: \"La question a bien été supprimée.\",\n introNoQuestion: \"Aucune question n'a été saisie pour l'instant\",\n introTitleForQuestion: \"Les questions enregistrées\",\n needMaxQuestions: \"Vous avez déjà atteint le nombre maximal de questions pour ce questionnaire : \",\n needNotTooLongText: \"La question ne doit pas compter plus de 255 caractères.\",\n needNumberForRank: \"Vous devez fournir un nombre supérieur ou égal à 1 pour le rang de cette question.\",\n needQuestionnaire: \"Le questionnaire concerné n'a pas été trouvé.\",\n needText: \"Merci de saisir le texte de la question !\",\n notFound: \"L'enregistrement de la question n'a pas été trouvé.\",\n updateOkMessage: \"La question a bien été modifiée.\"\n};\n\n//# sourceURL=webpack://wikilerni/../lang/fr/question.js?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../lang/fr/questionnaire.js":
|
||
/*!***********************************!*\
|
||
!*** ../lang/fr/questionnaire.js ***!
|
||
\***********************************/
|
||
/***/ (function(module) {
|
||
|
||
eval("module.exports = {\n btnProposeConnection: \"Je me connecte.\",\n // déplacé dans general.js\n btnProposeSubscribe: \"Je crée mon compte.\",\n //idem\n btnSendResponse: \"Testez vos réponses.\",\n btnShareQuizTxt: \"Partager via \",\n btnShareQuizMailBody: \"Bonjour,%0A%0AVoici%20un%20lien%20internet%20qui%20devrait%20t'intéresser :%0A\",\n btnShowQuestionnaire: \"Répondre au quiz !\",\n correctAnswerTxt: \"Bonne réponse\",\n estimatedTime: \"Durée de lecture estimée : \",\n estimatedTimeOption: {\n short: \"courte\",\n medium: \"moyenne\",\n long: \"longue\"\n },\n explanationBeforeTxt: \"Extrait :\",\n haveBeenPublished: \":NB nouveaux questionnaires ont été publiés.\",\n haveBeenRegenerated: \"Les pages HTML de #NB1 questionnaires ou éléments de groupes, #NB2 quizs groupés et #NB3 thèmes ont été regénérés.\",\n lastUpdated: \"Dernière mise à jour, le \",\n linkGoToNextElement: \"Article suivant\",\n linkGoToQuiz: \"Accéder au quiz\",\n needCorrectPublishingDate: \"La date de publication fournie n'a pas un format valide.\",\n needEstimatedTime: \"Merci de sélectionner une estimation de la durée de ce quiz.\",\n needGroupIfRank: \"Vous avez saisi un rang de classement, sans sélectionner le groupe du quiz.\",\n needIntroduction: \"Merci de fournir un texte d'introduction à votre quiz.\",\n needKnowIfIsPublished: \"Il faut savoir si ce quiz est publié.\",\n needLanguage: \"Vous devez sélectionner la langue de ce quiz.\",\n needNotTooLongTitle: \"Le titre du quiz ne doit pas compter plus de 255 caractères.\",\n needNumberForRank: \"Vous devez saisir un nombre entier pour le rang de ce questionnaire dans son groupe.\",\n needTitle: \"Merci de fournir un titre à votre quiz.\",\n needUniqueUrl: \"L'url du quiz doit être unique.\",\n needUrl: \"Merci de fournir l'url à votre quiz.\",\n nextDateWithoutQuestionnaire: \"Prochaine date sans quiz programmé : \",\n nextQuestionnairesList: \"Les #NB prochains quizs devant être publiés\",\n questionnairesName: \"quiz\",\n questionnaireNeedBeCompleted: \"Quiz incomplet\",\n publishedAt: \", le\",\n publishedBy: \"Quiz publié par\",\n searchQuestionnaireResultTitle: \"Résultat pour votre recherche\",\n searchQuestionnaireWithNoResult: \"Aucun quiz n'a été trouvé pour votre recherche.\",\n searchQuestionnaireWithResult: \"Il y a #NB article#S correspondant à votre recherche :\",\n wrongAnswerTxt: \"Mauvaise réponse\"\n};\n\n//# sourceURL=webpack://wikilerni/../lang/fr/questionnaire.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 ^\\.\\/.*\\/illustration$":
|
||
/*!********************************************!*\
|
||
!*** ../lang/ sync ^\.\/.*\/illustration$ ***!
|
||
\********************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval("var map = {\n\t\"./fr/illustration\": \"../lang/fr/illustration.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 ^\\\\.\\\\/.*\\\\/illustration$\";\n\n//# sourceURL=webpack://wikilerni/../lang/_sync_^\\.\\/.*\\/illustration$?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../lang sync recursive ^\\.\\/.*\\/link$":
|
||
/*!************************************!*\
|
||
!*** ../lang/ sync ^\.\/.*\/link$ ***!
|
||
\************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval("var map = {\n\t\"./fr/link\": \"../lang/fr/link.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 ^\\\\.\\\\/.*\\\\/link$\";\n\n//# sourceURL=webpack://wikilerni/../lang/_sync_^\\.\\/.*\\/link$?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../lang sync recursive ^\\.\\/.*\\/question$":
|
||
/*!****************************************!*\
|
||
!*** ../lang/ sync ^\.\/.*\/question$ ***!
|
||
\****************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval("var map = {\n\t\"./fr/question\": \"../lang/fr/question.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 ^\\\\.\\\\/.*\\\\/question$\";\n\n//# sourceURL=webpack://wikilerni/../lang/_sync_^\\.\\/.*\\/question$?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../lang sync recursive ^\\.\\/.*\\/questionnaire$":
|
||
/*!*********************************************!*\
|
||
!*** ../lang/ sync ^\.\/.*\/questionnaire$ ***!
|
||
\*********************************************/
|
||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||
|
||
eval("var map = {\n\t\"./fr/questionnaire\": \"../lang/fr/questionnaire.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 ^\\\\.\\\\/.*\\\\/questionnaire$\";\n\n//# sourceURL=webpack://wikilerni/../lang/_sync_^\\.\\/.*\\/questionnaire$?");
|
||
|
||
/***/ }),
|
||
|
||
/***/ "../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/manageQuestionnaires.js");
|
||
/******/
|
||
/******/ })()
|
||
; |