Commit 2d7c7320 authored by Jérémie Passerat's avatar Jérémie Passerat

Ajout titres contenus & améliorations ihm

parent e839bbfc
......@@ -15,6 +15,7 @@
"jquery": "^3.6.0",
"jquery-ui-bundle": "^1.12.1-migrate",
"markdown-it-vue": "^1.1.6",
"material-kit": "^2.0.4",
"mavon-editor": "^2.9.1",
"popper.js": "^1.16.1",
"showdown": "^1.9.1",
......@@ -14024,6 +14025,11 @@
"resolved": "https://registry.npmjs.org/match-at/-/match-at-0.1.1.tgz",
"integrity": "sha512-h4Yd392z9mST+dzc+yjuybOGFNOZjmXIPKWjxBd1Bb23r4SmDOsk2NYCU2BMUBGbSpZqwVsZYNq26QS3xfaT3Q=="
},
"node_modules/material-kit": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/material-kit/-/material-kit-2.0.4.tgz",
"integrity": "sha512-YtcRcqV0s7iByigCfcoHqtrUgXaicyYyZYikn6cdUuKdPdYvQplOUvUgvzmNTvDPcZXzLt8MUk9YfpWWOGISOQ=="
},
"node_modules/mavon-editor": {
"version": "2.9.1",
"resolved": "https://registry.npmjs.org/mavon-editor/-/mavon-editor-2.9.1.tgz",
......@@ -32038,6 +32044,11 @@
"resolved": "https://registry.npmjs.org/match-at/-/match-at-0.1.1.tgz",
"integrity": "sha512-h4Yd392z9mST+dzc+yjuybOGFNOZjmXIPKWjxBd1Bb23r4SmDOsk2NYCU2BMUBGbSpZqwVsZYNq26QS3xfaT3Q=="
},
"material-kit": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/material-kit/-/material-kit-2.0.4.tgz",
"integrity": "sha512-YtcRcqV0s7iByigCfcoHqtrUgXaicyYyZYikn6cdUuKdPdYvQplOUvUgvzmNTvDPcZXzLt8MUk9YfpWWOGISOQ=="
},
"mavon-editor": {
"version": "2.9.1",
"resolved": "https://registry.npmjs.org/mavon-editor/-/mavon-editor-2.9.1.tgz",
......@@ -27,6 +27,7 @@ import Maj from "./Maj";
import Profil from "./Profil";
import Tags from "./Tags";
import NewContenu from "./NewContenu";
// import Service from "./service/Service";
// import showdown from "showdown"
export default {
......@@ -71,8 +72,7 @@ export default {
changerPage: function (event) {
if (event.choix === "Deconnexion"){
this.etat = "unlogged"
localStorage.removeItem('token')
localStorage.auteur = ""
localStorage.clear()
}
else
this.etat = event.choix
......
......@@ -222,7 +222,6 @@ export default {
let reception = response.data
if(reception.length > 0)
for (let i = 0; i < reception.length; i++) {
console.log(reception[i])
that.contenusRecu.push(reception[i])
}
})
......
......@@ -128,6 +128,7 @@ export default {
},
changerStyle: function () {
if (this.isNotif){
this.styleCircle["margin-left"] = "3%"
}
......@@ -160,9 +161,9 @@ export default {
* Recalcul des opportunités de maj et on configure la notification en fonction après action dans le menu maj (fonctionne actuellement pas)
*/
recalculerNotif: function () {
// alert(this.isNotif)
this.isNotif = false
this.publicationsRecues()
this.changerStyle()
},
variante: function () {
this.changerStyle()
......@@ -190,7 +191,6 @@ export default {
.menuVariante{
margin-top: 1%;
margin-left: 45%;
z-index: 1;
}
......@@ -218,7 +218,7 @@ export default {
width: 30px;
margin-top: 1.5%;
z-index: 1;
margin-left: 90%;
margin-left: 90%;
background-image: url(assets/img/cloche.png);
background-size: cover;
......
<template>
<div>
<p></p>
<p>Création de contenu</p>
<p style="text-decoration: underline; margin-top: -2%">Création de contenu</p>
<div id="titreContenu">
<label>Titre du contenu : </label><br>
<input type="text" placeholder="titre du contenu" v-model="titreContenu">
</div>
<br>
<p>Dans cette zone vous pouvez renseigner (en langage markdown) le contenu que vous désirez</p>
<!-- <div class="markdown">
<textarea rows="50" cols="150"/>
......@@ -39,15 +43,14 @@ export default {
bold: true,
language: 'fr'
},
test: ""
titreContenu: ""
}
},
methods: {
ajouterContenu: function () {
let data = {auteur: this.auteur, contenu_a_ecrire: this.contenuSaisi}
let data = {auteur: this.auteur, contenu_a_ecrire: this.contenuSaisi, titre: this.titreContenu}
let that = this
this.test = "test"
Service.creerContenuPerso(data).then(
function (reponse) {
let nouveauContenu = reponse.data
......@@ -80,19 +83,27 @@ export default {
}
input {
width: 1500px;
height: 500px
width: 150px;
height: 20px
}
button {
align-items: center;
width: auto;
text-align: center;
line-height: 1em;
}
#markdownEditor{
height: 1500px
}
#titreContenu {
text-align: center;
align-content: center;
margin: 0 auto 0;
}
.mavonEditor {
width: 100%;
height: 250%;
......
......@@ -56,8 +56,10 @@ export default {
text-decoration: underline;
}
.changermdp{
button{
width: auto;
text-align: center;
line-height: 1em;
}
#editMode{
......
......@@ -15,5 +15,6 @@ export default {
width: 250px;
margin-top: 2px;
flex-basis: 80%;
height: 22px;
}
</style>
\ No newline at end of file
......@@ -9,6 +9,8 @@
<p>Banque</p>
</div>
</div>
</div>
</template>
......@@ -21,6 +23,11 @@ export default {
contenuPanier: true,
}
},
props: {
// Signal pour remise à zéro de l'affichage du menu Panier / banque
razModeVariante: {}
},
methods: {
/**
* @vuese
......@@ -28,10 +35,21 @@ export default {
*/
changerChoix: function () {
this.contenuPanier = !this.contenuPanier
// dès qu'un filtre est choisi
// @arg True si le mode panier est actif, False sinon
this.$emit("mode_choisi", {mode: this.contenuPanier})
},
},
watch: {
/**
* @vuese
* Déconnexion de l'auteur -> on reset l'affichage du menu
*/
razModeVariante: function () {
this.contenuPanier = true
}
}
}
</script>
......@@ -47,6 +65,7 @@ export default {
width: 49%;
flex-grow: 1;
text-align: center;
vertical-align: center;
}
.nonClicked {
......
......@@ -43,6 +43,7 @@ export default {
border: 1px solid black;
width: 250px;
display: flex;
margin-left: 864px;
}
#contenusPanier, #contenusBanque {
......
<template>
<div>
<p>(Dans le futur, ces actions varieront en fonction du type de contenu cliqué dans la 'fenetre principale')</p>
<p>{{titreContenu}} </p>
<div id="actionsContenu" v-show="!isContenuRefuse">
<button v-show="contenuCliqueProvenance !== 'maj' && contenuCliqueProvenance !== 'banque'" v-on:click="actionContenu('modifier')">modifier le contenu</button>
<br v-show="contenuCliqueProvenance !== 'maj' && contenuCliqueProvenance !== 'banque'">
<button v-show="contenuCliqueProvenance !== 'maj' && contenuCliqueProvenance !== 'banque'" v-on:click="actionContenu('supprimer')">supprimer le contenu</button>
<br v-show="contenuCliqueProvenance !== 'maj' && contenuCliqueProvenance !== 'banque'">
<button v-show="contenuCliqueProvenance !== 'maj' && contenuCliqueProvenance === 'en-cours' && contenuClique.origine === 'tiers' && contenuClique.anonyme !== 'oui'" v-on:click="actionContenu('publier')">publier le contenu</button>
<br v-show="contenuCliqueProvenance !== 'maj' && contenuCliqueProvenance === 'en-cours' && contenuClique.origine === 'tiers' && contenuClique.anonyme !== 'oui'">
<button v-show="contenuCliqueProvenance !== 'maj' && contenuCliqueProvenance === 'en-cours' && (contenuClique.origine === 'perso' || contenuClique.anonyme === 'oui')" v-on:click="actionContenu('validerModification')">valider la modification</button>
<br v-show="contenuCliqueProvenance !== 'maj' && contenuCliqueProvenance === 'en-cours' && (contenuClique.origine === 'perso' || contenuClique.anonyme === 'oui')">
<button v-show="contenuCliqueProvenance !== 'maj' && contenuCliqueProvenance === 'banque'" v-on:click="actionContenu('mettreFavori')">mettre le contenu en tiers</button>
<br>
<p>{{contenuCliqueProvenance}}</p>
<p>{{versionMax}}</p>
<br v-show="contenuCliqueProvenance !== 'maj' && contenuCliqueProvenance === 'banque'">
<p v-show="(contenuCliqueProvenance === 'banque'
|| contenuCliqueProvenance === 'perso')
&& versionMax > 1">Choisir le numéro de version que vous souhaitez consulter : </p>
<select v-show="(contenuCliqueProvenance === 'banque'
|| contenuCliqueProvenance === 'perso')
&& versionMax > 1" v-model="versionChoisie" v-on:change="changerVersion" >
<option v-for="i in versionMax" v-bind:key="i"> {{i}}</option>
</select>
<br v-show="(contenuCliqueProvenance === 'banque'
|| contenuCliqueProvenance === 'perso')
&& versionMax > 1">
<p> Voici l'intérieur de votre contenu dans sa version {{versionChoisie}} : </p>
<span contenteditable="false" v-html="formatterMarkdown()">
</span>
<br>
......@@ -101,7 +109,8 @@ export default {
contenu: '',
versionMax: 1,
versionChoisie: 1,
isContenuRefuse :false
isContenuRefuse :false,
titreContenu: ''
}
},
watch: {
......@@ -112,6 +121,8 @@ export default {
contenuClique: function () {
let that = this
this.titreContenu = this.contenuClique.titre
this.isContenuRefuse = false
if (Object.prototype.hasOwnProperty.call(this.contenuClique, 'refuse')){
......
<template>
<div>
<div>
<p v-show="filtre_choisi.length === 0">Ajoutez des filtres pour restreindre la recherche, ou effectuez une recherche libre (bouton en haut à droite)</p>
<Filtre_Tag v-show="filtre_choisi === 'tags officiels' || filtre_choisi === 'tags libres' " v-bind:filtreChoisi="filtre_choisi" @creer_filtre="creer_filtre"/>
<Filtre_Auteur v-bind:panierChoisi="panierChoisi" v-show="filtre_choisi === 'auteur'" v-bind:auteur="auteur" @creer_filtre="creer_filtre"/>
<Filtre_Date v-show="filtre_choisi === 'date' " @creer_filtre="creer_filtre"/>
<Filtre_Note_Popularite v-show="filtre_choisi === 'note / popularité' " @creer_filtre="creer_filtre"/>
<Filtre_Type_Source v-show="filtre_choisi === 'type / source'" @creer_filtre="creer_filtre"/>
<p v-show="filtre_choisi.length === 0">{{ texte }}</p>
<Filtre_Tag v-show="filtre_choisi === 'tags officiels' || filtre_choisi === 'tags libres' " v-bind:filtreChoisi="filtre_choisi" @creer_filtre="creer_filtre"/>
<Filtre_Auteur v-bind:panierChoisi="panierChoisi" v-show="filtre_choisi === 'auteur'" v-bind:auteur="auteur" @creer_filtre="creer_filtre"/>
<Filtre_Date v-show="filtre_choisi === 'date' " @creer_filtre="creer_filtre"/>
<Filtre_Note_Popularite v-show="filtre_choisi === 'note / popularité' " @creer_filtre="creer_filtre"/>
<Filtre_Type_Source v-show="filtre_choisi === 'type / source'" @creer_filtre="creer_filtre"/>
</div>
</div>
</template>
<script>
......@@ -30,7 +30,16 @@ export default {
Filtre_Note_Popularite,
Filtre_Type_Source
},
props: ['filtre_choisi', 'auteur', 'panierChoisi'],
props: {
// mode filtre enclenché ou non
modeFiltre: {},
// information concernant l'ajout d'un filtre
filtre_choisi: {},
// auteur
auteur: {},
// mode panier enclenché ou non
panierChoisi: {}
},
methods: {
/**
* @vuese
......@@ -42,6 +51,14 @@ export default {
this.$emit("creer_filtre", {filtre: event})
}
},
computed: {
texte: function () {
if (this.modeFiltre)
return "Ajoutez des filtres pour restreindre la recherche, ou effectuez une recherche libre (bouton en haut à droite)"
else
return "Entrez un terme a rechercher dans le texte ou à l'intérieur d'un contenu, ou effectuez une recherche via filtres (bouton en haut à droite) "
}
}
}
</script>
......
<template>
<div >
<p id="modifTitre"> Modification du contenu </p>
<div id="titreContenu">
<label>Titre du contenu : </label><br>
<input type="text" placeholder="titre du contenu" v-model="titreContenu">
</div>
<br>
<div class="mavonEditor">
<mavon-editor :language="'fr'" style="min-height: 700px" v-model="contenu"/>
<mavon-editor :language="'fr'" style="min-height: 700px" v-model="texteDuContenu"/>
</div>
<div class="markdown">
<br>
......@@ -25,7 +30,9 @@ export default {
// l'auteur qui effectue la modification (l'auteur du contenu en cours)
auteur: {},
// la provenance (perso, tiers, en-cours)
contenuCliqueProvenance: {}
contenuCliqueProvenance: {},
// le titre du contenu cliqué
titreContenu: {}
},
data: function () {
return {
......@@ -43,7 +50,7 @@ export default {
// evenement de modification du texte d'un contenu
// @arg l'action choisie, ici 'valider'
// @arg le texte modifié
this.$emit("choixModif", {action: actionChoisie, nouveauTexte: this.contenu})
this.$emit("choixModif", {action: actionChoisie, nouveauTexte: this.texteDuContenu, titre: this.titreContenu})
} else {
// evenement de retour en arrière vers Consulter_COntenu
// @arg l'action choisie, ici 'arriere'
......@@ -51,16 +58,16 @@ export default {
}
}
},
}/*,
watch: {
/**
/!**
* @vuese
* Permet de changer le texte du contenu à chaque fois qu'un contenu est cliqué en 'mode modification'
*/
*!/
texteDuContenu: function () {
this.contenu = this.texteDuContenu
// this.titreContenu
}
},
}*/
}
</script>
......@@ -79,6 +86,12 @@ button {
margin-bottom: 5px;
}
#titreContenu {
text-align: center;
align-content: center;
margin: 0 auto 0;
}
#modifTitre{
margin-top: -35px;
}
......
This diff is collapsed.
......@@ -5,9 +5,10 @@
<Detail_Filtre v-bind:nouveau_filtre="nouveau_filtre" @filtresChoisis="filtresChoisis"/>
</div>
<div id = "detailContenu">
<Detail_Contenu v-bind:panierChoisi="panierChoisi" v-bind:filtre_choisi="filtre_choisi" v-bind:auteur="auteur" @creer_filtre="creer_filtre"/>
<Detail_Contenu v-bind:modeFiltre="modeFiltre" v-bind:panierChoisi="panierChoisi" v-bind:filtre_choisi="filtre_choisi"
v-bind:auteur="auteur" @creer_filtre="creer_filtre"/>
</div>
<Choix_Mode v-show="!variante" @mode_choisi="ajusterMode" />
<Choix_Mode v-show="!variante" @mode_choisi="ajusterMode" v-bind:razModeVariante="razModeVariante" />
</div>
</template>
......@@ -29,7 +30,11 @@ export default {
// Variable de stocka de l'affichage ou non de la variante du menu Banque / Panier
variante: {},
// Stockage de l'auteur connecté
auteur:{}
auteur:{},
// Signal pour remise à zéro de l'affichage du menu Panier / banque
razModeVariante: {},
// mode filtre enclenché ou non
modeFiltre: {}
},
methods: {
......
......@@ -34,6 +34,7 @@ export default {
*/
changerModeMenu: function (){
this.modeFiltre = !this.modeFiltre
this.$emit("basculeRechercheFiltre", {choix: this.modeFiltre})
},
/**
* @vuese
......
......@@ -8,6 +8,7 @@ import BootstrapVue from "bootstrap-vue"
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'
//import Index from '@/Index'
Vue.config.productionTip = false
Vue.use(VPopover, { tooltip: true })
......
......@@ -8,14 +8,19 @@ const en_cours = "en_cours/"
const demande_pub = "demande_pub/"
//const evaluation = "evaluation/
const header = {headers:
{
Authorization: "Bearer " + localStorage.token,
}
}
export default {
getHeader(token){
return {headers:
{
Authorization: "Bearer " + token,
}
}
},
// gestion des utilisateurs
login(data) {
let login = data[0]
......@@ -24,98 +29,102 @@ export default {
axios.get(urlBase + "checkUser?login=" + login + "&password=" + motDePasse).then(function (response) {
reponse = response.data
})*/
return axios.get(urlBase + users + "checkUser?login=" + login + "&password=" + motDePasse, header)
return axios.get(urlBase + users + "checkUser?login=" + login + "&password=" + motDePasse, this.getHeader(localStorage.token))
},
// gestion des utilisateurs
/* logout() {
return axios.get(urlBase + users + "logout", this.getHeader(localStorage.token))
},*/
recupererAuteursExistants(){
return axios.get(urlBase + users + "auteursExistants", header)
return axios.get(urlBase + users + "auteursExistants", this.getHeader(localStorage.token))
},
// gestion des contenus
creerContenuPerso(data) {
return axios.post(urlBase + contenus + "addContenu", data, header)
return axios.post(urlBase + contenus + "addContenu", data, this.getHeader(localStorage.token))
},
creerContenuTiers(data) {
return axios.patch(urlBase + contenus + "ajouterTiers", data, header)
return axios.patch(urlBase + contenus + "ajouterTiers", data, this.getHeader(localStorage.token))
},
/* getContenuById(idContenu) {
return axios.get(urlBase + contenus + "getContenu/" + idContenu)
},*/
getPanierAuteur(auteur) {
return axios.get(urlBase + contenus + "getContenuPanier/" + auteur + "?perso=True&tiers=True&enCours=true", header)
return axios.get(urlBase + contenus + "getContenuPanier/" + auteur + "?perso=True&tiers=True&enCours=true", this.getHeader(localStorage.token))
},
getBanqueAuteur(auteur) {
return axios.get(urlBase + contenus + "getContenuBanque/" + auteur, header)
return axios.get(urlBase + contenus + "getContenuBanque/" + auteur, this.getHeader(localStorage.token))
},
supprimerContenu(idContenu) {
return axios.delete(urlBase + contenus + "deletePerso/" + idContenu, header)
return axios.delete(urlBase + contenus + "deletePerso/" + idContenu, this.getHeader(localStorage.token))
},
supprimerTiers(auteur, id_tiers) {
return axios.delete(urlBase + contenus + "deleteTiers?auteur=" + auteur + "&id_tiers=" + id_tiers, header)
return axios.delete(urlBase + contenus + "deleteTiers?auteur=" + auteur + "&id_tiers=" + id_tiers, this.getHeader(localStorage.token))
},
creerNouveauContenu(data) {
return axios.post(urlBase + contenus + "newContenu", data, header)
return axios.post(urlBase + contenus + "newContenu", data, this.getHeader(localStorage.token))
},
majContenu(data) {
return axios.patch(urlBase + contenus + "majContenu", data, header)
return axios.patch(urlBase + contenus + "majContenu", data, this.getHeader(localStorage.token))
}, gererDemandePublication(data) {
return axios.patch(urlBase + contenus + "gererDemandePub", data, header)
return axios.patch(urlBase + contenus + "gererDemandePub", data, this.getHeader(localStorage.token))
},
isMajTiersDisponible(auteur) {
return axios.get(urlBase + contenus + "isMajTiersDisponible/" + auteur, header)
return axios.get(urlBase + contenus + "isMajTiersDisponible/" + auteur, this.getHeader(localStorage.token))
},
listeMajTiers(auteur) {
return axios.get(urlBase + contenus + "listeMajTiers/" + auteur, header)
return axios.get(urlBase + contenus + "listeMajTiers/" + auteur, this.getHeader(localStorage.token))
},
gererMajTiers(data) {
return axios.patch(urlBase + contenus + "gererMajTiers", data, header)
return axios.patch(urlBase + contenus + "gererMajTiers", data, this.getHeader(localStorage.token))
},
changerTexte(data, id) {
return axios.patch(urlBase + contenus + "changerTexte/" + id, data, header)
return axios.patch(urlBase + contenus + "changerTexte/" + id, data, this.getHeader(localStorage.token))
},
recupererTexteContenu(idContenu){
return axios.get(urlBase + contenus + "getTexteContenu/" + idContenu, header)
return axios.get(urlBase + contenus + "getTexteContenu/" + idContenu, this.getHeader(localStorage.token))
},
recupererTexteVersionContenu(idContenu, version){
return axios.get(urlBase + contenus + "getTexteVersionContenu/" + idContenu + "/" + version, header)
return axios.get(urlBase + contenus + "getTexteVersionContenu/" + idContenu + "/" + version, this.getHeader(localStorage.token))
},
// gestion des en-cours
creerEnCours(data) {
return axios.post(urlBase + en_cours + "newEnCours", data, header)
return axios.post(urlBase + en_cours + "newEnCours", data, this.getHeader(localStorage.token))
},
creerEnCoursRefuse(data) {
return axios.patch(urlBase + en_cours + "newEnCoursRefuse", data, header)
return axios.patch(urlBase + en_cours + "newEnCoursRefuse", data, this.getHeader(localStorage.token))
},
supprimerEnCoursParLid(idEnCours) {
return axios.delete(urlBase + en_cours + "supprimerEnCoursParId/" + idEnCours, header)
return axios.delete(urlBase + en_cours + "supprimerEnCoursParId/" + idEnCours, this.getHeader(localStorage.token))
},
recupererTexteContenuEnCours(idContenu){
return axios.get(urlBase + en_cours + "getTexteContenuEnCours/" + idContenu, header)
return axios.get(urlBase + en_cours + "getTexteContenuEnCours/" + idContenu, this.getHeader(localStorage.token))
},
// gestion des demandes de publication
getPublicationsRecues(auteur) {
return axios.get(urlBase + demande_pub + "demandePublication/" + auteur + "/False", header)
return axios.get(urlBase + demande_pub + "demandePublication/" + auteur + "/False", this.getHeader(localStorage.token))
},
getPublicationsProposees(auteur) {
return axios.get(urlBase + demande_pub + "demandePublication/" + auteur + "/True", header)
return axios.get(urlBase + demande_pub + "demandePublication/" + auteur + "/True", this.getHeader(localStorage.token))
},
creerDemandePublication(data) {
return axios.post(urlBase + demande_pub + "demandePublication", data, header)
return axios.post(urlBase + demande_pub + "demandePublication", data, this.getHeader(localStorage.token))
},
supprimerDemandePublication(idDemandePublication) {
return axios.delete(urlBase + demande_pub + "demandePublication/" + idDemandePublication, header)
return axios.delete(urlBase + demande_pub + "demandePublication/" + idDemandePublication, this.getHeader(localStorage.token))
},
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment