Changeset 67748 in spip-zone


Ignore:
Timestamp:
Nov 15, 2012, 10:44:19 AM (7 years ago)
Author:
piero.wbmstr@…
Message:

Mise en place de la protection des codes SPIP - ajout d'un bouton et d'une popup dans TinyMCE pour saisir les codes SPIP et les protéger en insertion + en entrée/sortie - ajout du bouton sur les barres proposées - montée en version 0.9.4

Location:
_plugins_/tinymce/spip3
Files:
7 added
1 deleted
9 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/tinymce/spip3/fonds/tinymce/advanced.html

    r67623 r67748  
    88                        plugins : "spip,autolink,lists,pagebreak,style,layer,table,advhr,advimage,advlink,inlinepopups,media,contextmenu,paste,directionality,noneditable,visualchars,nonbreaking,xhtmlxtras,template,advlist",
    99                        theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,formatselect,fontselect,fontsizeselect",
    10                         theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,hr,sub,sup,blockquote,abbr,acronym,charmap,|,link,unlink,anchor,image,media,|,forecolor,backcolor",
    11                         theme_advanced_buttons3 : "tablecontrols,|,cut,copy,paste,pastetext,pasteword,|,visualchars,|,undo,redo,cleanup,|,spip",
     10                        theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,hr,sub,sup,blockquote,abbr,acronym,charmap,|,link,unlink,anchor,image,media,|,forecolor,backcolor,|,visualchars",
     11                        theme_advanced_buttons3 : "tablecontrols,|,cut,copy,paste,pastetext,pasteword,|,undo,redo,cleanup,|,spipinsert,|,spip",
    1212                        theme_advanced_buttons4 : "",
    1313                        theme_advanced_blockformats : "p,h3,h4,h5,h6,blockquote,dt,dd,code,samp",
  • _plugins_/tinymce/spip3/fonds/tinymce/full_interface.html

    r67623 r67748  
    1010                        theme_advanced_buttons2 : "sub,sup,hr,blockquote,abbr,acronym,del,ins,|,bullist,numlist,|,outdent,indent,|,link,unlink,anchor,|,forecolor,backcolor",
    1111                        theme_advanced_buttons3 : "tablecontrols,|,charmap,image,media,template,nonbreaking,|,ltr,rtl",
    12                         theme_advanced_buttons4 : "undo,redo,|,cut,copy,paste,pastetext,pasteword,|,search,replace,|,visualchars,|,attribs,removeformat,cleanup,|,insertdate,inserttime,|,code,|,fullscreen,|,spip",
     12                        theme_advanced_buttons4 : "undo,redo,|,cut,copy,paste,pastetext,pasteword,|,search,replace,|,visualchars,|,attribs,removeformat,cleanup,|,insertdate,inserttime,|,code,|,fullscreen,|,spipinsert,|,spip",
    1313                        theme_advanced_blockformats : "p,h3,h4,h5,h6,blockquote,dt,dd,code,samp",
    1414
  • _plugins_/tinymce/spip3/fonds/tinymce/simple.html

    r67673 r67748  
    77                        // Plugins options
    88                        plugins : "spip,autolink,lists,style,layer,table,advlink,inlinepopups,contextmenu,nonbreaking,xhtmlxtras,advlist,noneditable",
    9                         theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,blockquote,link,unlink,|,spip",
     9                        theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,blockquote,link,unlink,|,spipinsert,|,spip",
    1010                        theme_advanced_buttons2 : "",
    1111                        theme_advanced_buttons3 : "",
  • _plugins_/tinymce/spip3/jscripts/tiny_mce/plugins/spip/editor_plugin.js

    r67623 r67748  
    11/**
    2  * SPIP TinyMCE plugin - Retour à la barre du Porte-Plume
    3  * @version 1.0
     2 * SPIP TinyMCE plugin
     3 * - Retour à la barre du Porte-Plume
     4 * - Protection des codes d'inclusion de modeles et balises dans une SPAN speciale
     5 *
     6 * @version 1.2
    47 */
    58
    69(function() {
    7         // Load plugin specific language pack
     10        // charger les chaines de langue
    811        tinymce.PluginManager.requireLangPack('spip');
     12        // code du plugin
     13        tinymce.create('tinymce.plugins.SpipSpecialPlugin', {
     14                //initialisation
     15                init: function(ed,url){
     16                        var t = this;
     17                        t.url = url;
     18                        t.editor = ed;
    919
    10         tinymce.create('tinymce.plugins.SpipBackBarre', {
    11                 /**
    12                  * Initializes the plugin, this will be executed after the plugin has been created.
    13                  * This call is done before the editor instance has finished it's initialization so use the onInit event
    14                  * of the editor instance to intercept that event.
    15                  *
    16                  * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
    17                  * @param {string} url Absolute URL to where the plugin is located.
    18                  */
    19                 init: function(ed,url){
    20                         ed.addCommand('spip_back_barre', function(){ document.location.search += '&tmce_barre=porteplume'; });
    21                         ed.addButton('spip',{ title: 'spip.desc', cmd: 'spip_back_barre', image: url+'/img/spip.gif' });
     20                        // bouton de retour a la barre du porte-plume
     21                        ed.addCommand('spip_back_barre', function(){ document.location.search += '&tmce_barre='+t.getArgBarre(); });
     22                        ed.addButton('spip',{ title: 'spip.desc', cmd: 'spip_back_barre', image: url+'/img/spip-porteplume.gif' });
     23
     24                        // bouton de la popup de code SPIP
     25                        ed.addCommand('spip_insert_code', function() {
     26                                ed.windowManager.open({
     27                                        file : url + '/dialog.htm',
     28                                        width : 480 + parseInt(ed.getLang('spip.delta_width', 0)),
     29                                        height : 320 + parseInt(ed.getLang('spip.delta_height', 0)),
     30                                        inline : 1
     31                                }, {
     32                                        plugin_url : t.url,
     33                                        special_class : t.getSpecialClass(),
     34                                        special_class_regexp : t.getSpecialClassRegexp(),
     35                                        must_be_protected : !t.isProtected( ed.selection.getNode() )
     36                                });
     37                        });
     38                        ed.addButton('spipinsert',{ title: 'spip.desc_insert', cmd: 'spip_insert_code', image: url+'/img/spip-code.gif' });
     39
     40                        // on protege les divs avec la classe en entree
     41                        ed.onSetContent.add(function(ed, o) {
     42                                o.content = o.content.replace( t.getSpecialClassRegexp(), function(m){
     43                                        return t.protegerContenuText(m);
     44                                });
     45                        });
     46
     47                        // on protege les divs avec la classe en sortie
     48                        ed.onPostProcess.add(function(ed, o) {
     49                                o.content = o.content.replace( t.getSpecialClassRegexp(), function(m){
     50                                        return t.protegerContenuText(m);
     51                                });
     52                        });
     53
     54                        // on selectionne tout le contenu si double-clique sur une div avec la classe
     55                        ed.onDblClick.add(function(ed, e) {
     56                                if ( t.isProtected(e.target) ){
     57                                        t.selectionnerContenuNode( e.target );
     58                                        t.editor.execCommand('spip_insert_code');
     59                                }
     60                        });
     61
    2262                },
     63                // getter : special class
     64                getSpecialClass: function(){
     65                        var ed = this.editor;
     66                        return ed.getParam("plugin_spip_special_class", "spiptmceInsert");
     67                },
     68                // getter : special class RegExp
     69                getSpecialClassRegexp: function(){
     70                        var _str = '<span class="'+this.getSpecialClass()+'">(.*)</span>',
     71                                _patrn = new RegExp(_str.replace('/', '\/'), 'gim');
     72                        return _patrn;
     73                },
     74                // getter : argument pour retour a la barre du porte-plume
     75                getArgBarre: function(){
     76                        var ed = this.editor;
     77                        return ed.getParam("plugin_spip_arg_barre", "porteplume");
     78                },
     79                // un noeud est-il protege ?
     80                isProtected: function( n ){
     81                        return (n && n.nodeName=='SPAN' && n.className==this.getSpecialClass());
     82                },
     83                // on encadre si necessaire par une div
     84                selectionnerContenuNode: function( node ){
     85                        this.editor.selection.select( this.editor.dom.get(node), true );
     86                },
     87                // creation de la DIV avec la classe pour proteger les contenus SPIP
     88                protegerContenuText: function( str ){
     89                                return '<span class="'+this.getSpecialClass()+'">'+$('<div/>').html(str).text()+'</span>';
     90                }
     91        });
     92        // enregistrement du plugin
     93        tinymce.PluginManager.add('spip', tinymce.plugins.SpipSpecialPlugin);
     94})();
    2395
    24                 /**
    25                  * Creates control instances based in the incomming name. This method is normally not
    26                  * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons
    27                  * but you sometimes need to create more complex controls like listboxes, split buttons etc then this
    28                  * method can be used to create those.
    29                  *
    30                  * @param {String} n Name of the control to create.
    31                  * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.
    32                  * @return {tinymce.ui.Control} New control instance or null if no control was created.
    33                  */
    34                 createControl: function(n,cm){return null;}
    35         });
     96/*
     97// Differents essais pour proteger les selections ... sans succes
     98                        ed.addCommand('spip_pre_insert_code', function() {
     99                                var _node = ed.selection.getNode();
     100                                if ( t.isProtected(_node) ) {
     101console.debug('=> cas d un noeud deja protege');
     102                                        ed.selection.select(ed.dom.get(_node), true);
     103                                } else {
     104console.debug('=> cas d un noeud non protege');
    36105
    37         // Register plugin
    38         tinymce.PluginManager.add('spip', tinymce.plugins.SpipBackBarre);
    39 })();
     106
     107                                        var _node_ctt = _node.innerHTML.replace('<br data-mce-bogus="1">', '');
     108                                        // cas ou la selection est un noeud complet ou vide
     109                                        if (ed.selection.getContent()==_node_ctt){
     110console.debug('=> cas d un noeud complet ou vide, on entoure de la div');
     111//                                              new_node = _node.cloneNode(true);
     112                                                var new_node = ed.dom.create('div', {'class': t.getSpecialClass()}, ed.selection.getContent());
     113//                                              ed.dom.removeAllAttribs(new_node);
     114//                                              ed.dom.setAttrib(new_node, 'class', t.getSpecialClass());
     115//                                              ed.dom.rename(new_node, 'div');
     116                                                ed.dom.replace(_node, new_node);
     117                                                ed.selection.select( new_node.firstChild() );
     118                                        // sinon, on cree une div
     119                                        } else {
     120console.debug('=> cas d un noeud existant, on entoure la selection de la div');
     121                                                ed.selection.setContent( t.protegerContenuText(ed.selection.getContent()) );
     122                                        }
     123
     124                                        ed.execCommand('mceInsertContent', false, t.protegerContenuText(ed.selection.getContent({format : 'text'})));
     125                                        ed.selection.select(ed.dom.get(_node).firstChild('div'), true);
     126                                }
     127                                ed.execCommand('spip_insert_code');
     128                        });
     129//                      ed.addButton('spipinsert',{ title: 'spip.desc_insert', cmd: 'spip_pre_insert_code', image: url+'/img/spip-code.gif' });
     130*/
  • _plugins_/tinymce/spip3/jscripts/tiny_mce/plugins/spip/langs/en.js

    r67623 r67748  
    11tinyMCE.addI18n('en.spip',{
    22        desc : 'Go back to the default SPIP editor'
     3        desc_insert: 'Protect selection for SPIP treatments'
    34});
  • _plugins_/tinymce/spip3/jscripts/tiny_mce/plugins/spip/langs/fr.js

    r67623 r67748  
    11tinyMCE.addI18n('fr.spip',{
    2         desc : 'Retour à l\'éditeur SPIP par défaut'
     2        desc : 'Retour à l\'éditeur SPIP par défaut',
     3        desc_insert: 'Protéger la sélection pour un traitement par SPIP'
    34});
  • _plugins_/tinymce/spip3/paquet.xml

    r67673 r67748  
    22        prefix="tinymce"
    33        categorie="edition"
    4         version="0.9.3"
     4        version="0.9.4"
    55        etat="test"
    66        compatibilite="[3.0.0;["
  • _plugins_/tinymce/spip3/tinymce_jsconfig.html

    r67673 r67748  
    3939                        directionality : "#LANG_DIR",
    4040                        relative_urls : false,
    41        
     41
     42                        // SPIP specials       
     43                        plugin_spip_arg_barre: "#EVAL{$GLOBALS['tinymce_arg_barre']}",
     44                        plugin_spip_special_class: "#EVAL{$GLOBALS['tinymce_protect_class']}",
    4245                        [(#REM) Theme et Plugin options depuis le modele choisi ]
    4346                        [(#INCLURE{fond=fonds/tinymce/#GET{TMCE_PLUGINS_MODEL}})]
     
    4851                        body_id: "[(#GET{TMCE_CONF}|table_valeur{body_id})]",
    4952       
    50                         // SPIP specials
    51                         setup : function(ed) {
    52                                 ed.onSetContent.add(function(ed, o) {
    53                                         o.content = o.content.replace(
    54                                                 /<div class="spiptmceInsert">(.*)<\/div>/g,
    55                                                 function(m){ return spiptmce_proteger_modeles(m); }
    56                                         );
    57                                 });
    58                                 ed.onPostProcess.add(function(ed, o) {
    59                                         o.content = o.content.replace(
    60                                                 /<div class="spiptmceInsert">(.*)<\/div>/g,
    61                                                 function(m){ return spiptmce_proteger_modeles(m); }
    62                                         );
    63                                 });
    64                         },
    65 
    6653                        // Drop lists for link/image/media/template dialogs
    6754                        external_link_list_url : "[(#URL_PAGE{tinymce_json}|parametre_url{type,list_links}|url_absolue)]",
     
    8168
    8269function barre_inserer( what, inst ){
    83     tinyMCE.execCommand( 'mceInsertContent', false, '<div class="spiptmceInsert">'+what+'</div>' );
     70    tinyMCE.execCommand( 'mceInsertContent', false, '<span class="#EVAL{$GLOBALS['tinymce_protect_class']}">'+what+'</span><br />' );
    8471}
    85 
    86 function spiptmce_proteger_modeles( str ){
    87         return '<div class="spiptmceInsert">'+$('<div/>').html(str).text()+'</div>';
    88 }
  • _plugins_/tinymce/spip3/tinymce_options.php

    r67642 r67748  
    5959$GLOBALS['tinymce_arg_barre'] = 'tmce_barre';
    6060
     61/**
     62 * Classe CSS pour protéger les codes SPIP
     63 */
     64$GLOBALS['tinymce_protect_class'] = 'spiptmceInsert';
     65
    6166// debug direct
    6267//echo '<pre>'; var_export( unserialize( $GLOBALS['meta']['tinymce'] ) ); exit('yo');
Note: See TracChangeset for help on using the changeset viewer.