2 $.fn
.previsu_spip = function(settings
) {
6 previewParserPath
: '' ,
7 previewParserVar
: 'data',
10 textFullScreen
: 'Plein écran'
12 $.extend(options
, settings
);
14 return this.each(function() {
16 var $$, textarea
, tabs
, preview
;
20 // init and build previsu buttons
22 $$.addClass("pp_previsualisation");
24 // s'il n'y a pas de barre d'outil, mais qu'on demande une previsu,
25 // insérer une barre d'outil vide.
26 if (! $$.parent().has('.markItUpContainer').length
) {
27 $$.barre_outils('vide');
29 var mark
= $$.parent();
32 tabs
= $('<div class="markItUpTabs"></div>').prependTo(mark
);
34 '<a href="#fullscreen" class="fullscreen">' + options
.textFullScreen
+ '</a>' +
35 '<a href="#previsuVoir" class="previsuVoir">' + options
.textVoir
+ '</a>' +
36 '<a href="#previsuEditer" class="previsuEditer on">' + options
.textEditer
+ '</a>'
39 preview
= $('<div class="markItUpPreview"></div>').insertAfter(mark
.find('.markItUpHeader'));
42 var is_full_screen
= false;
44 var objet
= mark
.parents('.formulaire_spip')[0].className
.match(/formulaire_editer_(\w+)/);
45 objet
= (objet
? objet
[1] : '');
46 var champ
= mark
.parents('.editer')[0].className
.match(/editer_(\w+)/);
47 champ
= (champ
? champ
[1].toUpperCase() : '');
48 var textarea
= mark
.find('textarea.pp_previsualisation');
49 var preview
= mark
.find('.markItUpPreview');
50 var dir
= textarea
.attr('dir');
52 preview
.attr('dir',dir
);
55 tabs
.find('.fullscreen').click(function(){
56 // On commence par garder en mémoire la valeur d'origine de la taille du champ
57 if (!mark
.is('.fullscreen')) {
58 textarea
.data('height-origin', textarea
.css('height'));
61 mark
.toggleClass('fullscreen');
63 // Si on vient de passer en fullscreen
64 if (mark
.is('.fullscreen')){
65 is_full_screen
= true;
66 // afficher les boutons de la barre s'ils étaient masqués (cf prévisu)
67 mark
.find('.markItUpHeader a').show();
68 if (!mark
.is('.livepreview')){
69 var original_texte
="";
71 function refresh_preview(){
72 var texte
= textarea
.val();
73 if (original_texte
== texte
){
76 renderPreview(preview
.addClass('ajaxLoad'),texte
,champ
,objet
);
77 original_texte
= texte
;
80 var timerPreview
=null;
81 mark
.addClass('livepreview').find('.markItUpEditor').on('keyup click change focus refreshpreview',function(e
){
83 if (timerPreview
) clearTimeout(timerPreview
);
84 timerPreview
= setTimeout(refresh_preview
,500);
88 $(window
).on('keyup',function(e
){
90 // Touche Echap pour sortir du mode fullscreen
91 if (e
.type
=='keyup' && e
.keyCode
==27 && !markitup_prompt
){
92 mark
.removeClass('fullscreen');
93 // On remet la taille d'origine
94 textarea
.css('height', textarea
.data('height-origin'));
95 is_full_screen
= false;
100 mark
.find('.markItUpEditor').trigger('refreshpreview');
102 // Si on sort du fullscreen
104 // On remet la taille d'origine
105 textarea
.css('height', textarea
.data('height-origin'));
106 // masquer les boutons de la barre s'ils étaient masqués avant le plein écran (cf prévisu)
107 if ($(this).next().hasClass('on')) {
108 mark
.find('.markItUpHeader a').hide();
110 is_full_screen
= false;
116 tabs
.find('.previsuVoir').click(function(){
118 mark
.find('.markItUpEditor').height()
119 + mark
.find('.markItUpFooter').height()
122 mark
.find('.markItUpHeader a,.markItUpEditor,.markItUpFooter').hide();
123 $(this).addClass('on').next().removeClass('on');
125 preview
.show().addClass('ajaxLoad'),
126 mark
.find('textarea.pp_previsualisation').val(),
134 tabs
.find('.previsuEditer').click(function(){
135 mark
.find('.markItUpPreview').hide();
136 mark
.find('.markItUpHeader a,.markItUpEditor,.markItUpFooter').show();
137 $(this).addClass('on').prev().removeClass('on');
143 function renderPreview(node
, val
, champ
, objet
, async
) {
144 if (options
.previewParserPath
!== '') {
147 async
: typeof (async
)=="undefined"?true:async
,
148 url
: options
.previewParserPath
,
151 +'&' + options
.previewParserVar
+'='+encodeURIComponent(val
),
152 success: function(data
) {
153 node
.html(data
).removeClass('ajaxLoad');
154 //ouvre un nouvel onglet lorsqu'on clique sur un lien dans la prévisualisation
155 $("a",node
).attr("target","blank");