d3bc0931e5f8c530252dd70d9e574b3488dd835b
[lhc/web/www.git] / www / plugins / saisies / formulaires / construire_formulaire.html
1 <div class="formulaire_spip formulaire_editer formulaire_#ENV{form}[ (#ENV{formulaire_modifie}|oui) modifie]">
2 [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
3 <p id="message_attention" class="message_reinitialiser reponse_formulaire reponse_formulaire_ok">#ENV*{_message_attention}</p>
4 [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
5
6 <BOUCLE_editable(CONDITION){si #ENV{editable}|oui}>
7 <form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
8 [(#REM) declarer les hidden qui declencheront le service du formulaire
9 parametre : url d'action ]
10 #ACTION_FORMULAIRE{#ENV{action}}
11 <input type="submit" class="submit noscroll invisible" name="enregistrer" value="<:bouton_enregistrer:>" />
12
13 <[(#DIV|sinon{ul})] class="editer-groupe" id="deplacable">
14
15 <[(#DIV|sinon{li})] id="reinitialiser" class="actions_formulaire">
16 <button type="submit" class="submit" name="reinitialiser" value="oui" onclick="return confirm('<:saisies:construire_reinitialiser_confirmer:>')">
17 <img src="#CHEMIN{images/formulaire-reinitialiser-24.png}" alt="" />
18 <:saisies:construire_reinitialiser:>
19 </button>
20 </[(#DIV|sinon{li})]>
21
22 [(#REM)<!-- les choix de saisies -->]
23 <BOUCLE_contenu(DATA){source tableau, #ENV{_contenu}}>
24 [(#VAL{saisie}|array_key_exists{#VALEUR}|oui)
25 [(#VALEUR**|construire_formulaire_generer_saisie_configurable{#ENV**|unserialize})]
26 ]
27 </BOUCLE_contenu>
28 <[(#DIV|sinon{li})] class="aucun"><em class="attention"><:saisies:construire_aucun_champs:></em></[(#DIV|sinon{li})]>
29 <//B_contenu>
30
31 <B_saisies_disponibles>
32 <[(#DIV|sinon{li})] class="editer haut saisies_disponibles" id="attrapable">
33 <label><:saisies:construire_ajouter_champ:></label>
34 <BOUCLE_saisies_disponibles(DATA){source tableau, #ENV{_saisies_disponibles}}{par titre}>
35 <button type="submit" name="ajouter_saisie" value="#CLE" class="submit noscroll ajouter_saisie"[ title="(#DESCRIPTION)"] [style="background-image:url((#ICONE|sinon{#CHEMIN{images/formulaire-saisie-defaut.png}}))"]>
36 <span>#TITRE</span>
37 </button>
38 </BOUCLE_saisies_disponibles>
39 </[(#DIV|sinon{li})]>
40 </B_saisies_disponibles>
41
42 <B_saisies_groupes_disponibles>
43 <[(#DIV|sinon{li})] class="editer haut saisies_groupes_disponibles" id="attrapable_bis">
44 <label><:saisies:construire_ajouter_groupe:></label>
45 <BOUCLE_saisies_groupes_disponibles(DATA){source tableau, #ENV{_saisies_groupes_disponibles}}{par titre}>
46 <button type="submit" name="ajouter_groupe_saisie" value="#CLE" class="submit noscroll ajouter_saisie"[ title="(#DESCRIPTION)"] [style="background-image:url((#ICONE|sinon{#CHEMIN{images/formulaire-saisie-defaut.png}}))"]>
47 <span>#TITRE</span>
48 </button>
49 </BOUCLE_saisies_groupes_disponibles>
50 </[(#DIV|sinon{li})]>
51 </B_saisies_groupes_disponibles>
52
53 </[(#DIV|sinon{ul})]>
54
55
56 [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
57 <!--extra-->
58
59 <span class='image_loading'></span>
60 </div></form>
61
62 <style>
63 .message_reinitialiser,#reinitialiser {display: none}
64 .modifie .message_reinitialiser,.modifie #reinitialiser {display: block}
65 </style>
66 <script type="text/javascript">
67 (function($){
68
69 function formulaire_configurer_onglets() {
70 var $formulaire_configurer = $('.formulaire_configurer');
71 var $onglets = $('<ul class="formulaire_configurer-onglets"></ul>');
72 var $contenus = $formulaire_configurer.find('> .editer-groupe > .fieldset');
73
74 // On ajoute le conteneur des onglets
75 $formulaire_configurer.prepend($onglets);
76
77 // On parcourt les contenus pour générer les onglets
78 $contenus.each(function(i){
79 // On ajoute un identifiant et une classe
80 $(this)
81 .attr('id', 'formulaire_configurer-contenu-'+i)
82 .addClass('formulaire_configurer-contenu');
83 // On récupère le titre (en le cachant au passage)
84 var titre = $(this).find('[(#VAL{"{{{ titre }}}"}|propre|replace{"\n",""}|replace{"<(\S*).*>",$1,i})]').eq(0).hide().text();
85
86 // On crée un onglet
87 var $onglet = $('<li><a href="#formulaire_configurer-contenu-'+i+'">'+titre+'</a></li>');
88 $onglet
89 .click(function(){
90 $contenus.hide();
91 $(
92 $(this)
93 .siblings()
94 .removeClass('actif')
95 .end()
96 .addClass('actif')
97 .find('a')
98 .attr('href')
99 ).show();
100 return false;
101 });
102
103 // On active le premier onglet au démarrage
104 if (i == 0) {
105 $onglet.addClass('actif');
106 }
107
108 // S'il y a des erreurs dans cette partie du contenu, on met une classe "erreurs" à l'onglet aussi
109 if ($(this).find('.editer.erreur').length > 0) {
110 $onglet.addClass('erreur');
111 }
112
113 // On ajoute l'onglet
114 $onglets.append($onglet);
115 })
116 .hide()
117 .eq(0)
118 .show();
119 }
120
121 /* enlever les required */
122 $('.formulaire_#FORM .editer.obligatoire').find('input, textarea, select').each(function(){
123 if ($(this).prop('required')) {
124 $(this).prop('required', false);
125 }
126 });
127
128 $('.formulaire_#FORM .configurable')
129 .hover(
130 function(){
131 $(this)
132 .addClass('hover')
133 .find('> .actions')
134 .show()
135 .end()
136 .parents('li.configurable:not(.en_configuration)')
137 .mouseout();
138 },
139 function(){
140 if (!$(this).is('.en_configuration'))
141 $(this)
142 .removeClass('hover')
143 .find('> .actions')
144 .hide()
145 .end()
146 .parents('.configurable').eq('0')
147 .mouseover();
148 }
149 )
150 .filter(':not(.en_configuration)')
151 .find('> .actions')
152 .hide()
153 .end()
154 .end();
155
156 // On lance la création des onglets
157 formulaire_configurer_onglets();
158
159 // Gérer la liste des vérifications
160 $('.liste_verifications').each(function(){
161 var $options = $(this).siblings('.options_verifier').hide();
162 var $select = $(this).find('select');
163
164 $select
165 .change(function(){
166 var montrer = $(this).val() ? $(this).val() : 'soigfeg';
167 $options.hide().filter('.'+montrer).show();
168 })
169 .change();
170 });
171
172 // On déplie toujours les fieldsets plés par défaut
173 $('.fieldset.plie').each(function(){
174 $(this)
175 .removeClass('plie')
176 .find('> fieldset > .editer-groupe').show();
177 });
178
179 [(#ENV{erreurs}|non|et{#ENV{_jquery_ui_all}|ou{#ENV{_chemin_ui}}})
180 var saisies_sortable = function() {
181 $( "#deplacable, #deplacable .editer-groupe" ).sortable({
182 revert: true,
183 containment: '#deplacable',
184 connectWith: "#deplacable, #deplacable .editer-groupe",
185 placeholder: "ui-state-highlight",
186 handle: '>.actions .deplacer_saisie',
187 start: function(event, ui) {
188 $('.ui-state-highlight')
189 .css('height', ui.item.css('height'))
190 .css('height', '+=20px');
191 },
192 update: function(event, ui) {
193 id = ui.item.data('id');
194 ou = ui.item.next().data('id');
195 // avant le suivant
196 if (!ou) {
197 // sinon dans le parent
198 ou = ui.item.closest('.fieldset').data('id');
199 if (ou) {
200 ou = '\[' + ou + '\]';
201 }
202 }
203 url = "#URL_ECRIRE";
204 $.get(url, {
205 session: '#ENV{_identifiant_session}',
206 action: 'deplacer_saisie',
207 saisie: id,
208 ou: ou
209 }, function() {
210 //$('input.vide').submit();
211 $('.formulaire_#ENV{form}').addClass('modifie').trigger('modifsaisies');
212 });
213 }
214 });
215 }
216 if (!$.fn.sortable) {
217 [
218 $.getScript("(#ENV{_jquery_ui_all})", function(){
219 ]
220 [(#ENV{_chemin_ui}|oui)
221 $.getScript("#CHEMIN{#ENV{_chemin_ui}core.js}", function(){
222 $.getScript("#CHEMIN{#ENV{_chemin_ui}widget.js}", function(){
223 $.getScript("#CHEMIN{#ENV{_chemin_ui}mouse.js}", function(){
224 $.getScript("#CHEMIN{#ENV{_chemin_ui}sortable.js}", function(){
225 ]
226 if ($.fn.sortable) {
227 saisies_sortable();
228 }
229 });
230 [(#ENV{_chemin_ui}|oui)
231 });});});
232 ]
233 } else {
234 saisies_sortable();
235 }
236 ]
237
238 })(jQuery);
239 </script>
240 </BOUCLE_editable>
241 </div>