Projet

Général

Profil

Development #16419

declencher un evenement quand le formulaire de parametrage d'une cellule est configuré

Ajouté par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans. Mis à jour il y a plus de 6 ans.

Statut:
Fermé
Priorité:
Normal
Version cible:
-
Début:
20 mai 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Il s'agit des cas ou une action javascript doit avoir lieu après la soumission du formulaire d'une cellule.
Par exemple dans le cadre d'une cellule affichant une carte (ticket #8454) pour qu'après la soumission du formulaire la carte reste toujours visible il faut lancer la machinerie leaflet après le rechargement.


Fichiers


Demandes liées

Lié à Combo - Development #8454: Possibilité d'afficher une carte OSMFermé01 octobre 2015

Actions

Révisions associées

Révision da590a77 (diff)
Ajouté par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans

manager: trigger js event when cell form reloaded (#16419)

Historique

#1

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans

#3

Mis à jour par Thomas Noël il y a presque 7 ans

Il faut déclencher le trigger lors du success en général (juste après le $button.attr('disabled', null);

Bon, je suis pas à l'aise en JS, mais je pense que quand tu déclenches un trigger, tu peux le faire sur un objet et envoyer des données. Ici tu le fais sur tout le document et sans rien préciser, et on voit dans le code de #8454 que tu fais un vaste « $(window).on('load combo:cellform-reload', function() { $('div.combo-cell-map').each(function() ... »

Donc j'aurais plutôt imaginé un $form.parents('div.cell').trigger('combo:combo-cell-saved'); ajouté après la ligne 173 ($button.attr('disabled', null);)

Et dans ce cas, tu dois récupérer le signal avec quelque chose dans ce genre dans le code de #8454 :
$('.combo-cell-map').on('combo:combo-cell-saved', et que vazy redessine la map)

(mais vraiment je suis pas à l'aise, je préférerai l'avis d'un tiers, j'ai juste l'impression qu'avec ta technique, on redessine toute les cartes trouvées sur la page, et pas juste celle qu'on vient d'enregistrer)

#4

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans

D'accord avec toi, mais à mon avis signal doit être envoyé après que le formulaire soit rechargé, pour que la fonction qui écoute le trigger puisser réagir.

#5

Mis à jour par Thomas Noël il y a presque 7 ans

Serghei Mihai a écrit :

D'accord avec toi, mais à mon avis signal doit être envoyé après que le formulaire soit rechargé, pour que la fonction qui écoute le trigger puisser réagir.

En fait ce qui me "dérange" c'est que ça va pas être envoyé si y'a du ckeditor, donc je parlais surtout d'envoyer le signal en dehors du «if (data.indexOf('ckeditortype') == -1)». Mais ça peut effectivement être fait à la fin du "success".

#7

Mis à jour par Thomas Noël il y a presque 7 ans

Bon je termine sur "combo:cellform-reload", pour moi un nom de signal ce n'est pas le nom de l'action qui doit être faite (ça c'est le receveur qui décide) mais plutôt l'action qui vient d'être faite. Donc ici plutôt "combo:cellform-saved"

#8

Mis à jour par Frédéric Péters il y a presque 7 ans

(la description du ticket peut-elle être étendue sur un exemple d'application ? c'est assez abstrait pour le moment).

#9

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans

Thomas Noël a écrit :

Bon je termine sur "combo:cellform-reload", pour moi un nom de signal ce n'est pas le nom de l'action qui doit être faite (ça c'est le receveur qui décide) mais plutôt l'action qui vient d'être faite. Donc ici plutôt "combo:cellform-saved"

Il y a également le cas ou le formulaire est re-affiché avec les messages d'erreur, genre un champ est vide ou pas valide, et n'est pas sauvegardé (mais rechargé).
Je propose baptiser l'evenement combo:cellform-reloaded

#10

Mis à jour par Thomas Noël il y a presque 7 ans

Frédéric Péters a écrit :

(la description du ticket peut-elle être étendue sur un exemple d'application ? c'est assez abstrait pour le moment).

En fait j'ai demandé à Serghei d'extraire ce signal du patch de la cellule carte sur #8454. On y voit donc là bas un exemple d'utilisation de ce signal, qui s'occupe de relancer la machinerie leaflet après que l'utilisateur a cliqué sur "enregistré" ; sinon la carte devient un vide. Et comme Serghei n'a pas trouvé de signal existant, il propose d'ajouter celui-ci.

#11

Mis à jour par Frédéric Péters il y a presque 7 ans

Je pense que j'aurais une préférence pour qu'une partie <script> présente dans un ajax_whatever_form.html d'une cellule soit automatiquement exécuté.

Ça demande une modification à PageEditCellView pour qu'il regarde si un template spécifique existe (plutôt que prendre ajax_cell_form.hmtl en toute situation), et à cell_form.html (utilisé pour le rendu initial) pour également utiliser celui-ci (plutôt qu'hardcoder form.as_p).

Je pense que ce n'est pas trop compliqué et que ça nous laissera du code plus facile à maintenir (pas toujours facile de suivre les événements js).

Alternativement l'approche prise dans #7344 (pour la cellule gallerie, pas intégrée) était d'utiliser l'existant attribut manager_form_template pour avoir le propre template de rendu, avec le <script> dedans (mais c'était il y a longtemps, pas sûr du fonctionnement avec le rechargement ajax via le bouton save, pas sur en fait que le bouton save ait été utile dans cette cellule.

Cela étant, vu qu'il y a déjà dix commentaires pour un patch d'une ligne (parce que je dirais de virer la construction $.Event() et d'utiliser une chaine directement dans l'appel .trigger()), peut-être est-il bon d'en rester là.

#12

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans

Frédéric Péters a écrit :

Cela étant, vu qu'il y a déjà dix commentaires pour un patch d'une ligne (parce que je dirais de virer la construction $.Event() et d'utiliser une chaine directement dans l'appel .trigger()), peut-être est-il bon d'en rester là.

Je suis pour en rester là.

#13

Mis à jour par Thomas Noël il y a presque 7 ans

Ack

(mais oui pour passer à terme à la solution de Fred qui ajouter en plus de la souplesse dans l'affichage des espace de configuration des cellules)

#14

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 7 ans

  • Statut changé de Nouveau à Résolu (à déployer)

Ok.

commit da590a77ae61401c33e12eccc8438aee5fbb336b
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Sat May 20 14:43:07 2017 +0200

    manager: trigger js event when cell form reloaded (#16419

#15

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a plus de 6 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF