Ajout de la fonctionnalité de recherche
This commit is contained in:
parent
bf8c20da5a
commit
ae3ed6476c
@ -4,7 +4,7 @@
|
|||||||
{% include "navigation.html" %}
|
{% include "navigation.html" %}
|
||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>{{data["ac"]}}</h1>
|
<h1>{{data["code"]}}</h1>
|
||||||
<p>{{data["titre"]}}</p>
|
<p>{{data["titre"]}}</p>
|
||||||
</div>
|
</div>
|
||||||
{% include "navigation.html" %}
|
{% include "navigation.html" %}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
<link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
|
<link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
||||||
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
|
||||||
|
<script src="https://unpkg.com/lunr/lunr.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Barre de navigation -->
|
<!-- Barre de navigation -->
|
||||||
@ -32,17 +33,33 @@
|
|||||||
<a class="navbar-item" href="ressourcesS2.html">Semestre 2</a>
|
<a class="navbar-item" href="ressourcesS2.html">Semestre 2</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="navbar-end">
|
<div class="navbar-end">
|
||||||
<!-- Barre de recherche -->
|
<div class="navbar-item">
|
||||||
<div class="control has-icons-left">
|
<!-- Bouton pour afficher un boite de dialogue pour la recherche -->
|
||||||
<input id="rechercher" class="input" type="text" placeholder="Rechercher">
|
<button id="rechercheBouton" class="button is-rounded is-primary">
|
||||||
<span class="icon is-left">
|
<span class="icon">
|
||||||
<i class="fas fa-search"></i>
|
<i class="fas fa-search"></i>
|
||||||
</span>
|
</span>
|
||||||
|
<span>Rechercher</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
<!-- Boite de dialogue pour la recherche -->
|
||||||
|
<div id="rechercheBoite" class="modal">
|
||||||
|
<div class="modal-background"></div>
|
||||||
|
<div class="modal-card">
|
||||||
|
<header class="modal-card-head">
|
||||||
|
<p class="modal-card-title has-text-centered">Rechercher</p>
|
||||||
|
<button id="rechercheBoite-fermer" class="modal-close"></button>
|
||||||
|
</header>
|
||||||
|
<section class="modal-card-body">
|
||||||
|
<input id="rechercher" type="text" class="input mb-4" placeholder="Rechercher..." >
|
||||||
|
<div id="rechercheResultats" class="content"></div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<!-- Contenu de la page -->
|
<!-- Contenu de la page -->
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
@ -50,7 +67,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Script JQuery -->>
|
<!-- Script JQuery -->
|
||||||
<script type="text/javascript" src="../base.js"></script>
|
<script type="text/javascript" src="js/base.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
29
html/base.js
29
html/base.js
@ -1,29 +0,0 @@
|
|||||||
$("document").ready(function() {
|
|
||||||
// Affichage mobile du menu | affiche/cache le menu contenant la liste des catégories
|
|
||||||
// en appuyant sur le burger/les trois traits
|
|
||||||
$(".navbar-burger").click(function() {
|
|
||||||
$(".navbar-burger").toggleClass("is-active");
|
|
||||||
$(".navbar-menu").toggleClass("is-active");
|
|
||||||
});
|
|
||||||
$(".button").click(function() {
|
|
||||||
$(this).addClass("is-loading");
|
|
||||||
});
|
|
||||||
// Redirige vers la page tapé dans la barre de recherche | recheche brut, possible d'amélioration avec
|
|
||||||
// auto-complétion, créer une page web "page n'existe pas", recherche par motsclés, page avec une liste des
|
|
||||||
// pages web possibles en fonction de ce que entre l'utilisateur
|
|
||||||
// ex: "R101" -> ./HTML/R101.html
|
|
||||||
$("#rechercher").keyup(function(e) {
|
|
||||||
if(e.keyCode == 13) {location.href = $(this).val().toUpperCase() + ".html"}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Permet l'affichage du LaTeX avec comme balise délimiteur "$"
|
|
||||||
// Le menu contextuel de MathJax a été désactivé
|
|
||||||
MathJax = {
|
|
||||||
tex: {
|
|
||||||
inlineMath: [['$', '$']]
|
|
||||||
},
|
|
||||||
options: {
|
|
||||||
enableMenu: false
|
|
||||||
}
|
|
||||||
};
|
|
72
html/baseTemplate.js
Normal file
72
html/baseTemplate.js
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
$("document").ready(function() {
|
||||||
|
// Affichage mobile du menu | affiche/cache le menu contenant la liste des catégories
|
||||||
|
// en appuyant sur le burger/les trois traits
|
||||||
|
$(".navbar-burger").click(function() {
|
||||||
|
$(".navbar-burger").toggleClass("is-active");
|
||||||
|
$(".navbar-menu").toggleClass("is-active");
|
||||||
|
// Détails visuel du bouton recherche
|
||||||
|
$("#rechercheBouton").toggleClass("is-rounded is-fullwidth is-primary")
|
||||||
|
});
|
||||||
|
// Bouton suivant et précédent qui s'affiche en loading lorsque l'utilisateur change de page
|
||||||
|
$("a.button").click(function() {
|
||||||
|
$(this).addClass("is-loading");
|
||||||
|
});
|
||||||
|
// Redirige vers la page tapé dans la barre de recherche | recheche brut, possible d'amélioration avec
|
||||||
|
// auto-complétion, créer une page web "page n'existe pas", recherche par motsclés, page avec une liste des
|
||||||
|
// pages web possibles en fonction de ce que entre l'utilisateur
|
||||||
|
// ex: "R101" -> ./HTML/R101.html
|
||||||
|
$("#rechercheBouton").click(function() {
|
||||||
|
$("#rechercheBoite").addClass("is-active")
|
||||||
|
});
|
||||||
|
|
||||||
|
// Gestion de la fermeture de la boite de recherche
|
||||||
|
$(".modal-background").click(function() {
|
||||||
|
$("#rechercheBoite").removeClass("is-active")
|
||||||
|
});
|
||||||
|
$("#rechercheBoite-fermer").click(function() {
|
||||||
|
$("#rechercheBoite").removeClass("is-active")
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#rechercher").keyup(function(e) {
|
||||||
|
var recherche = $(this).val();
|
||||||
|
if(recherche.length != 0) {
|
||||||
|
var resultats = idx.search(recherche);
|
||||||
|
if(resultats.length != 0) {
|
||||||
|
$("#rechercheResultats").empty();
|
||||||
|
resultats.forEach(function(res) {
|
||||||
|
$("#rechercheResultats").append('<a href="' + documents[res.ref]["url"] + '"><p class="title">' + documents[res.ref]["titre"] + '</p></a>')
|
||||||
|
$("#rechercheResultats").append('<p class="subtitle">' + documents[res.ref]["code"] + '</p>')
|
||||||
|
});
|
||||||
|
} else {$("#rechercheResultats").html('<p class="has-text-centered">Pas de résultats</p>')}
|
||||||
|
} else {
|
||||||
|
$("#rechercheResultats").html('<p class="has-text-centered">Pas de résultats</p>')
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Documents avec toutes les informations nécessaire pour la recherche
|
||||||
|
var documents = {{documents}}
|
||||||
|
|
||||||
|
var idx = lunr(function() {
|
||||||
|
this.ref("code")
|
||||||
|
this.field("code")
|
||||||
|
this.field("motscles")
|
||||||
|
this.field("diminutif")
|
||||||
|
this.field("titre")
|
||||||
|
|
||||||
|
for(var cle in documents) {
|
||||||
|
this.add(documents[cle])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Permet l'affichage du LaTeX avec comme balise délimiteur "$"
|
||||||
|
// Le menu contextuel de MathJax a été désactivé
|
||||||
|
MathJax = {
|
||||||
|
tex: {
|
||||||
|
inlineMath: [['$', '$']]
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
enableMenu: false
|
||||||
|
}
|
||||||
|
};
|
@ -188,6 +188,18 @@ def formatHTML(string):
|
|||||||
i += 1
|
i += 1
|
||||||
return texte[:-1] # On enlève le dernier \n
|
return texte[:-1] # On enlève le dernier \n
|
||||||
|
|
||||||
|
def defineSearchTerm(dictio, url, documents):
|
||||||
|
""" Retourne un dictionnaire d'une ressource compatible Lunr pour la recherche de cette élément """
|
||||||
|
document = {}
|
||||||
|
document["code"] = dictio["code"]
|
||||||
|
document["url"] = url
|
||||||
|
if "titre" in dictio: document["titre"] = dictio["titre"]
|
||||||
|
else: document["titre"] = dictio["nom"]
|
||||||
|
if "motscles" in dictio: document["motscles"] = dictio["motscles"]
|
||||||
|
if "diminutif" in dictio: document["diminutif"] = dictio["diminutif"]
|
||||||
|
documents[document["code"]] = document
|
||||||
|
return
|
||||||
|
|
||||||
#Créer un fichier contenant la liste des saes
|
#Créer un fichier contenant la liste des saes
|
||||||
datas = {"data" : saes, "title": "SAE"} # "data" contient un tableau des saes
|
datas = {"data" : saes, "title": "SAE"} # "data" contient un tableau des saes
|
||||||
template_List.stream(datas).dump(REPERTOIRE_HTML + "/SAE.html")
|
template_List.stream(datas).dump(REPERTOIRE_HTML + "/SAE.html")
|
||||||
@ -196,6 +208,9 @@ template_List.stream(datas).dump(REPERTOIRE_HTML + "/SAE.html")
|
|||||||
datas = {"data" : ressources, "title": "Ressources"}
|
datas = {"data" : ressources, "title": "Ressources"}
|
||||||
template_List.stream(datas).dump(REPERTOIRE_HTML + "/ressources.html")
|
template_List.stream(datas).dump(REPERTOIRE_HTML + "/ressources.html")
|
||||||
|
|
||||||
|
# Définition d'un liste de document contenant les informations nécessaires pour la recherche
|
||||||
|
documents = {}
|
||||||
|
|
||||||
# Création des pages individuelles ressources, saes, exemples
|
# Création des pages individuelles ressources, saes, exemples
|
||||||
for indexSem, sem in enumerate(ressources):
|
for indexSem, sem in enumerate(ressources):
|
||||||
for i, ressource in enumerate(ressources[sem]):
|
for i, ressource in enumerate(ressources[sem]):
|
||||||
@ -214,7 +229,10 @@ for indexSem, sem in enumerate(ressources):
|
|||||||
if(i < len(ressources[sem]) - 1): datas["suivant"] = "R" + str(int(ressource.ressource["code"][1:])+1) + ".html"
|
if(i < len(ressources[sem]) - 1): datas["suivant"] = "R" + str(int(ressource.ressource["code"][1:])+1) + ".html"
|
||||||
elif(indexSem < len(ressources) - 1): datas["suivant"] = "R" + str((int(sem[-1:])+1)*100+1) + ".html"
|
elif(indexSem < len(ressources) - 1): datas["suivant"] = "R" + str((int(sem[-1:])+1)*100+1) + ".html"
|
||||||
# Créer un fichier html depuis un TemplateStream créer à partir du template et des données dans "data" qui remplace les variables
|
# Créer un fichier html depuis un TemplateStream créer à partir du template et des données dans "data" qui remplace les variables
|
||||||
template.stream(datas).dump(REPERTOIRE_HTML + "/" + data["code"] + ".html")
|
url = data["code"] + ".html"
|
||||||
|
# Ajout des informations de ressource pour la recherche dans une liste
|
||||||
|
defineSearchTerm(data, url, documents)
|
||||||
|
template.stream(datas).dump(REPERTOIRE_HTML + "/" + url)
|
||||||
|
|
||||||
#Créer un fichier contenant la liste des ressources du semestre
|
#Créer un fichier contenant la liste des ressources du semestre
|
||||||
data = {"data" : ressources[sem],"sem" : sem} # "data" contient un tableau des ressources du semestre
|
data = {"data" : ressources[sem],"sem" : sem} # "data" contient un tableau des ressources du semestre
|
||||||
@ -235,7 +253,9 @@ for indexSem, sem in enumerate(ressources):
|
|||||||
elif(indexSem > 0): datas["precedent"] = "SAE" + saes[list(saes.keys())[indexSem - 1]][-1].sae["code"][3:] + ".html" # saes[list(saes.keys())[indexSem - 1]][-1].sae["code"][3:] -> "code" du dernier sae du semestre précédent
|
elif(indexSem > 0): datas["precedent"] = "SAE" + saes[list(saes.keys())[indexSem - 1]][-1].sae["code"][3:] + ".html" # saes[list(saes.keys())[indexSem - 1]][-1].sae["code"][3:] -> "code" du dernier sae du semestre précédent
|
||||||
if(i < len(saes[sem]) - 1): datas["suivant"] = "SAE" + str(int(sae.sae["code"][3:])+1) + ".html"
|
if(i < len(saes[sem]) - 1): datas["suivant"] = "SAE" + str(int(sae.sae["code"][3:])+1) + ".html"
|
||||||
elif(indexSem < len(saes) - 1): datas["suivant"] = "SAE" + str((int(sem[-1:])+1)*10+1) + ".html"
|
elif(indexSem < len(saes) - 1): datas["suivant"] = "SAE" + str((int(sem[-1:])+1)*10+1) + ".html"
|
||||||
template.stream(datas).dump(REPERTOIRE_HTML + "/" + data["code"].replace("É","E") + ".html")
|
url = data["code"].replace("É","E") + ".html"
|
||||||
|
defineSearchTerm(data, url, documents)
|
||||||
|
template.stream(datas).dump(REPERTOIRE_HTML + "/" + url)
|
||||||
|
|
||||||
for sae in exemples[sem]:
|
for sae in exemples[sem]:
|
||||||
i = 1 # Nommage des fichiers exemple sae peut être modifier
|
i = 1 # Nommage des fichiers exemple sae peut être modifier
|
||||||
@ -248,7 +268,8 @@ for indexSem, sem in enumerate(ressources):
|
|||||||
datas = {"data":data, "rename": rename}
|
datas = {"data":data, "rename": rename}
|
||||||
if(j > 0): datas["precedent"] = "SAE" + data["code"][-2:] + "_exemple" + str(i-1) + ".html"
|
if(j > 0): datas["precedent"] = "SAE" + data["code"][-2:] + "_exemple" + str(i-1) + ".html"
|
||||||
if(j < len(exemples[sem][sae]) - 1): datas["suivant"] = "SAE" + data["code"][-2:] + "_exemple" + str(i+1) + ".html"
|
if(j < len(exemples[sem][sae]) - 1): datas["suivant"] = "SAE" + data["code"][-2:] + "_exemple" + str(i+1) + ".html"
|
||||||
template.stream(datas).dump(REPERTOIRE_HTML + "/" + data["code"].replace("É","E") + "_exemple" + str(i) + ".html")
|
url = data["code"].replace("É","E") + "_exemple" + str(i) + ".html"
|
||||||
|
template.stream(datas).dump(REPERTOIRE_HTML + "/" + url)
|
||||||
i+=1
|
i+=1
|
||||||
|
|
||||||
# Création des pages individuelles ACs, Compétences
|
# Création des pages individuelles ACs, Compétences
|
||||||
@ -257,14 +278,16 @@ for indexRt, rt in enumerate(acs.getInfo()):
|
|||||||
# ACs
|
# ACs
|
||||||
for i, (ac, desc) in enumerate(acs.getInfo()[rt].items()):
|
for i, (ac, desc) in enumerate(acs.getInfo()[rt].items()):
|
||||||
data = {}
|
data = {}
|
||||||
data["ac"] = ac
|
data["code"] = ac
|
||||||
data["titre"] = desc
|
data["titre"] = desc
|
||||||
datas = {"data":data}
|
datas = {"data":data}
|
||||||
if i > 0: datas["precedent"] = list(acs.getInfo()[rt].keys())[i-1] + ".html"
|
if i > 0: datas["precedent"] = list(acs.getInfo()[rt].keys())[i-1] + ".html"
|
||||||
elif indexRt > 0: datas["precedent"] = list(acs.getInfo()["RT" + str(int(rt[-1])-1)].keys())[-1] + ".html"
|
elif indexRt > 0: datas["precedent"] = list(acs.getInfo()["RT" + str(int(rt[-1])-1)].keys())[-1] + ".html"
|
||||||
if i < len(acs.getInfo()[rt])-1: datas["suivant"] = list(acs.getInfo()[rt].keys())[i+1] + ".html"
|
if i < len(acs.getInfo()[rt])-1: datas["suivant"] = list(acs.getInfo()[rt].keys())[i+1] + ".html"
|
||||||
elif indexRt < len(acs.getInfo())-1: datas["suivant"] = list(acs.getInfo()["RT" + str(int(rt[-1])+1)].keys())[0] + ".html"
|
elif indexRt < len(acs.getInfo())-1: datas["suivant"] = list(acs.getInfo()["RT" + str(int(rt[-1])+1)].keys())[0] + ".html"
|
||||||
template_AC.stream(datas).dump(REPERTOIRE_HTML + "/" + ac + ".html")
|
url = ac + ".html"
|
||||||
|
defineSearchTerm(data, url, documents)
|
||||||
|
template_AC.stream(datas).dump(REPERTOIRE_HTML + "/" + url)
|
||||||
|
|
||||||
# Compétences
|
# Compétences
|
||||||
data = {}
|
data = {}
|
||||||
@ -274,4 +297,13 @@ for indexRt, rt in enumerate(acs.getInfo()):
|
|||||||
datas = {"data": data, "rt": rt}
|
datas = {"data": data, "rt": rt}
|
||||||
if indexRt > 0: datas["precedent"] = "RT" + str(indexRt) + ".html"
|
if indexRt > 0: datas["precedent"] = "RT" + str(indexRt) + ".html"
|
||||||
if indexRt <= len(competences.getInfo()): datas["suivant"] = "RT" + str(indexRt + 2) + ".html"
|
if indexRt <= len(competences.getInfo()): datas["suivant"] = "RT" + str(indexRt + 2) + ".html"
|
||||||
template_Competence.stream(datas).dump(REPERTOIRE_HTML + "/" + rt + ".html")
|
url = rt + ".html"
|
||||||
|
template_Competence.stream(datas).dump(REPERTOIRE_HTML + "/" + url)
|
||||||
|
data["code"] = rt
|
||||||
|
defineSearchTerm(data, url, documents)
|
||||||
|
|
||||||
|
# Envoie des informations des documents pour la recherche
|
||||||
|
template_recherche = env.get_template("baseTemplate.js")
|
||||||
|
if not os.path.exists(REPERTOIRE_HTML + "/js"):
|
||||||
|
os.makedirs(REPERTOIRE_HTML + "/js")
|
||||||
|
template_recherche.stream(documents=documents).dump(REPERTOIRE_HTML + "/js/base.js")
|
Loading…
Reference in New Issue
Block a user