Déplacement scripts et fichiers pour séparer l'admin du site public

This commit is contained in:
Fabrice PENHOËT 2022-03-14 18:17:54 +01:00
parent 350799f177
commit 7a47d66546
119 changed files with 11013 additions and 1745 deletions

26
.gitignore vendored
View File

@ -15,17 +15,17 @@ nodemon.json
/front/node_modules/
/front/webpack.config*
/front/public/.htaccess*
/front/public/.htpasswd
/front/public/www/.htaccess*
/front/public/www/.htpasswd
!/front/webpack.config.js
/front/public/img/quizs/
/front/public/JS/*
/front/public/quiz/
/front/public/quizs/
/front/public/themes/
/front/public/index.html
/front/public/CGV-CGU.html
/front/public/mentions-legales.html
/front/public/robots-*.txt
/front/public/WikiLerni-pub.asc
/front/public/*.xml
/front/public/www/img/quizs/
/front/*/www/JS/*
/front/public/www/quiz/
/front/public/www/quizs/
/front/public/www/themes/
/front/public/www/index.html
/front/public/www/CGV-CGU.html
/front/public/www/mentions-legales.html
/front/*/robots-*.txt
/front/*/WikiLerni-pub.asc
/front/public/www/*.xml

View File

@ -14,5 +14,5 @@ module.exports =
},
// files upload tempory dir
dirIllustrationsTmp : "temp",
dirIllustrations: "front/public/img/quizs"
dirIllustrations: "front/public/www/img/quizs"
};

View File

@ -9,7 +9,7 @@ instance.tokenPrivateKey=process.env.TOKEN_PRIVATE_KEY;
instance.maxLoginFail=parseInt(process.env.MAX_LOGIN_FAILS,10);
instance.loginFailTimeInMinutes=parseInt(process.env.LOGIN_FAIL_TIME_IN_MINUTES,10);
instance.dirCache="datas";
instance.dirHTML="front/public";
instance.dirHTML="front/public/www";
instance.dirTmp="datas/tmp";
instance.dirTmpLogin="datas/tmp/logins";

View File

@ -56,10 +56,10 @@ module.exports =
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",
dirHTMLGroups : "front/public/www/quiz/gp",
dirHTMLQuestionnaires : "front/public/www/quiz",
dirHTMLNews : "front/public/www/quizs",
dirHTMLTags : "front/public/www/quizs",
// Idem mais pour urls :
dirWebGroups : "quiz/gp",
dirWebQuestionnaires : "quiz",

View File

@ -407,7 +407,6 @@ exports.checkQuestionnairesNeedToBePublished = async (req, res, next) =>
const creaQuestionnaireJson = async (id) =>
{
const db=require("../models/index");
console.log("j'arrive ici avec "+id);
const Questionnaire=await db["Questionnaire"].findByPk(id);
if(Questionnaire)
{
@ -543,6 +542,9 @@ const creaQuestionnaireHTML = async (id, preview=false) =>
// deux possibilités :
// -- si élément d'un groupe de quiz : juste le texte sans les questions
// -- si quiz automone : toutes les infos
console.log("je passe par ici pour créer le fichier du quiz "+id);
const questionnaire=await searchQuestionnaireById(id, true);
if(!questionnaire)
return false;

36
front/admin/package.json Normal file
View File

@ -0,0 +1,36 @@
{
"name": "wikilerni",
"version": "0.2.0",
"description": "Admin pages of WikiLerni web application",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --mode production",
"start": "webpack serve --no-live-reload"
},
"repository": {
"type": "git",
"url": "https://forge.chapril.org/Fab_Blab/WikiLerni"
},
"keywords": [
"quiz",
"wikipédia",
"questionnaire",
"e-learning"
],
"author": "Fabrice PENHOËT",
"license": "GPL-3.0-or-later",
"devDependencies": {
"@babel/core": "^7.15.5",
"@babel/preset-env": "^7.15.6",
"@webpack-cli/serve": "^1.5.2",
"babel-loader": "^8.2.2",
"babel-polyfill": "^6.26.0",
"webpack": "^5.56.1",
"webpack-cli": "^4.8.0",
"webpack-dev-server": "^4.3.0"
},
"browserslist": [
"> 1%"
]
}

View File

@ -6,24 +6,23 @@
/// Le connexion peut se faire directement ici via la saisie d'un mot de passe ou via l'envoi d'un token par e-mail.
// Fichier de configuration tirés du backend :
import { apiUrl, availableLangs, siteUrl, theme } from "../../config/instance.js";
import { apiUrl, availableLangs, siteUrl, theme } from "../../../config/instance.js";
const lang=availableLangs[0];
import { connectionRoute, getLoginLinkRoute, userRoutes } from "../../config/users.js";
const configTemplate = require("../../views/"+theme+"/config/"+lang+".js");
import { connectionRoute, getLoginLinkRoute, userRoutes } from "../../../config/users.js";
const configTemplate = require("../../../views/"+theme+"/config/"+lang+".js");
// Importation des fonctions utiles au script :
import { getLocaly, removeLocaly, saveLocaly } from "./tools/clientstorage.js";
import { addElement } from "./tools/dom.js";
import { helloDev } from "./tools/everywhere.js";
import { getDatasFromInputs } from "./tools/forms.js";
import { isEmpty } from "../../tools/main";
import { loadMatomo } from "./tools/matomo.js";
import { isEmpty } from "../../../tools/main";
import { checkAnswerDatas, checkSession, getTimeDifference, setSession } from "./tools/users.js";
// Dictionnaires :
const { serverError } = require("../../lang/"+lang+"/general");
const { alreadyConnected, needChooseLoginWay } = require("../../lang/"+lang+"/user");
const { serverError } = require("../../../lang/"+lang+"/general");
const { alreadyConnected, needChooseLoginWay } = require("../../../lang/"+lang+"/user");
// Principaux éléments du DOM manipulés :
const myForm = document.getElementById("connection");
@ -43,11 +42,11 @@ const initialise = async () =>
saveLocaly("message", { message: alreadyConnected, color:"info" });// pour l'afficher sur la page suivante
const user=getLocaly("user", true);
const homePage=user.status+"HomePage";
window.location.assign("/"+configTemplate[homePage]);
console.log("./"+configTemplate[homePage]);
window.location.assign("./"+configTemplate[homePage]);
}
else
{
loadMatomo();
myForm.style.display="block";
if(!isEmpty(getLocaly("message")))
{

View File

@ -3,7 +3,7 @@
/// On se contente ici de supprimer la session stockée côté client
// Fichier de configuration côté client :
import { apiUrl, availableLangs, theme } from "../../config/instance.js";
import { apiUrl, availableLangs, theme } from "../../../config/instance.js";
const lang=availableLangs[0];
// Importation des fonctions utile au script :
@ -12,8 +12,8 @@ import { addElement } from "./tools/dom.js";
import { helloDev } from "./tools/everywhere.js";
// Dictionnaires :
const { serverError } = require("../../lang/"+lang+"/general");
const { byebyeMessage } = require("../../lang/"+lang+"/user");
const { serverError } = require("../../../lang/"+lang+"/general");
const { byebyeMessage } = require("../../../lang/"+lang+"/user");
const divResponse = document.getElementById("response");

View File

@ -9,24 +9,24 @@
/// Temporairement, c'est ici aussi que l'on peut régénérer tout le HTML -> à terme dans homeAdmin !
// Fichier de configuration côté client :
import { apiUrl, availableLangs, theme } from "../../config/instance.js";
import { apiUrl, availableLangs, theme } from "../../../config/instance.js";
const lang=availableLangs[0];
import { getAdminStats, userRoutes } from "../../config/users.js";
import { getListNextQuestionnaires, questionnaireRoutes, regenerateHTML } from "../../config/questionnaires.js";
const configTemplate = require("../../views/"+theme+"/config/"+lang+".js");
import { getAdminStats, userRoutes } from "../../../config/users.js";
import { getListNextQuestionnaires, questionnaireRoutes, regenerateHTML } from "../../../config/questionnaires.js";
const configTemplate = require("../../../views/"+theme+"/config/"+lang+".js");
// Fonctions utiles au script :
import { getLocaly, removeLocaly } from "./tools/clientstorage.js";
import { addElement } from "./tools/dom.js";
import { helloDev, updateAccountLink } from "./tools/everywhere.js";
import { dateFormat, isEmpty, replaceAll } from "../../tools/main";
import { helloDev } from "./tools/everywhere.js";
import { dateFormat, isEmpty, replaceAll } from "../../../tools/main";
import { checkSession } from "./tools/users.js";
// Dictionnaires :
const { notAllowed, serverError, statsAdmin } = require("../../lang/"+lang+"/general");
const { nextDateWithoutQuestionnaire, nextQuestionnairesList, questionnaireNeedBeCompleted } = require("../../lang/"+lang+"/questionnaire");
const { welcomeMessage } = require("../../lang/"+lang+"/user");
const { notAllowed, serverError, statsAdmin } = require("../../../lang/"+lang+"/general");
const { nextDateWithoutQuestionnaire, nextQuestionnairesList, questionnaireNeedBeCompleted } = require("../../../lang/"+lang+"/questionnaire");
const { welcomeMessage } = require("../../../lang/"+lang+"/user");
// Principaux éléments du DOM manipulés :
const divMain = document.getElementById("main-content");
@ -45,7 +45,6 @@ const initialise = async () =>
if(isConnected)
{
const user=getLocaly("user", true);
updateAccountLink(user.status, configTemplate);
addElement(divMessage, "h2", welcomeMessage.replace("#NAME", user.name));
divMain.style.display="block";
if(!isEmpty(getLocaly("message")))
@ -143,4 +142,4 @@ const initialise = async () =>
console.error(e);
}
}
initialise();
initialise();

View File

@ -6,24 +6,24 @@
/// Si pas d'id passé par l'url, on affiche un formulaire vide permettant d'en saisir un nouveau.
// Fichiers de configuration :
import { apiUrl, availableLangs, siteUrl, theme } from "../../config/instance.js";
import { apiUrl, availableLangs, siteUrl, theme } from "../../../config/instance.js";
const lang=availableLangs[0];
const configQuestionnaires = require("../../config/questionnaires.js");
const configTemplate = require("../../views/"+theme+"/config/"+lang+".js");
const configQuestionnaires = require("../../../config/questionnaires.js");
const configTemplate = require("../../../views/"+theme+"/config/"+lang+".js");
// Fonctions :
import { getLocaly, removeLocaly } from "./tools/clientstorage.js";
import { addElement } from "./tools/dom.js";
import { helloDev, updateAccountLink } from "./tools/everywhere.js";
import { helloDev } from "./tools/everywhere.js";
import { empyForm, getDatasFromInputs, setAttributesToInputs } from "./tools/forms.js";
import { dateFormat, isEmpty, replaceAll } from "../../tools/main";
import { dateFormat, isEmpty, replaceAll } from "../../../tools/main";
import { getUrlParams } from "./tools/url.js";
import { checkSession } from "./tools/users.js";
// Dictionnaires :
const { addOkMessage, serverError } = require("../../lang/"+lang+"/general");
const { groupQuestionnairesList, groupQuestionnairesListWithout, infosGroupForAdmin, searchWithoutResult } = require("../../lang/"+lang+"/group");
const { needBeConnected } = require("../../lang/"+lang+"/user");
const { addOkMessage, serverError } = require("../../../lang/"+lang+"/general");
const { groupQuestionnairesList, groupQuestionnairesListWithout, infosGroupForAdmin, searchWithoutResult } = require("../../../lang/"+lang+"/group");
const { needBeConnected } = require("../../../lang/"+lang+"/user");
// Principaux éléments du DOM manipulés :
const btnNewGroup = document.getElementById("wantNewGroup");
@ -116,7 +116,6 @@ const initialise = async () =>
if(isConnected)
{
const user=getLocaly("user", true);
updateAccountLink(user.status, configTemplate);// lien "Compte" menu header template
divMain.style.display="block";
if(!isEmpty(getLocaly("message")))
{

View File

@ -7,30 +7,30 @@
/// Si pas d'id passé par l'url, on affiche un formulaire vide permettant de saisir un nouveau quiz.
// Fichiers de configuration :
import { apiUrl, availableLangs, theme } from "../../config/instance.js";
import { apiUrl, availableLangs, theme } from "../../../config/instance.js";
const lang=availableLangs[0];
const config = require("../../config/instance.js");
const configIllustrations = require("../../config/illustrations.js");
const configLinks = require("../../config/links.js");
const configQuestionnaires = require("../../config/questionnaires.js");
const configTemplate = require("../../views/"+theme+"/config/"+lang+".js");
const config = require("../../../config/instance.js");
const configIllustrations = require("../../../config/illustrations.js");
const configLinks = require("../../../config/links.js");
const configQuestionnaires = require("../../../config/questionnaires.js");
const configTemplate = require("../../../views/"+theme+"/config/"+lang+".js");
// Fonctions :
import { getLocaly, removeLocaly } from "./tools/clientstorage.js";
import { addElement } from "./tools/dom.js";
import { helloDev, updateAccountLink } from "./tools/everywhere.js";
import { helloDev } from "./tools/everywhere.js";
import { empyAndHideForm, getDatasFromInputs, setAttributesToInputs } from "./tools/forms.js";
import { dateFormat, isEmpty } from "../../tools/main";
import { dateFormat, isEmpty } from "../../../tools/main";
import { getUrlParams } from "./tools/url.js";
import { checkSession } from "./tools/users.js";
// Dictionnaires :
const { addOkMessage, deleteBtnTxt, serverError, updateBtnTxt } = require("../../lang/"+lang+"/general");
const { addIllustrationTxt, defaultAlt, introNoIllustration, introTitleForIllustration } = require("../../lang/"+lang+"/illustration");
const { addLinkTxt, defaultValueForLink, introNoLink, introTitleForLink } = require("../../lang/"+lang+"/link");
const { addQuestionTxt, introNoQuestion, introTitleForQuestion } = require("../../lang/"+lang+"/question");
const { needGroupIfRank, nextDateWithoutQuestionnaire, nextQuestionnairesList, questionnaireNeedBeCompleted, searchQuestionnaireWithNoResult } = require("../../lang/"+lang+"/questionnaire");
const { needBeConnected } = require("../../lang/"+lang+"/user");
const { addOkMessage, deleteBtnTxt, serverError, updateBtnTxt } = require("../../../lang/"+lang+"/general");
const { addIllustrationTxt, defaultAlt, introNoIllustration, introTitleForIllustration } = require("../../../lang/"+lang+"/illustration");
const { addLinkTxt, defaultValueForLink, introNoLink, introTitleForLink } = require("../../../lang/"+lang+"/link");
const { addQuestionTxt, introNoQuestion, introTitleForQuestion } = require("../../../lang/"+lang+"/question");
const { needGroupIfRank, nextDateWithoutQuestionnaire, nextQuestionnairesList, questionnaireNeedBeCompleted, searchQuestionnaireWithNoResult } = require("../../../lang/"+lang+"/questionnaire");
const { needBeConnected } = require("../../../lang/"+lang+"/user");
// Principaux éléments du DOM manipulés :
const btnNewQuestionnaire = document.getElementById("wantNewQuestionnaire");
@ -196,7 +196,7 @@ const showIllustrationInfos = (Illustrations, token) =>
addElement(divIllustrations, "h2", introTitleForIllustration);
let listIllustrations="";
for(let i in Illustrations)
listIllustrations+="<li><a href='"+configTemplate.illustrationDir+Illustrations[i].url+"' target='_blank'><img src='"+configTemplate.illustrationDir+Illustrations[i].url+"' alt='"+defaultAlt+"' style='max-height:150px'></a><br><a href='#updateIllustration"+Illustrations[i].id+"' id='#updateIllustration"+Illustrations[i].id+"' class='button'>"+updateBtnTxt+"</a> <a href='#deleteIllustration"+Illustrations[i].id+"' id='#deleteIllustration"+Illustrations[i].id+"' class='button'>"+deleteBtnTxt+"</a></li>";
listIllustrations+="<li><a href='"+config.siteUrl+configTemplate.illustrationDir+Illustrations[i].url+"' target='_blank'><img src='"+config.siteUrl+configTemplate.illustrationDir+Illustrations[i].url+"' alt='"+defaultAlt+"' style='max-height:150px'></a><br><a href='#updateIllustration"+Illustrations[i].id+"' id='#updateIllustration"+Illustrations[i].id+"' class='button'>"+updateBtnTxt+"</a> <a href='#deleteIllustration"+Illustrations[i].id+"' id='#deleteIllustration"+Illustrations[i].id+"' class='button'>"+deleteBtnTxt+"</a></li>";
if(listIllustrations === "")
listIllustrations="<li>"+introNoIllustration+"</li>";
addElement(divIllustrations, "ul", listIllustrations, "", [], "", false);// ! à intégrer d'abord dans le DOM pour pouvoir ajouter les Listeners ensuite
@ -457,48 +457,6 @@ const showFormQuestionnaireInfos = (id, token) =>
xhrGetInfos.send();
}
/*
// Affiche les questionnaires bientôt publiés.
const showNextQuestionnaires = (token) =>
{
const xhrNextQuestionnaires = new XMLHttpRequest();
xhrNextQuestionnaires.open("GET", apiUrl+configQuestionnaires.questionnaireRoutes+configQuestionnaires.getListNextQuestionnaires);
xhrNextQuestionnaires.onreadystatechange = function()
{
if (this.readyState == XMLHttpRequest.DONE)
{
let response=JSON.parse(this.responseText);
if (this.status === 200 && Array.isArray(response.questionnaires))
{
let listHTML="", dayStr, optionsDayStr = { weekday: 'long'};
for(let i in response.questionnaires)
{
dayStr=new Intl.DateTimeFormat(lang, optionsDayStr).format(new Date(response.questionnaires[i].datePublishing));
listHTML+="<li>"+dayStr+" "+dateFormat(response.questionnaires[i].datePublishing, "fr")+": <a href='"+configTemplate.questionnairesManagementPage+"?id="+response.questionnaires[i].id+"' id='questionnaire_"+response.questionnaires[i].id+"'>"+response.questionnaires[i].title+"</a>";
if(response.questionnaires[i].isPublishable===false)
listHTML+=" <span class='error'>("+questionnaireNeedBeCompleted+")</li>";
listHTML+="</li>";
}
if(response.questionnaires.length!==0)
addElement(divQuestionnaires, "h3", nextQuestionnairesList.replace("#NB", response.questionnaires.length));
addElement(helpPublishingAt, "em", nextDateWithoutQuestionnaire+dateFormat(new Date(response.dateNeeded), "fr"));
addElement(divQuestionnaires, "ul", listHTML, "", "", "", false);
for(let i in response.questionnaires)
{
document.getElementById("questionnaire_"+response.questionnaires[i].id).addEventListener("click", function(e)
{
e.preventDefault();
showFormQuestionnaireInfos(e.target.id.split("_")[1], token);
window.location.assign("#questionnaires");
});
}
}// ajouter gestion erreurs reçues du serveur ?
}
}
xhrNextQuestionnaires.setRequestHeader("Authorization", "Bearer "+token);
xhrNextQuestionnaires.send();
}*/
const initialise = async () =>
{
try
@ -513,8 +471,6 @@ const initialise = async () =>
removeLocaly("message");
}
const user=getLocaly("user", true);
/// Mise à jour du lien "compte" du header (plus utile)
/// updateAccountLink(user.status, configTemplate);
// Initialisation des formulaires :
setAttributesToInputs(configQuestionnaires, formSearch);
setAttributesToInputs(configQuestionnaires.Questionnaire, formQuestionnaire);

View File

@ -10,24 +10,24 @@
/// - attribution d'un parrain à un utilisateur (via un moteur de recherche). Déjà prévu par le contrôleur.
// Fichier de configuration côté client :
import { apiUrl, availableLangs, theme } from "../../config/instance.js";
import { apiUrl, availableLangs, theme } from "../../../config/instance.js";
const lang=availableLangs[0];
const configUsers = require("../../config/users.js");
const configTemplate = require("../../views/"+theme+"/config/"+lang+".js");
const configUsers = require("../../../config/users.js");
const configTemplate = require("../../../views/"+theme+"/config/"+lang+".js");
// Fonctions utiles au script :
import { getLocaly, removeLocaly } from "./tools/clientstorage.js";
import { addElement } from "./tools/dom.js";
import { helloDev, updateAccountLink } from "./tools/everywhere.js";
import { helloDev } from "./tools/everywhere.js";
import { empyForm, getDatasFromInputs, setAttributesToInputs } from "./tools/forms.js";
import { dateFormat, getPassword, isEmpty, replaceAll } from "../../tools/main";
import { dateFormat, getPassword, isEmpty, replaceAll } from "../../../tools/main";
import { getUrlParams } from "./tools/url.js";
import { checkSession } from "./tools/users.js";
// Dictionnaires :
const { addOkMessage, serverError } = require("../../lang/"+lang+"/general");
const { infosAdminGodfather, infosAdminNbGodChilds, infosUserForAdmin, needBeConnected, searchUsersWithoutResult } = require("../../lang/"+lang+"/user");
const { infosExpiratedAdmin, infosNbDaysAdmin, infosPaymentsAdmin, isNotValided } = require("../../lang/"+lang+"/subscription");
const { addOkMessage, serverError } = require("../../../lang/"+lang+"/general");
const { infosAdminGodfather, infosAdminNbGodChilds, infosUserForAdmin, needBeConnected, searchUsersWithoutResult } = require("../../../lang/"+lang+"/user");
const { infosExpiratedAdmin, infosNbDaysAdmin, infosPaymentsAdmin, isNotValided } = require("../../../lang/"+lang+"/subscription");
// Principaux éléments du DOM manipulés :
const divMain = document.getElementById("main-content");
@ -56,7 +56,6 @@ const initialise = async () =>
if(isConnected)
{
const user=getLocaly("user", true);
updateAccountLink(user.status, configTemplate);
divMain.style.display="block";
if(!isEmpty(getLocaly("message")))
{

View File

@ -1,4 +1,4 @@
import { isEmpty } from "../../../tools/main";
import { isEmpty } from "../../../../tools/main";
// Fonction associant les attributs fournis à un champ de formulaire
export const addElement = (eltParent, eltType, eltContent="", eltId="", eltClass=[], eltAttributes={}, replace=true) =>

View File

@ -3,12 +3,4 @@ export const helloDev = () =>
{
console.log("**** Hello les devs :-)\nLe code source de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\nBonne lecture ! ****");
return true;
}
export const updateAccountLink = (status, configTemplate) =>
{
//const link=document.getElementById("accountHeadLink");
//const homePage=status+"HomePage";
//link.href="/"+configTemplate[homePage];
//console.log("je suis connecté");
}

View File

@ -1,4 +1,4 @@
import { isEmpty } from "../../../tools/main";
import { isEmpty } from "../../../../tools/main";
// Fonction associant les attributs fournis à un champ de formulaire
export const setAttributesToInputs = (inputsConf, myForm) =>

View File

@ -1,4 +1,4 @@
import { isEmpty } from "../../../tools/main";
import { isEmpty } from "../../../../tools/main";
// Fonction récupérant les paramètres passés par l'url
export const getUrlParams = () =>

View File

@ -1,12 +1,12 @@
import { apiUrl, availableLangs, siteUrl, theme } from "../../../config/instance.js";
import { apiUrl, availableLangs, siteUrl, theme } from "../../../../config/instance.js";
const lang=availableLangs[0];
const configTemplate = require("../../../views/"+theme+"/config/"+lang+".js");
const configTemplate = require("../../../../views/"+theme+"/config/"+lang+".js");
import { checkLoginRoute, timeDifferenceMax, timeDifferenceMin, userRoutes } from "../../../config/users.js";
import { checkLoginRoute, timeDifferenceMax, timeDifferenceMin, userRoutes } from "../../../../config/users.js";
import { getLocaly, removeLocaly, saveLocaly } from "./clientstorage.js";
import { isEmpty } from "../../../tools/main";
import { getLocaly, removeLocaly, saveLocaly } from "../tools/clientstorage.js";
import { isEmpty } from "../../../../tools/main";
export const getTimeDifference = () =>
{

View File

@ -5,29 +5,17 @@ module.exports =
mode: "development",
entry:
{
accountUser: "./src/accountUser.js",
connection: "./src/connection.js",
deconnection: "./src/deconnection.js",
deleteValidation: "./src/deleteValidation.js",
groupElement: "./src/groupElement.js",
homeManager: "./src/homeManager.js",
homeUser: "./src/homeUser.js",
index: "./src/index.js",
loginLink: "./src/loginLink.js",
manageGroups: "./src/manageGroups.js",
manageQuestionnaires: "./src/manageQuestionnaires.js",
manageUsers: "./src/manageUsers.js",
newLoginValidation: "./src/newLoginValidation.js",
paymentPage: "./src/paymentPage.js",
polyfill: "babel-polyfill",
quiz: "./src/quiz.js",
subscribe: "./src/subscribe.js",
subscribeValidation: "./src/subscribeValidation.js",
unsubscribe: "./src/unsubscribe.js"
polyfill: "babel-polyfill"
},
output:
{
path: path.resolve(__dirname, "public"),
path: path.resolve(__dirname, "www"),
filename: "JS/[name].app.js",
},
module:
@ -47,6 +35,6 @@ module.exports =
},
devServer:
{
static: path.resolve(__dirname, "./public")
static: path.resolve(__dirname, "./www")
},
};

View File

@ -6,21 +6,21 @@
<meta name="robots" content="noindex">
<title>Gestion des groupes de quizs</title>
<!-- Version lisible des scripts : https://forge.chapril.org/Fab_Blab/WikiLerni/src/branch/master/front/src -->
<script src="../JS/polyfill.app.js" defer></script>
<script src="../JS/manageGroups.app.js" defer></script>
<link rel="shortcut icon" href="../img/favicon.ico">
<link rel="stylesheet" href="../themes/wikilerni/css/style.css">
<script src="/JS/polyfill.app.js" defer></script>
<script src="/JS/manageGroups.app.js" defer></script>
<link rel="shortcut icon" href="./img/favicon.ico">
<link rel="stylesheet" href="/themes/wikilerni/css/style.css">
</head>
<body class="cardboard">
<!-- En tête -->
<header class="cardboard">
<a href="../" title="Page d'accueil WikLerni"><img src="../themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
<a href="./gestion.html" title="Page d'accueil"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil" /></a>
<ul id="headLinks">
<li><a href="../contact.html" rel="nofollow">Contact</a></li>
<li><a href="../quizs/" id="indexHeadLink" title="Les derniers quizs">Parcourir</a></li>
<li><a href="../a-propos.html">À propos</a></li>
<li><a href="../" title="Page d'accueil de WikiLerni">Accueil</a></li>
<li><a href="./sortie.html">Me déconnecter</a></li>
<li><a href="./gestion-utilisateurs.html" title="Les comptes utilisateurs">Les utilisateurs</a></li>
<li><a href="./gestion-quizs.html" title="Publication des quizs">Les quizs</a></li>
<li><a href="./gestion.html">Gestion WikiLerni</a></li>
</ul>
</header>
@ -28,13 +28,6 @@
<section id="main-content" class="needJS">
<ul id="menu" class="cardboard">
<li><a href="./gestion.html">Gestion WikiLerni</a></li>
<li><a href="./gestion-quizs.html" title="Publication des quizs">Les quizs</a></li>
<li><a href="./gestion-utilisateurs.html" title="Les comptes utilisateurs">Les abonné(e)s</a></li>
<li><a href="./sortie.html">Me déconnecter</a></li>
</ul>
<div id="account" class="cardboard">
<h1 class="cardboard" id="infos">Les groupes de quizs</h1>
@ -68,14 +61,5 @@
<div id="questionnairesList"></div>
</section>
<footer class="cardboard">
<ul id="footLinks">
<li><a href="https://diaspora-fr.org/people/815767c0c09e0139ec6f32a01d0dfba2" title="Blog WikiLerni sur diaspora*">Blog</a></li>
<li><a href="../credits.html">Crédits</a></li>
<li><a href="../mentions-legales.html" rel="nofollow">Mentions légales</a></li>
<li><a href="../donnees.html">Données personnelles</a></li>
<li><a href="../CGV-CGU.html" rel="nofollow">CGV &amp; CGU</a></li>
</ul>
</footer>
</body>
</html>

View File

@ -6,21 +6,21 @@
<meta name="robots" content="noindex">
<title>Gestion des quizs</title>
<!-- Version lisible des scripts : https://forge.chapril.org/Fab_Blab/WikiLerni/src/branch/master/front/src -->
<script src="../JS/polyfill.app.js" defer></script>
<script src="../JS/manageQuestionnaires.app.js" defer></script>
<link rel="shortcut icon" href="../img/favicon.ico">
<link rel="stylesheet" href="../themes/wikilerni/css/style.css">
<script src="/JS/polyfill.app.js" defer></script>
<script src="/JS/manageQuestionnaires.app.js" defer></script>
<link rel="shortcut icon" href="./img/favicon.ico">
<link rel="stylesheet" href="/themes/wikilerni/css/style.css">
</head>
<body class="cardboard">
<!-- En tête -->
<header class="cardboard">
<a href="../" title="Page d'accueil WikLerni"><img src="../themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
<a href="./gestion.html" title="Page d'accueil"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil" /></a>
<ul id="headLinks">
<li><a href="../contact.html" rel="nofollow">Contact</a></li>
<li><a href="../quizs/" id="indexHeadLink" title="Les derniers quizs">Parcourir</a></li>
<li><a href="../a-propos.html">À propos</a></li>
<li><a href="../" title="Page d'accueil de WikiLerni">Accueil</a></li>
<li><a href="./sortie.html">Me déconnecter</a></li>
<li><a href="./gestion-utilisateurs.html" title="Les comptes utilisateurs">Les utilisateurs</a></li>
<li><a href="./gestion-quizs.html" title="Publication des quizs">Les quizs</a></li>
<li><a href="./gestion.html">Gestion WikiLerni</a></li>
</ul>
</header>
@ -28,13 +28,6 @@
<section id="main-content" class="needJS">
<ul id="menu" class="cardboard">
<li><a href="./gestion.html">Gestion WikiLerni</a></li>
<li><a href="./gestion-quizs.html" title="Publication des quizs">Les quizs</a></li>
<li><a href="./gestion-utilisateurs.html" title="Les comptes utilisateurs">Les abonné(e)s</a></li>
<li><a href="./sortie.html">Me déconnecter</a></li>
</ul>
<div id="manageQuestionnaires" class="cardboard">
<h1 class="cardboard" id="infos">Les quizs</h1>
@ -179,14 +172,6 @@
<div id="questionnairesList"></div>
</div>
</section>
<footer class="cardboard">
<ul id="footLinks">
<li><a href="https://diaspora-fr.org/people/815767c0c09e0139ec6f32a01d0dfba2" title="Blog WikiLerni sur diaspora*">Blog</a></li>
<li><a href="../credits.html">Crédits</a></li>
<li><a href="../mentions-legales.html" rel="nofollow">Mentions légales</a></li>
<li><a href="../donnees.html">Données personnelles</a></li>
<li><a href="../CGV-CGU.html" rel="nofollow">CGV &amp; CGU</a></li>
</ul>
</footer>
</body>
</html>

View File

@ -6,21 +6,21 @@
<meta name="robots" content="noindex">
<title>Gestion des abonnés</title>
<!-- Version lisible des scripts : https://forge.chapril.org/Fab_Blab/WikiLerni/src/branch/master/front/src -->
<script src="../JS/polyfill.app.js" defer></script>
<script src="../JS/manageUsers.app.js" defer></script>
<link rel="shortcut icon" href="../img/favicon.ico">
<link rel="stylesheet" href="../themes/wikilerni/css/style.css">
<script src="./JS/polyfill.app.js" defer></script>
<script src="./JS/manageUsers.app.js" defer></script>
<link rel="shortcut icon" href="./img/favicon.ico">
<link rel="stylesheet" href="/themes/wikilerni/css/style.css">
</head>
<body class="cardboard">
<!-- En tête -->
<header class="cardboard">
<a href="../" title="Page d'accueil WikLerni"><img src="../themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
<a href="./gestion.html" title="Page d'accueil"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil" /></a>
<ul id="headLinks">
<li><a href="../contact.html" rel="nofollow">Contact</a></li>
<li><a href="../quizs/" id="indexHeadLink" title="Les derniers quizs">Parcourir</a></li>
<li><a href="../a-propos.html">À propos</a></li>
<li><a href="../" title="Page d'accueil de WikiLerni">Accueil</a></li>
<li><a href="./sortie.html">Me déconnecter</a></li>
<li><a href="./gestion-utilisateurs.html" title="Les comptes utilisateurs">Les utilisateurs</a></li>
<li><a href="./gestion-quizs.html" title="Publication des quizs">Les quizs</a></li>
<li><a href="./gestion.html">Gestion WikiLerni</a></li>
</ul>
</header>
@ -28,13 +28,6 @@
<section id="main-content" class="needJS">
<ul id="menu" class="cardboard">
<li><a href="./gestion.html">Gestion WikiLerni</a></li>
<li><a href="./gestion-quizs.html" title="Publication des quizs">Les quizs</a></li>
<li><a href="./gestion-utilisateurs.html" title="Les comptes utilisateurs">Les abonné(e)s</a></li>
<li><a href="./sortie.html">Me déconnecter</a></li>
</ul>
<div id="account" class="cardboard">
<h1 class="cardboard" id="infos">Les abonnés</h1>
@ -119,14 +112,5 @@
<div id="infosGodchilds" class="needJS"></div>
</section>
<footer class="cardboard">
<ul id="footLinks">
<li><a href="https://diaspora-fr.org/people/815767c0c09e0139ec6f32a01d0dfba2" title="Blog WikiLerni sur diaspora*">Blog</a></li>
<li><a href="../credits.html">Crédits</a></li>
<li><a href="../mentions-legales.html" rel="nofollow">Mentions légales</a></li>
<li><a href="../donnees.html">Données personnelles</a></li>
<li><a href="../CGV-CGU.html" rel="nofollow">CGV &amp; CGU</a></li>
</ul>
</footer>
</body>
</html>

View File

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Page d'accueil pour les gestionnaires du site.">
<meta name="robots" content="noindex">
<title>Mon WikiLerni</title>
<!-- Version lisible des scripts : https://forge.chapril.org/Fab_Blab/WikiLerni/src/branch/master/front/src -->
<script src="/JS/polyfill.app.js" defer></script>
<script src="/JS/homeManager.app.js" defer></script>
<link rel="shortcut icon" href="./img/favicon.ico">
<link rel="stylesheet" href="/themes/wikilerni/css/style.css">
</head>
<body class="cardboard">
<!-- En tête -->
<header class="cardboard">
<a href="./gestion.html" title="Page d'accueil"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil" /></a>
<ul id="headLinks">
<li><a href="./sortie.html">Me déconnecter</a></li>
<li><a href="./gestion-utilisateurs.html" title="Les comptes utilisateurs">Les utilisateurs</a></li>
<li><a href="./gestion-quizs.html" title="Publication des quizs">Les quizs</a></li>
<li><a href="./gestion.html">Gestion WikiLerni</a></li>
</ul>
</header>
<div id="crash"></div>
<section id="main-content" class="needJS">
<div id="home" class="cardboard">
<img id="logo" src="/themes/wikilerni/img/wikilerni-purple-2-512.png" alt="Logo WikiLerni" />
<div id="message" class="cardboard"></div>
<p><a href="#" class="button cardboard" id="wantRegenerate">Régénérer le HTML.</a></p>
<div id="questionnaires"></div>
</div>
</section>
</body>
</html>

View File

Before

Width:  |  Height:  |  Size: 185 KiB

After

Width:  |  Height:  |  Size: 185 KiB

View File

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -6,26 +6,20 @@
<meta name="description" content="Formulaire de connexion à WikiLerni.">
<title>Se connecter à WikiLerni</title>
<!-- Version lisible des scripts : https://forge.chapril.org/Fab_Blab/WikiLerni/src/branch/master/front/src -->
<script src="../JS/polyfill.app.js" defer></script>
<script src="../JS/connection.app.js" defer></script>
<link rel="shortcut icon" href="../img/favicon.ico">
<link rel="stylesheet" href="../themes/wikilerni/css/style.css">
<script src="/JS/polyfill.app.js" defer></script>
<script src="/JS/connection.app.js" defer></script>
<link rel="shortcut icon" href="./img/favicon.ico">
<link rel="stylesheet" href="/themes/wikilerni/css/style.css">
</head>
<body class="cardboard">
<!-- En tête -->
<header class="cardboard">
<a href="../" title="Page d'accueil WikLerni"><img src="../themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page d'accueil de WikiLerni" /></a>
<ul id="headLinks">
<li><a href="../contact.html" rel="nofollow">Contact</a></li>
<li><a href="../quizs/" id="indexHeadLink" title="Les dernières publications">Parcourir</a></li>
<li><a href="../a-propos.html">À propos</a></li>
<li><a href="../" title="Page d'accueil de WikiLerni">Accueil</a></li>
</ul>
<a href="/" title="Page de connexion"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page de connexion" /></a>
</header>
<div id="prompt" class="cardboard">
<a href="../" title="Page d'accueil WikLerni"><img src="../themes/wikilerni/img/wikilerni-purple-2-512.png" alt="Logo WikiLerni" title="W I K I L E R N I" /></a>
<a href="./gestion.html" title="Page d'accueil"><img src="/themes/wikilerni/img/wikilerni-purple-2-512.png" alt="Logo WikiLerni" title="W I K I L E R N I" /></a>
<p>Cultivons notre jardin !</p>
</div>
@ -57,25 +51,6 @@
</div>
</form>
<div id="response"></div>
<div class="info"><b>Pas encore de compte?</b> <a href="../inscription.html">Créez-le en cliquant ici.</a></div>
<div id="explanations" class="framed engraved">
<h2>Besoin daide?</h2>
<p>Si vous avez <b>oublié votre mot de passe</b>, il vous suffit de cocher la case «Je souhaite recevoir un lien de connexion par e-mail». Un lien valide pendant une courte durée vous permettra de vous connecter au site.</p>
<p>Si vous ne vous souvenez pas non plus de ladresse e-mail utilisée sur ce site ou que vous ny avez plus accès, vous pouvez <a href="../contact.html">me contacter</a>, en fournissant des informations permettant de vous identifier.</p>
<p>La case <b>«Je souhaite ne pas avoir à me connecter à chaque fois. »</b> vous permettra de rester connecté jusquà 6 mois, pour peu que vous utilisiez le même navigateur internet sur le même ordinateur.</p>
</div>
</div>
<footer class="cardboard">
<ul id="footLinks">
<li><a href="https://diaspora-fr.org/people/815767c0c09e0139ec6f32a01d0dfba2" title="Blog WikiLerni sur diaspora*">Blog</a></li>
<li><a href="../credits.html">Crédits</a></li>
<li><a href="../mentions-legales.html" rel="nofollow">Mentions légales</a></li>
<li><a href="../donnees.html">Données personnelles</a></li>
<li><a href="../CGV-CGU.html" rel="nofollow">CGV &amp; CGU</a></li>
</ul>
</footer>
</body>
</html>

View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="robots" content="noindex">
<title>Déconnexion WikiLerni</title>
<!-- Version lisible des scripts : https://forge.chapril.org/Fab_Blab/WikiLerni/src/branch/master/front/src -->
<script src="/JS/polyfill.app.js" defer></script>
<script src="/JS/deconnection.app.js" defer></script>
<link rel="shortcut icon" href="/img/favicon.ico">
<link rel="stylesheet" href="/themes/wikilerni/css/style.css">
</head>
<body class="cardboard">
<!-- En tête -->
<header class="cardboard">
<a href="/" title="Page de connexion"><img src="/themes/wikilerni/img/wikilerni-purple-2-128.png" alt="WikiLerni (logo)" title="Accéder à la page de connexion" /></a>
</header>
<div id="prompt" class="cardboard">
<a href="./gestion.html" title="Page d'accueil"><img src="/themes/wikilerni/img/wikilerni-purple-2-512.png" alt="Logo WikiLerni" title="W I K I L E R N I" /></a>
<p>Cultivons notre jardin !</p>
<h1 class="cardboard">Au revoir!</h1>
<div id="response"><p class="error">Si vous voyez ce message, cest quun problème a été rencontré durant la déconnexion.</p></div>
</div>
</body>
</html>

View File

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 197 KiB

View File

Before

Width:  |  Height:  |  Size: 340 B

After

Width:  |  Height:  |  Size: 340 B

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 B

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 922 B

After

Width:  |  Height:  |  Size: 922 B

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 93 KiB