1;(function($) { 2 $.fn.previsu_spip = function(settings) { 3 var options; 4 5 options = { 6 previewParserPath: '' , 7 previewParserVar: 'data', 8 textEditer: 'Editer', 9 textVoir: 'Voir', 10 textFullScreen: 'Plein écran' 11 }; 12 $.extend(options, settings); 13 14 return this.each(function() { 15 16 var $$, textarea, tabs, preview; 17 $$ = $(this); 18 textarea = this; 19 20 // init and build previsu buttons 21 function init() { 22 $$.addClass("pp_previsualisation"); 23 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'); 28 } 29 var mark = $$.parent(); 30 31 32 tabs = $('<div class="markItUpTabs"></div>').prependTo(mark); 33 $(tabs).append( 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>' 37 ); 38 39 preview = $('<div class="markItUpPreview"></div>').insertAfter(mark.find('.markItUpHeader')); 40 preview.hide(); 41 42 var is_full_screen = false; 43 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'); 51 if(dir){ 52 preview.attr('dir',dir); 53 } 54 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')); 59 } 60 61 mark.toggleClass('fullscreen'); 62 63 // Si on vient de passer en fullscreen 64 if (mark.is('.fullscreen')){ 65 $('body').addClass('markitup-fullscreen'); 66 is_full_screen = true; 67 // afficher les boutons de la barre s'ils étaient masqués (cf prévisu) 68 mark.find('.markItUpHeader a').show(); 69 if (!mark.is('.livepreview')){ 70 var original_texte=""; 71 72 function refresh_preview(){ 73 var texte = textarea.val(); 74 if (original_texte == texte){ 75 return; 76 } 77 renderPreview(preview.addClass('ajaxLoad'),texte,champ,objet); 78 original_texte = texte; 79 } 80 81 var timerPreview=null; 82 mark.addClass('livepreview').find('.markItUpEditor').on('keyup click change focus refreshpreview',function(e){ 83 if (is_full_screen){ 84 if (timerPreview) clearTimeout(timerPreview); 85 timerPreview = setTimeout(refresh_preview,500); 86 } 87 }); 88 89 $(window).on('keyup',function(e){ 90 if (is_full_screen) { 91 // Touche Echap pour sortir du mode fullscreen 92 if (e.type=='keyup' && e.keyCode==27 && !markitup_prompt){ 93 mark.removeClass('fullscreen'); 94 $('body').removeClass('markitup-fullscreen'); 95 // On remet la taille d'origine 96 textarea.css('height', textarea.data('height-origin')); 97 is_full_screen = false; 98 } 99 } 100 }); 101 } 102 mark.find('.markItUpEditor').trigger('refreshpreview'); 103 } 104 // Si on sort du fullscreen 105 else { 106 $('body').removeClass('markitup-fullscreen'); 107 // On remet la taille d'origine 108 textarea.css('height', textarea.data('height-origin')); 109 // masquer les boutons de la barre s'ils étaient masqués avant le plein écran (cf prévisu) 110 if ($(this).next().hasClass('on')) { 111 mark.find('.markItUpHeader a').hide(); 112 } 113 is_full_screen = false; 114 } 115 116 return false; 117 }); 118 119 tabs.find('.previsuVoir').click(function(){ 120 preview.height( 121 mark.find('.markItUpEditor').height() 122 + mark.find('.markItUpFooter').height() 123 ); 124 125 mark.find('.markItUpHeader a,.markItUpEditor,.markItUpFooter').hide(); 126 $(this).addClass('on').next().removeClass('on'); 127 renderPreview( 128 preview.show().addClass('ajaxLoad'), 129 mark.find('textarea.pp_previsualisation').val(), 130 champ, 131 objet, 132 false 133 ); 134 135 return false; 136 }); 137 tabs.find('.previsuEditer').click(function(){ 138 mark.find('.markItUpPreview').hide(); 139 mark.find('.markItUpHeader a,.markItUpEditor,.markItUpFooter').show(); 140 $(this).addClass('on').prev().removeClass('on'); 141 142 return false; 143 }); 144 } 145 146 function renderPreview(node, val, champ, objet, async) { 147 if (options.previewParserPath !== '') { 148 $.ajax( { 149 type: 'POST', 150 async: typeof (async)=="undefined"?true:async, 151 url: options.previewParserPath, 152 data: 'champ='+champ 153 +'&objet='+objet 154 +'&' + options.previewParserVar+'='+encodeURIComponent(val), 155 success: function(data) { 156 node.html(data).removeClass('ajaxLoad'); 157 //ouvre un nouvel onglet lorsqu'on clique sur un lien dans la prévisualisation 158 $("a",node).attr("target","blank"); 159 // désactiver tous les éléments de formulaires 160 $(":input",node).attr("disabled","disabled"); 161 } 162 } ); 163 } 164 } 165 166 init(); 167 }); 168 }; 169})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.