Ticket #2886: 2886.patch

File 2886.patch, 4.2 KB (added by Martin Kou, 10 years ago)
  • _source/plugins/htmlwriter/plugin.js

     
    6262        {
    6363                this.setRules( e,
    6464                        {
    65                                 indent : true,
     65                                indent : e != 'pre',
    6666                                breakBeforeOpen : true,
    6767                                breakAfterOpen : true,
    6868                                breakBeforeClose : !dtd[ e ][ '#' ],
  • _source/plugins/wysiwygarea/plugin.js

     
    113113                }
    114114        };
    115115
     116        // Logic to replace or remove BR nodes found at the end of block nodes.
     117        var whitespaceRegex = /^[\n\r\t ]*$/;
     118
     119        function isBrRemoveable( br )
     120        {
     121                var path = new CKEDITOR.dom.elementPath( br ),
     122                        block = path.block || path.blockLimit,
     123                        currentNode = br,
     124                        emptyTextNodes = [];
     125
     126                // The BR has to be the child of a block to be removed.
     127                if ( !( block && block.equals( br.getParent() ) ) )
     128                        return false;
     129
     130                // BRs in PRE blocks can always be removed.
     131                if ( block.is( 'pre' ) )
     132                        return true;
     133
     134                // Otherwise, only remove if the BR is at the end block boundary.
     135                while ( ( currentNode = currentNode.getNext() ) )
     136                {
     137                        if ( currentNode.type != CKEDITOR.NODE_TEXT )
     138                                return false;
     139                        if ( !whitespaceRegex.test( currentNode.getText() ) )
     140                                return false;
     141                        emptyTextNodes.push( currentNode );
     142                }
     143
     144                return true;
     145        }
     146
     147        function processTailBr( body )
     148        {
     149                var brNodes = body.getElementsByTag( 'br' );
     150                for ( var i = brNodes.count() - 1 ; i >= 0 ; i-- )
     151                {
     152                        var br = brNodes.getItem( i );
     153                        if ( isBrRemoveable( br ) )
     154                        {
     155                                var block = br.getParent();
     156
     157                                if ( block.is( 'pre' ) )
     158                                {
     159                                        var newline = new CKEDITOR.dom.text( '\r\n', body.getDocument() );
     160                                        newline.replace( br );
     161                                }
     162                                else
     163                                {
     164                                        var nbsp = new CKEDITOR.dom.text( '\xa0', body.getDocument() );
     165                                        nbsp.replace( br );
     166                                        while( nbsp.getNext() )
     167                                                nbsp.getNext().remove();
     168                                }
     169                        }
     170                }
     171        }
     172
    116173        CKEDITOR.plugins.add( 'wysiwygarea',
    117174        {
    118175                requires : [ 'editingblock' ],
     
    340397
    341398                                                        getData : function()
    342399                                                        {
    343                                                                 var data = iframe.$.contentWindow.document.body;
     400                                                                var $body = iframe.$.contentWindow.document.body,
     401                                                                        data = new CKEDITOR.dom.element( $body );
    344402
     403                                                                // Grab all BR nodes that are the last children of block nodes. Turn
     404                                                                // them into non-breaking spaces.
     405                                                                processTailBr( data );
     406
    345407                                                                if ( editor.dataProcessor )
    346                                                                         data = editor.dataProcessor.toDataFormat( new CKEDITOR.dom.element( data ) );
     408                                                                        data = editor.dataProcessor.toDataFormat( data );
    347409                                                                else
    348                                                                         data = data.innerHTML;
     410                                                                        data = $body.innerHTML;
    349411
    350412                                                                // Restore protected attributes.
    351413                                                                data = protectEventsRestore( data );
  • _source/core/htmlparser/text.js

     
    1919                 * @type String
    2020                 * @example
    2121                 */
    22                 this.value = value.replace( spacesRegex, ' ' );
     22                this.truncatedValue = value.replace( spacesRegex, ' ' );
     23                this.value = value;
    2324
    2425                /** @private */
    2526                this._ =
     
    4243                 * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.
    4344                 * @example
    4445                 */
    45                 writeHtml : function( writer )
     46                writeHtml : function( writer, parentTag )
    4647                {
    47                         writer.text( this.value );
     48                        writer.text( parentTag == 'pre' ? this.value : this.truncatedValue );
    4849                }
    4950        };
    5051})();
  • _source/core/htmlparser/fragment.js

     
    277277                writeHtml : function( writer )
    278278                {
    279279                        for ( var i = 0, len = this.children.length ; i < len ; i++ )
    280                                 this.children[i].writeHtml( writer );
     280                                this.children[i].writeHtml( writer, this.name );
    281281                }
    282282        };
    283283})();
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy