[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / porte_plume / javascript / jquery.previsu_spip.js
index 5e57baa..5b5db0b 100644 (file)
@@ -6,7 +6,8 @@
                        previewParserPath:      '' ,\r
                        previewParserVar:       'data',\r
                        textEditer:     'Editer',\r
-                       textVoir:       'Voir'\r
+                       textVoir:       'Voir',\r
+                       textFullScreen: 'Plein écran'\r
                };\r
                $.extend(options, settings);\r
 \r
                        // init and build previsu buttons\r
                        function init() {\r
                                $$.addClass("pp_previsualisation");\r
-                               tabs = $('<div class="markItUpTabs"></div>').prependTo($$.parent());\r
+                               \r
+                               // s'il n'y a pas de barre d'outil, mais qu'on demande une previsu,\r
+                               // insérer une barre d'outil vide.\r
+                               if (! $$.parent().has('.markItUpContainer').length) {\r
+                                       $$.barre_outils('vide');\r
+                               }\r
+                               var mark = $$.parent();\r
+\r
+\r
+                               tabs = $('<div class="markItUpTabs"></div>').prependTo(mark);\r
                                $(tabs).append(\r
+                                       '<a href="#fullscreen" class="fullscreen">' + options.textFullScreen + '</a>' +\r
                                        '<a href="#previsuVoir" class="previsuVoir">' + options.textVoir + '</a>' +\r
                                        '<a href="#previsuEditer" class="previsuEditer on">' + options.textEditer + '</a>'\r
                                );\r
                                \r
-                               preview = $('<div class="markItUpPreview"></div>').insertAfter(tabs);\r
+                               preview = $('<div class="markItUpPreview"></div>').insertAfter(mark.find('.markItUpHeader'));\r
                                preview.hide();\r
-                               \r
-                               $('.previsuVoir').click(function(){\r
-                                       mark = $(this).parent().parent();\r
-                                       objet = mark.parents('.formulaire_spip')[0].className.match(/formulaire_editer_(\w+)/);\r
-                                       champ = mark.parents('li')[0].className.match(/editer_(\w+)/);\r
-                                       dir = mark.find('textarea').attr('dir');\r
-                                       $(mark).find('.markItUpPreview').height(\r
-                                                 $(mark).find('.markItUpHeader').height()\r
-                                               + $(mark).find('.markItUpEditor').height()\r
-                                               + $(mark).find('.markItUpFooter').height()\r
+\r
+                               var is_full_screen = false;\r
+\r
+                               var objet = mark.parents('.formulaire_spip')[0].className.match(/formulaire_editer_(\w+)/);\r
+                               objet = (objet ? objet[1] : '');\r
+                               var champ = mark.parents('.editer')[0].className.match(/editer_(\w+)/);\r
+                               champ = (champ ? champ[1].toUpperCase() : '');\r
+                               var textarea = mark.find('textarea.pp_previsualisation');\r
+                               var preview = mark.find('.markItUpPreview'); \r
+                               var dir = textarea.attr('dir');\r
+                               if(dir){\r
+                                       preview.attr('dir',dir);\r
+                               }\r
+\r
+                               tabs.find('.fullscreen').click(function(){\r
+                                       // On commence par garder en mémoire la valeur d'origine de la taille du champ\r
+                                       if (!mark.is('.fullscreen')) {\r
+                                               textarea.data('height-origin', textarea.css('height'));\r
+                                       }\r
+                                       \r
+                                       mark.toggleClass('fullscreen');\r
+                                       \r
+                                       // Si on vient de passer en fullscreen\r
+                                       if (mark.is('.fullscreen')){\r
+                                               is_full_screen = true;\r
+                                               // afficher les boutons de la barre s'ils étaient masqués (cf prévisu)\r
+                                               mark.find('.markItUpHeader a').show();\r
+                                               if (!mark.is('.livepreview')){\r
+                                                       var original_texte="";\r
+                                                       \r
+                                                       function refresh_preview(){\r
+                                                               var texte = textarea.val();\r
+                                                               if (original_texte == texte){\r
+                                                                       return;\r
+                                                               }\r
+                                                               renderPreview(preview.addClass('ajaxLoad'),texte,champ,objet);\r
+                                                               original_texte = texte;\r
+                                                       }\r
+                                                       \r
+                                                       var timerPreview=null;\r
+                                                       mark.addClass('livepreview').find('.markItUpEditor').on('keyup click change focus refreshpreview',function(e){\r
+                                                               if (is_full_screen){\r
+                                                                       if (timerPreview) clearTimeout(timerPreview);\r
+                                                                       timerPreview = setTimeout(refresh_preview,500);\r
+                                                               }\r
+                                                       });\r
+                                                       \r
+                                                       $(window).on('keyup',function(e){\r
+                                                               if (is_full_screen) {\r
+                                                                       // Touche Echap pour sortir du mode fullscreen\r
+                                                                       if (e.type=='keyup' && e.keyCode==27 && !markitup_prompt){\r
+                                                                               mark.removeClass('fullscreen');\r
+                                                                               // On remet la taille d'origine\r
+                                                                               textarea.css('height', textarea.data('height-origin'));\r
+                                                                               is_full_screen = false;\r
+                                                                       }\r
+                                                               }\r
+                                                       });\r
+                                               }\r
+                                               mark.find('.markItUpEditor').trigger('refreshpreview');\r
+                                       }\r
+                                       // Si on sort du fullscreen\r
+                                       else {\r
+                                               // On remet la taille d'origine\r
+                                               textarea.css('height', textarea.data('height-origin'));\r
+                                               // masquer les boutons de la barre s'ils étaient masqués avant le plein écran (cf prévisu)\r
+                                               if ($(this).next().hasClass('on')) {\r
+                                                       mark.find('.markItUpHeader a').hide();\r
+                                               }\r
+                                               is_full_screen = false;\r
+                                       }\r
+                                       \r
+                                       return false;\r
+                               });\r
+\r
+                               tabs.find('.previsuVoir').click(function(){\r
+                                       preview.height(\r
+                                                 mark.find('.markItUpEditor').height()\r
+                                               + mark.find('.markItUpFooter').height()\r
                                        );\r
 \r
-                                       $(mark).find('.markItUpHeader,.markItUpEditor,.markItUpFooter').hide();\r
+                                       mark.find('.markItUpHeader a,.markItUpEditor,.markItUpFooter').hide();\r
                                        $(this).addClass('on').next().removeClass('on');\r
-                                       $(mark).find('.markItUpPreview').show()\r
-                                               .addClass('ajaxLoad')\r
-                                               .html(renderPreview(\r
-                                                       $(mark).find('textarea.pp_previsualisation').val(),\r
-                                                       champ[1].toUpperCase(),\r
-                                                       (objet ? objet[1] : ''))\r
-                                               )\r
-                                               .removeClass('ajaxLoad');\r
-                                       if(dir)\r
-                                               $(mark).find('.markItUpPreview').attr('dir',dir);\r
-\r
-                                       //ouvre un nouvel onglet lorsqu'on clique sur un lien dans la prévisualisation\r
-                                       $(".markItUpPreview a").attr("target","blank");\r
+                                       renderPreview(\r
+                                               preview.show().addClass('ajaxLoad'),\r
+                                               mark.find('textarea.pp_previsualisation').val(),\r
+                                               champ,\r
+                                               objet,\r
+                                               false\r
+                                       );\r
 \r
                                        return false;\r
                                });\r
-                               $('.previsuEditer').click(function(){\r
-                                       mark = $(this).parent().parent();\r
-                                       $(mark).find('.markItUpPreview').hide();\r
-                                       $(mark).find('.markItUpHeader,.markItUpEditor,.markItUpFooter').show();\r
+                               tabs.find('.previsuEditer').click(function(){\r
+                                       mark.find('.markItUpPreview').hide();\r
+                                       mark.find('.markItUpHeader a,.markItUpEditor,.markItUpFooter').show();\r
                                        $(this).addClass('on').prev().removeClass('on');\r
+                                       \r
                                        return false;\r
                                });\r
                        }\r
 \r
-                       function renderPreview(val, champ, objet) {\r
-                               var phtml;\r
+                       function renderPreview(node, val, champ, objet, async) {\r
                                if (options.previewParserPath !== '') {\r
                                        $.ajax( {\r
                                                type: 'POST',\r
-                                               async: false,\r
+                                               async: typeof (async)=="undefined"?true:async,\r
                                                url: options.previewParserPath,\r
                                                data: 'champ='+champ\r
                                                        +'&objet='+objet\r
                                                        +'&' + options.previewParserVar+'='+encodeURIComponent(val),\r
                                                success: function(data) {\r
-                                                       phtml = data; \r
+                                                       node.html(data).removeClass('ajaxLoad');\r
+                                                       //ouvre un nouvel onglet lorsqu'on clique sur un lien dans la prévisualisation\r
+                                                       $("a",node).attr("target","blank");\r
                                                }\r
                                        } );\r
                                }\r
-                               return phtml;\r
                        }\r
        \r
                        init();\r