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

Last change on this file since 115409 was 105016, checked in by marcimat@…, 4 years ago

La version 2.4+ ne sera compatible que SPIP 3.2. On évite de conserver du code obsolète dans la Fabrique.

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