web-dev-qa-db-fra.com

TinyMCE supprime les ruptures de ligne sur mceAddControl

J'utilise wp_editor pour ajouter des champs wysiwyg aux écrans d'édition des administrateurs. Chaque wysiwyg réside dans une méta-boîte déplaçable. Depuis que TinyMCE a des problèmes de glisser, j'utilise le code suivant:

// on the dragstart event
tinyMCE.execCommand('mceRemoveControl', false, the_editor_id);

// on the dragstop event
tinyMCE.execCommand('mceAddControl', false, the_editor_id);

Le problème est que, lorsque mceAddControl est activé, toutes les nouvelles lignes et les sauts de ligne sont supprimés du texte. Quelqu'un at-il été capable de résoudre ce problème?

Avant le dragstart:

before dragstart

Après le dragstop:

after dragstop

2
Matt

Il s'avère que TinyMCE a son propre paramètre autop, donc si vous le tuez avant le tri et que vous le remettez ensuite, vous devriez être prêt à partir!

Découvrez la manipulation du paramètre autop dans cet extrait:

<script>
(function($) {

    // by default, wpautop will be true
    var wpautop = true;

    // this function wraps subsequent additions of TinyMCE
    $(function() {

        // save the original state of TinyMCE's wpautop
        wpautop = tinyMCE.settings.wpautop;

        // bind to our custom event that fires when a new TinyMCE is added
        $(document).on( 'attachments/new', function( event ) {

            // initialize the applicable TinyMCE instances
            $('.attachments-field-wysiwyg:not(.ready)').init_wysiwyg();

        });

        // initialize the applicable TinyMCE instances
        $('.attachments-field-wysiwyg').init_wysiwyg();
    });

    // init TinyMCE
    $.fn.init_wysiwyg = function() {
        this.each(function() {

            // a flag for this instance
            $(this).addClass('ready');

            var input_id = $(this).attr('id');

            // create wysiwyg
            tinyMCE.settings.theme_advanced_buttons2 += ',code';        // add HTML button
            tinyMCE.settings.wpautop = false;                           // force wpautop to false to preserve linebreaks
            tinyMCE.execCommand('mceAddControl', false, input_id);      // add TinyMCE control
            tinyMCE.settings.wpautop = wpautop;                         // reset the original wpautop setting
        });
    };

    // bind to our custom event that fires when sorting starts
    $(document).on('attachments/sortable_start', function(event, ui) {

        // force wpautop to be false (and by doing so preserve our line breaks)
        tinyMCE.settings.wpautop = false;

        $('.attachments-field-wysiwyg').each(function() {
            tinyMCE.execCommand('mceRemoveControl', false, $(this).attr('id'));
        });

    });

    // bind to our custom event that fires when when sorting starts
    $(document).on('attachments/sortable_stop', function(event, ui) {

        $('.attachments-field-wysiwyg').each(function() {
            tinyMCE.execCommand('mceAddControl', false, $(this).attr('id'));
        });

        // reset the original wpautop setting
        tinyMCE.settings.wpautop = wpautop;
    });

})(jQuery);
</script>

Extrait extrait de mon plugin WordPress, Pièces jointes: https://github.com/jchristopher/attachments/blob/3.3.2/classes/fields/class.field.wysiwyg.php

4
Jonathan Christopher