Projet

Général

Profil

Development #16658

Les formulaires chargés en popup ne fonctionnent pas bien si ils dépendend de librairies JS chargées dans le <head/> (ou en fait n'importe où en dehors du contenu de <form/>

Ajouté par Benjamin Dauvergne il y a presque 7 ans. Mis à jour il y a presque 7 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
01 juin 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

En effet jQuery n’interprète les balises script qu'une fois celles-ci insérées dans le document principal.


Fichiers

Révisions associées

Révision b9c8cfae (diff)
Ajouté par Benjamin Dauvergne il y a presque 7 ans

gadjo.js: load script tag in displayPopup (#16658)

It allows forms using JS widgets to be loaded using link with rel="popup".

Historique

#1

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

Problème visible sur le CUT où on utilise boostrap datetimepicker dans la vue d'édition des utilisateurs Authentic. J'ai fait un premier fix qui a été d'ajouter une balise {{ media.js }} dans mon <form/> mais c'est plus propre ainsi je trouve.

#2

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

  • Patch proposed changé de Oui à Non

Ça ne suffit pas, il faut attendre que les scripts soient tous chargés avec des deferred :/

#3

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

Patch qui fonctionne, j'ajoute un timeout entre la fin du chargement de tous les scripts et la création du dialogue, sinon l'exécution des scripts chargés n'est pas effective. Aussi je vérifie si les scripts n'ont pas déjà été chargés par une balise <script/> avec le même attribut src.

#4

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

.git/rebase-apply/patch:80: trailing whitespace.
                      close: function (ev, ui) { 
.git/rebase-apply/patch:81: trailing whitespace.
                        $(this).dialog('destroy'); 

(j'imagine que les espaces étaient déjà là mais comme les lignes changent, c'est l'occasion de corriger ça)

Ok avec ajout de quelques commentaires, genre :

+               /* load additional scripts from popup */
                var $script = $html.filter('script[src]');
                var loading = [];
                for (var i = 0; i < $script.length; i++) {
+               /* add millisecond timeout to let additional scripts load */
                $.when(loading, deferred_timeout(1)).always(function () {
#5

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

Modifications appliquées:

diff --git a/gadjo/static/js/gadjo.js b/gadjo/static/js/gadjo.js
index 6206f88..fda019c 100644
--- a/gadjo/static/js/gadjo.js
+++ b/gadjo/static/js/gadjo.js
@@ -114,6 +114,7 @@ var gadjo_js = gadjo_js || {};
                     var html = html;
                 }
                 var $html = $(html);
+                /* load additional scripts from popup */
                 var $script = $html.filter('script[src]');
                 var loading = [];
                 for (var i = 0; i < $script.length; i++) {
@@ -133,7 +134,8 @@ var gadjo_js = gadjo_js || {};
                         success: function () {},
                     }));
                 }
-                $.when(loading, deferred_timeout(1)).always(function () {
+                /* add millisecond timeout to let additional scripts load */
+                $.when(loading, deferred_timeout(100)).always(function () {
                     /* get content and form (if different) ouf of html */
                     var $content = $html.find(selector);
                     if ($content.is('form')) {
@@ -149,8 +151,8 @@ var gadjo_js = gadjo_js || {};
                       modal: modal,
                       'title': title,
                       width: 'auto',
-                      close: function (ev, ui) { 
-                        $(this).dialog('destroy'); 
+                      close: function (ev, ui) {
+                        $(this).dialog('destroy');
                       },
                     });

Je pousse.

#6

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

  • Statut changé de Nouveau à Solution déployée

Formats disponibles : Atom PDF