Ticket #6664: 6664_2.patch
File 6664_2.patch, 7.0 KB (added by , 13 years ago) |
---|
-
_source/plugins/pagebreak/plugin.js
22 22 command : 'pagebreak' 23 23 }); 24 24 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. 40 36 41 '}' ); 37 // Add the style that renders our placeholder. 38 editor.addCss( 'div.cke_pagebreak' + cssStyles ); 42 39 }, 43 40 44 41 afterInit : function( editor ) … … 46 43 // Register a filter to displaying placeholders after mode change. 47 44 48 45 var dataProcessor = editor.dataProcessor, 49 dataFilter = dataProcessor && dataProcessor.dataFilter; 46 dataFilter = dataProcessor && dataProcessor.dataFilter, 47 htmlFilter = dataProcessor && dataProcessor.htmlFilter; 50 48 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;"> </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 51 72 if ( dataFilter ) 52 73 { 53 74 dataFilter.addRules( … … 63 84 64 85 if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) ) 65 86 { 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 67 91 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; 71 95 } 72 96 } 73 97 } … … 82 106 { 83 107 exec : function( editor ) 84 108 { 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 86 113 var label = editor.lang.pagebreakAlt; 87 var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;"> </span></div>');114 label && breakObject.setAttribute( 'aria-label', label ); 88 115 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 93 116 var ranges = editor.getSelection().getRanges( true ); 94 117 95 118 editor.fire( 'saveSnapshot' ); … … 105 128 range.insertNode( breakObject ); 106 129 if ( i == ranges.length - 1 ) 107 130 { 131 var next = breakObject.getNext(); 108 132 range.moveToPosition( breakObject, CKEDITOR.POSITION_AFTER_END ); 109 range.select();110 }111 133 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' ); 113 138 114 if ( previous && CKEDITOR.dtd[ previous.getName() ].div )115 breakObject.move( previous );116 } 139 range.select(); 140 } 141 } 117 142 118 143 editor.fire( 'saveSnapshot' ); 119 144 } -
_source/core/dom/element.js
714 714 715 715 isEditable : function() 716 716 { 717 if ( this.isReadOnly() ) 718 return false; 719 717 720 // Get the element name. 718 721 var name = this.getName(); 719 722 -
_source/plugins/wysiwygarea/plugin.js
22 22 function nonExitable( element ) 23 23 { 24 24 return ( element.getName() in nonExitableElementNames ) 25 || element.isBlockBoundary() && CKEDITOR.dtd.$empty[ element.getName() ];25 || element.isBlockBoundary() && ( CKEDITOR.dtd.$empty[ element.getName() ] || element.isReadOnly() ); 26 26 } 27 27 28 28 … … 369 369 var pathBlock = path.block || path.blockLimit, 370 370 lastNode = pathBlock && pathBlock.getLast( isNotEmpty ); 371 371 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) 373 373 if ( pathBlock 374 374 && !( lastNode && lastNode.type == CKEDITOR.NODE_ELEMENT && lastNode.isBlockBoundary() ) 375 375 && !pathBlock.is( 'pre' ) 376 && !pathBlock.isReadOnly() 376 377 && !pathBlock.getBogus() ) 377 378 { 378 379 editor.fire( 'updateSnapshot' ); -
_source/plugins/elementspath/plugin.js
138 138 { 139 139 var index = elementsList.push( element ) - 1; 140 140 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' ) ) 142 144 name = element.data( 'cke-real-element-type' ); 143 145 else 144 146 name = element.getName();