source: spip-zone/_plugins_/ckeditor-spip-plugin/trunk/fonds/ckeditor4spip.js.html @ 70486

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

fix: certains pb d'instances ckeditor non supprimées (mais ça ne regle pas tout)
fix: pb lié aux fichiers ayant des extensions en maj plutot que minuscule
maj: ckeditor 3.6.6.1
maj: version 0.16.6

File size: 14.0 KB
Line 
1[(#CACHE{0})][(#HTTP_HEADER{Content-type: text/javascript[; charset=(#CHARSET)]})]
2<BOUCLE_si(CONDITION){si #SESSION{statut}|<{2}}>
3
4var ckeDataProcessor;
5var defined_ed = {} ; // liste les editeurs déjà définis - pour éviter les créations redondantes
6
7var sansConversion = [(#CONFIG{ckeditor/conversion}|=={'aucune'}|?{true,false})] ;
8if (sansConversion) {
9        spipDataProcessor={
10                toDataFormat:function(html, fixForBody){
11                        if(fixForBody) {
12                                return ckeDataProcessor.toDataFormat(html,fixForBody).replace(/<head[^>]*>(.|\r|\n)*<\/head>/, '').replace(/[\r\n\s]*<body[^>]*>[\r\n\s]*/, '').replace(/[\r\n\s]*<\/body>[\r\n\s]*/, '');
13                        } else {
14                                return ckeDataProcessor.toDataFormat(html,fixForBody) ;
15                        }
16                },
17                toHtml:function(data, fixForBody){
18                        if(fixForBody) {
19                                return '<html><head><title></title></head><body>'+ckeDataProcessor.toHtml(data.replace(/<html>/,'').replace(/<\/html>/, ''),fixForBody)+'</body></html>' ;
20                        } else {
21                                return ckeDataProcessor.toHtml(data,fixForBody);
22                        }
23                }
24        };
25} else {
26        spipDataProcessor={
27                toDataFormat:function(html, fixForBody){
28                        return $.ajax({url:CKEDITOR.spipurl+'?page=ckspip_convert',data:{text_area:html.replace(/<span\s+data-scayt[^>]*>\s*(.*?)\s*<\/span>/g,'$1'),cvt:'html2spip',fix:fixForBody},global:false,type:'POST',dataType:'text',async:false}).responseText;
29                },
30                toHtml:function(data, fixForBody){
31                        return $.ajax({url:CKEDITOR.spipurl+'?page=ckspip_convert',data:{text_area:data.replace(/<span\s+data-scayt[^>]*>\s*(.*?)\s*<\/span>/g,'$1'),cvt:'spip2html',fix:fixForBody},global:false,type:'POST',dataType:'text',async:false}).responseText;
32                }
33        };
34}
35
36function htmldecode(s){
37        return $('<div/>').html(s).text();
38}
39
40function HideSpipUI(editor_id){
41        if($(editor_id).size()==0){return;}
42        var crayon=editor_id.match(/^(#crayon_\d+)\s/), item, editor_id_light = editor_id ;
43        if(crayon) {
44                editor_id_light='textarea.crayon-active' ;
45                stack[editor_id].crborder=$(crayon[1]+' .formulaire_spip').css('border');
46                stack[editor_id].crbg=$(crayon[1]+' .formulaire_spip').css('background-color');
47                $(crayon[1]+' .formulaire_spip')
48                        .css('border','none')
49                        .css('background-color','white');
50                item=$(crayon+' div.edition');
51        } else {
52                item=$(editor_id).parents().find('div.edition:has('+editor_id+')');
53        }
54        item.each(function() {
55                if ($(this).find(editor_id_light).length == 1) {
56                        if (editor_id.match(/^#formulaire_forum\s/)) {
57                                stack[editor_id].fobd=$(this).css('border');
58                                stack[editor_id].fobg=$(this).css('background');
59                                $(this).css('border','none');
60                                $(this).css('background','none');
61                        }
62                        $(this).find('.spip_barre').css('display','none').end()
63                                .find('.explication').css('display','none').end()
64                                .find('.markItUpHeader').css('display','none').end()
65                                .find('.markItUpTabs').css('display','none').end()
66                                .find('.markItUpPreview').css('display','none').end()
67                                .find('.markItUpFooter').css('display','none');
68                }
69        }) ;
70}
71
72function ShowSpipUI(editor_id){
73        if($(editor_id).size()==0){return;}
74        if (! stack[editor_id].nobarre) {
75                $(editor_id).removeClass('no_barre') ;
76                barrebouilles_editor(editor_id) ;
77                stack[editor_id].nobarre = false ;
78        }
79        var crayon=editor_id.match(/^(#crayon_\d+)\s/), item ;
80        if(crayon) {
81                item=$(crayon+' div.edition');
82        } else {
83                item=$(editor_id).parents().find('div.edition:has('+editor_id+')');
84        }
85        item.each(function() {
86                if (editor_id.match(/^#formulaire_forum\s/)) {
87                        $(this).css('border',stack[editor_id].fobd);
88                        $(this).css('background',stack[editor_id].fobg);
89                }
90                if(crayon) {
91                        $(crayon[1]+' .formulaire_spip')
92                                .css('border',stack[editor_id].crborder)
93                                .css('background-color',stack[editor_id].crbg);
94                }
95                if($(this).find('.markItUpTabs .previsuVoir').hasClass('on')){
96                        $(this).find('.markItUpTabs').css('display','').end()
97                                .find('.markItUpPreview').css('display','block').end()
98                                .find('.markItUpEditor').css('display','none');
99                }else{
100                        $(this).find('.spip_barre').css('display','').end()
101                                .find('.explication').css('display','').end()
102                                .find('.markItUpHeader').css('display','').end()
103                                .find('.markItUpTabs').css('display','').end()
104                                .find('.markItUpFooter').css('display','').end()
105                                .find('.markItUpEditor').css('display','block').end()
106                                .find('.markItUpPreview').css('display','none');
107                }
108                }) ;   
109}
110[(#REM)// pile permettant d'avoir plusieurs éditeurs]
111var stack=[];
112
113function SpipEditor2CKEditor(editor_id){
114        if ($(editor_id).size()==0) {return;}
115        $('#swapeditor_'+stack[editor_id].ndx)
116                .attr('disabled',true)
117                .attr('title',htmldecode('<:ckeditor:loading:>'))
118                .find('img')
119                        .attr('src','[(#CHEMIN{images/searching.gif}|url_absolue)]');
120        $(editor_id).attr('disabled',true);
121        var EdConfig={};$.extend(EdConfig,CKEDITOR.ckConfig) ;
122        EdConfig.toolbar='Spip'+stack[editor_id].tb;
123        HideSpipUI(editor_id);
124        try {   // fix les problèmes des instances de ckeditor répertoriées, mais non visibles/accessibles du fait du rechargement via ajax
125                if (stack[editor_id].editor) {
126                        var instance = CKEDITOR.instances[stack[editor_id].editor] ;
127                        if (instance) {
128                                exit;
129                                CKEDITOR.remove(instance) ;
130                        }
131                }
132        } catch (E) {
133                /* rien */
134        }
135        try {
136        $(editor_id).ckeditor(function(){
137                stack[editor_id].n='#'+this.container.getId();
138                stack[editor_id].editor=this.name ;
139
140                [(#REM) // calcul de la somme des deux marges de part et d'autre du texte area
141                        // pour cela on teste la présence de divers parents possible...
142                ]
143       
144                var parent_ids = [ '.cadre-formulaire-editer', '.formulaire_crayon', '.cadre-formulaire', '.formulaire_spip', '#contenu' ] ;
145                var pc=0,parent_trouve=false ;
146                do {
147                        stack[editor_id].parent_id = parent_ids[pc++] ;
148                        if ($(stack[editor_id].parent_id).length>0) {
149                                parent_trouve=true ;
150                                stack[editor_id].marges=$(editor_id).parents(stack[editor_id].parent_id).width()-$(stack[editor_id].n).width() ;
151                        }
152                } while ((pc<parent_ids.length) && (!parent_trouve)) ;
153               
154
155                if (parent_trouve) {
156                        this.on('resize', function(e) {
157                                $(editor_id).parents(stack[editor_id].parent_id).width($(stack[editor_id].n).width()+stack[editor_id].marges);
158                        });
159                }
160                contexteChange(editor_id);
161                $(editor_id).attr('disabled',false);
162                $('#swapeditor_'+stack[editor_id].ndx)
163                        .attr('title',htmldecode('<:ckeditor:use_spip_editor:>'))
164                        .find('img')
165                                .attr('src','[(#CHEMIN{images/ckeditor_spip.png}|url_absolue)]') ;
166                $('#swapeditor_'+stack[editor_id].ndx).attr('disabled',false);
167                this.setReadOnly(false);
168                this.resize(CKEDITOR.ckConfig.minwidth,CKEDITOR.ckConfig.height);
169        },EdConfig);
170        } catch (E) {
171                alert("Erreur non prévue : \n"+E) ;
172        }
173}
174
175function barrebouilles_editor(editor_id){
176[(#REM)
177// basée sur 'barrebouilles' du fichier : porte_plume/porte_plume_start.js.html
178// (c) Matthieu Marcillaud
179        // fonction generique appliquee aux classes CSS :
180        // inserer_barre_forum, inserer_barre_edition, inserer_previsualisation
181]
182        if ($(editor_id).hasClass('inserer_barre_forum'))
183                $(editor_id).barre_outils('forum');
184        if ($(editor_id).hasClass('inserer_barre_edition'))
185                $(editor_id).barre_outils('edition');
186        if ($(editor_id).hasClass('inserer_previsualisation'))
187                $(editor_id).barre_previsualisation();
188[(#REM) // fonction specifique aux formulaires de SPIP :
189        // barre de forum
190]
191        if ($(editor_id).hasClass('textarea_forum'))
192                $(editor_id).barre_outils('forum');
193        if($(editor_id).attr('name').match(/^(texte|\w+_texte)$/)) {
194                if (!editor_id.match(/\b#formulaire_forum\b/)) {
195                        $(editor_id).barre_outils('edition').barre_previsualisation();
196                }
197                [(#CONFIG{forums_afficher_barre}|=={non}|non)
198                else {
199                        $(editor_id).barre_outils('forum');
200                }]
201        }
202}
203
204function CKEditor2SpipEditor(editor_id){
205        if($(editor_id).size()==0){return;}
206        $('#swapeditor_'+stack[editor_id].ndx)
207                .attr('disabled',true)
208                .attr('title',htmldecode('<:ckeditor:loading:>'))
209                .find('img')
210                        .attr('src','[(#CHEMIN{images/searching.gif}|url_absolue)]');
211        $(editor_id)
212                .attr('disabled',true)
213                .css('display','block')
214                .ckeditorGet().destroy();
215        ShowSpipUI(editor_id);
216        $('#swapeditor_'+stack[editor_id].ndx)
217                .attr('title',htmldecode('<:ckeditor:use_ckeditor:>'))
218                .find('img')
219                        .attr('src','[(#CHEMIN{images/ckeditor.png}|url_absolue)]')
220                .end()
221                .attr('disabled',false);
222        $(editor_id)
223                .attr('disabled',false);
224}
225
226function SwapEditor(editor_id){
227        if($(editor_id).size()==0){return;}
228        try{
229                CKEditor2SpipEditor(editor_id);
230        }catch(e){
231                SpipEditor2CKEditor(editor_id);
232        }
233}
234
235function contexteChange(editor_id){
236        if($(editor_id).size()==0){return;}
237        if($("#contexte_"+stack[editor_id].ndx).length){
238                var contexte=$("#contexte_"+stack[editor_id].ndx).val().match(/^([\.#])(.*)$/);
239                if(stack[editor_id].ctx){[(#REM)// on supprime l'ancien contexte]
240                        if(stack[editor_id].ctx[1]=="#"){[(#REM)// le contexte est donné via un identifiant]
241                                $(stack[editor_id].n+' iframe').contents().find('body').attr('id','');
242                        }else{
243                                $(stack[editor_id].n+' iframe').contents().find('body').removeClass(stack[editor_id].ctx[2]);
244                        }
245                }
246                stack[editor_id].ctx=contexte;
247                if(contexte){[(#REM)// on affecte  le nouveau contexte]
248                        if(contexte[1]=="#"){[(#REM)// le contexte est donné via un identifiant]
249                                $(stack[editor_id].n+' iframe').contents().find('body').attr('id', contexte[2]);
250                        }else{[(#REM)// le contexte est donné via une class]
251                                $(stack[editor_id].n+' iframe').contents().find('body').addClass(contexte[2]);
252                        }
253                }
254        }
255}
256
257function cke_crayon_submit(editor_id){
258        if($(editor_id).size()==0){return;}
259        try{[(#REM)// si on est en mode 'ckeditor', on synchronise le textarea]
260                $(editor_id).ckeditorGet().updateElement();
261        }catch(e){ /* rien */ }
262        $(this).parents('.formulaire_crayon').submit();
263}
264
265function fullInitCKEDITOR(editor_ids){
266        if(!editor_ids)editor_ids=[["textarea[name=texte]","Full"]];
267        initCKEDITOR();
268        CKEDITOR.ckConfig.on={
269                'pluginsLoaded':function(ev){ckeDataProcessor=ev.editor.dataProcessor;ev.editor.dataProcessor=spipDataProcessor;}
270        };
271        if (!CKEDITOR.fullInitDone) {
272                CKEDITOR.on('dialogDefinition',function(ev){
273                        var dialogName=ev.data.name,
274                                dialogDefinition=ev.data.definition;
275                        if(dialogName==='about'){
276                                var aboutTab=dialogDefinition.getContents('tab1');
277                                aboutTab.style='height:280px;';
278                                aboutTab.add({
279                                        'type':'html',
280                                        'html':'<div class="cke_about_container"><:ckeditor:spipification:></div>'
281                                });
282                        }
283                        var advTab=dialogDefinition.getContents('advanced');
284                        if(advTab){
285                                var advClasses=advTab.get('advCSSClasses');
286                                if(advClasses){
287                                        advClasses['default']='spip';
288                                }
289                        }
290                });
291                for(var plugin in CKEDITOR.ckConfig.loadExtraPlugins){
292                        CKEDITOR.plugins.addExternal(plugin, CKEDITOR.ckConfig.loadExtraPlugins[plugin]);
293                }
294                CKEDITOR.fullInitDone=true;
295        }
296        for(var id in editor_ids){
297                if (($(editor_ids[id][0]).length > 0) && ($(editor_ids[id][0]).css('display') != 'none')) {
298                try {
299                        $(editor_ids[id][0]).ckeditorGet() ;
300                } catch(e) {
301                        var editor_id=editor_ids[id][0], editor_tb=editor_ids[id][1], crayon=editor_ids[id][2], editor_md5=editor_ids[id][3] ;
302                               
303                        var ndx=$('[id^=cke_cpt_]').size(),buttons='';
304                        while ($('[id=cke_cpt_'+ndx+']').size()>0) { ndx++ ; }
305                        if (typeof stack[editor_id] == 'undefined') {
306                                stack[editor_id] = {} ;
307                        }
308                        stack[editor_id].crayons = 0 ;
309                        stack[editor_id].ndx = ndx ;
310                        stack[editor_id].tb = editor_tb ;
311                        stack[editor_id].nobarre = ($(editor_id).hasClass('no_barre') || CKEDITOR.ckeditmode == 'spip') ;
312                        if (! stack[editor_id].nobarre)
313                                $(editor_id).addClass('no_barre');[(#REM) // on fait en sorte de désactiver l'affichage du porte plume avant qu'il n'entre en scène ...]
314
315                        if ($('.after_'+editor_md5).length==0) {
316                                $(editor_id).after('<span id="cke_cpt_'+ndx+'" class="after_'+editor_md5+'"></span>');
317        [(#CONFIG{ckeditor/ignoreversion}|non)
318                                if(CKEDITOR.version<CKEDITOR.ckpreferedversion){
319                                        var pref='<:ckeditor:version_preferee:>';
320                                        $('#cke_cpt_'+ndx).prepend(
321                                                '<div class="erreur_message">'+pref.replace(/%2/,CKEDITOR.ckpreferedversion).replace(/%1/,CKEDITOR.version)+'</div>'
322                                        );
323                                }
324        ]
325                        }
326                       
327                        if(CKEDITOR.ckeditmode!='ckeditor-exclu'){
328                                buttons=buttons +
329                                        '<button style="margin:0;width:40px;height:24px;" type="button" id="swapeditor_'+ndx+'" onclick="javascript:SwapEditor(\''+editor_id+'\');" title="'
330                                        +htmldecode(CKEDITOR.ckeditmode=='spip'?'<:ckeditor:use_ckeditor:>':'<:ckeditor:use_spip_editor:>')
331                                        +'"><img src="[(#CHEMIN{images/ckeditor.png}|url_absolue)]"/></button>';
332                        }
333
334        [(#REM) // on insère le menu déroulant de changement de contexte s'il existe des contextes]
335        <B_options>             buttons=buttons+'<span style="padding-right:5px;"><:ckeditor:changer_de_contexte:></span>'
336                                +'<select id="contexte_'+ndx+'" name="contexte_'+ndx+'" onchange="contexteChange(\''+editor_id+'\');" style="width:33%;"><option value="" selected><:ckeditor:sans_contexte:></option><BOUCLE_options(POUR){tableau #CONFIG{ckeditor/contextes}|ck_enliste{1}}><option value="[(#VALEUR|table_valeur{0})]">[(#VALEUR|table_valeur{1}|replace{(\.|#)})]</option></BOUCLE_options></select>';</B_options>;
337                        if(buttons && ($('.before_'+editor_md5).length == 0)) {
338                                var div ;
339                                var style = "width;100%;text-align:right;position:relative;top:-24px;height:0px;" ;
340                                if (crayon) {
341                                        div = $(editor_id).closest('.formulaire_crayon') ;
342                                } else {
343                                        div = $(editor_id).closest('.markItUpContainer') ;
344                                        if (div.length == 0) { [(#REM) // cas où le porteplume n'est pas là... ]
345                                                div = $(editor_id).siblings('label:first') ;
346                                                style = "width;100%;text-align:right;position:relative;top:-8px;height:0px;" ;
347                                        }
348                                }
349                                if (div.length != 0) {
350                                        div.prepend('<div id="cke_buttons_'+ndx+'" class="before_'+editor_md5+'" style="'+style+'"><a name="cke_buttons_ancre_'+ndx+'"></a>'+buttons+'</div>');
351                                }
352                        }
353        [(#REM) // gestion des crayons :]
354                        if(crayon){
355                                $('#'+crayon+' .crayon-submit')
356                                        .after('<button id="save" style=\'background:url("[(#CHEMIN{images/ok.png}|url_absolue)]") no-repeat scroll left top transparent;\' onclick="javascript:return cke_crayon_submit(\''+editor_id+'\');" title="<:bouton_enregistrer:>"><:bouton_enregistrer:></button>')[(#REM)// on ajoute notre bouton qui synchronisera le textarea avant l'editeur avec de soumettre le formulaire]
357                                        .remove();[(#REM)// on supprime le bouton original]
358                        }
359                        if(CKEDITOR.ckeditmode!='spip'){
360                                SpipEditor2CKEditor(editor_ids[id][0]) ;
361                        }
362                }}
363        }
364}
365</BOUCLE_si>
Note: See TracBrowser for help on using the repository browser.