Ticket #1717: infinite_loop_avoidance.patch
File infinite_loop_avoidance.patch, 2.4 KB (added by , 15 years ago) |
---|
-
editor/_source/classes/fckdomrangeiterator.js
258 258 // block. 259 259 if ( !range.CheckStartOfBlock() || !range.CheckEndOfBlock() ) 260 260 { 261 // The resulting block will be a clone of the current one.262 block = block.cloneNode( false) ;261 // Extract the range contents, move it to a new block if the extracted contents aren't empty. 262 var contentsFragment = range.ExtractContents() ; 263 263 264 // Extract the range contents, moving it to the new block. 265 range.ExtractContents().AppendTo( block ) ; 266 FCKDomTools.TrimNode( block ) ; 264 // Examine the extracted contents, see if there's any visible content in it. 265 var contentsRoot = contentsFragment.RootNode ; 266 var editStartNode = contentsRoot, editEndNode = contentsRoot, child ; 267 while ( ( child = editStartNode.firstChild ) && child.nodeType == 1 && 268 FCKListsLib.InlineNonEmptyElements[ child.nodeName.toLowerCase() ] ) 269 editStartNode = child ; 270 while ( ( child = editEndNode.firstChild ) && child.nodeType == 1 && 271 FCKListsLib.InlineNonEmptyElements[ child.nodeName.toLowerCase() ] ) 272 editEndNode = child ; 267 273 268 // Split the block. At this point, the range will be in the 269 // right position for our intents. 270 var splitInfo = range.SplitBlock() ; 274 // Check if the extracted contents if visibly empty by checking if there's any editable 275 // contents. 276 if ( editStartNode != editEndNode || editStartNode.firstChild ) 277 { 278 // The resulting block will be a clone of the current one. 279 block = block.cloneNode( false ) ; 271 280 272 removePreviousBr = !splitInfo.WasStartOfBlock;273 removeLastBr = !splitInfo.WasEndOfBlock;281 contentsFragment.AppendTo( block ) ; 282 FCKDomTools.TrimNode( block ) ; 274 283 275 // Insert the new block into the DOM. 276 range.InsertNode( block ) ; 284 // Split the block. At this point, the range will be in the 285 // right position for our intents. 286 var splitInfo = range.SplitBlock() ; 287 288 removePreviousBr = !splitInfo.WasStartOfBlock ; 289 removeLastBr = !splitInfo.WasEndOfBlock ; 290 291 // Insert the new block into the DOM. 292 range.InsertNode( block ) ; 293 } 277 294 } 278 295 } 279 296 else if ( !isLast )