Ticket #6217: 6217_2.patch

File 6217_2.patch, 5.6 KB (added by Garry Yao, 12 years ago)
  • _source/plugins/wysiwygarea/plugin.js

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    760760                                                        {
    761761                                                                var sel = editor.getSelection(),
    762762                                                                        selected = sel.getSelectedElement(),
    763                                                                         range  = sel.getRanges()[ 0 ];
     763                                                                        range = sel.getRanges()[ 0 ],
     764                                                                        path = new CKEDITOR.dom.elementPath( range.startContainer ),
     765                                                                        block,
     766                                                                        parent,
     767                                                                        next,
     768                                                                        rtl = keyCode == 8;
    764769
    765770                                                                // Override keystrokes which should have deletion behavior
    766771                                                                //  on fully selected element . (#4047) (#7645)
     
    779784                                                                        editor.fire( 'saveSnapshot' );
    780785
    781786                                                                        evt.data.preventDefault();
    782                                                                         return;
     787                                                                }
     788                                                                else
     789                                                                {
     790                                                                        // Handle the following special cases: (#6217)
     791                                                                        // 1. Del/Backspace key before/after table;
     792                                                                        // 2.  key after start of table.
     793                                                                        if ( ( block = path.block ) &&
     794                                                                                 range[ rtl ? 'checkStartOfBlock' : 'checkEndOfBlock' ]() &&
     795                                                                                 ( next = block[ rtl ? 'getPrevious' : 'getNext' ]( notWhitespaceEval ) ) &&
     796                                                                                 next.is( 'table' ) )
     797                                                                        {
     798                                                                                editor.fire( 'saveSnapshot' );
     799
     800                                                                                // Remove the current empty block.
     801                                                                                if ( range[ rtl ? 'checkEndOfBlock' : 'checkStartOfBlock' ]() )
     802                                                                                        block.remove();
     803
     804                                                                                // Move cursor to the beginning/end of table cell.
     805                                                                                range[ 'moveToElementEdit' + ( rtl ? 'End' : 'Start' ) ]( next );
     806                                                                                range.select();
     807
     808                                                                                editor.fire( 'saveSnapshot' );
     809
     810                                                                                evt.data.preventDefault();
     811                                                                        }
     812                                                                        else if ( path.blockLimit.is( 'td' ) &&
     813                                                                                          ( parent = path.blockLimit.getAscendant( 'table' ) ) &&
     814                                                                                          range.checkBoundaryOfElement( parent, rtl ? CKEDITOR.START : CKEDITOR.END ) &&
     815                                                                                          ( next = parent[ rtl ? 'getPrevious' : 'getNext' ]( notWhitespaceEval ) ) )
     816                                                                        {
     817                                                                                editor.fire( 'saveSnapshot' );
     818
     819                                                                                // Move cursor to the end of previous block.
     820                                                                                range[ 'moveToElementEdit' + ( rtl ? 'End' : 'Start' ) ]( next );
     821
     822                                                                                // Remove any previous empty block.
     823                                                                                if ( range.checkStartOfBlock() && range.checkEndOfBlock() )
     824                                                                                        next.remove();
     825                                                                                else
     826                                                                                        range.select();
     827
     828                                                                                editor.fire( 'saveSnapshot' );
     829
     830                                                                                evt.data.preventDefault();
     831                                                                        }
     832
    783833                                                                }
    784834                                                        }
    785835
  • _source/core/dom/range.js

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    349349        // check(Start|End)OfBlock.
    350350        function getCheckStartEndBlockEvalFunction( isStart )
    351351        {
    352                 var hadBr = false, bookmarkEvaluator = CKEDITOR.dom.walker.bookmark( true );
     352                var skipBogus = false,
     353                        bookmarkEvaluator = CKEDITOR.dom.walker.bookmark( true ),
     354                        nbspRegExp = /^[\t\r\n ]*(?:&nbsp;|\xa0)$/;
     355
    353356                return function( node )
    354357                {
    355358                        // First ignore bookmark nodes.
     
    358361
    359362                        if ( node.type == CKEDITOR.NODE_TEXT )
    360363                        {
     364                                // Skip the block filler NBSP.
     365                                if ( CKEDITOR.env.ie &&
     366                                         nbspRegExp.test( node.getText() ) &&
     367                                         !skipBogus &&
     368                                         !( isStart && node.getNext() ) )
     369                                {
     370                                        skipBogus = true;
     371                                }
    361372                                // If there's any visible text, then we're not at the start.
    362                                 if ( node.hasAscendant( 'pre' ) || CKEDITOR.tools.trim( node.getText() ).length )
     373                                else if ( node.hasAscendant( 'pre' ) || CKEDITOR.tools.trim( node.getText() ).length )
    363374                                        return false;
    364375                        }
    365376                        else if ( node.type == CKEDITOR.NODE_ELEMENT )
     
    368379                                // at the start.
    369380                                if ( !inlineChildReqElements[ node.getName() ] )
    370381                                {
    371                                         // If we're working at the end-of-block, forgive the first <br /> in non-IE
    372                                         // browsers.
    373                                         if ( !isStart && !CKEDITOR.env.ie && node.getName() == 'br' && !hadBr )
    374                                                 hadBr = true;
     382                                        // Skip the padding block br.
     383                                        if ( !CKEDITOR.env.ie &&
     384                                                 node.is( 'br' ) &&
     385                                                 !skipBogus &&
     386                                                 !( isStart && node.getNext() ) )
     387                                        {
     388                                                skipBogus = true;
     389                                        }
    375390                                        else
    376391                                                return false;
    377392                                }
     
    19341949                 */
    19351950                moveToElementEditablePosition : function( el, isMoveToEnd )
    19361951                {
     1952                        var nbspRegExp = /^[\t\r\n ]*(?:&nbsp;|\xa0)$/;
     1953
    19371954                        function nextDFS( node, childOnly )
    19381955                        {
    19391956                                var next;
     
    19581975                                // Stop immediately if we've found a text node.
    19591976                                if ( el.type == CKEDITOR.NODE_TEXT )
    19601977                                {
    1961                                         this.moveToPosition( el, isMoveToEnd ?
     1978                                        // Put cursor before block filler.
     1979                                        if ( isMoveToEnd && this.checkEndOfBlock() && nbspRegExp.test( el.getText() ) )
     1980                                                this.moveToPosition( el, CKEDITOR.POSITION_BEFORE_START );
     1981                                        else
     1982                                                this.moveToPosition( el, isMoveToEnd ?
    19621983                                                                 CKEDITOR.POSITION_AFTER_END :
    19631984                                                                 CKEDITOR.POSITION_BEFORE_START );
    19641985                                        found = 1;
     
    19751996                                                                                                 CKEDITOR.POSITION_AFTER_START );
    19761997                                                found = 1;
    19771998                                        }
     1999                                        // Put cursor before padding block br.
     2000                                        else if ( isMoveToEnd && el.is( 'br' ) && this.checkEndOfBlock() )
     2001                                                this.moveToPosition( el, CKEDITOR.POSITION_BEFORE_START );
    19782002                                }
    19792003
    19802004                                el = nextDFS( el, found );
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy