Ticket #6664: 6664_2.patch

File 6664_2.patch, 7.0 KB (added by Garry Yao, 13 years ago)
  • _source/plugins/pagebreak/plugin.js

     
    2222                                command : 'pagebreak'
    2323                        });
    2424
    25                 // Add the style that renders our placeholder.
    26                 editor.addCss(
    27                         'img.cke_pagebreak' +
    28                         '{' +
    29                                 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/pagebreak.gif' ) + ');' +
    30                                 'background-position: center center;' +
    31                                 'background-repeat: no-repeat;' +
    32                                 'clear: both;' +
    33                                 'display: block;' +
    34                                 'float: none;' +
    35                                 'width:100% !important; _width:99.9% !important;' +
    36                                 'border-top: #999999 1px dotted;' +
    37                                 'border-bottom: #999999 1px dotted;' +
    38                                 'height: 5px !important;' +
    39                                 'page-break-after: always;' +
     25                var cssStyles = [
     26                        '{' ,
     27                                'background: url(' + CKEDITOR.getUrl( this.path + 'images/pagebreak.gif' ) + ') no-repeat center center;' ,
     28                                'clear: both;' ,
     29                                'width:100%; _width:99.9%;' ,
     30                                'border-top: #999999 1px dotted;' ,
     31                                'border-bottom: #999999 1px dotted;' ,
     32                                'padding:0;' ,
     33                                'height: 5px;' ,
     34                        '}'
     35                        ].join( '' ).replace(/;/g, ' !important;' );    // Increase specificity to override other styles, e.g. block outline.
    4036
    41                         '}' );
     37                // Add the style that renders our placeholder.
     38                editor.addCss( 'div.cke_pagebreak' + cssStyles );
    4239        },
    4340
    4441        afterInit : function( editor )
     
    4643                // Register a filter to displaying placeholders after mode change.
    4744
    4845                var dataProcessor = editor.dataProcessor,
    49                         dataFilter = dataProcessor && dataProcessor.dataFilter;
     46                        dataFilter = dataProcessor && dataProcessor.dataFilter,
     47                        htmlFilter = dataProcessor && dataProcessor.htmlFilter;
    5048
     49                if ( htmlFilter )
     50                {
     51                        htmlFilter.addRules(
     52                        {
     53                                attributes : {
     54                                        'class' : function( value, element )
     55                                        {
     56                                                var className =  value.replace( 'cke_pagebreak', '' );
     57                                                if ( className != value )
     58                                                {
     59                                                        var span = CKEDITOR.htmlParser.fragment.fromHtml( '<span style="display: none;">&nbsp;</span>' );
     60                                                        element.children.length = 0;
     61                                                        element.add( span );
     62                                                        var attrs = element.attributes;
     63                                                        delete attrs[ 'aria-label' ];
     64                                                        delete attrs.contenteditable;
     65                                                }
     66                                                return className;
     67                                        }
     68                                }
     69                        }, 5 );
     70                }
     71
    5172                if ( dataFilter )
    5273                {
    5374                        dataFilter.addRules(
     
    6384
    6485                                                        if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) )
    6586                                                        {
    66                                                                 var fakeImg = editor.createFakeParserElement( element, 'cke_pagebreak', 'div' );
     87                                                                attributes.contenteditable = "false";
     88                                                                attributes[ 'class' ] = "cke_pagebreak";
     89                                                                attributes[ 'data-cke-display-name' ] = "pagebreak";
     90
    6791                                                                var label = editor.lang.pagebreakAlt;
    68                                                                 fakeImg.attributes[ 'alt' ] = label;
    69                                                                 fakeImg.attributes[ 'aria-label' ] = label;
    70                                                                 return fakeImg;
     92                                                                label && ( attributes[ 'aria-label' ] = label );
     93
     94                                                                element.children.length = 0;
    7195                                                        }
    7296                                                }
    7397                                        }
     
    82106{
    83107        exec : function( editor )
    84108        {
    85                 // Create the element that represents a print break.
     109                // Create read-only element that represents a print break.
     110                var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;" ' +
     111                        'contenteditable="false" data-cke-display-name="pagebreak" class="cke_pagebreak"></div>' );
     112
    86113                var label = editor.lang.pagebreakAlt;
    87                 var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;">&nbsp;</span></div>' );
     114                label && breakObject.setAttribute( 'aria-label', label );
    88115
    89                 // Creates the fake image used for this element.
    90                 breakObject = editor.createFakeElement( breakObject, 'cke_pagebreak', 'div' );
    91                 breakObject.setAttributes( { alt : label, 'aria-label' : label, title : label } );
    92 
    93116                var ranges = editor.getSelection().getRanges( true );
    94117
    95118                editor.fire( 'saveSnapshot' );
     
    105128                        range.insertNode( breakObject );
    106129                        if ( i == ranges.length - 1 )
    107130                        {
     131                                var next = breakObject.getNext();
    108132                                range.moveToPosition( breakObject, CKEDITOR.POSITION_AFTER_END );
    109                                 range.select();
    110                         }
    111133
    112                         var previous = breakObject.getPrevious();
     134                                // If there's nothing or a non-editable block followed by, establish a new paragraph
     135                                // to make sure cursor is not trapped.
     136                                if ( !next || next.type == CKEDITOR.NODE_ELEMENT && !next.isEditable() )
     137                                        range.fixBlock( true, editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p'  );
    113138
    114                         if ( previous && CKEDITOR.dtd[ previous.getName() ].div )
    115                                 breakObject.move( previous );
    116                 }
     139                                range.select();
     140                        }
     141                }
    117142
    118143                editor.fire( 'saveSnapshot' );
    119144        }
  • _source/core/dom/element.js

     
    714714
    715715                isEditable : function()
    716716                {
     717                        if ( this.isReadOnly() )
     718                                return false;
     719
    717720                        // Get the element name.
    718721                        var name = this.getName();
    719722
  • _source/plugins/wysiwygarea/plugin.js

     
    2222        function nonExitable( element )
    2323        {
    2424                return ( element.getName() in nonExitableElementNames )
    25                                 || element.isBlockBoundary() && CKEDITOR.dtd.$empty[ element.getName() ];
     25                                || element.isBlockBoundary() && ( CKEDITOR.dtd.$empty[ element.getName() ] || element.isReadOnly() );
    2626        }
    2727
    2828
     
    369369                        var pathBlock = path.block || path.blockLimit,
    370370                                lastNode = pathBlock && pathBlock.getLast( isNotEmpty );
    371371
    372                         // In case it's not ended with block element and doesn't have bogus yet. (#7467)
     372                        // In case it's an editable element not ended with block element and doesn't have bogus yet. (#7467)
    373373                        if ( pathBlock
    374374                                        && !( lastNode && lastNode.type == CKEDITOR.NODE_ELEMENT && lastNode.isBlockBoundary() )
    375375                                        && !pathBlock.is( 'pre' )
     376                                        && !pathBlock.isReadOnly()
    376377                                        && !pathBlock.getBogus() )
    377378                        {
    378379                                editor.fire( 'updateSnapshot' );
  • _source/plugins/elementspath/plugin.js

     
    138138                                                {
    139139                                                        var index = elementsList.push( element ) - 1;
    140140                                                        var name;
    141                                                         if ( element.data( 'cke-real-element-type' ) )
     141                                                        if ( element.data( 'cke-display-name' ) )
     142                                                                name = element.data( 'cke-display-name' );
     143                                                        else if ( element.data( 'cke-real-element-type' ) )
    142144                                                                name = element.data( 'cke-real-element-type' );
    143145                                                        else
    144146                                                                name = element.getName();
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy