Browse Source

Gestion des collections

François 5 years ago
parent
commit
acddac92e5

+ 84 - 20
assets/js/addCollectionWidget.js

@@ -1,22 +1,86 @@
-jQuery(document).ready(function () {
-    jQuery('.add-another-collection-widget').click(function (e) {
-        var list = jQuery(jQuery(this).attr('data-list-selector'));
-        // Try to find the counter of the list or use the length of the list
-        var counter = list.data('widget-counter') | list.children().length;
+(function ($) {
+    $.fn.addCollection = function() {
+        function requete(chemin, handleData) {
+            $.ajax({
+                url: chemin,
+                type: 'POST',
+                dataType: 'json',
+                success: function (reponse) {
+                    let reponseArray = parseJson(reponse);
+                    handleData(reponseArray);
+                }
+            })
+        }
+        
+        function parseJson(data) {
+            let tableau = [];
+            for (let i = 0; i < data.length; i++) {
+                let UnObjetJson = data[i];
+                let obj = JSON.parse(UnObjetJson);
+                sortie = Object.values(obj)
+                tableau.push(sortie[0]);
+            }
+            return tableau;
+        }
 
-        // grab the prototype template
-        var newWidget = list.attr('data-prototype');
-        // replace the "__name__" used in the id and name of the prototype
-        // with a number that's unique to your emails
-        // end name attribute looks like name="contact[emails][2]"
-        newWidget = newWidget.replace(/__name__/g, counter);
-        // Increase the counter
-        counter++;
-        // And store it, the length cannot be used if deleting widgets is allowed
-        list.data('widget-counter', counter);
+        function addDeleteLink($prototype) {
+            // Création du lien
+            let $deleteLink = $('<a href="#"><i class="fa fa-trash fa-lg" style="color:Tomato;"></i></a>');
+    
+            // Ajout du lien
+            $prototype.find(":input").after($deleteLink);
+    
+            // Ajout du listener sur le clic du lien pour effectivement supprimer la catégorie
+            $deleteLink.click(function(e) {
+                $prototype.remove();
+    
+                e.preventDefault(); // évite qu'un # apparaisse dans l'URL
+                return false;
+            });
+        }
 
-        // create a new list element and add it to the list
-        var newElem = jQuery(list.attr('data-widget-tags')).html(newWidget);
-        newElem.appendTo(list);
-    });
-});
+        this.each(function() {
+            // Chemin pour la requête
+            var chemin = $(this).data('path');
+
+            // On récupère le fieldset pour ajouter les delete-link aux éléments existants
+            var $container = $($(this).attr("data-list-selector"));
+            $li = $container.find('li');
+            $li.each(function() {
+                $(this).find(':input').prop("readonly", true);
+                addDeleteLink($(this));
+            })
+      
+            $(this).click(function(e) {
+                e.preventDefault();
+                var list = jQuery(jQuery(this).attr('data-list-selector'));
+                // Try to find the counter of the list or use the length of the list
+                var counter = list.data('widget-counter') | list.children().length;
+
+                // grab the prototype template
+                var newWidget = list.attr('data-prototype');
+                // replace the "__name__" used in the id and name of the prototype
+                // with a number that's unique to your emails
+                // end name attribute looks like name="contact[emails][2]"
+                newWidget = newWidget.replace(/__name__/g, counter);
+                // Increase the counter
+                counter++;
+                // And store it, the length cannot be used if deleting widgets is allowed
+                list.data('widget-counter', counter);
+                // create a new list element and add it to the list
+                var newElem = jQuery(list.attr('data-widget-tags')).html(newWidget);
+                
+                requete (chemin, function(output) {
+                    newElem.find(':input').autocomplete({
+                        source: output
+                    });
+                })
+                
+                addDeleteLink(newElem);
+
+                newElem.appendTo(list);
+            })
+        })
+    }
+
+})(jQuery);

+ 4 - 1
assets/js/app.js

@@ -13,12 +13,15 @@ import 'bootstrap-star-rating/css/star-rating.css';
 import 'bootstrap-star-rating/themes/krajee-fa/theme';
 import 'bootstrap-star-rating/themes/krajee-fa/theme.css';
 
-import './suivifilms2.js';
+import './suivifilms2';
+import './addCollectionWidget';
 
 $(document).ready(function() {
     $(function() {
         $('[data-toggle="tooltip"]').tooltip();
 
+        $('.add-another-collection-widget').addCollection();
+
         $('[data-fonction="follow"]').follow();
         $('[data-fonction="seen"]').seen();
 

+ 0 - 99
assets/js/collectiontypeadd.js

@@ -1,99 +0,0 @@
-function requete(chemin, nomDuDiv, nomDuBouton) {
-    $.ajax({
-        url: chemin,
-        type: 'POST',
-        dataType: 'json',
-        success: function (reponse) {
-            let reponseArray = parseJson(reponse);
-            collections(reponseArray, nomDuDiv, nomDuBouton);
-        }
-    })
-}
-
-function parseJson(data) {
-    let tableau = [];
-    for (let i = 0; i < data.length; i++) {
-        let UnObjetJson = data[i];
-        let obj = JSON.parse(UnObjetJson);
-        sortie = Object.values(obj)
-        tableau.push(sortie[0]);
-    }
-    return tableau;
-}
-
-function collections (reponse, nomDuDiv, nomDuBouton) {
-
-    // On récupère la balise <div> en question qui contient l'attribut « data-prototype » qui nous intéresse.
-    let $container = $('div#'+nomDuDiv);
-
-    // On définit un compteur unique pour nommer les champs qu'on va ajouter dynamiquement
-    let index = $container.find(':input').length;
-
-    // On ajoute un nouveau champ à chaque clic sur le lien d'ajout.
-    $('#'+nomDuBouton).click(function(e) {
-        addConteneur($container);
-
-        e.preventDefault(); // évite qu'un # apparaisse dans l'URL
-        return false;
-    });
-
-    // On ajoute un premier champ automatiquement s'il n'en existe pas déjà un (cas d'une nouvelle annonce par exemple).
-    if (index == 0) {
-    } else {
-        // S'il existe déjà des catégories, on ajoute un lien de suppression pour chacune d'entre elles
-        $container.children('fieldset').each(function() {
-            $container.find(':input').prop("readonly",  true);
-            $container.find(':input').autocomplete({
-                source: reponse
-            });
-
-            addDeleteLink($(this));
-        });
-    }
-
-    // La fonction qui ajoute un formulaire RealisateurType
-    function addConteneur($container) {
-        // Dans le contenu de l'attribut « data-prototype », on remplace :
-        // - le texte "__name__label__" qu'il contient par le label du champ
-        // - le texte "__name__" qu'il contient par le numéro du champ
-        let template = $container.attr('data-prototype')
-            .replace(/__name__label__/g, '')
-            .replace(/__name__/g,        index)
-        ;
-
-        // On crée un objet jquery qui contient ce template
-        let $prototype = $(template);
-
-        // On ajoute au prototype un lien pour pouvoir supprimer la catégorie
-        addDeleteLink($prototype);
-
-        // On ajoute le prototype modifié à la fin de la balise <div>
-        $container.append($prototype);
-        $container.find(':input').autocomplete({
-            source: reponse
-        });
-
-        // Enfin, on incrémente le compteur pour que le prochain ajout se fasse avec un autre numéro
-        index++;
-    }
-
-    // La fonction qui ajoute un lien de suppression d'une catégorie
-    function addDeleteLink($prototype) {
-        // Création du lien
-        //let $deleteLink = $('<a href="#" class="btn btn-danger">Supprimer</a>');
-        let $deleteLink = $('<a href="#"><i class="fa fa-trash fa-lg" style="color:Tomato;"></i></a>');
-
-        // Ajout du lien
-        $prototype.append($deleteLink);
-
-        // Ajout du listener sur le clic du lien pour effectivement supprimer la catégorie
-        $deleteLink.click(function(e) {
-            $prototype.remove();
-
-            e.preventDefault(); // évite qu'un # apparaisse dans l'URL
-            return false;
-        });
-    }
-}
-
-

+ 66 - 0
assets/js/suivifilms2.js

@@ -0,0 +1,66 @@
+(function ($) {
+    $.fn.follow = function () {
+        this.each(function() {
+            $(this).click(function(e) {
+                e.preventDefault();
+                let $icone = $(this).children('i');
+                let contenu = $(this).data('content');
+                let iconeEtatUn = $(this).data('icactif');
+                let iconeEtatDeux = $(this).data('icinactif');
+                let chemin = $(this).data('path');
+                $.ajax({
+                    type: 'POST',
+                    url: chemin,
+                    data: 'id_film=' + contenu,
+                    success: function (data) {
+                        console.log(chemin);
+                        if ($icone.attr('class') === iconeEtatUn) {
+                            $icone.attr('class', iconeEtatDeux);
+                        } else {
+                            $icone.attr('class', iconeEtatUn);
+                        }
+                        return;
+                    },
+                    complete: function () {
+
+                    }
+                })
+            })
+        })
+    }
+})(jQuery);
+
+(function ($) {
+    $.fn.seen = function () {
+        this.each(function() {
+            $(this).click(function(e) {
+                e.preventDefault();
+                let $icone = $(this).children('i');
+                let contenu = $(this).data('content');
+                let couleurNeutre = $(this).data('neutre');
+                let couleurVu = $(this).data('vu');
+                let couleurPasVu = $(this).data('pasvu');
+                let chemin = $(this).data('path');
+                $.ajax({
+                    type: 'POST',
+                    url: chemin,
+                    data: 'id_film=' + contenu,
+                    success: function (data) {
+                        console.log(chemin);
+                        if ($icone.attr('class') === couleurNeutre) {
+                            $icone.attr('class', couleurPasVu);
+                            $icone.next().attr('class', couleurNeutre);
+                        } else {
+                            $icone.attr('class', couleurNeutre);
+                            $icone.next().attr('class', couleurVu);
+                        }
+                        return;
+                    },
+                    complete: function () {
+
+                    }
+                })
+            })
+        })
+    }
+})(jQuery);

+ 1 - 14
templates/videotheque/ajouter.html.twig

@@ -2,20 +2,7 @@
 
 {% block title %}Ajouter un titre{% endblock %}
 {% block titre %}Ajouter un film{% endblock %}
-{% block stylesheets %}
-	{{ encore_entry_link_tags('tags') }}
-{% endblock %}
+
 {% block body %}
 	{{ include('videotheque/form.html.twig') }}
 {% endblock %}
-{% block javascripts %}
-	{{ encore_entry_script_tags('tags') }}
-	{#<script src="{{ asset('/bundles/app/assets/collectiontypeadd.js') }}"></script>#}
-	{#<script>
-		$(document).ready(function () {
-		    requete('{{ path('videotheque_ajax_realisateurs') }}', 'appbundle_film_realisateurs', 'add_realisateur');
-		    requete('{{ path('videotheque_ajax_genres') }}', 'appbundle_film_genres', 'add_genre');
-        });
-	</script>
-	#}
-{% endblock %}

+ 25 - 7
templates/videotheque/form.html.twig

@@ -21,11 +21,20 @@
                         {{ form_label(form.genres, 'Genres') }}
                     </div>
                     <div class="card-body">
-                        {#<a href="#" id="add_genre" class="btn btn-link">Ajouter un genre</a>#}
-                        <div class="form-inline">
+                        <a href="#" id="add_genre" class="btn btn-link add-another-collection-widget" data-path="{{ path('videotheque_ajax_genres') }}" data-list-selector="#genre-fields-list">Ajouter un genre</a>
+                        <ul id="genre-fields-list" class="form-inline"
+                            data-prototype="{{ form_widget(form.genres.vars.prototype)|e }}"
+                            data-widget-tags="{{ '<li class="list-group-item"></li>'|e }}"
+                            data-widget-counter="{{ form.children|length }}">
+                            {% for genreField in form.genres %}
+                            <li class="list-group-item">
+                                {{ form_errors(genreField) }}
+                                {{ form_widget(genreField) }}
+                            </li>
+                            {% endfor %}
                             {{ form_errors(form.genres) }}
                             {{ form_widget(form.genres) }}
-                        </div>
+                        </ul>
                     </div>
                 </div>
             </div>
@@ -35,11 +44,20 @@
                         {{ form_label(form.realisateurs, 'Réalisateurs') }}
                     </div>
                     <div class="card-body">
-                        <a href="#" id="add_realisateur" class="btn btn-link">Ajouter un réalisateur</a>
-                        <div class="form-inline">
+                        <a href="#" id="add_realisateur" class="btn btn-link add-another-collection-widget" data-path="{{ path('videotheque_ajax_realisateurs') }}" data-list-selector="#realisateur-fields-list">Ajouter un réalisateur</a>
+                        <ul id="realisateur-fields-list" class="form-inline"
+                            data-prototype="{{ form_widget(form.realisateurs.vars.prototype)|e }}"
+                            data-widget-tags="{{ '<li class="list-group-item"></li>'|e }}"
+                            data-widget-counter="{{ form.children|length }}">
+                            {% for realisateurField in form.realisateurs %}
+                            <li class="list-group-item">
+                                {{ form_errors(realisateurField) }}
+                                {{ form_widget(realisateurField) }}
+                            </li>
+                            {% endfor %}
                             {{ form_errors(form.realisateurs) }}
-                            {{ form_widget (form.realisateurs) }}
-                        </div>
+                            {{ form_widget(form.realisateurs) }}
+                        </ul>
                     </div>
                 </div>
 

+ 2 - 11
templates/videotheque/modifier.html.twig

@@ -4,15 +4,6 @@
 {% block titre %}Modifier un film{% endblock %}
 
 {% block body %}
-	{{  include('videotheque/form.html.twig') }}
-{% endblock %}
-{% block javascripts %}
-	{#<script src="{{ asset('/bundles/app/assets/collectiontypeadd.js') }}"></script>
-	<script>
-        $(document).ready(function () {
-            requete('{{ path('videotheque_ajax_realisateurs') }}', 'appbundle_film_realisateurs', 'add_realisateur');
-            requete('{{ path('videotheque_ajax_genres') }}', 'appbundle_film_genres', 'add_genre');
-        });
-	</script>
-    #}
+	{{ include('videotheque/form.html.twig') }}
 {% endblock %}
+