1664 lines
230 KiB
JavaScript
1664 lines
230 KiB
JavaScript
|
/******/ (function(modules) { // webpackBootstrap
|
|||
|
/******/ // The module cache
|
|||
|
/******/ var installedModules = {};
|
|||
|
/******/
|
|||
|
/******/ // The require function
|
|||
|
/******/ function __webpack_require__(moduleId) {
|
|||
|
/******/
|
|||
|
/******/ // Check if module is in cache
|
|||
|
/******/ if(installedModules[moduleId]) {
|
|||
|
/******/ return installedModules[moduleId].exports;
|
|||
|
/******/ }
|
|||
|
/******/ // Create a new module (and put it into the cache)
|
|||
|
/******/ var module = installedModules[moduleId] = {
|
|||
|
/******/ i: moduleId,
|
|||
|
/******/ l: false,
|
|||
|
/******/ exports: {}
|
|||
|
/******/ };
|
|||
|
/******/
|
|||
|
/******/ // Execute the module function
|
|||
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|||
|
/******/
|
|||
|
/******/ // Flag the module as loaded
|
|||
|
/******/ module.l = true;
|
|||
|
/******/
|
|||
|
/******/ // Return the exports of the module
|
|||
|
/******/ return module.exports;
|
|||
|
/******/ }
|
|||
|
/******/
|
|||
|
/******/
|
|||
|
/******/ // expose the modules object (__webpack_modules__)
|
|||
|
/******/ __webpack_require__.m = modules;
|
|||
|
/******/
|
|||
|
/******/ // expose the module cache
|
|||
|
/******/ __webpack_require__.c = installedModules;
|
|||
|
/******/
|
|||
|
/******/ // define getter function for harmony exports
|
|||
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|||
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|||
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|||
|
/******/ }
|
|||
|
/******/ };
|
|||
|
/******/
|
|||
|
/******/ // 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 });
|
|||
|
/******/ };
|
|||
|
/******/
|
|||
|
/******/ // create a fake namespace object
|
|||
|
/******/ // mode & 1: value is a module id, require it
|
|||
|
/******/ // mode & 2: merge all properties of value into the ns
|
|||
|
/******/ // mode & 4: return value when already ns object
|
|||
|
/******/ // mode & 8|1: behave like require
|
|||
|
/******/ __webpack_require__.t = function(value, mode) {
|
|||
|
/******/ if(mode & 1) value = __webpack_require__(value);
|
|||
|
/******/ if(mode & 8) return value;
|
|||
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|||
|
/******/ var ns = Object.create(null);
|
|||
|
/******/ __webpack_require__.r(ns);
|
|||
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|||
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|||
|
/******/ return ns;
|
|||
|
/******/ };
|
|||
|
/******/
|
|||
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|||
|
/******/ __webpack_require__.n = function(module) {
|
|||
|
/******/ var getter = module && module.__esModule ?
|
|||
|
/******/ function getDefault() { return module['default']; } :
|
|||
|
/******/ function getModuleExports() { return module; };
|
|||
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|||
|
/******/ return getter;
|
|||
|
/******/ };
|
|||
|
/******/
|
|||
|
/******/ // Object.prototype.hasOwnProperty.call
|
|||
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|||
|
/******/
|
|||
|
/******/ // __webpack_public_path__
|
|||
|
/******/ __webpack_require__.p = "";
|
|||
|
/******/
|
|||
|
/******/
|
|||
|
/******/ // Load entry module and return exports
|
|||
|
/******/ return __webpack_require__(__webpack_require__.s = "./src/manageGroups.js");
|
|||
|
/******/ })
|
|||
|
/************************************************************************/
|
|||
|
/******/ ({
|
|||
|
|
|||
|
/***/ "../config/instance.js":
|
|||
|
/*!*****************************!*\
|
|||
|
!*** ../config/instance.js ***!
|
|||
|
\*****************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports, __webpack_require__) {
|
|||
|
|
|||
|
var _module$exports;
|
|||
|
|
|||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|||
|
|
|||
|
var users = __webpack_require__(/*! ./users */ "../config/users.js");
|
|||
|
|
|||
|
var questionnaires = __webpack_require__(/*! ./questionnaires */ "../config/questionnaires.js");
|
|||
|
|
|||
|
module.exports = (_module$exports = {
|
|||
|
apiUrl: "http://localhost:3000/api",
|
|||
|
siteUrl: "http://localhost:8080",
|
|||
|
adminName: "Fabrice",
|
|||
|
adminEmail: "dev@wikilerni.com",
|
|||
|
senderName: "WikiLerni (local)",
|
|||
|
senderEmail: "bonjour@wikilerni.com",
|
|||
|
adminLang: "fr",
|
|||
|
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.
|
|||
|
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
|
|||
|
freeAccountTimingInDays: 15,
|
|||
|
freeAccountExpirationNotificationInDays: 3,
|
|||
|
accountExpirationFirstNotificationInDays: 10,
|
|||
|
accountExpirationSecondNotificationInDays: 3,
|
|||
|
inactiveAccountTimeToDeleteInDays: 180,
|
|||
|
// Questionnaires:
|
|||
|
nbQuestionsMin: 1,
|
|||
|
// minimum number of questions for the questionnaire to be publishable
|
|||
|
nbQuestionsMax: 2,
|
|||
|
// if 0 = not maximum
|
|||
|
nbChoicesMax: 10,
|
|||
|
nbNewQuestionnaires: 12,
|
|||
|
// for RSS, etc.
|
|||
|
hourGiveNewQuestionnaireBegin: 7,
|
|||
|
// in user local time
|
|||
|
hourGiveNewQuestionnaireEnd: 21,
|
|||
|
// idem
|
|||
|
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 :
|
|||
|
nbQuestionnairesByGroupMin: 2,
|
|||
|
nbQuestionnairesByGroupMax: 0,
|
|||
|
// Illustrations:
|
|||
|
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: 1
|
|||
|
}, _defineProperty(_module$exports, "nbQuestionsMin", 1), _defineProperty(_module$exports, "nbQuestionsMax", 0), _defineProperty(_module$exports, "nbChoicesMax", 10), _defineProperty(_module$exports, "passwordMinLength", users.password.minlength), _defineProperty(_module$exports, "dirCacheUsers", users.dirCacheUsers), _defineProperty(_module$exports, "dirCacheUsersAnswers", users.dirCacheUsersAnswers), _defineProperty(_module$exports, "dirCacheQuestionnaires", questionnaires.dirCacheQuestionnaires), _defineProperty(_module$exports, "dirCacheQuestions", questionnaires.dirCacheQuestions), _defineProperty(_module$exports, "dirCacheUsersQuestionnaires", questionnaires.dirCacheUsersQuestionnaires), _defineProperty(_module$exports, "dirHTMLQuestionnaires", questionnaires.dirHTMLQuestionnaires), _defineProperty(_module$exports, "dirWebQuestionnaires", questionnaires.dirWebQuestionnaires), _module$exports);
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../config/questionnaires.js":
|
|||
|
/*!***********************************!*\
|
|||
|
!*** ../config/questionnaires.js ***!
|
|||
|
\***********************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
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",
|
|||
|
// -- 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/",
|
|||
|
// 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
|
|||
|
},
|
|||
|
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 :
|
|||
|
dirHTMLGroups: "front/public/quiz/gp",
|
|||
|
dirHTMLQuestionnaires: "front/public/quiz",
|
|||
|
dirHTMLNews: "front/public/quizs",
|
|||
|
dirHTMLTags: "front/public/quizs",
|
|||
|
// Idem mais pour urls :
|
|||
|
dirWebGroups: "quiz/gp",
|
|||
|
dirWebQuestionnaires: "quiz",
|
|||
|
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 ***!
|
|||
|
\**************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
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/",
|
|||
|
getUsersQuestionnairesRoute: "/getusersquestionnaires/",
|
|||
|
// les questionnaires auxquels l'utilisateur a déjà eu accès via son abonnement
|
|||
|
searchUserRoute: "/search/",
|
|||
|
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"
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../lang sync recursive ^\\.\\/.*\\/general$":
|
|||
|
/*!**************************************!*\
|
|||
|
!*** ../lang sync ^\.\/.*\/general$ ***!
|
|||
|
\**************************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports, __webpack_require__) {
|
|||
|
|
|||
|
var map = {
|
|||
|
"./fr/general": "../lang/fr/general.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 ^\\.\\/.*\\/general$";
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../lang sync recursive ^\\.\\/.*\\/group$":
|
|||
|
/*!************************************!*\
|
|||
|
!*** ../lang sync ^\.\/.*\/group$ ***!
|
|||
|
\************************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports, __webpack_require__) {
|
|||
|
|
|||
|
var map = {
|
|||
|
"./fr/group": "../lang/fr/group.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 ^\\.\\/.*\\/group$";
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../lang sync recursive ^\\.\\/.*\\/user$":
|
|||
|
/*!***********************************!*\
|
|||
|
!*** ../lang sync ^\.\/.*\/user$ ***!
|
|||
|
\***********************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, 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$";
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../lang/fr/general.js":
|
|||
|
/*!*****************************!*\
|
|||
|
!*** ../lang/fr/general.js ***!
|
|||
|
\*****************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
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 :",
|
|||
|
btnLinkToQuestionnaire: "Afficher !",
|
|||
|
btnProposeConnection: "Je me connecte.",
|
|||
|
btnProposeSubscribe: "Je crée mon compte.",
|
|||
|
btnShowOnWebSite: "Voir sur #SITE_NAME.",
|
|||
|
deleteBtnTxt: "Supprimer",
|
|||
|
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 :",
|
|||
|
siteHTMLTitle: "WikiLerni : la culture générale en liberté",
|
|||
|
siteMetaDescription: "Avec WikiLerni, vous apprenez chaque jour 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.",
|
|||
|
subscriptionCall: "Inscrivez-vous !",
|
|||
|
updateBtnTxt: "Modifier",
|
|||
|
updateOkMessage: "La mise à jour à jour a bien été enregistrée."
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../lang/fr/group.js":
|
|||
|
/*!***************************!*\
|
|||
|
!*** ../lang/fr/group.js ***!
|
|||
|
\***************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
module.exports = {
|
|||
|
btnSendResponse: "Testez vos réponses.",
|
|||
|
btnShareQuizTxt: "Partager ce quiz sur ",
|
|||
|
commonIntroTxt: "Ce quiz vous permet tester ce que vous avez retenu des articles qui vous ont été proposés précédemment à la lecture. Au besoin, cliquez sur le bouton ci-dessous pour les (re)lire.",
|
|||
|
correctAnswerTxt: "Bonne réponse",
|
|||
|
groupsName: "Quiz",
|
|||
|
// nom d'un groupe pour l'affichage dans les vues
|
|||
|
groupQuestionnairesList: "Les #NB éléments enregistrés pour ce groupe",
|
|||
|
groupQuestionnairesListWithout: "Aucun élément n'a été enregistré pour ce groupe.",
|
|||
|
haveBeenPublished: "#NB nouveaux groupes de quizs ont été publiés.",
|
|||
|
infosGroupForAdmin: "Ce groupe de quizs a été créé le DATE_CREA, mise à jour la dernière fois le DATE_UPDATE.<br>Son identifiant est <b>GROUP_ID</b>. Il regroupe actuellement les questions de NB_ELEMENTS quizs.",
|
|||
|
linkFirstElementGroup: "Retour au premier article.",
|
|||
|
lastUpdated: "Dernière mise à jour le ",
|
|||
|
needCorrectPublishingDate: "La date de publication fournie n'a pas un format valide.",
|
|||
|
needLanguage: "Vous devez sélectionner la langue de ce groupe de quizs.",
|
|||
|
needNotTooLongTitle: "Le titre du groupe de quizs ne doit pas compter plus de 255 caractères.",
|
|||
|
needTitle: "Merci de fournir un titre à ce groupe de quizs.",
|
|||
|
needUniqueUrl: "L'url du groupe de quizs doit être unique.",
|
|||
|
needUrl: "Merci de fournir l'url à ce groupe de quizs.",
|
|||
|
notFound: "Le groupe de quizs (#SEARCH) n'a pas été trouvé.",
|
|||
|
publishedAt: " le",
|
|||
|
publishedBy: "Quiz publié par",
|
|||
|
searchIsNotLongEnough: "Vous devez saisir au moins #MIN caractères pour votre recherche.",
|
|||
|
searchWithoutResult: "Aucun groupe n'a été trouvé pour votre recherche.",
|
|||
|
wrongAnswerTxt: "Mauvaise réponse"
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../lang/fr/user.js":
|
|||
|
/*!**************************!*\
|
|||
|
!*** ../lang/fr/user.js ***!
|
|||
|
\**************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
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.",
|
|||
|
formsEmailLabel: "E-mail :",
|
|||
|
formsEmailPlaceholder: "Votre adresse e-mail",
|
|||
|
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 !",
|
|||
|
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.",
|
|||
|
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.",
|
|||
|
mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24 H sur le lien de confirmation qui vient de vous être envoyé par e-mail.",
|
|||
|
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.",
|
|||
|
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é.",
|
|||
|
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 ***!
|
|||
|
\************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|||
|
|
|||
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|||
|
|
|||
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|||
|
|
|||
|
// Quelques fonctions utiles pour les chaînes
|
|||
|
var Tool = /*#__PURE__*/function () {
|
|||
|
function Tool() {
|
|||
|
_classCallCheck(this, Tool);
|
|||
|
}
|
|||
|
|
|||
|
_createClass(Tool, null, [{
|
|||
|
key: "isEmpty",
|
|||
|
value: function 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;
|
|||
|
}
|
|||
|
}
|
|||
|
}, {
|
|||
|
key: "trimIfNotNull",
|
|||
|
value: function trimIfNotNull(myString) {
|
|||
|
if (Tool.isEmpty(myString)) myString = null;else {
|
|||
|
myString += ""; // si autre chose qu'une chaîne envoyé...
|
|||
|
|
|||
|
myString = myString.trim();
|
|||
|
}
|
|||
|
return myString;
|
|||
|
}
|
|||
|
}, {
|
|||
|
key: "shortenIfLongerThan",
|
|||
|
value: function 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
|
|||
|
|
|||
|
}, {
|
|||
|
key: "replaceAll",
|
|||
|
value: function replaceAll(myString, mapObj) {
|
|||
|
var replaceElts = new RegExp(Object.keys(mapObj).join("|"), "gi");
|
|||
|
return myString.replace(replaceElts, function (matched) {
|
|||
|
return mapObj[matched];
|
|||
|
});
|
|||
|
} // source : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random
|
|||
|
|
|||
|
}, {
|
|||
|
key: "getRandomInt",
|
|||
|
value: function 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
|
|||
|
|
|||
|
}, {
|
|||
|
key: "dateFormat",
|
|||
|
value: function dateFormat(dateString) {
|
|||
|
var lang = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "fr";
|
|||
|
if (Tool.isEmpty(dateString)) return "";
|
|||
|
var myDate = new Date(dateString);
|
|||
|
var myDay = myDate.getDate() + "";
|
|||
|
if (myDay.length === 1) myDay = "0" + myDay;
|
|||
|
var myMounth = myDate.getMonth() + 1 + "";
|
|||
|
if (myMounth.length === 1) myMounth = "0" + myMounth;
|
|||
|
var 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.
|
|||
|
|
|||
|
}, {
|
|||
|
key: "getPassword",
|
|||
|
value: function getPassword(nbCarMin, nbCarMax) {
|
|||
|
var nbCar = nbCarMin + Math.floor(Math.random() * (nbCarMax - nbCarMin));
|
|||
|
var letters = "ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz";
|
|||
|
var others = "123456789!?.*-_%@&ÉÀÈÙ€$ÂÊÛÎ";
|
|||
|
var password = letters[Math.floor(Math.random() * letters.length)];
|
|||
|
|
|||
|
for (var 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;
|
|||
|
}
|
|||
|
}]);
|
|||
|
|
|||
|
return Tool;
|
|||
|
}();
|
|||
|
|
|||
|
module.exports = Tool;
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../views sync recursive ^\\.\\/.*\\.js$":
|
|||
|
/*!**********************************!*\
|
|||
|
!*** ../views sync ^\.\/.*\.js$ ***!
|
|||
|
\**********************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, 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$";
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../views/default/config/fr.js":
|
|||
|
/*!*************************************!*\
|
|||
|
!*** ../views/default/config/fr.js ***!
|
|||
|
\*************************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
module.exports = {
|
|||
|
headLinks: [{
|
|||
|
anchor: "Accueil",
|
|||
|
attributes: {
|
|||
|
href: "/"
|
|||
|
}
|
|||
|
}, {
|
|||
|
anchor: "Mon compte",
|
|||
|
attributes: {
|
|||
|
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>.",
|
|||
|
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 ***!
|
|||
|
\***************************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
module.exports = {
|
|||
|
// liens de l'interface
|
|||
|
headLinks: [{
|
|||
|
anchor: "Contact",
|
|||
|
attributes: {
|
|||
|
href: "/contact.html",
|
|||
|
rel: "nofollow"
|
|||
|
}
|
|||
|
}, {
|
|||
|
anchor: "Parcourir",
|
|||
|
attributes: {
|
|||
|
href: "/quizs/",
|
|||
|
id: "indexHeadLink",
|
|||
|
title: "Les dernières publications"
|
|||
|
}
|
|||
|
}, {
|
|||
|
anchor: "Mon compte",
|
|||
|
attributes: {
|
|||
|
href: "/connexion.html",
|
|||
|
id: "accountHeadLink",
|
|||
|
title: "Accéder ou créez votre compte WikiLerni"
|
|||
|
}
|
|||
|
}, {
|
|||
|
anchor: "À propos",
|
|||
|
attributes: {
|
|||
|
href: "/a-propos.html",
|
|||
|
title: "En savoir + sur WikiLerni"
|
|||
|
}
|
|||
|
}, {
|
|||
|
anchor: "Accueil",
|
|||
|
attributes: {
|
|||
|
href: "/",
|
|||
|
title: "Page d'accueil"
|
|||
|
}
|
|||
|
}],
|
|||
|
footLinks: [{
|
|||
|
anchor: "Blog",
|
|||
|
attributes: {
|
|||
|
href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625",
|
|||
|
title: "Le blog WikiLerni sur diaspora*"
|
|||
|
}
|
|||
|
}, {
|
|||
|
anchor: "Crédits",
|
|||
|
attributes: {
|
|||
|
href: "/credits.html",
|
|||
|
title: "Qui a créé WikiLerni ? Quels sont vos droits ?"
|
|||
|
}
|
|||
|
}, {
|
|||
|
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"
|
|||
|
}
|
|||
|
}, {
|
|||
|
anchor: "CGV & CGU",
|
|||
|
attributes: {
|
|||
|
href: "/CGV-CGU.html",
|
|||
|
rel: "nofollow"
|
|||
|
}
|
|||
|
}],
|
|||
|
accountPage: "compte.html",
|
|||
|
aboutPage: "a-propos.html",
|
|||
|
adminHomePage: "admin.html",
|
|||
|
cguPage: "CGV-CGU.html",
|
|||
|
connectionPage: "connexion.html",
|
|||
|
deleteLinkPage: "aurevoir.html?t=",
|
|||
|
loginLinkPage: "login.html?t=",
|
|||
|
managerHomePage: "gestion.html",
|
|||
|
newLoginLinkPage: "newlogin.html?t=",
|
|||
|
questionnairesManagementPage: "gestion-quizs.html",
|
|||
|
stopMailPage: "stop-mail.html?t=",
|
|||
|
subscribePage: "inscription.html",
|
|||
|
updateAccountPage: "compte.html",
|
|||
|
userHomePage: "accueil.html",
|
|||
|
userHomePageTxt: "Ma page d'accueil.",
|
|||
|
usersManagementPage: "gestion-utilisateurs.html",
|
|||
|
validationLinkPage: "validation.html?t=",
|
|||
|
|
|||
|
/* Textes (général) */
|
|||
|
siteSlogan: "Cultivons notre jardin !",
|
|||
|
noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.",
|
|||
|
mailRecipientTxt: "Message envoyé à :",
|
|||
|
licenceTxt: "@copyleft Le contenu de ce site <a href=\"/credits.html\" title=\"En savoir plus ?\">est libre</a> et vous offert sans publicité. Vous pouvez <a href=\"/participer-financement.html\" title=\"Financement participatif\">participer à son financement en cliquant ici</a>.",
|
|||
|
|
|||
|
/* Page d'accueil */
|
|||
|
homePageTxt: "Page d'accueil",
|
|||
|
homeTitle1: "De nature curieuse ?",
|
|||
|
homeP1: "<b>Avec WikiLerni, vous allez apprendre chaque jour de nouvelles choses</b>.<br>Vous recevrez de courts articles, lisibles en quelques minutes.<br>Des quizs vous permettront ensuite de tester ce que vous aurez retenu.<br>De jour en jour <b>de nouvelles graines de culture sont ainsi semées dans votre jardin</b>.",
|
|||
|
homeTitle2: "La culture générale en liberté",
|
|||
|
homeP2: "Sur WikiLerni <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 ?",
|
|||
|
homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.",
|
|||
|
|
|||
|
/* Page dernières publications... */
|
|||
|
newQuestionnairesTitle: "Culture générale - apprenez de nouvelles choses avec WikiLerni",
|
|||
|
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 : « L’homme a naturellement la passion de connaître… »</blockquote>",
|
|||
|
|
|||
|
/* Page quizs */
|
|||
|
quizElementLinksIntro: "Source(s)",
|
|||
|
quizElementSubcriptionFormTitle: "Recevez les prochains articles WikiLerni",
|
|||
|
explanationTitle: "Vous découvrez WikiLerni ?",
|
|||
|
explanationTxt: "<p>Le principe est simple : <b>vous commencez par lire l’article Wikipédia dont le lien vous est proposé</b>. Puis vous <b>afficher le quiz pour vérifier ce que vous avez retenu de votre lecture</b>. Suivant les questions, <b>une ou plusieurs réponses peuvent être correctes</b> et doivent donc être cochées. C’est toujours <b>le contenu de l’article Wikipédia qui fait foi</b> concernant les « bonnes » réponses. C’est une façon de tester à la fois votre capacité d’attention et votre mémoire. Les articles de Wikipédia peuvent évoluer, donc n’hésitez pas <a href='/contact.html'>à me signaler une erreur</a>.</p><p><b>WikiLerni vous propose d’autres solutions pour améliorer votre culture générale</b>. Pour en savoir plus, cliquez sur le bouton ci-dessous.</p>",
|
|||
|
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 culture générale (arts, histoire, littérature, sciences, etc.).</p><p>Chaque série d’articles est <b>suivie d’un quiz</b> permettant de tester ce que vous en avez retenu.</p><p><b>Vous apprenez ainsi de nouvelles choses très simplement.</b></p><p>L’inscription est gratuite et vous permet de tester le site sans engagement.</p>",
|
|||
|
|
|||
|
/* Autres */
|
|||
|
illustrationDir: "/img/quizs/",
|
|||
|
twitterAccount: "WikiLerni",
|
|||
|
maxQuestionnairesByPage: 12,
|
|||
|
maxQuestionnairesSiteHomePage: 3,
|
|||
|
nbQuestionnairesUserHomePage: 3
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/manageGroups.js":
|
|||
|
/*!*****************************!*\
|
|||
|
!*** ./src/manageGroups.js ***!
|
|||
|
\*****************************/
|
|||
|
/*! no exports provided */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__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");
|
|||
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|||
|
|
|||
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|||
|
|
|||
|
// -- GESTION DU FORMULAIRE PERMETTANT DE SAISIR / ÉDITER LES INFOS DES GROUPES DE QUIZS
|
|||
|
/// 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 groupe.
|
|||
|
/// Si un id est passé par l'url on affiche les informations du groupe dans un formulaire permettant de l'éditer/supprimer.
|
|||
|
/// Si pas d'id passé par l'url, on affiche un formulaire vide permettant d'en saisir un nouveau.
|
|||
|
// Fichiers de configuration :
|
|||
|
|
|||
|
var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0];
|
|||
|
|
|||
|
var configQuestionnaires = __webpack_require__(/*! ../../config/questionnaires.js */ "../config/questionnaires.js");
|
|||
|
|
|||
|
var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions :
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// Dictionnaires :
|
|||
|
|
|||
|
var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"),
|
|||
|
addOkMessage = _require.addOkMessage,
|
|||
|
serverError = _require.serverError;
|
|||
|
|
|||
|
var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/group$")("./" + lang + "/group"),
|
|||
|
groupQuestionnairesList = _require2.groupQuestionnairesList,
|
|||
|
groupQuestionnairesListWithout = _require2.groupQuestionnairesListWithout,
|
|||
|
infosGroupForAdmin = _require2.infosGroupForAdmin,
|
|||
|
searchWithoutResult = _require2.searchWithoutResult;
|
|||
|
|
|||
|
var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"),
|
|||
|
needBeConnected = _require3.needBeConnected; // Principaux éléments du DOM manipulés :
|
|||
|
|
|||
|
|
|||
|
var btnNewGroup = document.getElementById("wantNewGroup");
|
|||
|
var btnPreviewGroup = document.getElementById("previewGroup");
|
|||
|
var deleteCheckBox = document.getElementById("deleteOkLabel");
|
|||
|
var divCrash = document.getElementById("crash");
|
|||
|
var divGroupIntro = document.getElementById("groupIntro");
|
|||
|
var divMain = document.getElementById("main-content");
|
|||
|
var divMessage = document.getElementById("message");
|
|||
|
var divQuestionnaires = document.getElementById("questionnairesList");
|
|||
|
var divResponse = document.getElementById("response");
|
|||
|
var divSearchResult = document.getElementById("searchResult");
|
|||
|
var formGroup = document.getElementById("groups");
|
|||
|
var formSearch = document.getElementById("search"); // Fonction utile pour vider le formulaire, y compris les champs hidden, etc.
|
|||
|
|
|||
|
var emptyGroupForm = function emptyGroupForm() {
|
|||
|
Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["empyForm"])(formGroup); // Case de suppression et bouton visualisation inutiles en mode création :
|
|||
|
|
|||
|
deleteCheckBox.style.display = "none";
|
|||
|
btnPreviewGroup.style.display = "none"; // Intro à vider !
|
|||
|
|
|||
|
divGroupIntro.innerHTML = "";
|
|||
|
}; // Fonction affichant les infos connues concernant un groupe.
|
|||
|
|
|||
|
|
|||
|
var showFormGroupInfos = function showFormGroupInfos(id, token) {
|
|||
|
// on commence par tout vider, des fois que... :
|
|||
|
emptyGroupForm();
|
|||
|
var xhrGetInfos = new XMLHttpRequest();
|
|||
|
xhrGetInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + configQuestionnaires.getGroupRoute + id);
|
|||
|
|
|||
|
xhrGetInfos.onreadystatechange = function () {
|
|||
|
if (this.readyState == XMLHttpRequest.DONE) {
|
|||
|
var response = JSON.parse(this.responseText);
|
|||
|
|
|||
|
if (this.status === 200 && response.Group != undefined) {
|
|||
|
var mapText = {
|
|||
|
GROUP_ID: response.Group.id,
|
|||
|
DATE_CREA: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.Group.createdAt),
|
|||
|
DATE_UPDATE: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.Group.updatedAt),
|
|||
|
NB_ELEMENTS: response.Questionnaires !== undefined ? response.Questionnaires.length : 0
|
|||
|
};
|
|||
|
var groupIntro = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(infosGroupForAdmin, mapText);
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divGroupIntro, "p", groupIntro, "", ["info"]);
|
|||
|
|
|||
|
for (var data in response.Group) {
|
|||
|
if (formGroup.elements[data] !== undefined) {
|
|||
|
if (data === "publishingAt" && response.Group[data] !== null) formGroup.elements[data].value = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.Group[data], "form"); // !! format pouvant poser soucis si navigateur ne gère pas les champs de type "date"
|
|||
|
else formGroup.elements[data].value = response.Group[data];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
deleteCheckBox.style.display = "block";
|
|||
|
btnPreviewGroup.style.display = "block";
|
|||
|
if (response.Group["isPublishable"] === false) btnPreviewGroup.setAttribute("href", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + configQuestionnaires.previewGroupRoutes + "/" + id + "/" + token);else btnPreviewGroup.setAttribute("href", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configQuestionnaires.dirWebGroups + "/" + response.Group["slug"] + ".html"); // affichage des éléments du groupe :
|
|||
|
|
|||
|
if (response.Questionnaires !== undefined && response.Questionnaires.length !== 0) {
|
|||
|
var listHTML = "",
|
|||
|
optionsDayStr = {
|
|||
|
weekday: 'long'
|
|||
|
};
|
|||
|
|
|||
|
for (var i in response.Questionnaires) {
|
|||
|
listHTML += "<li><a href='" + configTemplate.questionnairesManagementPage + "?id=" + response.Questionnaires[i].Questionnaire.id + "' id='questionnaire_" + response.Questionnaires[i].Questionnaire.id + "'>" + response.Questionnaires[i].Questionnaire.title + "</a></li>";
|
|||
|
}
|
|||
|
|
|||
|
if (response.Questionnaires.length !== 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestionnaires, "h3", groupQuestionnairesList.replace("#NB", response.Questionnaires.length));else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestionnaires, "h3", groupQuestionnairesListWithout);
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestionnaires, "ul", listHTML, "", "", "", false);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
xhrGetInfos.setRequestHeader("Authorization", "Bearer " + token);
|
|||
|
xhrGetInfos.send();
|
|||
|
};
|
|||
|
|
|||
|
var initialise = /*#__PURE__*/function () {
|
|||
|
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|||
|
var isConnected, user, urlDatas;
|
|||
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|||
|
while (1) {
|
|||
|
switch (_context.prev = _context.next) {
|
|||
|
case 0:
|
|||
|
_context.prev = 0;
|
|||
|
_context.next = 3;
|
|||
|
return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_7__["checkSession"])(["manager", "admin"], "/" + configTemplate.connectionPage, {
|
|||
|
message: needBeConnected,
|
|||
|
color: "error"
|
|||
|
}, window.location);
|
|||
|
|
|||
|
case 3:
|
|||
|
isConnected = _context.sent;
|
|||
|
|
|||
|
if (isConnected) {
|
|||
|
user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true);
|
|||
|
Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); // lien "Compte" menu header template
|
|||
|
|
|||
|
divMain.style.display = "block";
|
|||
|
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) {
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false);
|
|||
|
Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message");
|
|||
|
} // Initialisation des formulaires :
|
|||
|
|
|||
|
|
|||
|
Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires, formSearch);
|
|||
|
Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires.Group, formGroup);
|
|||
|
emptyGroupForm(); // Si un id est passé par l'url, on essaye d'afficher les infos :
|
|||
|
|
|||
|
urlDatas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_6__["getUrlParams"])();
|
|||
|
if (urlDatas && urlDatas.id !== undefined) showFormGroupInfos(urlDatas.id, user.token); // Besoin d'un coup de Kärcher ?
|
|||
|
|
|||
|
btnNewGroup.addEventListener("click", function (e) {
|
|||
|
emptyGroupForm();
|
|||
|
}); // Envoi du formulaire principal :
|
|||
|
|
|||
|
formGroup.addEventListener("submit", function (e) {
|
|||
|
e.preventDefault();
|
|||
|
divResponse.innerHTML = "";
|
|||
|
var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formGroup);
|
|||
|
var xhrGroupDatas = new XMLHttpRequest();
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && datas.deleteOk !== undefined) xhrGroupDatas.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + "/" + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id)) xhrGroupDatas.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + "/" + datas.id); // mise à jour
|
|||
|
else xhrGroupDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes); // nouvel enregistrement
|
|||
|
|
|||
|
xhrGroupDatas.onreadystatechange = function () {
|
|||
|
if (this.readyState == XMLHttpRequest.DONE) {
|
|||
|
var response = JSON.parse(this.responseText);
|
|||
|
|
|||
|
if (this.status === 201 && response.id != undefined) // nouvel enregistrement créé
|
|||
|
{
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", addOkMessage, "", ["success"]);
|
|||
|
datas.id = response.id; // utile pour réaffichage + bas
|
|||
|
} else if (this.status === 200 && response.message != undefined) // mise à jour ou suppression ok
|
|||
|
{
|
|||
|
if (Array.isArray(response.message)) response.message = response.message.join("<br>");else response.message = response.message;
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]);
|
|||
|
} else if (response.errors) {
|
|||
|
if (Array.isArray(response.errors)) response.errors = response.errors.join("<br>");else response.errors = serverError;
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]);
|
|||
|
} else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]);
|
|||
|
|
|||
|
if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.errors)) {
|
|||
|
if (datas.deleteOk === undefined) showFormGroupInfos(datas.id, user.token); // actualisation de l'affichage après traitement serveur
|
|||
|
else emptyGroupForm();
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
xhrGroupDatas.setRequestHeader("Content-Type", "application/json");
|
|||
|
xhrGroupDatas.setRequestHeader("Authorization", "Bearer " + user.token);
|
|||
|
if (datas) xhrGroupDatas.send(JSON.stringify(datas));
|
|||
|
}); // Envoi d'une recherche
|
|||
|
|
|||
|
formSearch.addEventListener("submit", function (e) {
|
|||
|
e.preventDefault();
|
|||
|
var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formSearch);
|
|||
|
var xhrSearch = new XMLHttpRequest();
|
|||
|
xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + configQuestionnaires.searchGroupsRoute);
|
|||
|
|
|||
|
xhrSearch.onreadystatechange = function () {
|
|||
|
if (this.readyState == XMLHttpRequest.DONE) {
|
|||
|
var response = JSON.parse(this.responseText);
|
|||
|
|
|||
|
if (this.status === 200 && Array.isArray(response)) {
|
|||
|
if (response.length === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", searchWithoutResult, "", ["info"]);else {
|
|||
|
var selectHTML = "<option value=''></option>";
|
|||
|
|
|||
|
for (var i in response) {
|
|||
|
selectHTML += "<option value='" + response[i].id + "'>" + response[i].title + "</option>";
|
|||
|
}
|
|||
|
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "select", selectHTML, "selectSearch");
|
|||
|
var searchSelect = document.getElementById("selectSearch");
|
|||
|
searchSelect.addEventListener("change", function () {
|
|||
|
if (searchSelect.value !== "") showFormGroupInfos(searchSelect.value, user.token);
|
|||
|
});
|
|||
|
}
|
|||
|
} else if (response.errors) {
|
|||
|
if (Array.isArray(response.errors)) response.errors = response.errors.join("<br>");else response.errors = serverError;
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", response.errors, "", ["error"]);
|
|||
|
} else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", serverError, "", ["error"]);
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
xhrSearch.setRequestHeader("Content-Type", "application/json");
|
|||
|
xhrSearch.setRequestHeader("Authorization", "Bearer " + user.token);
|
|||
|
if (datas) xhrSearch.send(JSON.stringify(datas));
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
_context.next = 11;
|
|||
|
break;
|
|||
|
|
|||
|
case 7:
|
|||
|
_context.prev = 7;
|
|||
|
_context.t0 = _context["catch"](0);
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]);
|
|||
|
console.error(_context.t0);
|
|||
|
|
|||
|
case 11:
|
|||
|
case "end":
|
|||
|
return _context.stop();
|
|||
|
}
|
|||
|
}
|
|||
|
}, _callee, null, [[0, 7]]);
|
|||
|
}));
|
|||
|
|
|||
|
return function initialise() {
|
|||
|
return _ref.apply(this, arguments);
|
|||
|
};
|
|||
|
}();
|
|||
|
|
|||
|
initialise();
|
|||
|
Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])();
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/tools/clientstorage.js":
|
|||
|
/*!************************************!*\
|
|||
|
!*** ./src/tools/clientstorage.js ***!
|
|||
|
\************************************/
|
|||
|
/*! exports provided: saveLocaly, getLocaly, removeLocaly */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveLocaly", function() { return saveLocaly; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaly", function() { return getLocaly; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; });
|
|||
|
// 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
|
|||
|
var saveLocaly = function saveLocaly(name, data) {
|
|||
|
localStorage.setItem(name, JSON.stringify(data));
|
|||
|
};
|
|||
|
var getLocaly = function getLocaly(name) {
|
|||
|
var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|||
|
if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name);
|
|||
|
};
|
|||
|
var removeLocaly = function removeLocaly(name) {
|
|||
|
localStorage.removeItem(name);
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/tools/dom.js":
|
|||
|
/*!**************************!*\
|
|||
|
!*** ./src/tools/dom.js ***!
|
|||
|
\**************************/
|
|||
|
/*! exports provided: addElement */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; });
|
|||
|
/* 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__);
|
|||
|
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|||
|
|
|||
|
// Fonction associant les attributs fournis à un champ de formulaire
|
|||
|
|
|||
|
var addElement = function addElement(eltParent, eltType) {
|
|||
|
var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
|
|||
|
var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
|
|||
|
var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
|
|||
|
var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
|
|||
|
var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true;
|
|||
|
if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else {
|
|||
|
var newElement = document.createElement(eltType);
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ?
|
|||
|
newElement.id = eltId;
|
|||
|
|
|||
|
if (Array.isArray(eltClass) && eltClass.length != 0) {
|
|||
|
for (var i in eltClass) {
|
|||
|
newElement.classList.add(eltClass[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok
|
|||
|
{
|
|||
|
for (var attributName in eltAttributes) {
|
|||
|
newElement.setAttribute(attributName, eltAttributes[attributName]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (!Object(_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.
|
|||
|
|
|||
|
if (replace) eltParent.innerHTML = "";
|
|||
|
eltParent.appendChild(newElement);
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/tools/everywhere.js":
|
|||
|
/*!*********************************!*\
|
|||
|
!*** ./src/tools/everywhere.js ***!
|
|||
|
\*********************************/
|
|||
|
/*! exports provided: helloDev, updateAccountLink */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; });
|
|||
|
// Ce script fournit des fonctions utilisées sur toutes les pages du site
|
|||
|
var helloDev = function helloDev() {
|
|||
|
console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver si Gitlab :\nhttps://gitlab.com/lefablab/wikilerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****");
|
|||
|
return true;
|
|||
|
};
|
|||
|
var updateAccountLink = function updateAccountLink(status, configTemplate) {
|
|||
|
var link = document.getElementById("accountHeadLink");
|
|||
|
var homePage = status + "HomePage";
|
|||
|
link.href = "/" + configTemplate[homePage];
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/tools/forms.js":
|
|||
|
/*!****************************!*\
|
|||
|
!*** ./src/tools/forms.js ***!
|
|||
|
\****************************/
|
|||
|
/*! exports provided: setAttributesToInputs, getDatasFromInputs, empyForm, empyAndHideForm */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAttributesToInputs", function() { return setAttributesToInputs; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDatasFromInputs", function() { return getDatasFromInputs; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyForm", function() { return empyForm; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; });
|
|||
|
/* 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__);
|
|||
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|||
|
|
|||
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|||
|
|
|||
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|||
|
|
|||
|
// Fonction associant les attributs fournis à un champ de formulaire
|
|||
|
|
|||
|
var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) {
|
|||
|
for (var i in myForm.elements) {
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) {
|
|||
|
var idInput = myForm.elements[i].id;
|
|||
|
|
|||
|
if (inputsConf[idInput] !== undefined) {
|
|||
|
var inputHTML = document.getElementById(idInput);
|
|||
|
|
|||
|
for (var attribute in inputsConf[idInput]) {
|
|||
|
inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return true;
|
|||
|
}; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc.
|
|||
|
|
|||
|
var getDatasFromInputs = function getDatasFromInputs(myForm) {
|
|||
|
var datas = {};
|
|||
|
var formData = new FormData(myForm);
|
|||
|
|
|||
|
var _iterator = _createForOfIteratorHelper(formData.entries()),
|
|||
|
_step;
|
|||
|
|
|||
|
try {
|
|||
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|||
|
var entrie = _step.value;
|
|||
|
datas[entrie[0]] = entrie[1];
|
|||
|
}
|
|||
|
} catch (err) {
|
|||
|
_iterator.e(err);
|
|||
|
} finally {
|
|||
|
_iterator.f();
|
|||
|
}
|
|||
|
|
|||
|
return datas;
|
|||
|
}; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc.
|
|||
|
// Revoir pour les select
|
|||
|
|
|||
|
var empyForm = function empyForm(myForm) {
|
|||
|
var formData = new FormData(myForm);
|
|||
|
|
|||
|
var _iterator2 = _createForOfIteratorHelper(formData.entries()),
|
|||
|
_step2;
|
|||
|
|
|||
|
try {
|
|||
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|||
|
var entrie = _step2.value;
|
|||
|
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 = "";
|
|||
|
}
|
|||
|
} catch (err) {
|
|||
|
_iterator2.e(err);
|
|||
|
} finally {
|
|||
|
_iterator2.f();
|
|||
|
}
|
|||
|
|
|||
|
return true;
|
|||
|
}; // Vide et cache le formulaire
|
|||
|
|
|||
|
var empyAndHideForm = function empyAndHideForm(myForm) {
|
|||
|
empyForm(myForm);
|
|||
|
myForm.style.display = "none";
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/tools/url.js":
|
|||
|
/*!**************************!*\
|
|||
|
!*** ./src/tools/url.js ***!
|
|||
|
\**************************/
|
|||
|
/*! exports provided: getUrlParams */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUrlParams", function() { return getUrlParams; });
|
|||
|
/* 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
|
|||
|
|
|||
|
var getUrlParams = function getUrlParams() {
|
|||
|
if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false;
|
|||
|
var parameters = location.search.substring(1).split("&");
|
|||
|
if (!Array.isArray(parameters) || parameters.length === 0) return false;
|
|||
|
var param,
|
|||
|
datas = {};
|
|||
|
|
|||
|
for (var 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 ***!
|
|||
|
\****************************/
|
|||
|
/*! exports provided: getTimeDifference, setSession, checkAnswerDatas, checkSession */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTimeDifference", function() { return getTimeDifference; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSession", function() { return setSession; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkAnswerDatas", function() { return checkAnswerDatas; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkSession", function() { return checkSession; });
|
|||
|
/* 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__);
|
|||
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|||
|
|
|||
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|||
|
|
|||
|
|
|||
|
var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0];
|
|||
|
|
|||
|
var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js");
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
var getTimeDifference = function 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
|
|||
|
var 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.
|
|||
|
|
|||
|
var setSession = function setSession(userId, token, durationTS) {
|
|||
|
var storageUser = {
|
|||
|
id: userId,
|
|||
|
token: token,
|
|||
|
duration: durationTS
|
|||
|
};
|
|||
|
Object(_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
|
|||
|
|
|||
|
var checkAnswerDatas = function checkAnswerDatas(datas) {
|
|||
|
var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer");
|
|||
|
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) {
|
|||
|
var answer = JSON.parse(lastAnswer);
|
|||
|
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) {
|
|||
|
datas.duration = answer.duration;
|
|||
|
datas.nbCorrectAnswers = answer.nbCorrectAnswers;
|
|||
|
datas.nbQuestions = answer.nbQuestions;
|
|||
|
if (!Object(_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é
|
|||
|
|
|||
|
var checkSession = /*#__PURE__*/function () {
|
|||
|
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|||
|
var status,
|
|||
|
urlRedirection,
|
|||
|
message,
|
|||
|
urlWanted,
|
|||
|
_args = arguments;
|
|||
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|||
|
while (1) {
|
|||
|
switch (_context.prev = _context.next) {
|
|||
|
case 0:
|
|||
|
status = _args.length > 0 && _args[0] !== undefined ? _args[0] : [];
|
|||
|
urlRedirection = _args.length > 1 ? _args[1] : undefined;
|
|||
|
message = _args.length > 2 ? _args[2] : undefined;
|
|||
|
urlWanted = _args.length > 3 ? _args[3] : undefined;
|
|||
|
return _context.abrupt("return", new Promise(function (resolve, reject) {
|
|||
|
var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user");
|
|||
|
|
|||
|
if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) {
|
|||
|
redirectUser(urlRedirection, message, urlWanted);
|
|||
|
resolve(false);
|
|||
|
} else {
|
|||
|
var user = JSON.parse(userDatas);
|
|||
|
|
|||
|
if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) {
|
|||
|
Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user");
|
|||
|
redirectUser(urlRedirection, message, urlWanted);
|
|||
|
resolve(false);
|
|||
|
} else {
|
|||
|
var 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 = function () {
|
|||
|
var 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
|
|||
|
|
|||
|
Object(_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) {
|
|||
|
var 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 {
|
|||
|
Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user");
|
|||
|
redirectUser(urlRedirection, message, urlWanted);
|
|||
|
resolve(false);
|
|||
|
}
|
|||
|
} else {
|
|||
|
Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user");
|
|||
|
redirectUser(urlRedirection, message, urlWanted);
|
|||
|
resolve(false);
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
xhr.onerror = function () {
|
|||
|
return reject(xhr.statusText);
|
|||
|
};
|
|||
|
|
|||
|
xhr.send();
|
|||
|
}
|
|||
|
}
|
|||
|
}));
|
|||
|
|
|||
|
case 5:
|
|||
|
case "end":
|
|||
|
return _context.stop();
|
|||
|
}
|
|||
|
}
|
|||
|
}, _callee);
|
|||
|
}));
|
|||
|
|
|||
|
return function checkSession() {
|
|||
|
return _ref.apply(this, arguments);
|
|||
|
};
|
|||
|
}(); // Cette fonction sert à la précédente en cas de connexion non valide
|
|||
|
|
|||
|
var redirectUser = function redirectUser(urlRedirection, message, urlWanted) {
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message);
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted);
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection);
|
|||
|
};
|
|||
|
|
|||
|
/***/ })
|
|||
|
|
|||
|
/******/ });
|
|||
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL2dyb3VwJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ3JvdXAuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9tYW5hZ2VHcm91cHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWN
|