source: spip-zone/_plugins_/fabrique/trunk/javascript/formulaire_fabrique.js.html @ 69999

Last change on this file since 69999 was 69999, checked in by marcimat@…, 7 years ago

Mise à jour des accordions, et correction de notices PHP

File size: 5.7 KB
Line 
1(function($) {
2$(document).ready(function(){
3
4        function formulaire_fabrique_interactions($is_ajax) {
5                /* Cette variable permet de savoir si on est en ajax, et si du coup il nous faudra repositionner
6                   le navigateur. On dit que la variable est a true par defaut
7                   (plus pratique pour l'appel de onAjaxLoad)
8                */
9                if (typeof $is_ajax == 'undefined') {
10                        $is_ajax = true;
11                }
12
13                /* Faire remonter les erreurs sur l'accordion et l'onglet */
14                $(".formulaire_fabriquer_plugin .sous_parties li.erreur").closest('div')
15                        .prev('h4').addClass('erreur')
16                        .closest('.sous_parties').prev('h3').addClass('erreur')
17                        .closest('.parties').parent().parent().each(function(){
18                                id = $(this).attr('id');
19                                $('#tabs .tabs a[href=#' + id + ']').parent().addClass('erreur');
20                        });
21                $(".formulaire_fabriquer_plugin .parties li.erreur").closest('div')
22                        .prev('h3').addClass('erreur')
23                        .parent().parent().each(function(){
24                                id = $(this).attr('id');
25                                $('#tabs .tabs a[href=#' + id + ']').parent().addClass('erreur');
26                        });
27
28                /* Deplier ou replier le diff */
29                $(".formulaire_fabriquer_plugin .reponse_formulaire_diff").find('>div.diff').hide();
30                $(".formulaire_fabriquer_plugin .reponse_formulaire_diff h4").click(function(){
31                        $(this).parent().find('>div').toggle();
32                });
33
34
35                /* Installer les onglets et accordions */
36                basket.require({url: "#CHEMIN{javascript/ui/jquery.ui.core.js}"}).then(function(){
37                basket.require({url: "#CHEMIN{javascript/ui/jquery.ui.widget.js}"}).then(function(){
38                basket.require({url: "#CHEMIN{javascript/ui/jquery.ui.mouse.js}"}).then(function(){
39                        basket.require(
40                                {url: "#CHEMIN{javascript/ui/jquery.ui.tabs.js}"},
41                                {url: "#CHEMIN{javascript/ui/jquery.ui.accordion.js}"},
42                                {url: "#CHEMIN{javascript/ui/jquery.ui.sortable.js}"}
43                        )
44                        .then(function(){
45                                /*
46                                        ACCORDION avant TABS sinon la largeur de
47                                        l'accordion actif (autre que le premier)
48                                        est mal calcule sur un onglet caché
49
50                                        Pour les accordions & tabs, on sauve
51                                        le dernier ouvert, et on ouvre ceux la
52                                        au chargement de la page
53                                */
54                                if ($.fn.accordion) {
55                                        $("#tabs > div > .parties").accordion({
56                                                collapsible: true,
57                                                autoHeight: false,
58                                                navigation: true,
59                                                create: function(event, ui) {
60                                                        tab_id = $(this).attr('id').substring(7);
61                                                        i = Number($("#open_accordion_" + tab_id).val())
62                                                        $(this).accordion("option", "active", i);
63
64                                                },
65                                                activate: function(event, ui) {
66                                                        tab_id = $(this).attr('id').substring(7);
67                                                        console.log(ui);
68                                                        $('#open_accordion_' + tab_id).val( $(this).accordion('option', 'active') );
69                                                }
70                                        });
71
72                                        $("#tabs > div > .parties .parties").accordion({
73                                                collapsible: true,
74                                                autoHeight: false,
75                                                navigation: true,
76                                                active: false,
77                                                header: '> div > h4'
78                                        })
79                                        .sortable({
80                                                axis: "y",
81                                                handle: "h4",
82                                                stop: function( event, ui ) {
83                                                        // IE doesn't register the blur when sorting
84                                                        // so trigger focusout handlers to remove .ui-state-focus
85                                                        ui.item.children( "h4" ).triggerHandler( "focusout" );
86                                                },
87                                                update: function(event, ui) {
88                                                        tab = ui.item.parent().data('tab');
89                                                        var champOrder = $(this).sortable('toArray').toString();
90                                                        form = $(this).closest('form');
91                                                        form.find('div:first')
92                                                                .prepend('<input type="hidden" name="f_action[champorder][' + tab + ']" value="'+ champOrder + '">');
93                                                        form.submit();
94                                                }
95                                        });
96                                }
97                               
98                                if ($.fn.tabs) {
99                                        $("#tabs").tabs({
100                                                        selected: $('#open_tab').val(),
101                                                        select: function(event, ui) {
102                                                                $('#open_tab').val(ui.index);
103                                                        },
104                                                        create: function(event, ui) {
105                                                                /* Se remettre en haut du formulaire après un coup d'ajax
106                                                                   Ce que fait SPIP habituellement, mais accordion() et tabs()
107                                                                   arrivent après et les navigateurs se décalent
108                                                                */
109                                                                if ($is_ajax) {
110                                                                        $('.formulaire_fabriquer_plugin').positionner(false);
111                                                                }
112                                                        }
113                                                })
114                                                .find( ".ui-tabs-nav" ).sortable({
115                                                        axis: "x",
116                                                        update: function(event, ui) {
117                                                                var tabOrder = $(this).sortable('toArray').toString();
118                                                                form = $(this).closest('form');
119                                                                form.find('div:first')
120                                                                        .prepend('<input type="hidden" name="f_action[taborder]" value="' + tabOrder + '">');
121                                                                form.submit();
122                                                        }
123                                                });
124                                }
125                        })
126                })})});
127
128                <BOUCLE_skeleditor(CONDITION){si #PLUGIN{skeleditor}}>
129                /* un peu de coloration syntaxique */
130                $(".colorier textarea").focus(function() {
131                        if (!$(this).data('coloriage')) {
132                                code = $(this).closest('ul').data('code');
133                                fabrique_coloriage(this, code);
134                                $(this).data('coloriage', 1);
135                        }
136                });
137
138                function fabrique_coloriage(textarea, code) {
139                        basket.require({url: "#CHEMIN{codemirror/lib/codemirror.js}"}).then(function(){
140                        basket.require({url: "#CHEMIN{codemirror/mode/xml/xml.js}"}).then(function(){
141                        basket.require(
142                                {url: "#CHEMIN{codemirror/mode/javascript/javascript.js}"},
143                                {url: "#CHEMIN{codemirror/mode/css/css.js}"},
144                                {url: "#CHEMIN{codemirror/mode/clike/clike.js}"}).then(function(){
145                        basket.require({url: "#CHEMIN{codemirror/mode/php/php.js}"}).then(function(){
146                                        var cm_options = {
147                                                lineNumbers: true,
148                                                matchBrackets: true,
149                                                indentUnit: 4,
150                                                tabSize: 4,
151                                                indentWithTabs: true,
152                                                enterMode: "keep",
153                                                tabMode: "shift",
154                                                width: "95%",
155                                                minHeight: 60
156                                        };
157
158                                        if (code.length) {
159                                                cm_options.mode = code;
160                                                /* Ouvrir automatiquement les scripts PHP */
161                                                if (code == 'php') {
162                                                        cm_options.mode = 'text/x-php';
163                                                }
164                                        }
165                                        CodeMirror.fromTextArea(textarea, cm_options);
166                        })})})});
167                }
168                </BOUCLE_skeleditor>
169
170        }
171
172
173        formulaire_fabrique_interactions(false); /* ici, on n'est pas ajax */
174        onAjaxLoad(formulaire_fabrique_interactions);
175
176});
177})(jQuery);
Note: See TracBrowser for help on using the repository browser.