Ticket #6107: 6107_9.patch
File 6107_9.patch, 6.1 KB (added by , 13 years ago) |
---|
-
_source/plugins/stylescombo/plugin.js
106 106 107 107 var elementPath = new CKEDITOR.dom.elementPath( selection.getStartElement() ); 108 108 109 if ( style.type == CKEDITOR.STYLE_INLINE && style.checkActive( elementPath ) ) 110 style.remove( editor.document ); 111 else if ( style.type == CKEDITOR.STYLE_OBJECT && style.checkActive( elementPath ) ) 112 style.remove( editor.document ); 113 else 114 style.apply( editor.document ); 109 style[ style.checkActive( elementPath ) ? 'remove' : 'apply' ]( editor.document ); 115 110 116 111 editor.fire( 'saveSnapshot' ); 117 112 }, -
_source/plugins/format/plugin.js
54 54 editor.focus(); 55 55 editor.fire( 'saveSnapshot' ); 56 56 57 styles[ value ].apply( editor.document ); 57 var style = styles[ value ], 58 elementPath = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() ); 58 59 60 style[ style.checkActive( elementPath ) ? 'remove' : 'apply' ]( editor.document ); 61 59 62 // Save the undo snapshot after all changes are affected. (#4899) 60 63 setTimeout( function() 61 64 { -
_source/plugins/styles/plugin.js
149 149 return ( this.removeFromRange = 150 150 this.type == CKEDITOR.STYLE_INLINE ? 151 151 removeInlineStyle 152 : this.type == CKEDITOR.STYLE_BLOCK ? 153 removeBlockStyle 152 154 : this.type == CKEDITOR.STYLE_OBJECT ? 153 155 removeObjectStyle 154 156 : null ).call( this, range ); … … 881 883 range.moveToBookmark( bookmark ); 882 884 } 883 885 886 function removeBlockStyle( range ) 887 { 888 // Serializible bookmarks is needed here since 889 // elements may be merged. 890 var bookmark = range.createBookmark( 1 ); 891 892 var iterator = range.createIterator(); 893 iterator.enforceRealBlocks = true; 894 iterator.enlargeBr = this._.enterMode != CKEDITOR.ENTER_BR; 895 896 var block; 897 while ( ( block = iterator.getNextParagraph() ) ) 898 this.checkElementRemovable( block ) && removeFromElement( this, block, 1 ); 899 900 range.moveToBookmark( bookmark ); 901 } 902 884 903 // Replace the original block with new one, with special treatment 885 904 // for <pre> blocks to make sure content format is well preserved, and merging/splitting adjacent 886 905 // when necessary.(#3188) … … 1063 1082 function removeFromElement( style, element ) 1064 1083 { 1065 1084 var def = style._.definition, 1066 attributes = CKEDITOR.tools.extend( {}, def.attributes, getOverrides( style )[ element.getName() ] ), 1085 elementName = element.getName(), 1086 attributes = CKEDITOR.tools.extend( {}, def.attributes, getOverrides( style )[ elementName ] ), 1067 1087 styles = def.styles, 1068 1088 // If the style is only about the element itself, we have to remove the element. 1069 1089 removeEmpty = CKEDITOR.tools.isEmpty( attributes ) && CKEDITOR.tools.isEmpty( styles ); … … 1090 1110 element.removeStyle( styleName ); 1091 1111 } 1092 1112 1093 removeEmpty && removeNoAttribsElement( element ); 1094 } 1113 if ( removeEmpty ) 1114 { 1115 ( !CKEDITOR.dtd.$block[ elementName ] || style._.enterMode == CKEDITOR.ENTER_BR ) && !element.hasAttributes() ? 1116 removeNoAttribsElement( element ) : 1117 element.renameNode( elementName in CKEDITOR.dtd.$block ? 1118 style._.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' : 'span' ); 1119 } 1120 } 1095 1121 1096 1122 // Removes a style from inside an element. 1097 1123 function removeFromInsideElement( style, element ) … … 1160 1186 removeNoAttribsElement( element ); 1161 1187 } 1162 1188 1189 var nonWhitespaces = CKEDITOR.dom.walker.whitespaces( 1 ); 1163 1190 // If the element has no more attributes, remove it. 1164 1191 function removeNoAttribsElement( element ) 1165 1192 { … … 1167 1194 // leaving its children. 1168 1195 if ( !element.hasAttributes() ) 1169 1196 { 1170 // Removing elements may open points where merging is possible, 1171 // so let's cache the first and last nodes for later checking. 1172 var firstChild = element.getFirst(); 1173 var lastChild = element.getLast(); 1197 if ( CKEDITOR.dtd.$block[ element.getName() ] ) 1198 { 1199 var previous = element.getPrevious( nonWhitespaces ), 1200 next = element.getNext( nonWhitespaces ); 1201 1202 if ( previous && ( previous.type == CKEDITOR.NODE_TEXT || !previous.isBlockBoundary( { br : 1 } ) ) ) 1203 element.append( 'br', 1 ); 1204 if ( next && ( next.type == CKEDITOR.NODE_TEXT || !next.isBlockBoundary( { br : 1 } ) ) ) 1205 element.append( 'br' ); 1206 1207 element.remove( true ); 1208 } 1209 else 1210 { 1211 // Removing elements may open points where merging is possible, 1212 // so let's cache the first and last nodes for later checking. 1213 var firstChild = element.getFirst(); 1214 var lastChild = element.getLast(); 1174 1215 1175 element.remove( true );1216 element.remove( true ); 1176 1217 1177 if ( firstChild )1178 {1179 // Check the cached nodes for merging.1180 firstChild.type == CKEDITOR.NODE_ELEMENT && firstChild.mergeSiblings();1218 if ( firstChild ) 1219 { 1220 // Check the cached nodes for merging. 1221 firstChild.type == CKEDITOR.NODE_ELEMENT && firstChild.mergeSiblings(); 1181 1222 1182 if ( lastChild && !firstChild.equals( lastChild ) 1183 && lastChild.type == CKEDITOR.NODE_ELEMENT ) 1184 lastChild.mergeSiblings(); 1185 } 1186 } 1187 } 1223 if ( lastChild && !firstChild.equals( lastChild ) 1224 && lastChild.type == CKEDITOR.NODE_ELEMENT ) 1225 lastChild.mergeSiblings(); 1226 } 1227 1228 } 1229 } 1230 } 1188 1231 1189 1232 function getElement( style, targetDocument, element ) 1190 1233 { … … 1436 1479 1437 1480 var iterator = ranges.createIterator(); 1438 1481 while ( ( range = iterator.getNextRange() ) ) 1439 {1440 1482 func.call( this, range ); 1441 }1442 1483 1443 1484 selection.selectRanges( ranges ); 1444 1485