pixelhumain / GoGoCartoJs

Javascript component to create terrific cartography !
https://pixelhumain.github.io/GoGoCartoJs/
GNU Affero General Public License v3.0
11 stars 4 forks source link

Gérer des images multiples pour un élément #14

Closed seballot closed 6 years ago

seballot commented 6 years ago

Pour l'instant, on ne gère qu'une seule image par élément. Si plusieurs sont fournies, on prend la première, et on affiche que celle là. L'idée serait d'avoir un petit carousel d'images : des flèches à gauche et à droite pour aller d'une image à l'autre. Enfin, ça serait cool d'avoir la possibilité de cliquer sur une image pour l'agrandir !

Tu peux utiliser les data element-single.js, il contient déjà un attribut avec plusieurs images.

1) Déclaration de l'attribut dans classe Element

// src/js/classes/element/element-base.class.ts line 48
image : string; 
// transformer en -> images : string[]

2) Récupération de l'attribut "image" du Json

// src/js/modules/element/element-json-loader.module.ts line 81
element.image = elementJson.image;
if (!element.image && elementJson.images && elementJson.images.length > 0) element.image = elementJson.images[0];

3) Affichage

// src/views/components/element/element.html.njk line 35
{% if element.image %}
    <div class="img-container">
      <img src="{{ element.image }}" class="gogo-img"/>
    </div>
  {% endif %}

4) Du javascript pour la gestion des images

Pour inclure du javascript, il faut aller voir le component InfoBarComponent (ctrl + P et taper le nom de la classe dans sublime).

Il y a une méthode show qui exécute du javascript une fois que le template element.html.twig a été chargé

$('#element-info').html(element.component.render()); ligne 93

Tu peux voir qu'il existe déjà une fonction verticalAlignImages, qui permet de centrer l'image verticalement.

5) Mise en forme

Niveau css, une recherche de '.img-container' te montre que ça se passe dans src/scss/components/element/_element.scss ligne 324. Et aussi dans _element-list.scss

seballot commented 6 years ago

Salut @regazzoj ! Merci pour le commit !

Je viens de tester, c'est cool pour le mode carte, en revanche cela ne fonctionne pas en mode liste :)

Pour l'ouverture de l'image dans un nouvel onglet, on pourrait plutôt faire une popup non? tu peux utiliser les "modals" de materialize (elle sont déjà pas mal utilisées dans le code) : http://archives.materializecss.com/0.100.2/modals.html#!

Tu peux regarder par exemple "share-element-url.html.njk"

Niveau design graphique, j'espère que tu le prendras pas mal mais je préfère gérer cette partie :) donc ne te prend pas trop la tête pour styliser les boutons etc, je passerai derrière pour le faire !

Bise !