Ticket #6664: 6664_3.patch
File 6664_3.patch, 7.1 KB (added by , 14 years ago) |
---|
-
_source/plugins/pagebreak/plugin.js
22 22 command : 'pagebreak' 23 23 }); 24 24 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 25 38 // 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 ); 40 40 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 }); 42 51 }, 43 52 44 53 afterInit : function( editor ) 45 54 { 46 // Register a filter to displaying placeholders after mode change.55 var label = editor.lang.pagebreakAlt; 47 56 57 // Register a filter to displaying placeholders after mode change. 48 58 var dataProcessor = editor.dataProcessor, 49 dataFilter = dataProcessor && dataProcessor.dataFilter; 59 dataFilter = dataProcessor && dataProcessor.dataFilter, 60 htmlFilter = dataProcessor && dataProcessor.htmlFilter; 50 61 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;"> </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 51 85 if ( dataFilter ) 52 86 { 53 87 dataFilter.addRules( … … 63 97 64 98 if ( childStyle && ( /page-break-after\s*:\s*always/i ).test( style ) && ( /display\s*:\s*none/i ).test( childStyle ) ) 65 99 { 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; 71 108 } 72 109 } 73 110 } … … 82 119 { 83 120 exec : function( editor ) 84 121 { 85 // Create the element that represents a print break.86 122 var label = editor.lang.pagebreakAlt; 87 var breakObject = CKEDITOR.dom.element.createFromHtml( '<div style="page-break-after: always;"><span style="display: none;"> </span></div>' );88 123 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>' ); 92 135 93 136 var ranges = editor.getSelection().getRanges( true ); 94 137 … … 99 142 range = ranges[ i ]; 100 143 101 144 if ( i < ranges.length -1 ) 102 breakObject = breakObject.clone( true );145 pagebreak = pagebreak.clone( true ); 103 146 104 147 range.splitBlock( 'p' ); 105 range.insertNode( breakObject);148 range.insertNode( pagebreak ); 106 149 if ( i == ranges.length - 1 ) 107 150 { 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 ); 111 153 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' ); 113 158 114 if ( previous && CKEDITOR.dtd[ previous.getName() ].div )115 breakObject.move( previous );116 } 159 range.select(); 160 } 161 } 117 162 118 163 editor.fire( 'saveSnapshot' ); 119 164 } -
_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/styles/plugin.js
213 213 // current style definition. 214 214 checkElementRemovable : function( element, fullMatch ) 215 215 { 216 if ( !element )216 if ( !element || element.isReadOnly() ) 217 217 return false; 218 218 219 219 var def = this._.definition, -
_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();