Ticket #6664: 6664_3.patch

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

     
    2222                                command : 'pagebreak'
    2323                        });
    2424
     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                                'cursor: default;' ,
     35                        '}'
     36                        ].join( '' ).replace(/;/g, ' !important;' );    // Increase specificity to override other styles, e.g. block outline.
     37
    2538                // 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;' +
     39                editor.addCss( 'div.cke_pagebreak' + cssStyles );
    4040
    41                         '}' );
     41                // Opera needs help to select the page-break.
     42                CKEDITOR.env.opera && editor.on( 'contentDom', function()
     43                {
     44                        editor.document.on( 'click', function( evt )
     45                        {
     46                                var target = evt.data.getTarget();
     47                                if ( target.is( 'div' ) && target.hasClass( 'cke_pagebreak')  )
     48                                        editor.getSelection().selectElement( target );
     49                        })
     50                });
    4251        },
    4352
    4453        afterInit : function( editor )
    4554        {
    46                 // Register a filter to displaying placeholders after mode change.
     55                var label = editor.lang.pagebreakAlt;
    4756
     57                // Register a filter to displaying placeholders after mode change.
    4858                var dataProcessor = editor.dataProcessor,
    49                         dataFilter = dataProcessor && dataProcessor.dataFilter;
     59                        dataFilter = dataProcessor && dataProcessor.dataFilter,
     60                        htmlFilter = dataProcessor && dataProcessor.htmlFilter;
    5061
     62                if ( htmlFilter )
     63                {
     64                        htmlFilter.addRules(
     65                        {
     66                                attributes : {
     67                                        'class' : function( value, element )
     68                                        {
     69                                                var className =  value.replace( 'cke_pagebreak', '' );
     70                                                if ( className != value )
     71                                                {
     72                                                        var span = CKEDITOR.htmlParser.fragment.fromHtml( '<span style="display: none;">&nbsp;</span>' );
     73                                                        element.children.length = 0;
     74                                                        element.add( span );
     75                                                        var attrs = element.attributes;
     76                                                        delete attrs[ 'aria-label' ];
     77                                                        delete attrs.contenteditable;
     78                                                }
     79                                                return className;
     80                                        }
     81                                }
     82                        }, 5 );
     83                }
     84
    5185                if ( dataFilter )
    5286                {
    5387                        dataFilter.addRules(
     
    6397
    6498                                                        if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) )
    6599                                                        {
    66                                                                 var fakeImg = editor.createFakeParserElement( element, 'cke_pagebreak', 'div' );
    67                                                                 var label = editor.lang.pagebreakAlt;
    68                                                                 fakeImg.attributes[ 'alt' ] = label;
    69                                                                 fakeImg.attributes[ 'aria-label' ] = label;
    70                                                                 return fakeImg;
     100                                                                attributes.contenteditable = "false";
     101                                                                attributes[ 'class' ] = "cke_pagebreak";
     102                                                                attributes[ 'data-cke-display-name' ] = "pagebreak";
     103
     104                                                                attributes[ 'aria-label' ] = label;
     105                                                                attributes[ 'title' ] = label;
     106
     107                                                                element.children.length = 0;
    71108                                                        }
    72109                                                }
    73110                                        }
     
    82119{
    83120        exec : function( editor )
    84121        {
    85                 // Create the element that represents a print break.
    86122                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>' );
    88123
    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 } );
     124                // Create read-only element that represents a print break.
     125                var pagebreak = CKEDITOR.dom.element.createFromHtml(
     126                        '<div style="' +
     127                        'page-break-after: always;"' +
     128                        'contenteditable="false" ' +
     129                        'unselectable="on" ' +
     130                        'title="'+ label + '" ' +
     131                        'aria-label="'+ label + '" ' +
     132                        'data-cke-display-name="pagebreak" ' +
     133                        'class="cke_pagebreak">' +
     134                        '</div>' );
    92135
    93136                var ranges = editor.getSelection().getRanges( true );
    94137
     
    99142                        range = ranges[ i ];
    100143
    101144                        if ( i < ranges.length -1 )
    102                                 breakObject = breakObject.clone( true );
     145                                pagebreak = pagebreak.clone( true );
    103146
    104147                        range.splitBlock( 'p' );
    105                         range.insertNode( breakObject );
     148                        range.insertNode( pagebreak );
    106149                        if ( i == ranges.length - 1 )
    107150                        {
    108                                 range.moveToPosition( breakObject, CKEDITOR.POSITION_AFTER_END );
    109                                 range.select();
    110                         }
     151                                var next = pagebreak.getNext();
     152                                range.moveToPosition( pagebreak, CKEDITOR.POSITION_AFTER_END );
    111153
    112                         var previous = breakObject.getPrevious();
     154                                // If there's nothing or a non-editable block followed by, establish a new paragraph
     155                                // to make sure cursor is not trapped.
     156                                if ( !next || next.type == CKEDITOR.NODE_ELEMENT && !next.isEditable() )
     157                                        range.fixBlock( true, editor.config.enterMode == CKEDITOR.ENTER_DIV ? 'div' : 'p'  );
    113158
    114                         if ( previous && CKEDITOR.dtd[ previous.getName() ].div )
    115                                 breakObject.move( previous );
    116                 }
     159                                range.select();
     160                        }
     161                }
    117162
    118163                editor.fire( 'saveSnapshot' );
    119164        }
  • _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/styles/plugin.js

     
    213213                // current style definition.
    214214                checkElementRemovable : function( element, fullMatch )
    215215                {
    216                         if ( !element )
     216                        if ( !element || element.isReadOnly() )
    217217                                return false;
    218218
    219219                        var def = this._.definition,
  • _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