TagsLibres.vue 4.57 KB
Newer Older
1
<template>
2
  <div id="pageTagLibre" v-bind:style="darktheme ? 'background-color: black; color: white' : 'background-color: white'">
3 4 5 6 7 8 9 10 11 12 13
    <div id="tagsPresents"><br>
      <label>Voici les tags libres présents sur ce contenu :</label><br>
      <p v-if="tagsLibres.length === 0">Aucun tag présent</p>
      <ul v-else>
        <li v-for="tag in tagsLibres" :key="tag">{{tag}} <button class="supprimerTag" @click="supprimerTag(tag)"></button></li>
      </ul>
    </div>
    <div id="ajouterTag">
      <label>Ajouter un tag existant :</label><br>
      <select @change="ajouterLeTag" v-model="ajouterTagExistant">
        <option></option>
14
        <option v-for="tag in tagsAuteurDisponibles" :key="tag">{{ tag }}</option>
15
      </select><br><br>
16
      <span id="versGestionTags" style="font-size: smaller" @click="chargerGestionTagsLibres"> Gestion des tags libres</span>
17
    </div>
18 19
    <p>----------------------------------------------------------------------------</p>
    <TagsFixes v-bind:isModif="isModif" v-bind:tagsBanque="tagsBanque" v-bind:id_contenu="id_contenu"></TagsFixes>
20 21 22 23 24 25
  </div>
</template>

<script>

import Service from "./service/Service";
26
import TagsFixes from "@/TagsFixes";
27 28
export default {
  name: "TagsLibres",
29
  components: {TagsFixes},
30 31 32 33
  props: {
    // récupération du contenu cliqué
    contenu: {},
    // récupération de l'auteur
34 35
    auteur: {},
    // provenance du contenu
36 37 38
    contenuCliqueProvenance: {},
    // Signal d'activation ou non du theme sombre
    darktheme: {}
39 40
  },
  methods:{
41 42 43 44
    /**
     * @vuese
     * permet d'associer un tag libre à un contenu
     */
45 46 47 48 49
    ajouterLeTag: function () {

      let data = {auteur: this.auteur, id_contenu: JSON.stringify(this.contenu._id), tag: this.ajouterTagExistant}
      Service.associerTagLibre(data)
      this.tagsLibres.push(this.ajouterTagExistant)
50
      this.$emit("actionTagLibre", {creation: this.ajouterTagExistant, id_contenu: this.contenu._id})
51 52
      this.ajouterTagExistant = ""
    },
53
/*    creerTag: function () {
54 55 56
      this.tagsLibres.push(this.nouveauTag)
      let data = {auteur: this.auteur, id_contenu: JSON.stringify(this.contenu._id), tag: this.nouveauTag}
      Service.ajouterTagLibre(data)
57
      this.$emit("actionTagLibre", {creation: this.nouveauTag, id_contenu: this.contenu._id})
58 59
      this.nouveauTag = ""
      // this.ajouterTag(this.nouveauTag)
60 61 62 63 64
    },*/
    /**
     * @vuese
     * dissocier un tag d'un contenu
     */
65 66 67
    supprimerTag: function (tagAVirer) {
      this.tagsLibres = this.tagsLibres.filter(tag => tag !== tagAVirer)
      let data = {auteur: this.auteur, id_contenu: JSON.stringify(this.contenu._id), tag: tagAVirer}
68
      this.$emit("actionTagLibre", {suppression: tagAVirer, id_contenu: this.contenu._id})
69
      Service.dissocierTagLibre(data)
70
    },
71 72 73 74
    /**
     * @vuese
     * Permet de charger le composant GererTagsLibres
     */
75 76
    chargerGestionTagsLibres: function () {
      this.$emit("chargerTagsLibres")
77 78 79 80 81 82 83
    }
  },
  data: function () {
    return {
      tagsLibres: [],
      tagsDeAuteur: [],
      ajouterTagExistant: '',
84 85 86 87
      nouveauTag: '',
      isModif: false,
      tagsBanque: [],
      id_contenu: ''
88 89 90
    }
  },
  watch:{
91 92 93 94
    /**
     * @vuese
     * Dès que le contenu est cliqué, on récupère les tags libres associés au contenu & les tags libres de l'auteur
     */
95 96
    contenu: function () {
      let that = this
97 98 99
      this.isModif = true
      this.tagsBanque = this.contenu.tags_fixes
      this.id_contenu = this.contenu._id
100
      this.tagsDeAuteur = []
101 102 103 104 105 106 107 108
      //this.tagsLibres = this.contenu.tags_libres
      Service.recupererTagLibre(this.auteur).then(function (response) {
        that.tagsDeAuteur = response.data
        Service.recupererTagLibreContenu(JSON.stringify(that.contenu._id), that.auteur).then(function (response) {
          that.tagsLibres = response.data
        })
      })
    },
109 110
  },
  computed: {
111 112 113 114
    /**
     * @vuese
     * permet de filtrer la liste des tags libres ajoutables (en filtrant les tags déja actifs sur le contenu)
     */
115 116 117
    tagsAuteurDisponibles: function () {
      return this.tagsDeAuteur.filter(tagLibre => !this.tagsLibres.includes(tagLibre))
    }
118 119 120 121 122 123 124 125 126 127
  }
}
</script>

<style scoped>
ul {
  list-style:none;

}

128 129 130 131 132
/*#pageTagLibre {
  margin-left: 20%;
  margin-right: 20%;
}*/

133 134 135 136 137 138 139 140 141 142 143 144 145
.supprimerTag {
  background: aqua url(assets/img/croix2.png);
  background-size: cover;
  border: none;

}

#creerTag {
  background: aqua url(assets/img/coche2.png);
  background-size: cover;
  border: none;
  margin-left: 3px;
}
146 147 148 149 150

#tagsPresents {
  padding-top: 0.75 %;
}
#ajouterTag {
151 152 153 154 155
  padding-bottom: 0.25%;
}

#versGestionTags::before {
  content: "\01F4D3";
156 157
}

158
</style>