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

2221 lines
332 KiB
JavaScript
Raw Normal View History

2021-07-05 12:12:51 +02:00
/******/ (function() { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "../config/illustrations.js":
/*!**********************************!*\
!*** ../config/illustrations.js ***!
\**********************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
const instance = __webpack_require__(/*! ./instance */ "../config/instance.js");
module.exports = {
// API'routes (after "apiUrl" defined in instance.js)
illustrationsRoute: "/illustration/",
// forms : à compléter avec valeurs par défaut, etc. cf modèle
Illustration: {
alt: {
maxlength: 255
},
title: {
maxlength: 255
},
caption: {
maxlength: 255
},
image: {
required: true,
accept: instance.mimeTypesForIllustration.join(",")
}
},
// files upload tempory dir
dirIllustrationsTmp: "temp",
dirIllustrations: "front/public/img/quizs"
};
/***/ }),
/***/ "../config/instance.js":
/*!*****************************!*\
!*** ../config/instance.js ***!
\*****************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
const users = __webpack_require__(/*! ./users */ "../config/users.js");
const questionnaires = __webpack_require__(/*! ./questionnaires */ "../config/questionnaires.js");
module.exports = {
apiUrl: "http://localhost:3000/api",
siteUrl: "http://localhost:8080",
adminName: "Fabrice",
adminEmail: "dev@wikilerni.com",
2020-08-07 12:38:19 +02:00
senderName: "WikiLerni (local)",
senderEmail: "bonjour@wikilerni.com",
adminLang: "fr",
2020-08-07 12:38:19 +02:00
theme: "wikilerni",
// le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration.
availableLangs: ["fr"],
// Languages in which the site is available. The first one is the default one.
2020-08-07 12:38:19 +02:00
siteName: "WikiLerni (local)",
beginCodeGodfather: "WL",
// case-sensitive and can't contain "@" !
defaultReceiptDays: "147",
// Par défaut, quel(s) jour(s) de la semaine, l'utilisateur reçoit-il quelque chose ? (1=dimanche, 2=lundi... 7=samedi)
cronTimingAlertInSeconde: 120,
// for logs
responseTimingAlertInSeconde: 3,
// idem
tokenSignupValidationTimeInHours: "48h",
// https://github.com/zeit/ms
tokenLoginLinkTimeInHours: "1h",
tokenConnexionMinTimeInHours: "24h",
tokenConnexionMaxTimeInDays: "180 days",
tokenLoginChangingTimeInHours: "1h",
// for email & password changing
tokenDeleteUserTimeInHours: "1h",
tokenUnsubscribeLinkTimeInDays: "7 days",
// token send with subscription's emails
2021-01-25 16:54:16 +01:00
freeAccountTimingInDays: 0,
// if 0 = unlimited
freeAccountExpirationNotificationInDays: 3,
accountExpirationFirstNotificationInDays: 10,
accountExpirationSecondNotificationInDays: 3,
inactiveAccountTimeToDeleteInDays: 180,
// Questionnaires:
nbQuestionsMin: 1,
// minimum number of questions for the questionnaire to be publishable
2020-08-07 12:38:19 +02:00
nbQuestionsMax: 2,
// if 0 = not maximum
nbChoicesMax: 10,
nbNewQuestionnaires: 12,
// for RSS, etc.
hourGiveNewQuestionnaireBegin: 7,
// in user local time
hourGiveNewQuestionnaireEnd: 21,
// idem
2020-11-04 10:33:14 +01:00
maxQuestionnaireSendedAtSameTime: 50,
// for subscription's e-mailing
minSearchQuestionnaires: 3,
fieldNewQuestionnaires: "publishingAt",
// field to be used to create the list of the last questionnaires, can be "createdAt", "updatedAt" or "publishingAt"
// Groups :
2021-01-25 16:54:16 +01:00
nbQuestionnairesByGroupMin: 1,
nbQuestionnairesByGroupMax: 0,
// Illustrations:
2020-11-04 10:33:14 +01:00
nbIllustrationsMin: 1,
nbIllustrationsMax: 1,
maxIllustrationSizeinOctet: 1000000,
// pas contrôlé pour l'instant. À revoir.
mimeTypesForIllustration: ["image/jpg", "image/jpeg", "image/png", "image/gif", "image/png"],
// -- Upload and resize:
illustrationsWidthMaxInPx: 500,
illustrationsMiniaturesWidthMaxInPx: 200,
// Links:
nbLinksMin: 1,
nbLinksMax: 0,
// Questions & responses:
nbQuestionsMin: 1,
nbQuestionsMax: 0,
nbChoicesMax: 10,
// à supprimer quand tous les "require" à jour:
passwordMinLength: users.password.minlength,
dirCacheUsers: users.dirCacheUsers,
dirCacheUsersAnswers: users.dirCacheUsersAnswers,
dirCacheQuestionnaires: questionnaires.dirCacheQuestionnaires,
dirCacheQuestions: questionnaires.dirCacheQuestions,
dirCacheUsersQuestionnaires: questionnaires.dirCacheUsersQuestionnaires,
dirHTMLQuestionnaires: questionnaires.dirHTMLQuestionnaires,
dirWebQuestionnaires: questionnaires.dirWebQuestionnaires
};
/***/ }),
/***/ "../config/links.js":
/*!**************************!*\
!*** ../config/links.js ***!
\**************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
module.exports = {
// API'routes (after "apiUrl" defined in instance.js)
linksRoute: "/link/",
// forms : à compléter avec valeurs par défaut, etc. cf modèle
Link: {
url: {
maxlength: 255,
required: true
},
anchor: {
maxlength: 150,
required: true
}
}
};
/***/ }),
/***/ "../config/questionnaires.js":
/*!***********************************!*\
!*** ../config/questionnaires.js ***!
\***********************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
module.exports = {
// API'routes (after "apiUrl" defined in instance.js)
questionnaireRoutes: "/questionnaire",
// la base à laquelle s'ajoute les routes suivantes
getListNextQuestionnaires: "/getlistnextquestionnaires/",
getQuestionnaireRoutes: "/get",
getRandomQuestionnairesRoute: "/getrandom",
getStatsQuestionnaires: "/stats/",
previewQuestionnaireRoutes: "/preview",
publishedQuestionnaireRoutes: "/quiz/",
regenerateHTML: "/htmlregenerated",
searchAdminQuestionnairesRoute: "/searchadmin",
searchQuestionnairesRoute: "/search",
2020-11-04 10:33:14 +01:00
// -- groupes :
groupRoutes: "/group",
getGroupRoute: "/get/",
previewGroupRoutes: "/preview",
searchGroupsRoute: "/search",
// -- questions & choices :
questionsRoute: "/question/",
// -- tags :
tagsSearchRoute: "/tags/search/",
// -- answers :
getAdminStats: "/getadminstats/",
getPreviousAnswers: "/user/answers/",
getStatsAnswers: "/user/anwswers/stats/",
2020-11-04 10:33:14 +01:00
// fonctionne aussi pour les groupes
saveAnswersRoute: "/answer/",
// idem
// forms : à compléter avec valeurs par défaut, etc. cf modèle
Questionnaire: {
title: {
maxlength: 255,
required: true
},
slug: {
maxlength: 150
},
// champ requis mais calculé à partir du titre qd laissé vide dans le formulaire
introduction: {
required: true
}
},
searchQuestionnaires: {
minlength: 3,
required: true
},
2020-11-04 10:33:14 +01:00
Group: {
title: {
maxlength: 255,
required: true
},
slug: {
maxlength: 150
} // champ requis mais calculé à partir du titre qd laissé vide dans le formulaire
},
Question: {
text: {
maxlength: 255,
required: true
},
rank: {
required: true,
min: 1,
defaultValue: 1
}
},
Choice: {
text: {
maxlength: 255,
required: true
}
},
search: {
minlength: 3,
required: true
},
searchGroups: {
minlength: 3,
required: true
},
// Emplacement des fichiers JSON générés :
dirCacheGroups: "datas/questionnaires/groups",
dirCacheQuestionnaires: "datas/questionnaires",
dirCacheQuestions: "datas/questionnaires/questions",
dirCacheTags: "datas/questionnaires/tags",
dirCacheUsersQuestionnaires: "datas/users/questionnaires",
// Emplacement des fichiers HTML générés :
2020-11-04 10:33:14 +01:00
dirHTMLGroups: "front/public/quiz/gp",
dirHTMLQuestionnaires: "front/public/quiz",
2020-11-04 10:33:14 +01:00
dirHTMLNews: "front/public/quizs",
dirHTMLTags: "front/public/quizs",
// Idem mais pour urls :
2020-11-04 10:33:14 +01:00
dirWebGroups: "quiz/gp",
dirWebQuestionnaires: "quiz",
2020-11-04 10:33:14 +01:00
dirWebNews: "quizs/",
dirWebTags: "quizs/",
// limite des résultat du moteur de recherche, quand demande de résultats au hasard :
nbRandomResults: 3,
/* Valeurs en fait définies dans instance.js donc à supprimer quand plus utilisées ailleurs : */
nbQuestionsMin: 1,
nbQuestionsMax: 0,
nbChoicesMax: 10,
nbTagsMin: 0,
nbTagsMax: 0 // 0 = not max
};
/***/ }),
/***/ "../config/users.js":
/*!**************************!*\
!*** ../config/users.js ***!
\**************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
module.exports = {
// API'routes (after "apiUrl" defined in instance.js)
userRoutes: "/user",
checkDeleteLinkRoute: "/confirmdelete/",
checkIfIsEmailfreeRoute: "/isemailfree",
checkLoginRoute: "/checklogin/",
checkNewLoginLinkRoute: "/confirmnewlogin/",
checkSubscribeTokenRoute: "/validation/",
connectionRoute: "/login",
connectionWithLinkRoute: "/checkloginlink",
createUserRoute: "/create",
getAdminStats: "/getadminstats/",
getGodChilds: "/getgodchilds/",
getGodfatherRoute: "/getgodfatherid",
getLoginLinkRoute: "/getloginlink",
getPayments: "/payment/getforoneuser/",
getUserInfos: "/get/",
2020-11-04 10:33:14 +01:00
getUsersQuestionnairesRoute: "/getusersquestionnaires/",
// les questionnaires auxquels l'utilisateur a déjà eu accès via son abonnement
searchUserRoute: "/search/",
2020-11-04 10:33:14 +01:00
signupCompletionRoute: "/signupcompletion/",
subscribeRoute: "/signup",
unsubscribeRoute: "/subscription/stop/",
updateUserInfos: "/modify/",
validateUserRoute: "/validate/",
// forms : à compléter avec valeurs par défaut, etc. cf modèle
name: {
maxlength: 70,
required: true
},
email: {
maxlength: 255,
required: true
},
password: {
minlength: 8,
maxlength: 72,
required: true
},
// https://www.npmjs.com/package/bcrypt#security-issues-and-concerns
newPassword: {
minlength: 8,
maxlength: 72
},
codeGodfather: {
maxlength: 255
},
cguOk: {
value: "true",
required: true
},
search: {
minlength: 1,
required: true
},
timeDifferenceMin: -720,
timeDifferenceMax: 840,
// JSON dir
dirCacheUsers: "datas/users",
dirCacheUsersAnswers: "datas/users/questionnaires/answers",
dirCacheUsersWithoutAnswers: "datas/users/questionnaires/without"
};
/***/ }),
2021-07-05 12:12:51 +02:00
/***/ "./src/tools/clientstorage.js":
/*!************************************!*\
!*** ./src/tools/clientstorage.js ***!
\************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2021-07-05 12:12:51 +02:00
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "saveLocaly": function() { return /* binding */ saveLocaly; },
/* harmony export */ "getLocaly": function() { return /* binding */ getLocaly; },
/* harmony export */ "removeLocaly": function() { return /* binding */ removeLocaly; }
/* harmony export */ });
// FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.)
// Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie
const saveLocaly = (name, data) => {
localStorage.setItem(name, JSON.stringify(data));
};
2021-07-05 12:12:51 +02:00
const getLocaly = (name, json = false) => {
if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name);
};
const removeLocaly = name => {
localStorage.removeItem(name);
};
/***/ }),
2021-07-05 12:12:51 +02:00
/***/ "./src/tools/dom.js":
/*!**************************!*\
!*** ./src/tools/dom.js ***!
\**************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2021-07-05 12:12:51 +02:00
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "addElement": function() { return /* binding */ addElement; }
/* harmony export */ });
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js");
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__);
// Fonction associant les attributs fournis à un champ de formulaire
2021-07-05 12:12:51 +02:00
const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => {
if ((0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(eltType) || (0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(eltParent)) return false;else {
const newElement = document.createElement(eltType);
if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ?
newElement.id = eltId;
2021-07-05 12:12:51 +02:00
if (Array.isArray(eltClass) && eltClass.length != 0) {
for (let i in eltClass) newElement.classList.add(eltClass[i]);
}
2021-07-05 12:12:51 +02:00
if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok
{
for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]);
}
2021-07-05 12:12:51 +02:00
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.
2021-07-05 12:12:51 +02:00
if (replace) eltParent.innerHTML = "";
eltParent.appendChild(newElement);
}
};
2021-07-05 12:12:51 +02:00
/***/ }),
2021-07-05 12:12:51 +02:00
/***/ "./src/tools/everywhere.js":
/*!*********************************!*\
!*** ./src/tools/everywhere.js ***!
\*********************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "helloDev": function() { return /* binding */ helloDev; },
/* harmony export */ "updateAccountLink": function() { return /* binding */ updateAccountLink; }
/* harmony export */ });
// Ce script fournit des fonctions utilisées sur toutes les pages du site
const helloDev = () => {
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 ****");
return true;
};
const updateAccountLink = (status, configTemplate) => {
const link = document.getElementById("accountHeadLink");
const homePage = status + "HomePage";
link.href = "/" + configTemplate[homePage];
};
/***/ }),
2021-07-05 12:12:51 +02:00
/***/ "./src/tools/forms.js":
/*!****************************!*\
!*** ./src/tools/forms.js ***!
\****************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2021-07-05 12:12:51 +02:00
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "setAttributesToInputs": function() { return /* binding */ setAttributesToInputs; },
/* harmony export */ "getDatasFromInputs": function() { return /* binding */ getDatasFromInputs; },
/* harmony export */ "empyForm": function() { return /* binding */ empyForm; },
/* harmony export */ "empyAndHideForm": function() { return /* binding */ empyAndHideForm; }
/* harmony export */ });
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js");
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__);
// Fonction associant les attributs fournis à un champ de formulaire
2021-07-05 12:12:51 +02:00
const setAttributesToInputs = (inputsConf, myForm) => {
for (let i in myForm.elements) {
if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(myForm.elements[i].id)) {
let idInput = myForm.elements[i].id;
2021-07-05 12:12:51 +02:00
if (inputsConf[idInput] !== undefined) {
let inputHTML = document.getElementById(idInput);
2021-07-05 12:12:51 +02:00
for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]);
}
}
}
2021-07-05 12:12:51 +02:00
return true;
}; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc.
2021-07-05 12:12:51 +02:00
const getDatasFromInputs = myForm => {
const datas = {};
const formData = new FormData(myForm);
2021-07-05 12:12:51 +02:00
for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1];
2021-07-05 12:12:51 +02:00
return datas;
}; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc.
// Revoir pour les select
2021-07-05 12:12:51 +02:00
const empyForm = myForm => {
const formData = new FormData(myForm);
2021-07-05 12:12:51 +02:00
for (let entrie of formData.entries()) {
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 = "";
}
2021-07-05 12:12:51 +02:00
return true;
}; // Vide et cache le formulaire
2021-07-05 12:12:51 +02:00
const empyAndHideForm = myForm => {
empyForm(myForm);
myForm.style.display = "none";
};
/***/ }),
2021-07-05 12:12:51 +02:00
/***/ "./src/tools/url.js":
/*!**************************!*\
!*** ./src/tools/url.js ***!
\**************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2021-07-05 12:12:51 +02:00
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "getUrlParams": function() { return /* binding */ getUrlParams; }
/* harmony export */ });
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js");
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__);
// Fonction récupérant les paramètres passés par l'url
const getUrlParams = () => {
if ((0,_tools_main__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(location.search)) return false;
const parameters = location.search.substring(1).split("&");
if (!Array.isArray(parameters) || parameters.length === 0) return false;
let param,
datas = {};
for (let i in parameters) {
param = parameters[i].split("=");
if (param.length === 2) datas[param[0]] = decodeURI(param[1]);
}
return datas;
};
/***/ }),
/***/ "./src/tools/users.js":
/*!****************************!*\
!*** ./src/tools/users.js ***!
\****************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "getTimeDifference": function() { return /* binding */ getTimeDifference; },
/* harmony export */ "setSession": function() { return /* binding */ setSession; },
/* harmony export */ "checkAnswerDatas": function() { return /* binding */ checkAnswerDatas; },
/* harmony export */ "checkSession": function() { return /* binding */ checkSession; }
/* harmony export */ });
/* harmony import */ var _config_instance_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../config/instance.js */ "../config/instance.js");
/* harmony import */ var _config_instance_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_instance_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _config_users_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../config/users.js */ "../config/users.js");
/* harmony import */ var _config_users_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_config_users_js__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js");
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js");
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__);
const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.availableLangs[0];
const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.theme + "/config/" + lang + ".js");
const getTimeDifference = () => {
// 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
const timeLocal = new Date().getTimezoneOffset() * -1;
if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__.timeDifferenceMax || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__.timeDifferenceMin) return 0;else return timeLocal;
}; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite
// Seul le serveur pourra vérifier que les identifiants sont (toujours) valides.
const setSession = (userId, token, durationTS) => {
const storageUser = {
id: userId,
token: token,
duration: durationTS
};
(0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.saveLocaly)("user", storageUser);
}; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs
// Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas
const checkAnswerDatas = datas => {
const lastAnswer = (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.getLocaly)("lastAnswer");
if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(lastAnswer)) {
const answer = JSON.parse(lastAnswer);
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))) {
datas.duration = answer.duration;
datas.nbCorrectAnswers = answer.nbCorrectAnswers;
datas.nbQuestions = answer.nbQuestions;
if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(answer.QuestionnaireId)) datas.QuestionnaireId = answer.QuestionnaireId;else datas.GroupId = answer.GroupId;
}
}
return datas;
}; // Cette fonction teste la connexion de l'utilisateur d'une page
// 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é
const checkSession = async (status = [], urlRedirection, message, urlWanted) => {
return new Promise((resolve, reject) => {
const userDatas = (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.getLocaly)("user");
if ((0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(userDatas)) {
redirectUser(urlRedirection, message, urlWanted);
resolve(false);
} else {
const user = JSON.parse(userDatas);
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()) {
(0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.removeLocaly)("user");
redirectUser(urlRedirection, message, urlWanted);
resolve(false);
} else {
const xhr = new XMLHttpRequest();
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);
xhr.onload = () => {
let response = JSON.parse(xhr.responseText);
if (xhr.status === 200 && response.isValid && response.id != undefined) {
if (response.id === user.id) {
user.name = response.name;
user.language = response.language;
user.timeDifference = response.timeDifference;
user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API
(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 :-)
if (response.status === "user" && response.nbDaysOk <= 0) {
const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.siteUrl + "/" + configTemplate.accountPage;
if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !?
resolve(true);
} else {
if (status.length !== 0 && status.indexOf(response.status) === -1) {
redirectUser(urlRedirection, message, urlWanted);
resolve(false);
} else resolve(true);
}
} else {
(0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.removeLocaly)("user");
redirectUser(urlRedirection, message, urlWanted);
resolve(false);
}
} else {
(0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.removeLocaly)("user");
redirectUser(urlRedirection, message, urlWanted);
resolve(false);
}
};
xhr.onerror = () => reject(xhr.statusText);
xhr.send();
}
}
});
}; // Cette fonction sert à la précédente en cas de connexion non valide
const redirectUser = (urlRedirection, message, urlWanted) => {
if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(message)) (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.saveLocaly)("message", message);
if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(urlWanted)) (0,_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__.saveLocaly)("url", urlWanted);
if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_3__.isEmpty)(urlRedirection)) window.location.assign(urlRedirection);
};
/***/ }),
/***/ "../lang/fr/general.js":
/*!*****************************!*\
!*** ../lang/fr/general.js ***!
\*****************************/
/***/ (function(module) {
module.exports = {
addBtnTxt: "Ajouter",
addOkMessage: "Les données ont bien été enregistrées.",
alertNewWindow: "nouvelle fenêtre",
badUrl: "Tentative d'accès à une page n'existant pas :",
2020-11-04 10:33:14 +01:00
btnLinkToQuestionnaire: "Afficher !",
btnProposeConnection: "Je me connecte.",
btnProposeSubscribe: "Je crée mon compte.",
2021-01-25 16:54:16 +01:00
btnShowOnWebSite: "Lire la suite sur #SITE_NAME",
deleteBtnTxt: "Supprimer",
2020-11-04 10:33:14 +01:00
deleteFailMessage: "La suppression de l'enregistrement #ID a échoué.",
deleteOkMessage: "La suppression a bien été enregistrée.",
failAuth: "Erreur d'authentification.",
failAuthCron: "Tentative de lancement d'un cron sans le bon token.",
failAuthHeader: "Absence de header Authorization.",
failAuthId: "Identifiant non valide : ",
failAuthToken: "Token invalide ou utilisateur non trouvé.",
neededParams: "Des paramètres nécessaires manquants sont manquants.",
nextPage: "Page suivante",
notAllowed: "Vous n'avez pas les droits nécessaires pour cette action.",
notRequired: "Facultatif.",
notValidFormat: "Format non valide.",
previousPage: "Page précédente",
serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.",
serverErrorAdmin: "Bug de l'application :",
2020-11-04 10:33:14 +01:00
siteHTMLTitle: "WikiLerni : la culture générale en liberté",
2021-01-25 16:54:16 +01:00
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.",
scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL",
scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL",
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.",
2020-11-04 10:33:14 +01:00
subscriptionCall: "Inscrivez-vous !",
updateBtnTxt: "Modifier",
updateOkMessage: "La mise à jour à jour a bien été enregistrée."
};
/***/ }),
/***/ "../lang/fr/illustration.js":
/*!**********************************!*\
!*** ../lang/fr/illustration.js ***!
\**********************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
module.exports = {
addedOkMessage: "L'illustration a bien été enregistrée.",
addIllustrationTxt: "Ajouter une illustration",
defaultAlt: "Illustration du quiz",
deletedOkMessage: "L'illustration a bien été supprimée.",
introNoIllustration: "Aucune illustration pour l'instant.",
introTitleForIllustration: "Illustrations du quiz",
needGoodFile: "Votre fichier n'a pas été accepté.",
needGoodLongAlt: "Le texte de la propriété 'alt' ne doit pas compter plus de 255 caractères.",
needGoodLongCaption: "Le texte de la légende de l'image ne doit pas compter plus de 255 caractères.",
needGoodLongTitle: "Le texte de la propriété 'title' ne doit pas compter plus de 255 caractères.",
needGoodLongUrl: "L'url de l'image doit contenir entre 5 et 255 caractères.",
needMaxIllustrationsForQuestionnaire: "Vous avez déjà atteint le nombre maximal d'illustrations pour ce questionnaire.",
needQuestionnaireForIllustration: "Tentative d'ajout/mise à jour/suppreession d'une illustration pour un questionnaire n'ayant pas été trouvé.",
needUniqueUrl: "L'url est déjà utilisée par une autre image.",
needUrl: "Merci de fournir une url pour l'image.",
notFound: "L'enregistrement de l'illustration n'a pas été trouvé : ",
updatedOkMessage: "L'illustration a bien été modifiée."
};
/***/ }),
/***/ "../lang/fr/link.js":
/*!**************************!*\
!*** ../lang/fr/link.js ***!
\**************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
module.exports = {
addedOkMessage: "Le lien a bien été ajouté.",
addLinkTxt: "Ajouter un lien",
defaultValueForLink: "Lire l'article sur Wikipédia.",
deletedOkMessage: "Le lien a bien été supprimé.",
introNoLink: "Aucun lien pour l'instant.",
introTitleForLink: "Lectures proposées",
needAnchor: "Merci de fournir une ancre pour ce lien.",
needGoodLongAnchor: "Merci de fournir une ancre pour ce lien comptant entre 5 et 150 caractères.",
needMaxLinksForQuestionnaire: "Vous avez déjà atteint le nombre maximal de liens pour ce questionnaire.",
needNotTooLongUrl: "Merci de saisir un url ne comptant pas plus de 255 caractères.",
needQuestionnaire: "Le questionnaire du lien n'a pas été trouvé.",
needUrl: "Merci de saisir l'url du lien.",
needValidUrl: "Merci de saisir un url ayant un format valide.",
notFound: "L'enregistrement du lien n'a pas été trouvé.",
updatedOkMessage: "Le lien a bien été modifié."
};
/***/ }),
/***/ "../lang/fr/question.js":
/*!******************************!*\
!*** ../lang/fr/question.js ***!
\******************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
module.exports = {
addOkMessage: "La question a bien été ajoutée.",
addQuestionTxt: "Ajouter une question",
deleteOkMessage: "La question a bien été supprimée.",
introNoQuestion: "Aucune question n'a été saisie pour l'instant",
introTitleForQuestion: "Les questions enregistrées",
needMaxQuestions: "Vous avez déjà atteint le nombre maximal de questions pour ce questionnaire : ",
needNotTooLongText: "La question ne doit pas compter plus de 255 caractères.",
needNumberForRank: "Vous devez fournir un nombre supérieur ou égal à 1 pour le rang de cette question.",
needQuestionnaire: "Le questionnaire concerné n'a pas été trouvé.",
needText: "Merci de saisir le texte de la question !",
notFound: "L'enregistrement de la question n'a pas été trouvé.",
updateOkMessage: "La question a bien été modifiée."
};
/***/ }),
/***/ "../lang/fr/questionnaire.js":
/*!***********************************!*\
!*** ../lang/fr/questionnaire.js ***!
\***********************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
module.exports = {
btnProposeConnection: "Je me connecte.",
2020-11-04 10:33:14 +01:00
// déplacé dans general.js
btnProposeSubscribe: "Je crée mon compte.",
2020-11-04 10:33:14 +01:00
//idem
btnSendResponse: "Testez vos réponses.",
2020-11-04 10:33:14 +01:00
btnShareQuizTxt: "Partager via ",
btnShareQuizMailBody: "Bonjour,%0A%0AVoici%20un%20lien%20internet%20qui%20devrait%20t'intéresser :%0A",
btnShowQuestionnaire: "Répondre au quiz !",
correctAnswerTxt: "Bonne réponse",
estimatedTime: "Durée de lecture estimée : ",
2020-08-07 12:38:19 +02:00
estimatedTimeOption: {
short: "courte",
2020-08-07 12:38:19 +02:00
medium: "moyenne",
long: "longue"
2020-08-07 12:38:19 +02:00
},
explanationBeforeTxt: "Extrait :",
haveBeenPublished: ":NB nouveaux questionnaires ont été publiés.",
2020-11-04 10:33:14 +01:00
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.",
lastUpdated: "Dernière mise à jour, le ",
2020-11-04 10:33:14 +01:00
linkGoToNextElement: "Article suivant",
linkGoToQuiz: "Accéder au quiz",
needCorrectPublishingDate: "La date de publication fournie n'a pas un format valide.",
needEstimatedTime: "Merci de sélectionner une estimation de la durée de ce quiz.",
2020-11-04 10:33:14 +01:00
needGroupIfRank: "Vous avez saisi un rang de classement, sans sélectionner le groupe du quiz.",
needIntroduction: "Merci de fournir un texte d'introduction à votre quiz.",
needKnowIfIsPublished: "Il faut savoir si ce quiz est publié.",
needLanguage: "Vous devez sélectionner la langue de ce quiz.",
needNotTooLongTitle: "Le titre du quiz ne doit pas compter plus de 255 caractères.",
needNumberForRank: "Vous devez saisir un nombre entier pour le rang de ce questionnaire dans son groupe.",
needTitle: "Merci de fournir un titre à votre quiz.",
needUniqueUrl: "L'url du quiz doit être unique.",
needUrl: "Merci de fournir l'url à votre quiz.",
nextDateWithoutQuestionnaire: "Prochaine date sans quiz programmé : ",
nextQuestionnairesList: "Les #NB prochains quizs devant être publiés",
questionnairesName: "quiz",
questionnaireNeedBeCompleted: "Quiz incomplet",
publishedAt: ", le",
publishedBy: "Quiz publié par",
searchQuestionnaireResultTitle: "Résultat pour votre recherche",
searchQuestionnaireWithNoResult: "Aucun quiz n'a été trouvé pour votre recherche.",
2020-11-04 10:33:14 +01:00
searchQuestionnaireWithResult: "Il y a #NB article#S correspondant à votre recherche :",
wrongAnswerTxt: "Mauvaise réponse"
};
/***/ }),
/***/ "../lang/fr/user.js":
/*!**************************!*\
!*** ../lang/fr/user.js ***!
\**************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
module.exports = {
alreadyConnected: "Vous êtes déjà connecté au site !",
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>.",
badPassword: "Aucun compte utilisateur ne correspond aux informations saisies.",
byebyeMessage: "Si vous voyez ce message, c'est que votre déconnexion s'est bien déroulée.<br>À bientôt !",
connectionOk: "Connexion réussie.",
creationOkMessage: "Le nouvel utilisateur a bien été enregistré.",
cronDeleteUnvalidedUsersMessage: " comptes utilisateurs non validés ont été supprimés.",
deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ",
deleteInactiveUsersMessage: " comptes utilisateurs inactifs ont été supprimés.",
deleteOkMessage: "L'utilisateur a bien été supprimé.",
emailNotFound: "Aucun compte utilisateur n'a été trouvé pour cette adresse e-mail.",
2021-01-25 16:54:16 +01:00
failBotTest: "Un problème a été rencontré durant votre inscription. En cas de difficulté, n'hésitez pas contacter l'administrateur du site.",
failBotTestLog: "Une inscription a été bloquée, parce que le champ email2 était renseigné avec : ",
formsEmailLabel: "E-mail :",
formsEmailPlaceholder: "Votre adresse e-mail",
2021-01-25 16:54:16 +01:00
formsEmail2Placeholder: "Si vous voyez ce champ, laissez-le vide",
//champ qui ne devrait pas être visible par des humains
formsCGUOkLabel: "J'accepte <a href=#link target=\"_blank\" rel=\"noopener\" title=\"À lire :)\">les Conditions Générale d'Utilisation</a> du site (requis).",
formsSubmitTxt: "Je m'abonne !",
2020-11-04 10:33:14 +01:00
godfatherFound: "Votre \"parrain\" a bien été trouvé. Cette personne sera avertie que vous l'avez désignée.",
godfatherNotFound: "Désolé mais aucun utilisateur n'a été trouvé pour ce code / e-mail de parrainage :(",
infosAdminGodfather: "Cet utilisateur a été parrainé par ",
infosAdminNbGodChilds: "Ses #NB filleuls : ",
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>",
infosUserNbGodChilds: "Voici les #NB utilisateur(s) inscrit(s) en vous désignant comme \"parrain\" : ",
infosUserNoGodchilds: "Pour l'instant, aucune personne ne s'est inscrite, en vous désignant comme \"parrain\".",
mailDeleteBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.</p>",
mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL",
mailDeleteLinkAlreadyMessage: "Il semble que vous ayez déjà validé la suppression de votre compte.",
mailDeleteLinkFailMessage: "Votre lien de suppression n'est pas valide ou alors il a expiré.",
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.",
mailDeleteLinkOkMessage: "Votre compte a bien été supprimé. Merci d'avoir utilisé nos services.",
mailDeleteLinkTxt: "Confirmer.",
mailDeleteSubject: "Confirmer la suppression de votre compte.",
mailLoginLinkBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :</p>",
mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL",
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* !",
mailLoginLinkSubject: "Votre lien de connexion.",
mailLoginLinkTxt: "Me connecter.",
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>",
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 !",
mailThankGodfatherLinkTxt: "Me connecter à mon compte.",
mailThankGodfatherSubject: "Merci !",
mailUpdateLoginBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.</p>",
mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL",
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.",
mailUpdateLoginLinkTxt: "Valider.",
mailUpdateLoginOkMessage: "La mise à jour de vos identifiants a bien été enregistrée.",
mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.",
2020-11-04 10:33:14 +01:00
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>",
mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider et compléter votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL",
mailValidationLinkSubject: "Merci de valider votre inscription",
mailValidationLinkTxt: "Valider mon compte.",
2021-01-25 16:54:16 +01:00
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).",
2020-11-04 10:33:14 +01:00
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.",
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.",
mailWelcomeLinkTxt: "Me connecter à mon compte.",
mailWelcomeSubject: "Bienvenue !",
needBeConnected: "Vous devez être connecté pour accéder à cette page.",
needChooseLoginWay: "Vous devez soit saisir votre mot de passe, soit cocher la case vous permettant de recevoir un lien de connexion par e-mail.",
needEmail: "Merci de saisir votre adresse e-mail.",
needKnowNewsletterOk: "Il faut savoir si l'utilisateur accepte ou refuse de recevoir la newsletter.",
needLanguage: "Il manque le code langue.",
needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.",
needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.",
needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.",
needName: "Merci de choisir un nom d'utilisateur.",
needNotTooLongName: "Merci de choisir un nom d'utilisateur ne comptant pas plus de 70 caractères.",
needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.",
needPassWord: "Merci de fournir un mot de passe.",
needSMTP: "Il manque le serveur SMTP.",
needSMTPNotFound: "Il manque un serveur SMTP valide.",
needStatus: "Il manque le statut.",
needTimeDifference: "Il faut connaître le nombre de minutes du décalage horaire.",
needUGCOk: "Merci d'accepter les CGU pour créer votre compte.",
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>.",
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.",
needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.",
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.",
searchUsersWithoutResult: "L'utilisateur n'a pas été trouvé.",
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.",
updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.",
updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée, car elle n'a pas un format correct.",
updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.",
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.",
updatedNeedValidatedUser: "L'utilisateur que vous souhaitez modifier n'existe pas/plus ou n'a pas encore validé son compte.",
updatedOkMessage: "Vos informations ont bien été mises à jour.",
2020-11-04 10:33:14 +01:00
validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte. Vous pouvez vous y connecter <a href='#URL'>en cliquant ici</a>.",
validationAlreadyMessageAdmin: "Ce compte a déjà été validé.",
2020-11-04 10:33:14 +01:00
validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !<br>Vous pouvez compléter les informations de votre abonnement ci-dessous.",
validationMessageAdmin: "Le compte a bien été validé.",
welcomeMessage: "Bienvenue #NAME !"
};
/***/ }),
/***/ "../tools/main.js":
/*!************************!*\
!*** ../tools/main.js ***!
\************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
// Quelques fonctions utiles pour les chaînes
class Tool {
static isEmpty(myVar) {
if (myVar === undefined || myVar === null) return true;else {
myVar += ""; // si autre chose qu'une chaîne envoyé...
myVar = myVar.trim();
if (myVar === "") return true;else return false;
}
}
static trimIfNotNull(myString) {
if (Tool.isEmpty(myString)) myString = null;else {
myString += ""; // si autre chose qu'une chaîne envoyé...
myString = myString.trim();
}
return myString;
}
static shortenIfLongerThan(myString, max) {
myString += ""; // au cas où cela ne serait pas une chaîne...
if (myString.length > max) myString = myString.substring(0, max - 3) + "…";
return myString;
} // source : https://stackoverflow.com/questions/15604140/replace-multiple-strings-with-multiple-other-strings
2020-11-04 10:33:14 +01:00
static replaceAll(myString, mapObj) {
const replaceElts = new RegExp(Object.keys(mapObj).join("|"), "gi");
return myString.replace(replaceElts, matched => {
return mapObj[matched];
});
} // source : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random
static getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
} // à compléter : https://en.wikipedia.org/wiki/Date_format_by_country
static dateFormat(dateString, lang = "fr") {
if (Tool.isEmpty(dateString)) return "";
let myDate = new Date(dateString);
let myDay = myDate.getDate() + "";
if (myDay.length === 1) myDay = "0" + myDay;
let myMounth = myDate.getMonth() + 1 + "";
if (myMounth.length === 1) myMounth = "0" + myMounth;
let myYear = myDate.getFullYear();
if (lang === "fr") return myDay + "/" + myMounth + "/" + myYear;else if (lang === "form") // 2014-02-09
return myYear + "-" + myMounth + "-" + myDay;else return myMounth + "/" + myDay + "/" + myYear;
} // On enlève volontairement les 0/O pour éviter les confusions !
// Et mieux vaut aussi débuter et finir par une lettre simple.
static getPassword(nbCarMin, nbCarMax) {
const nbCar = nbCarMin + Math.floor(Math.random() * (nbCarMax - nbCarMin));
const letters = "ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz";
const others = "123456789!?.*-_%@&ÉÀÈÙ€$ÂÊÛÎ";
let password = letters[Math.floor(Math.random() * letters.length)];
for (let i = 1; i < nbCar - 1; i++) {
if (i % 2 === 1) password += others[Math.floor(Math.random() * others.length)];else password += letters[Math.floor(Math.random() * letters.length)];
}
password += letters[Math.floor(Math.random() * letters.length)];
return password;
}
}
module.exports = Tool;
/***/ }),
/***/ "../views/default/config/fr.js":
/*!*************************************!*\
!*** ../views/default/config/fr.js ***!
\*************************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
module.exports = {
headLinks: [{
anchor: "Accueil",
attributes: {
href: "/"
}
}, {
anchor: "Mon compte",
attributes: {
2020-08-07 12:38:19 +02:00
href: "/connexion.html",
id: "accountHeadLink"
}
}, {
anchor: "À propos",
attributes: {
href: "/a-propos.html"
}
}, {
anchor: "Contact",
attributes: {
href: "/contact.html"
}
}],
footLinks: [{
anchor: "Crédits",
attributes: {
href: "/credits.html"
}
}, {
anchor: "Mentions légales",
attributes: {
href: "/mentions-legales.html",
rel: "nofollow"
}
}, {
anchor: "Données personnelles",
attributes: {
href: "/donnees.html"
}
}, {
anchor: "C.G.U.",
attributes: {
href: "/cgu.html",
rel: "nofollow"
}
}, {
anchor: "C.G.V.",
attributes: {
href: "/cgv.html",
rel: "nofollow"
}
}],
maxQuestionnairesByPage: 10,
userHomePage: "accueil.html",
adminHomePage: "admin.html",
managerHomePage: "gestion.html",
subscribePage: "inscription.html",
connectionPage: "connexion.html",
accountPage: "compte.html",
questionnairesManagementPage: "gestion-quizs.html",
usersManagementPage: "gestion-utilisateurs.html",
nbQuestionnairesUserHomePage: 10,
illustrationDir: "/img/quizs/",
siteSlogan: "Cultivons notre jardin !",
homeTitle1: "De nature curieuse ?",
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\".",
homeTitle2: "La culture en liberté",
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>",
newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni",
newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.",
explanationTitle: "Vous découvrez WikiLerni ?",
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>.",
2020-08-07 12:38:19 +02:00
noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.",
tagsListTxt: "Parcourir les rubriques :"
};
/***/ }),
/***/ "../views/wikilerni/config/fr.js":
/*!***************************************!*\
!*** ../views/wikilerni/config/fr.js ***!
\***************************************/
2021-07-05 12:12:51 +02:00
/***/ (function(module) {
2020-08-07 12:38:19 +02:00
module.exports = {
// liens de l'interface
2020-08-07 12:38:19 +02:00
headLinks: [{
anchor: "Contact",
attributes: {
href: "/contact.html",
rel: "nofollow"
}
}, {
anchor: "Parcourir",
attributes: {
href: "/quizs/",
id: "indexHeadLink",
2020-11-04 10:33:14 +01:00
title: "Les dernières publications"
2020-08-07 12:38:19 +02:00
}
}, {
anchor: "Mon compte",
attributes: {
href: "/connexion.html",
id: "accountHeadLink",
title: "Accéder ou créez votre compte WikiLerni"
2020-08-07 12:38:19 +02:00
}
}, {
anchor: "À propos",
attributes: {
href: "/a-propos.html",
title: "En savoir + sur WikiLerni"
}
}, {
anchor: "Accueil",
attributes: {
href: "/",
title: "Page d'accueil"
2020-08-07 12:38:19 +02:00
}
}],
footLinks: [{
anchor: "Blog",
attributes: {
href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625",
title: "Le blog WikiLerni sur diaspora*"
2020-08-07 12:38:19 +02:00
}
}, {
anchor: "Crédits",
attributes: {
href: "/credits.html",
title: "Qui a créé WikiLerni ? Quels sont vos droits ?"
2020-08-07 12:38:19 +02:00
}
}, {
anchor: "Mentions légales",
attributes: {
href: "/mentions-legales.html",
rel: "nofollow"
}
}, {
anchor: "Données personnelles",
attributes: {
href: "/donnees.html",
title: "Vos données personnelles sur WikiLerni"
2020-08-07 12:38:19 +02:00
}
}, {
anchor: "CGV & CGU",
attributes: {
href: "/CGV-CGU.html",
rel: "nofollow"
}
}],
accountPage: "compte.html",
aboutPage: "a-propos.html",
2020-08-07 12:38:19 +02:00
adminHomePage: "admin.html",
cguPage: "CGV-CGU.html",
2020-08-07 12:38:19 +02:00
connectionPage: "connexion.html",
deleteLinkPage: "aurevoir.html?t=",
2020-08-07 12:38:19 +02:00
loginLinkPage: "login.html?t=",
managerHomePage: "gestion.html",
2020-08-07 12:38:19 +02:00
newLoginLinkPage: "newlogin.html?t=",
questionnairesManagementPage: "gestion-quizs.html",
2020-08-07 12:38:19 +02:00
stopMailPage: "stop-mail.html?t=",
subscribePage: "inscription.html",
updateAccountPage: "compte.html",
userHomePage: "accueil.html",
userHomePageTxt: "Ma page d'accueil.",
2020-08-07 12:38:19 +02:00
usersManagementPage: "gestion-utilisateurs.html",
validationLinkPage: "validation.html?t=",
/* Textes (général) */
2020-08-07 12:38:19 +02:00
siteSlogan: "Cultivons notre jardin !",
noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.",
mailRecipientTxt: "Message envoyé à :",
2021-01-25 16:54:16 +01:00
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>.",
/* Page d'accueil */
2020-08-07 12:38:19 +02:00
homePageTxt: "Page d'accueil",
homeTitle1: "De nature curieuse ?",
2021-01-25 16:54:16 +01:00
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>.",
2020-11-04 10:33:14 +01:00
homeTitle2: "La culture générale en liberté",
2021-01-25 16:54:16 +01:00
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>",
homeBtnAboutTxt: "En savoir plus sur WikiLerni ?",
2021-01-25 16:54:16 +01:00
homeBtnSubscribeTxt: "Testez WikiLerni",
homeSubcriptionFormTitle: "Recevez les prochains articles WikiLerni",
/* Page dernières publications... */
newQuestionnairesTitle: "Culture générale - apprenez de nouvelles choses avec WikiLerni",
2020-11-04 10:33:14 +01:00
newQuestionnairesIntro: "WikiLerni : testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.",
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>",
/* Plan du site, liste des tags */
tagListTitle: "Culture générale - des articles et quizs sur de nombreux thèmes !",
tagListMetaDesc: "WikiLerni : découvrir les différents thèmes abordés par WikiLerni. Inxex du site.",
tagListIntro: "<h3>Avec WikiLerni, devenez fort en thèmes... Oui mais quels thèmes ? :)</h3><blockquote>Aristote: «Lhomme a naturellement la passion de connaître…»</blockquote>",
/* Page quizs */
2021-01-25 16:54:16 +01:00
answersExplanationsLinkText: "Relire",
quizElementLinksIntro: "En savoir plus",
2020-11-04 10:33:14 +01:00
quizElementSubcriptionFormTitle: "Recevez les prochains articles WikiLerni",
explanationTitle: "Vous découvrez WikiLerni?",
explanationTxt: "<p>Le principe est simple: <b>vous commencez par lire larticle 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. Cest toujours <b>le contenu de larticle Wikipédia qui fait foi</b> concernant les «bonnes» réponses. Cest une façon de tester à la fois votre capacité dattention et votre mémoire. Les articles de Wikipédia peuvent évoluer, donc nhésitez pas <a href='/contact.html'>à me signaler une erreur</a>.</p><p><b>WikiLerni vous propose dautres solutions pour améliorer votre culture générale</b>. Pour en savoir plus, cliquez sur le bouton ci-dessous.</p>",
2021-01-25 16:54:16 +01:00
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 darticles est <b>suivie dun 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>",
/* Autres */
illustrationDir: "/img/quizs/",
twitterAccount: "WikiLerni",
maxQuestionnairesByPage: 12,
maxQuestionnairesSiteHomePage: 3,
nbQuestionnairesUserHomePage: 3
};
/***/ }),
2021-07-05 12:12:51 +02:00
/***/ "../lang sync recursive ^\\.\\/.*\\/general$":
/*!***************************************!*\
!*** ../lang/ sync ^\.\/.*\/general$ ***!
\***************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
2021-07-05 12:12:51 +02:00
var map = {
"./fr/general": "../lang/fr/general.js"
};
2021-07-05 12:12:51 +02:00
function webpackContext(req) {
var id = webpackContextResolve(req);
return __webpack_require__(id);
}
function webpackContextResolve(req) {
if(!__webpack_require__.o(map, req)) {
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
return map[req];
}
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/general$";
2021-07-05 12:12:51 +02:00
/***/ }),
2021-07-05 12:12:51 +02:00
/***/ "../lang sync recursive ^\\.\\/.*\\/illustration$":
/*!********************************************!*\
!*** ../lang/ sync ^\.\/.*\/illustration$ ***!
\********************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
2021-07-05 12:12:51 +02:00
var map = {
"./fr/illustration": "../lang/fr/illustration.js"
};
2021-07-05 12:12:51 +02:00
function webpackContext(req) {
var id = webpackContextResolve(req);
return __webpack_require__(id);
}
function webpackContextResolve(req) {
if(!__webpack_require__.o(map, req)) {
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
return map[req];
}
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/illustration$";
2021-07-05 12:12:51 +02:00
/***/ }),
2021-07-05 12:12:51 +02:00
/***/ "../lang sync recursive ^\\.\\/.*\\/link$":
/*!************************************!*\
!*** ../lang/ sync ^\.\/.*\/link$ ***!
\************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
2021-07-05 12:12:51 +02:00
var map = {
"./fr/link": "../lang/fr/link.js"
};
2021-07-05 12:12:51 +02:00
function webpackContext(req) {
var id = webpackContextResolve(req);
return __webpack_require__(id);
}
function webpackContextResolve(req) {
if(!__webpack_require__.o(map, req)) {
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
return map[req];
}
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/link$";
/***/ }),
/***/ "../lang sync recursive ^\\.\\/.*\\/question$":
/*!****************************************!*\
!*** ../lang/ sync ^\.\/.*\/question$ ***!
\****************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
var map = {
"./fr/question": "../lang/fr/question.js"
};
function webpackContext(req) {
var id = webpackContextResolve(req);
return __webpack_require__(id);
}
function webpackContextResolve(req) {
if(!__webpack_require__.o(map, req)) {
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
return map[req];
}
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/question$";
/***/ }),
/***/ "../lang sync recursive ^\\.\\/.*\\/questionnaire$":
/*!*********************************************!*\
!*** ../lang/ sync ^\.\/.*\/questionnaire$ ***!
\*********************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
var map = {
"./fr/questionnaire": "../lang/fr/questionnaire.js"
};
function webpackContext(req) {
var id = webpackContextResolve(req);
return __webpack_require__(id);
}
function webpackContextResolve(req) {
if(!__webpack_require__.o(map, req)) {
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
return map[req];
}
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/questionnaire$";
/***/ }),
/***/ "../lang sync recursive ^\\.\\/.*\\/user$":
/*!************************************!*\
!*** ../lang/ sync ^\.\/.*\/user$ ***!
\************************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
var map = {
"./fr/user": "../lang/fr/user.js"
};
function webpackContext(req) {
var id = webpackContextResolve(req);
return __webpack_require__(id);
}
function webpackContextResolve(req) {
if(!__webpack_require__.o(map, req)) {
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
return map[req];
}
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$";
/***/ }),
/***/ "../views sync recursive ^\\.\\/.*\\.js$":
/*!***********************************!*\
!*** ../views/ sync ^\.\/.*\.js$ ***!
\***********************************/
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
var map = {
"./default/config/fr.js": "../views/default/config/fr.js",
"./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js"
};
function webpackContext(req) {
var id = webpackContextResolve(req);
return __webpack_require__(id);
}
function webpackContextResolve(req) {
if(!__webpack_require__.o(map, req)) {
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
return map[req];
}
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "../views sync recursive ^\\.\\/.*\\.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 });
/******/ };
/******/ }();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
!function() {
"use strict";
/*!*************************************!*\
!*** ./src/manageQuestionnaires.js ***!
\*************************************/
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _config_instance_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../config/instance.js */ "../config/instance.js");
/* harmony import */ var _config_instance_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_instance_js__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tools/clientstorage.js */ "./src/tools/clientstorage.js");
/* harmony import */ var _tools_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/dom.js */ "./src/tools/dom.js");
/* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/everywhere.js */ "./src/tools/everywhere.js");
/* harmony import */ var _tools_forms_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/forms.js */ "./src/tools/forms.js");
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../tools/main */ "../tools/main.js");
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js");
/* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js");
// -- GESTION DU FORMULAIRE PERMETTANT DE SAISIR / ÉDITER LES QUIZS ET LEURS DÉPENDANCES (LIENS, IMAGES, TAGS, ETC.)
/// 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.
/// Si c'est ok, propose un moteur de recherche permettant de chercher un quiz
/// 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.
/// 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.
/// Si pas d'id passé par l'url, on affiche un formulaire vide permettant de saisir un nouveau quiz.
// Fichiers de configuration :
const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.availableLangs[0];
const config = __webpack_require__(/*! ../../config/instance.js */ "../config/instance.js");
const configIllustrations = __webpack_require__(/*! ../../config/illustrations.js */ "../config/illustrations.js");
const configLinks = __webpack_require__(/*! ../../config/links.js */ "../config/links.js");
const configQuestionnaires = __webpack_require__(/*! ../../config/questionnaires.js */ "../config/questionnaires.js");
const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.theme + "/config/" + lang + ".js"); // Fonctions :
// Dictionnaires :
const {
addOkMessage,
deleteBtnTxt,
serverError,
updateBtnTxt
} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general");
const {
addIllustrationTxt,
defaultAlt,
introNoIllustration,
introTitleForIllustration
} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/illustration$")("./" + lang + "/illustration");
const {
addLinkTxt,
defaultValueForLink,
introNoLink,
introTitleForLink
} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/link$")("./" + lang + "/link");
const {
addQuestionTxt,
introNoQuestion,
introTitleForQuestion
} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/question$")("./" + lang + "/question");
const {
needGroupIfRank,
nextDateWithoutQuestionnaire,
nextQuestionnairesList,
questionnaireNeedBeCompleted,
searchQuestionnaireWithNoResult
} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/questionnaire$")("./" + lang + "/questionnaire");
const {
needBeConnected
} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); // Principaux éléments du DOM manipulés :
const btnNewQuestionnaire = document.getElementById("wantNewQuestionnaire");
const btnPreviewQuestionnaire = document.getElementById("previewQuestionnaire");
const deleteCheckBox = document.getElementById("deleteOkLabel");
const divCrash = document.getElementById("crash");
const divIllustrations = document.getElementById("illustrationsList");
const divLinks = document.getElementById("linksList");
const divMain = document.getElementById("main-content");
const divMessage = document.getElementById("message");
const divQuestionnaires = document.getElementById("questionnairesList");
const divQuestions = document.getElementById("questionsList");
const divResponse = document.getElementById("response");
const divSearchResult = document.getElementById("searchResult");
const formLink = document.getElementById("links");
const formIllustration = document.getElementById("illustrations");
const formQuestion = document.getElementById("questions");
const formQuestionnaire = document.getElementById("questionnaires");
const formSearch = document.getElementById("search");
const helpClassification = document.getElementById("helpClassification");
const helpGroup = document.getElementById("helpGroup");
const helpPublishingAt = document.getElementById("helpPublishingAt");
const inputClassification = document.getElementById("classification");
const inputGroup = document.getElementById("group");
const inputRankInGroup = document.getElementById("rankInGroup"); // Vide et cache tous les formulaires annexes au questionnaire :
const hideAllForms = () => {
2021-07-05 12:12:51 +02:00
(0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.empyAndHideForm)(formLink);
2020-11-04 10:33:14 +01:00
if (defaultValueForLink != 0) document.getElementById("anchor").value = defaultValueForLink;
2021-07-05 12:12:51 +02:00
(0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.empyAndHideForm)(formIllustration);
(0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.empyAndHideForm)(formQuestion);
2020-11-04 10:33:14 +01:00
}; // Affiche les données d'un lien dans le formulaire adhoc :
const showFormLinkInfos = Link => {
2020-11-04 10:33:14 +01:00
// On commence par cacher et vider tous les formulaires annexes
hideAllForms(); // Puis on affiche celui concerné
2020-11-04 10:33:14 +01:00
formLink.style.display = "block"; // + Les contraintes de champ & valeurs par défaut :
2021-07-05 12:12:51 +02:00
(0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configLinks.Link, formLink);
for (let data in Link) {
2020-11-04 10:33:14 +01:00
if (formLink.elements[data] !== undefined) formLink.elements[data].value = Link[data];
}
}; // Affiche les infos connues concernant les liens du questionnaire affiché :
const showLinkInfos = (Links, token) => {
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divLinks, "h2", introTitleForLink);
let listLinks = "";
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>";
2020-11-04 10:33:14 +01:00
if (listLinks === "") listLinks = "<li>" + introNoLink + "</li>";
2021-07-05 12:12:51 +02:00
(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
2020-11-04 10:33:14 +01:00
for (let i in Links) {
document.getElementById("#updateLink" + Links[i].id).addEventListener("click", function (e) {
2020-11-04 10:33:14 +01:00
e.preventDefault();
showFormLinkInfos(Links[i]);
2020-11-04 10:33:14 +01:00
window.location.assign("#links");
});
document.getElementById("#deleteLink" + Links[i].id).addEventListener("click", function (e) {
2020-11-04 10:33:14 +01:00
e.preventDefault();
showFormLinkInfos(Links[i]);
2020-11-04 10:33:14 +01:00
formLink.elements["deleteOk"].value = true;
sendLinkForm(token);
});
}
2020-11-04 10:33:14 +01:00
if (Links.length < config.nbLinksMax || config.nbLinksMax === 0) {
let newBtn = "<a href='#newLink' id='newLink' class='button'>" + addLinkTxt + "</a>";
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divLinks, "p", newBtn, "", [], {}, false);
2020-11-04 10:33:14 +01:00
document.getElementById("newLink").addEventListener("click", function (e) {
e.preventDefault();
hideAllForms();
formLink.style.display = "block";
formLink.elements["QuestionnaireId"].value = formQuestionnaire.elements["id"].value;
window.location.assign("#links");
2021-07-05 12:12:51 +02:00
(0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configLinks, formLink);
2020-11-04 10:33:14 +01:00
});
}
}; // Envoi des données d'un lien.
const sendLinkForm = token => {
const divResponseLink = document.getElementById("responseLink");
2020-11-04 10:33:14 +01:00
divResponseLink.innerHTML = "";
2021-07-05 12:12:51 +02:00
let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(formLink);
const xhrLinkDatas = new XMLHttpRequest();
2021-07-05 12:12:51 +02:00
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);
2020-11-04 10:33:14 +01:00
xhrLinkDatas.onreadystatechange = function () {
if (this.readyState == XMLHttpRequest.DONE) {
let response = JSON.parse(this.responseText);
2020-11-04 10:33:14 +01:00
if ((this.status === 200 || this.status === 201) && response.message != undefined && response.questionnaire != undefined) {
if (Array.isArray(response.message)) response.message = response.message.join("<br>");else response.message = response.message;
showLinkInfos(response.questionnaire.Links, token); // le serveur retourne une version actualisée de la liste des liens
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divLinks, "p", response.message, "", ["success"], "", false);
2020-11-04 10:33:14 +01:00
hideAllForms();
window.location.assign("#linksList");
showNextQuestionnaires(token); // peut avoir évolué suivant ce qui s'est passé
} else if (response.errors) {
if (Array.isArray(response.errors)) response.errors = response.errors.join("<br>");else response.errors = serverError;
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponseLink, "p", response.errors, "", ["error"]);
} else (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponseLink, "p", serverError, "", ["error"]);
2020-11-04 10:33:14 +01:00
}
};
2020-11-04 10:33:14 +01:00
xhrLinkDatas.setRequestHeader("Content-Type", "application/json");
xhrLinkDatas.setRequestHeader("Authorization", "Bearer " + token);
xhrLinkDatas.send(JSON.stringify(datas));
}; // Affiche les données d'une illustration dans le formulaire adhoc :
const showFormIllustrationInfos = Illustration => {
2020-11-04 10:33:14 +01:00
// On commence par cacher et vider tous les formulaires annexes
hideAllForms(); // Puis on affiche celui concerné
2020-11-04 10:33:14 +01:00
formIllustration.style.display = "block"; // + Les contraintes de champ & valeurs par défaut
2021-07-05 12:12:51 +02:00
(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à
2020-11-04 10:33:14 +01:00
formIllustration.elements["image"].removeAttribute("required");
for (let data in Illustration) {
2020-11-04 10:33:14 +01:00
if (formIllustration.elements[data] !== undefined) formIllustration.elements[data].value = Illustration[data];
}
}; // Affiche les infos connues concernant les illustrations du questionnaire affiché :
const showIllustrationInfos = (Illustrations, token) => {
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divIllustrations, "h2", introTitleForIllustration);
let listIllustrations = "";
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>";
2020-11-04 10:33:14 +01:00
if (listIllustrations === "") listIllustrations = "<li>" + introNoIllustration + "</li>";
2021-07-05 12:12:51 +02:00
(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
2020-11-04 10:33:14 +01:00
for (let i in Illustrations) {
document.getElementById("#updateIllustration" + Illustrations[i].id).addEventListener("click", function (e) {
2020-11-04 10:33:14 +01:00
e.preventDefault();
showFormIllustrationInfos(Illustrations[i]);
2020-11-04 10:33:14 +01:00
window.location.assign("#illustrations");
});
document.getElementById("#deleteIllustration" + Illustrations[i].id).addEventListener("click", function (e) {
2020-11-04 10:33:14 +01:00
e.preventDefault();
showFormIllustrationInfos(Illustrations[i]);
2020-11-04 10:33:14 +01:00
formIllustration.elements["deleteOk"].value = true;
sendIllustrationForm(token);
});
}
2020-11-04 10:33:14 +01:00
if (Illustrations.length < config.nbIllustrationsMax || config.nbIllustrationsMax === 0) {
let newBtn = "<a href='#newIllustration' id='newIllustration' class='button'>" + addIllustrationTxt + "</a>";
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divIllustrations, "p", newBtn, "", [], {}, false);
2020-11-04 10:33:14 +01:00
document.getElementById("newIllustration").addEventListener("click", function (e) {
e.preventDefault();
hideAllForms();
formIllustration.style.display = "block";
formIllustration.elements["QuestionnaireId"].value = formQuestionnaire.elements["id"].value;
window.location.assign("#illustrations");
2021-07-05 12:12:51 +02:00
(0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configIllustrations, formIllustration);
2020-11-04 10:33:14 +01:00
});
}
}; // Envoi des données d'une illustration.
const sendIllustrationForm = token => {
const divResponseIllustration = document.getElementById("responseIllustration");
2020-11-04 10:33:14 +01:00
divResponseIllustration.innerHTML = "";
2021-07-05 12:12:51 +02:00
let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(formIllustration);
let datasWithFiles = new FormData(formIllustration); // car il me manque les informations du fichier avec la fonction getDatasFromInputs
2020-11-04 10:33:14 +01:00
const xhrIllustrationDatas = new XMLHttpRequest();
2021-07-05 12:12:51 +02:00
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);
2020-11-04 10:33:14 +01:00
xhrIllustrationDatas.onreadystatechange = function () {
if (this.readyState == XMLHttpRequest.DONE) {
let response = JSON.parse(this.responseText);
2020-11-04 10:33:14 +01:00
if ((this.status === 200 || this.status === 201) && response.message != undefined && response.questionnaire != undefined) {
if (Array.isArray(response.message)) response.message = response.message.join("<br>");else response.message = response.message;
showIllustrationInfos(response.questionnaire.Illustrations, token); // le serveur retourne une version actualisée de la liste des liens
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divIllustrations, "p", response.message, "", ["success"], "", false);
2020-11-04 10:33:14 +01:00
hideAllForms();
window.location.assign("#illustrationsList");
showNextQuestionnaires(token); // peut avoir évolué suivant ce qui s'est passé
} else if (response.errors) {
if (Array.isArray(response.errors)) response.errors = response.errors.join("<br>");else response.errors = serverError;
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponseIllustration, "p", response.errors, "", ["error"]);
} else (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponseIllustration, "p", serverError, "", ["error"]);
2020-11-04 10:33:14 +01:00
}
};
2020-11-04 10:33:14 +01:00
xhrIllustrationDatas.setRequestHeader("Authorization", "Bearer " + token);
xhrIllustrationDatas.send(datasWithFiles);
}; // Affiche les données d'une question + ses réponses possibles dans le formulaire adhoc
const showFormQuestionInfos = Question => {
2020-11-04 10:33:14 +01:00
// On commence par cacher et vider tous les formulaires annexes
hideAllForms(); // Puis on affiche celui concerné
2020-11-04 10:33:14 +01:00
formQuestion.style.display = "block";
for (let data in Question.Question) {
2020-11-04 10:33:14 +01:00
if (formQuestion.elements[data] !== undefined) formQuestion.elements[data].value = Question.Question[data];
} // + Les contraintes de champ & les valeurs par défaut
2021-07-05 12:12:51 +02:00
(0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configQuestionnaires.Question, formQuestion);
for (let data in Question.Choices) {
if (formQuestion.elements["choiceText" + data] !== undefined) {
formQuestion.elements["choiceText" + data].value = Question.Choices[data].text;
if (Question.Choices[data].isCorrect == true) formQuestion.elements["choiceIsCorrect" + data].checked = true;
formQuestion.elements["idChoice" + data].value = Question.Choices[data].id;
2020-11-04 10:33:14 +01:00
}
}
}; // Affiche les infos des questions du quiz affiché :
const showQuestionInfos = (Questions, token) => {
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestions, "h2", introTitleForQuestion);
let listQuestions = "";
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>";
2020-11-04 10:33:14 +01:00
if (listQuestions === "") listQuestions = "<li>" + introNoQuestion + "</li>";
2021-07-05 12:12:51 +02:00
(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
2020-11-04 10:33:14 +01:00
for (let i in Questions) {
document.getElementById("#updateQuestion" + Questions[i].Question.id).addEventListener("click", function (e) {
2020-11-04 10:33:14 +01:00
e.preventDefault();
showFormQuestionInfos(Questions[i]);
2020-11-04 10:33:14 +01:00
window.location.assign("#questions");
});
document.getElementById("#deleteQuestion" + Questions[i].Question.id).addEventListener("click", function (e) {
2020-11-04 10:33:14 +01:00
e.preventDefault();
showFormQuestionInfos(Questions[i]);
2020-11-04 10:33:14 +01:00
formQuestion.elements["deleteOk"].value = true;
sendQuestionForm(token);
});
}
2020-11-04 10:33:14 +01:00
if (Questions.length < config.nbQuestionsMax || config.nbQuestionsMax === 0) {
let newBtn = "<a href='#newQuestion' id='newQuestion' class='button'>" + addQuestionTxt + "</a>";
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestions, "p", newBtn, "", [], {}, false);
2020-11-04 10:33:14 +01:00
document.getElementById("newQuestion").addEventListener("click", function (e) {
e.preventDefault();
hideAllForms();
formQuestion.style.display = "block";
formQuestion.elements["QuestionnaireId"].value = formQuestionnaire.elements["id"].value;
formQuestion.elements["rank"].value = Questions.length === 0 ? configQuestionnaires.Question.rank.defaultValue : Questions.length + 1;
window.location.assign("#questions");
2021-07-05 12:12:51 +02:00
(0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configQuestionnaires.Question, formQuestion);
2020-11-04 10:33:14 +01:00
});
}
}; // 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".
const sendQuestionForm = token => {
const divResponseQuestion = document.getElementById("responseQuestion");
2020-11-04 10:33:14 +01:00
divResponseQuestion.innerHTML = "";
2021-07-05 12:12:51 +02:00
let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(formQuestion);
const xhrQuestionDatas = new XMLHttpRequest();
2021-07-05 12:12:51 +02:00
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
else xhrQuestionDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionsRoute); // nouvelle question
2020-11-04 10:33:14 +01:00
xhrQuestionDatas.onreadystatechange = function () {
if (this.readyState == XMLHttpRequest.DONE) {
let response = JSON.parse(this.responseText);
2020-11-04 10:33:14 +01:00
if ((this.status === 200 || this.status === 201) && response.message != undefined && response.questionnaire != undefined) {
if (Array.isArray(response.message)) response.message = response.message.join("<br>");else response.message = response.message;
showQuestionInfos(response.questionnaire.Questions, token); // le serveur me retourne une version actualisée de la liste des questions
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestions, "p", response.message, "", ["success"], "", false);
2020-11-04 10:33:14 +01:00
hideAllForms();
window.location.assign("#questionsList");
showNextQuestionnaires(token); // car peut avoir évolué suivant ce qui s'est passé
} else if (response.errors) {
if (Array.isArray(response.errors)) response.errors = response.errors.join("<br>");else response.errors = serverError;
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponseQuestion, "p", response.errors, "", ["error"]);
} else (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponseQuestion, "p", serverError, "", ["error"]);
2020-11-04 10:33:14 +01:00
}
};
2020-11-04 10:33:14 +01:00
xhrQuestionDatas.setRequestHeader("Content-Type", "application/json");
xhrQuestionDatas.setRequestHeader("Authorization", "Bearer " + token);
xhrQuestionDatas.send(JSON.stringify(datas));
}; // Affichant les infos connues concernant un questionnaire et ses dépendances
const showFormQuestionnaireInfos = (id, token) => {
const xhrGetInfos = new XMLHttpRequest();
2021-07-05 12:12:51 +02:00
xhrGetInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + configQuestionnaires.getQuestionnaireRoutes + "/" + id);
2020-11-04 10:33:14 +01:00
xhrGetInfos.onreadystatechange = function () {
if (this.readyState == XMLHttpRequest.DONE) {
let response = JSON.parse(this.responseText);
2020-11-04 10:33:14 +01:00
if (this.status === 200 && response.Questionnaire != undefined) {
formQuestionnaire.reset(); // pour ne pas garder les données déjà affichées si vide dans ce qui est retourné
for (let data in response.Questionnaire) {
2020-11-04 10:33:14 +01:00
if (formQuestionnaire.elements[data] !== undefined) {
2021-07-05 12:12:51 +02:00
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"
2020-11-04 10:33:14 +01:00
else formQuestionnaire.elements[data].value = response.Questionnaire[data];
}
}
2020-11-04 10:33:14 +01:00
deleteCheckBox.style.display = "block";
} // ajouter gestion des retours en erreur ?
2020-11-04 10:33:14 +01:00
if (response.Tags != undefined) {
let classification = "";
for (let i in response.Tags) {
2020-11-04 10:33:14 +01:00
if (i == 0) classification += response.Tags[i].name;else classification += "," + response.Tags[i].name;
}
2020-11-04 10:33:14 +01:00
formQuestionnaire.elements["classification"].value = classification;
}
2021-07-05 12:12:51 +02:00
if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(response.Group)) formQuestionnaire.elements["group"].value = response.Group.Group.title + " (" + response.Group.Group.id + ")";
2020-11-04 10:33:14 +01:00
divLinks.style.display = "block";
divQuestions.style.display = "block";
divIllustrations.style.display = "block";
if (response.Links != undefined) showLinkInfos(response.Links, token);
if (response.Questions != undefined) showQuestionInfos(response.Questions, token);
if (response.Illustrations != undefined) showIllustrationInfos(response.Illustrations, token);
helpPublishingAt.style.display = "none"; // info uniquement utile pour "placer" un nouveau quiz
// à revoir : remplacer lien pour un bouton + reset complet du formulaire, y compris champs hidden :
btnNewQuestionnaire.style.display = "block";
btnNewQuestionnaire.setAttribute("href", configTemplate.questionnairesManagementPage);
btnPreviewQuestionnaire.style.display = "block";
2021-07-05 12:12:51 +02:00
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");
2020-11-04 10:33:14 +01:00
}
};
2020-11-04 10:33:14 +01:00
xhrGetInfos.send();
}; // Affiche les questionnaires bientôt publiés.
const showNextQuestionnaires = token => {
const xhrNextQuestionnaires = new XMLHttpRequest();
2021-07-05 12:12:51 +02:00
xhrNextQuestionnaires.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + configQuestionnaires.getListNextQuestionnaires);
2020-11-04 10:33:14 +01:00
xhrNextQuestionnaires.onreadystatechange = function () {
if (this.readyState == XMLHttpRequest.DONE) {
let response = JSON.parse(this.responseText);
2020-11-04 10:33:14 +01:00
if (this.status === 200 && Array.isArray(response.questionnaires)) {
let listHTML = "",
2020-11-04 10:33:14 +01:00
dayStr,
optionsDayStr = {
weekday: 'long'
};
for (let i in response.questionnaires) {
2020-11-04 10:33:14 +01:00
dayStr = new Intl.DateTimeFormat(lang, optionsDayStr).format(new Date(response.questionnaires[i].datePublishing));
2021-07-05 12:12:51 +02:00
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>";
2020-11-04 10:33:14 +01:00
if (response.questionnaires[i].isPublishable === false) listHTML += " <span class='error'>(" + questionnaireNeedBeCompleted + ")</li>";
listHTML += "</li>";
}
2021-07-05 12:12:51 +02:00
if (response.questionnaires.length !== 0) (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestionnaires, "h3", nextQuestionnairesList.replace("#NB", response.questionnaires.length));
(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"));
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divQuestionnaires, "ul", listHTML, "", "", "", false);
2020-11-04 10:33:14 +01:00
for (let i in response.questionnaires) {
document.getElementById("questionnaire_" + response.questionnaires[i].id).addEventListener("click", function (e) {
2020-11-04 10:33:14 +01:00
e.preventDefault();
showFormQuestionnaireInfos(e.target.id.split("_")[1], token);
window.location.assign("#questionnaires");
});
}
} // ajouter gestion erreurs reçues du serveur ?
}
};
xhrNextQuestionnaires.setRequestHeader("Authorization", "Bearer " + token);
xhrNextQuestionnaires.send();
};
const initialise = async () => {
try {
2021-07-05 12:12:51 +02:00
const isConnected = await (0,_tools_users_js__WEBPACK_IMPORTED_MODULE_7__.checkSession)(["manager", "admin"], "/" + configTemplate.connectionPage, {
message: needBeConnected,
color: "error"
}, window.location);
if (isConnected) {
divMain.style.display = "block";
2021-07-05 12:12:51 +02:00
if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)((0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.getLocaly)("message"))) {
(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);
(0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.removeLocaly)("message");
}
2021-07-05 12:12:51 +02:00
const user = (0,_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__.getLocaly)("user", true); // Mise à jour du lien "compte" du header :
2021-07-05 12:12:51 +02:00
(0,_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__.updateAccountLink)(user.status, configTemplate); // Initialisation des formulaires :
2021-07-05 12:12:51 +02:00
(0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configQuestionnaires, formSearch);
(0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.setAttributesToInputs)(configQuestionnaires.Questionnaire, formQuestionnaire); // Vide/cache les éléments inutiles en mode création :
btnPreviewQuestionnaire.style.display = "none";
deleteCheckBox.style.display = "none";
hideAllForms(); // Si un id est passé par l'url, on essaye d'afficher le questionnaire :
2021-07-05 12:12:51 +02:00
let urlDatas = (0,_tools_url_js__WEBPACK_IMPORTED_MODULE_6__.getUrlParams)();
if (urlDatas && urlDatas.id !== undefined) showFormQuestionnaireInfos(urlDatas.id, user.token); // les prochaines publications :
showNextQuestionnaires(user.token); // Lancement d'une recherche :
formSearch.addEventListener("submit", function (e) {
e.preventDefault();
2021-07-05 12:12:51 +02:00
let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(formSearch);
const xhrSearch = new XMLHttpRequest();
2021-07-05 12:12:51 +02:00
xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + configQuestionnaires.searchAdminQuestionnairesRoute);
xhrSearch.onreadystatechange = function () {
if (this.readyState == XMLHttpRequest.DONE) {
let response = JSON.parse(this.responseText);
if (this.status === 200 && Array.isArray(response)) {
2021-07-05 12:12:51 +02:00
if (response.length === 0) (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divSearchResult, "p", searchQuestionnaireWithNoResult, "", ["info"]);else {
let selectHTML = "<option value=''></option>";
for (let i in response) selectHTML += "<option value='" + response[i].id + "'>" + response[i].title + "</option>";
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divSearchResult, "select", selectHTML, "selectSearch");
const searchSelect = document.getElementById("selectSearch");
searchSelect.addEventListener("change", function () {
if (searchSelect.value !== "") showFormQuestionnaireInfos(searchSelect.value, user.token);
});
2020-11-04 10:33:14 +01:00
}
2021-07-05 12:12:51 +02:00
} else (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divSearchResult, "p", serverError, "", ["error"]);
}
};
2020-11-04 10:33:14 +01:00
xhrSearch.setRequestHeader("Content-Type", "application/json");
xhrSearch.setRequestHeader("Authorization", "Bearer " + user.token);
if (datas) xhrSearch.send(JSON.stringify(datas));
}); // Aide à la saisie pour le classement du quiz
inputClassification.addEventListener("input", function (e) {
divResponse.innerHTML = "";
const tags = inputClassification.value.split(",");
tags.reverse();
const lastTag = tags[0].trim();
if (lastTag.length >= 2) {
const xhrSearchTags = new XMLHttpRequest();
2021-07-05 12:12:51 +02:00
xhrSearchTags.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.questionnaireRoutes + configQuestionnaires.tagsSearchRoute);
xhrSearchTags.onreadystatechange = function () {
if (this.readyState == XMLHttpRequest.DONE) {
let response = JSON.parse(this.responseText);
if (this.status === 200 && Array.isArray(response)) {
helpClassification.innerHTML = "";
for (let i in response) {
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(helpClassification, "a", response[i].name, "#tag" + response[i].id, ["info"], {
href: "#tag" + response[i].id
}, false);
document.getElementById("#tag" + response[i].id).addEventListener("click", function (e) {
e.preventDefault();
tags[0] = e.target.innerHTML;
tags.reverse();
inputClassification.value = tags.join(",");
helpClassification.innerHTML = "";
});
2020-11-04 10:33:14 +01:00
}
}
}
};
xhrSearchTags.setRequestHeader("Content-Type", "application/json");
xhrSearchTags.setRequestHeader("Authorization", "Bearer " + user.token);
xhrSearchTags.send(JSON.stringify({
search: lastTag
}));
}
}); // Aide à la sélection d'un groupe pour le quiz
inputGroup.addEventListener("input", function (e) {
formQuestionnaire["GroupId"].value = "";
const groupInput = inputGroup.value.trim();
if (groupInput.length >= configQuestionnaires.searchGroups.minlength) {
const xhrSearchGroups = new XMLHttpRequest();
2021-07-05 12:12:51 +02:00
xhrSearchGroups.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__.apiUrl + configQuestionnaires.groupRoutes + configQuestionnaires.searchGroupsRoute);
xhrSearchGroups.onreadystatechange = function () {
if (this.readyState == XMLHttpRequest.DONE) {
let response = JSON.parse(this.responseText);
if (this.status === 200 && Array.isArray(response)) {
helpGroup.innerHTML = "";
for (let i in response) {
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(helpGroup, "a", response[i].title, "#group" + response[i].id, ["info"], {
href: "#group" + response[i].id
}, false);
document.getElementById("#group" + response[i].id).addEventListener("click", function (e) {
e.preventDefault();
inputGroup.value = response[i].title + " (" + response[i].id + ")";
formQuestionnaire["GroupId"].value = response[i].id;
2021-07-05 12:12:51 +02:00
if (!(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(response[i].maxRank)) inputRankInGroup.value = response[i].maxRank + 1;else inputRankInGroup.value = 1;
helpGroup.innerHTML = "";
});
}
}
}
};
xhrSearchGroups.setRequestHeader("Content-Type", "application/json");
xhrSearchGroups.setRequestHeader("Authorization", "Bearer " + user.token);
xhrSearchGroups.send(JSON.stringify({
searchGroups: groupInput
}));
}
}); // Traitement de l'envoi du formulaire des infos de base du quiz
formQuestionnaire.addEventListener("submit", function (e) {
e.preventDefault();
divResponse.innerHTML = "";
2021-07-05 12:12:51 +02:00
let datas = (0,_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__.getDatasFromInputs)(formQuestionnaire);
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 {
if ((0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.rankInGroup) && !(0,_tools_main__WEBPACK_IMPORTED_MODULE_5__.isEmpty)(datas.GroupId)) datas.rankInGroup = 1;
const xhrQuestionnaireDatas = new XMLHttpRequest();
2021-07-05 12:12:51 +02:00
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 + "/");
xhrQuestionnaireDatas.onreadystatechange = function () {
if (this.readyState == XMLHttpRequest.DONE) {
let response = JSON.parse(this.responseText);
if (this.status === 201 && response.id != undefined) {
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, "p", addOkMessage, "", ["success"]);
datas.id = response.id;
showNextQuestionnaires(user.token); // peut avoir évolué suivant ce qui s'est passé
} else if (this.status === 200 && response.message != undefined) {
if (Array.isArray(response.message)) response.message = response.message.join("<br>");else response.message = response.message;
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, "p", response.message, "", ["success"]);
showNextQuestionnaires(user.token); // peut avoir évolué suivant ce qui s'est passé
} else if (response.errors) {
if (Array.isArray(response.errors)) response.errors = response.errors.join("<br>");else response.errors = serverError;
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, "p", response.errors, "", ["error"]);
} else (0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divResponse, "p", serverError, "", ["error"]);
if (datas.deleteOk === undefined && response.errors === undefined) showFormQuestionnaireInfos(datas.id, user.token); // on actualise les données
else if (response.errors === undefined) {
formQuestionnaire.reset();
divLinks.innerHTML = "";
divIllustrations.innerHTML = "";
divQuestions.innerHTML = "";
}
}
};
xhrQuestionnaireDatas.setRequestHeader("Content-Type", "application/json");
xhrQuestionnaireDatas.setRequestHeader("Authorization", "Bearer " + user.token);
if (datas) xhrQuestionnaireDatas.send(JSON.stringify(datas));
}
});
formLink.addEventListener("submit", function (e) {
e.preventDefault();
sendLinkForm(user.token);
});
formIllustration.addEventListener("submit", function (e) {
e.preventDefault();
sendIllustrationForm(user.token);
});
formQuestion.addEventListener("submit", function (e) {
e.preventDefault();
sendQuestionForm(user.token);
});
}
} catch (e) {
console.error(e);
2021-07-05 12:12:51 +02:00
(0,_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__.addElement)(divCrash, "p", serverError, "", ["error"]);
}
};
initialise();
2021-07-05 12:12:51 +02:00
(0,_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__.helloDev)();
}();
/******/ })()
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly93aWtpbGVybmkvLi4vY29uZmlnL2lsbHVzdHJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vd2lraWxlcm5pLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly93aWtpbGVybmkvLi4vY29uZmlnL2xpbmtzLmpzIiwid2VicGFjazovL3dpa2lsZXJuaS8uLi9jb25maWcvcXVlc3Rpb25uYWlyZXMuanMiLCJ3ZWJwYWNrOi8vd2lraWxlcm5pLy4uL2NvbmZpZy91c2Vycy5qcyIsIndlYnBhY2s6Ly93aWtpbGVybmkvLi9zcmMvdG9vbHMvY2xpZW50c3RvcmFnZS5qcyIsIndlYnBhY2s6Ly93aWtpbGVybmkvLi9zcmMvdG9vbHMvZG9tLmpzIiwid2VicGFjazovL3dpa2lsZXJuaS8uL3NyYy90b29scy9ldmVyeXdoZXJlLmpzIiwid2VicGFjazovL3dpa2lsZXJuaS8uL3NyYy90b29scy9mb3Jtcy5qcyIsIndlYnBhY2s6Ly93aWtpbGVybmkvLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovL3dpa2lsZXJuaS8uL3NyYy90b29scy91c2Vycy5qcyIsIndlYnBhY2s6Ly93aWtpbGVybmkvLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovL3dpa2lsZXJuaS8uLi9sYW5nL2ZyL2lsbHVzdHJhdGlvbi5qcyIsIndlYnBhY2s6Ly93aWtpbGVybmkvLi4vbGFuZy9mci9saW5rLmpzIiwid2VicGFjazovL3dpa2lsZXJuaS8uLi9sYW5nL2ZyL3F1ZXN0aW9uLmpzIiwid2VicGFjazovL3dpa2lsZXJuaS8uLi9sYW5nL2ZyL3F1ZXN0aW9ubmFpcmUuanMiLCJ3ZWJwYWNrOi8vd2lraWxlcm5pLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly93aWtpbGVybmkvLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly93aWtpbGVybmkvLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vd2lraWxlcm5pLy4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vd2lraWxlcm5pLy9ob21lL2ZhYnJpY2UvRG9jdW1lbnRzL0JpZG91aWxsZXMvd2lraWxlcm5pL2xhbmd8c3luY3wvXlxcLlxcLy4qXFwvZ2VuZXJhbCQvIiwid2VicGFjazovL3dpa2lsZXJuaS8vaG9tZS9mYWJyaWNlL0RvY3VtZW50cy9CaWRvdWlsbGVzL3dpa2lsZXJuaS9sYW5nfHN5bmN8L15cXC5cXC8uKlxcL2lsbHVzdHJhdGlvbiQvIiwid2VicGFjazovL3dpa2lsZXJuaS8vaG9tZS9mYWJyaWNlL0RvY3VtZW50cy9CaWRvdWlsbGVzL3dpa2lsZXJuaS9sYW5nfHN5bmN8L15cXC5cXC8uKlxcL2xpbmskLyIsIndlYnBhY2s6Ly93aWtpbGVybmkvL2hvbWUvZmFicmljZS9Eb2N1bWVudHMvQmlkb3VpbGxlcy93aWtpbGVybmkvbGFuZ3xzeW5jfC9eXFwuXFwvLipcXC9xdWVzdGlvbiQvIiwid2VicGFjazovL3dpa2lsZXJuaS8vaG9tZS9mYWJyaWNlL0RvY3VtZW50cy9CaWRvdWlsbGVzL3dpa2lsZXJuaS9sYW5nfHN5bmN8L15cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmUkLyIsIndlYnBhY2s6Ly93aWtpbGVybmkvL2hvbWUvZmFicmljZS9Eb2N1bWVudHMvQmlkb3VpbGxlcy93aWtpbGVybmkvbGFuZ3xzeW5jfC9eXFwuXFwvLipcXC91c2VyJC8iLCJ3ZWJwYWNrOi8vd2lraWxlcm5pLy9ob21lL2ZhYnJpY2UvRG9jdW1lbnRzL0JpZG91aWxsZXMvd2lraWxlcm5pL3ZpZXdzfHN5bmN8L15cXC5cXC8uKlxcLmpzJC8iLCJ3ZWJwYWNrOi8vd2lraWxlcm5pL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3dpa2lsZXJuaS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly93aWtpbGVybmkvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3dpa2lsZXJuaS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3dpa2lsZXJuaS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3dpa2lsZXJuaS8uL3NyYy9tYW5hZ2VRdWVzdGlvbm5haXJlcy5qcyJdLCJuYW1lcyI6WyJpbnN0YW5jZSIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiaWxsdXN0cmF0aW9uc1JvdXRlIiwiSWxsdXN0cmF0aW9uIiwiYWx0IiwibWF4bGVuZ3RoIiwidGl0bGUiLCJjYXB0aW9uIiwiaW1hZ2UiLCJyZXF1aXJlZCIsImFjY2VwdCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImpvaW4iLCJkaXJJbGx1c3RyYXRpb25zVG1wIiwiZGlySWxsdXN0cmF0aW9ucyIsInVzZXJzIiwicXVlc3Rpb25uYWlyZXMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWl