Changeset 308
- Timestamp:
- 2007-05-18 17:59:45 (3 years ago)
- Location:
- FCKeditor/trunk/editor
- Files:
-
- 26 modified
-
dialog/fck_anchor.html (modified) (1 diff)
-
dialog/fck_button.html (modified) (1 diff)
-
dialog/fck_checkbox.html (modified) (1 diff)
-
dialog/fck_flash/fck_flash.js (modified) (1 diff)
-
dialog/fck_form.html (modified) (2 diffs)
-
dialog/fck_hiddenfield.html (modified) (1 diff)
-
dialog/fck_image/fck_image.js (modified) (1 diff)
-
dialog/fck_link/fck_link.js (modified) (1 diff)
-
dialog/fck_radiobutton.html (modified) (1 diff)
-
dialog/fck_select.html (modified) (1 diff)
-
dialog/fck_smiley.html (modified) (1 diff)
-
dialog/fck_textarea.html (modified) (1 diff)
-
dialog/fck_textfield.html (modified) (1 diff)
-
plugins/placeholder/fckplugin.js (modified) (1 diff)
-
_source/classes/fckdomrange.js (modified) (5 diffs)
-
_source/classes/fckenterkey.js (modified) (5 diffs)
-
_source/commandclasses/fck_othercommands.js (modified) (2 diffs)
-
_source/fckjscoreextensions.js (modified) (2 diffs)
-
_source/internals/fckcommands.js (modified) (1 diff)
-
_source/internals/fck_gecko.js (modified) (1 diff)
-
_source/internals/fck_ie.js (modified) (1 diff)
-
_source/internals/fck.js (modified) (2 diffs)
-
_source/internals/fcklistslib.js (modified) (1 diff)
-
_source/internals/fcktoolbaritems.js (modified) (1 diff)
-
_source/internals/fcktools.js (modified) (1 diff)
-
_source/internals/fckxhtml_ie.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
FCKeditor/trunk/editor/dialog/fck_anchor.html
r132 r308 115 115 { 116 116 // Nothing was selected, so now just create a normal A 117 oAnchor = oEditor.FCK. CreateElement( 'a' ) ;117 oAnchor = oEditor.FCK.InsertElement( 'a' ) ; 118 118 } 119 119 else -
FCKeditor/trunk/editor/dialog/fck_button.html
r132 r308 62 62 oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ; 63 63 oActiveEl.type = GetE('txtType').value ; 64 oActiveEl = oEditor.FCK.InsertElement AndGetIt( oActiveEl ) ;64 oActiveEl = oEditor.FCK.InsertElement( oActiveEl ) ; 65 65 } 66 66 -
FCKeditor/trunk/editor/dialog/fck_checkbox.html
r132 r308 60 60 oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ; 61 61 oActiveEl.type = 'checkbox' ; 62 oActiveEl = oEditor.FCK.InsertElement AndGetIt( oActiveEl ) ;62 oActiveEl = oEditor.FCK.InsertElement( oActiveEl ) ; 63 63 } 64 64 -
FCKeditor/trunk/editor/dialog/fck_flash/fck_flash.js
r251 r308 134 134 oFakeImage = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Flash', oEmbed ) ; 135 135 oFakeImage.setAttribute( '_fckflash', 'true', 0 ) ; 136 oFakeImage = FCK.InsertElement AndGetIt( oFakeImage ) ;136 oFakeImage = FCK.InsertElement( oFakeImage ) ; 137 137 } 138 138 else -
FCKeditor/trunk/editor/dialog/fck_form.html
r132 r308 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 2 2 <!-- 3 3 * FCKeditor - The text editor for Internet - http://www.fckeditor.net … … 58 58 if ( !oActiveEl ) 59 59 { 60 oActiveEl = oEditor.FCK.EditorDocument.createElement( 'FORM' ) ; 61 oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; 62 oActiveEl.innerHTML = ' ' ; 60 oActiveEl = oEditor.FCK.InsertElement( 'form' ) ; 61 62 if ( oEditor.FCKBrowserInfo.IsGeckoLike ) 63 oActiveEl.innerHTML = GECKO_BOGUS ; 63 64 } 64 65 65 66 oActiveEl.name = GetE('txtName').value ; 66 SetAttribute( oActiveEl, 'action' , GetE('txtAction').value ) ;67 SetAttribute( oActiveEl, 'action', GetE('txtAction').value ) ; 67 68 oActiveEl.method = GetE('txtMethod').value ; 68 69 -
FCKeditor/trunk/editor/dialog/fck_hiddenfield.html
r202 r308 80 80 oFakeImage = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__InputHidden', oActiveEl ) ; 81 81 oFakeImage.setAttribute( '_fckinputhidden', 'true', 0 ) ; 82 oFakeImage = FCK.InsertElement AndGetIt( oFakeImage ) ;82 oFakeImage = FCK.InsertElement( oFakeImage ) ; 83 83 } 84 84 else -
FCKeditor/trunk/editor/dialog/fck_image/fck_image.js
r281 r308 221 221 if ( bImageButton ) 222 222 { 223 oImage = FCK.EditorDocument.createElement( ' INPUT' ) ;223 oImage = FCK.EditorDocument.createElement( 'input' ) ; 224 224 oImage.type = 'image' ; 225 oImage = FCK.InsertElement AndGetIt( oImage ) ;225 oImage = FCK.InsertElement( oImage ) ; 226 226 } 227 227 else 228 oImage = FCK. CreateElement( 'IMG' ) ;228 oImage = FCK.InsertElement( 'img' ) ; 229 229 } 230 230 else -
FCKeditor/trunk/editor/dialog/fck_link/fck_link.js
r255 r308 538 538 539 539 // Create a new (empty) anchor. 540 oLink = oEditor.FCK. CreateElement( 'a' ) ;540 oLink = oEditor.FCK.InsertElement( 'a' ) ; 541 541 } 542 542 -
FCKeditor/trunk/editor/dialog/fck_radiobutton.html
r132 r308 60 60 oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ; 61 61 oActiveEl.type = 'radio' ; 62 oActiveEl = oEditor.FCK.InsertElement AndGetIt( oActiveEl ) ;62 oActiveEl = oEditor.FCK.InsertElement( oActiveEl ) ; 63 63 } 64 64 -
FCKeditor/trunk/editor/dialog/fck_select.html
r132 r308 79 79 80 80 if ( !oActiveEl ) 81 { 82 oActiveEl = oEditor.FCK.EditorDocument.createElement( 'SELECT' ) ; 83 oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; 84 } 81 oActiveEl = oEditor.FCK.InsertElement( 'select' ) ; 85 82 86 83 SetAttribute( oActiveEl, 'name' , GetE('txtName').value ) ; -
FCKeditor/trunk/editor/dialog/fck_smiley.html
r132 r308 46 46 function InsertSmiley( url ) 47 47 { 48 var oImg = oEditor.FCK. CreateElement( 'IMG' ) ;48 var oImg = oEditor.FCK.InsertElement( 'img' ) ; 49 49 oImg.src = url ; 50 50 oImg.setAttribute( '_fcksavedurl', url ) ; -
FCKeditor/trunk/editor/dialog/fck_textarea.html
r132 r308 57 57 { 58 58 if ( !oActiveEl ) 59 { 60 oActiveEl = oEditor.FCK.EditorDocument.createElement( 'TEXTAREA' ) ; 61 oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; 62 } 59 oActiveEl = oEditor.FCK.InsertElement( 'textarea' ) ; 63 60 64 61 oActiveEl.name = GetE('txtName').value ; -
FCKeditor/trunk/editor/dialog/fck_textfield.html
r132 r308 77 77 oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ; 78 78 oActiveEl.type = GetE('txtType').value ; 79 oActiveEl = oEditor.FCK.InsertElement AndGetIt( oActiveEl ) ;79 oActiveEl = oEditor.FCK.InsertElement( oActiveEl ) ; 80 80 } 81 81 -
FCKeditor/trunk/editor/plugins/placeholder/fckplugin.js
r132 r308 38 38 FCKPlaceholders.Add = function( name ) 39 39 { 40 var oSpan = FCK. CreateElement( 'SPAN' ) ;40 var oSpan = FCK.InsertElement( 'span' ) ; 41 41 this.SetupSpan( oSpan, name ) ; 42 42 } -
FCKeditor/trunk/editor/_source/classes/fckdomrange.js
r207 r308 181 181 182 182 var bIsEndOfBlock = oTestRange.CheckIsCollapsed() ; 183 183 184 184 if ( !bIsEndOfBlock ) 185 185 { … … 188 188 oTestRange._Range.cloneContents().AppendTo( eToolDiv ) ; 189 189 FCKDomTools.TrimNode( eToolDiv, true ) ; 190 190 191 191 // Find out if we are in an empty tree of inline elements, like <b><i><span></span></i></b> 192 192 bIsEndOfBlock = true ; … … 206 206 } 207 207 } 208 208 209 209 oTestRange.Release() ; 210 210 … … 273 273 else 274 274 this.Collapse( true ) ; 275 276 this._UpdateElementInfo() ; 277 }, 278 279 MoveToPosition : function( targetElement, position ) 280 { 281 this.SetStart( targetElement, position ) ; 282 this.Collapse( true ) ; 275 283 }, 276 284 … … 442 450 }, 443 451 452 SplitBlock : function() 453 { 454 if ( !this._Range ) 455 this.MoveToSelection() ; 456 457 // The selection boundaries must be in the same "block limit" element. 458 if ( this.StartBlockLimit == this.EndBlockLimit ) 459 { 460 // Get the current blocks. 461 var eStartBlock = this.StartBlock ; 462 var eEndBlock = this.EndBlock ; 463 464 if ( FCKConfig.EnterMode != 'br' ) 465 { 466 if ( !eStartBlock ) 467 { 468 eStartBlock = this._FixBlock( true ) ; 469 eEndBlock = this.EndBlock ; // _FixBlock may have fixed the EndBlock too. 470 } 471 472 if ( !eEndBlock ) 473 eEndBlock = this._FixBlock( false ) ; 474 } 475 476 var bIsStartOfBlock = ( eStartBlock != null && this.CheckStartOfBlock() ) ; 477 var bIsEndOfBlock = ( eEndBlock != null && this.CheckEndOfBlock() ) ; 478 479 // Delete the current selection. 480 if ( !this.CheckIsEmpty() ) 481 this.DeleteContents() ; 482 483 if ( eStartBlock && eEndBlock && eStartBlock == eEndBlock ) 484 { 485 if ( bIsStartOfBlock ) 486 { 487 this.MoveToPosition( eStartBlock, 3 ) ; 488 eStartBlock = null ; 489 } 490 else if ( bIsEndOfBlock ) 491 { 492 this.MoveToPosition( eEndBlock, 4 ) ; 493 eEndBlock = null ; 494 } 495 else 496 { 497 // Extract the contents of the block from the selection point to the end of its contents. 498 this.SetEnd( eStartBlock, 2 ) ; 499 var eDocFrag = this.ExtractContents() ; 500 FCKDomTools.TrimNode( eDocFrag.RootNode ) ; 501 502 // Duplicate the block element after it. 503 eEndBlock = eStartBlock.cloneNode( false ) ; 504 505 // Place the extracted contents in the duplicated block. 506 eDocFrag.AppendTo( eEndBlock ) ; 507 508 FCKDomTools.InsertAfterNode( eStartBlock, eEndBlock ) ; 509 510 this.MoveToPosition( eStartBlock, 4 ) ; 511 } 512 } 513 514 if ( FCKBrowserInfo.IsGecko ) 515 { 516 // In Gecko, the last child node must be a bogus <br>. 517 FCKTools.AppendBogusBr( eStartBlock ) ; 518 FCKTools.AppendBogusBr( eEndBlock ) ; 519 } 520 521 return { 522 PreviousBlock : eStartBlock, 523 NextBlock : eEndBlock, 524 WasStartOfBlock : bIsStartOfBlock, 525 WasEndOfBlock : bIsEndOfBlock 526 } ; 527 } 528 529 return null ; 530 }, 531 532 // Transform a block without a block tag in a valid block (orphan text in the body or td, usually). 533 _FixBlock : function( isStart ) 534 { 535 // Bookmark the range so we can restore it later. 536 var oBookmark = this.CreateBookmark() ; 537 538 // Collapse the range to the requested ending boundary. 539 this.Collapse( isStart ) ; 540 541 // Expands it to the block contents. 542 this.Expand( 'block_contents' ) ; 543 544 // Create the fixed block. 545 var oFixedBlock = this.Window.document.createElement( FCKConfig.EnterMode ) ; 546 547 // Move the contents of the temporary range to the fixed block. 548 this.ExtractContents().AppendTo( oFixedBlock ) ; 549 FCKDomTools.TrimNode( oFixedBlock ) ; 550 551 // Insert the fixed block into the DOM. 552 this.InsertNode( oFixedBlock ) ; 553 554 // Move the range back to the bookmarked place. 555 this.MoveToBookmark( oBookmark ) ; 556 557 return oFixedBlock ; 558 }, 559 444 560 Release : function( preserveWindow ) 445 561 { -
FCKeditor/trunk/editor/_source/classes/fckenterkey.js
r218 r308 285 285 var oRange = range || new FCKDomRange( this.Window ) ; 286 286 287 // If we don't have a range, move it to the selection. 288 if ( !range ) 289 oRange.MoveToSelection() ; 290 291 // The selection boundaries must be in the same "block limit" element. 292 if ( oRange.StartBlockLimit == oRange.EndBlockLimit ) 293 { 294 // If the StartBlock or EndBlock are not available (for text without a 295 // block tag), we must fix them, by moving the text to a block. 296 if ( !oRange.StartBlock ) 297 this._FixBlock( oRange, true, blockTag ) ; 298 299 if ( !oRange.EndBlock ) 300 this._FixBlock( oRange, false, blockTag ) ; 301 287 var oSplitInfo = oRange.SplitBlock() ; 288 289 if ( oSplitInfo ) 290 { 302 291 // Get the current blocks. 303 var eStartBlock = oRange.StartBlock ; 304 var eEndBlock = oRange.EndBlock ; 305 306 // Delete the current selection. 307 if ( !oRange.CheckIsEmpty() ) 308 oRange.DeleteContents() ; 309 310 // If the selection boundaries are in the same block element 311 if ( eStartBlock == eEndBlock ) 312 { 292 var ePreviousBlock = oSplitInfo.PreviousBlock ; 293 var eNextBlock = oSplitInfo.NextBlock ; 294 295 var bIsStartOfBlock = oSplitInfo.WasStartOfBlock ; 296 var bIsEndOfBlock = oSplitInfo.WasEndOfBlock ; 297 298 // If we have both the previous and next blocks, it means that the 299 // boundaries were on separated blocks, or none of them where on the 300 // block limits (start/end). 301 if ( !oSplitInfo.WasStartOfBlock && !oSplitInfo.WasEndOfBlock ) 302 { 303 // Move the selection to the end block. 304 if ( eNextBlock ) 305 oRange.MoveToElementEditStart( eNextBlock ) ; 306 } 307 else 308 { 309 if ( bIsStartOfBlock && bIsEndOfBlock && eNextBlock.tagName.toUpperCase() == 'LI' ) 310 { 311 oRange.MoveToElementStart( eNextBlock ) ; 312 this._OutdentWithSelection( eNextBlock, oRange ) ; 313 oRange.Release() ; 314 return true ; 315 } 316 313 317 var eNewBlock ; 314 318 315 var bIsStartOfBlock = oRange.CheckStartOfBlock() ; 316 var bIsEndOfBlock = oRange.CheckEndOfBlock() ; 317 318 if ( bIsStartOfBlock && !bIsEndOfBlock ) 319 { 320 eNewBlock = eStartBlock.cloneNode(false) ; 321 322 if ( FCKBrowserInfo.IsGeckoLike ) 323 eNewBlock.innerHTML = GECKO_BOGUS ; 324 325 // Place the new block before the current block element. 326 eStartBlock.parentNode.insertBefore( eNewBlock, eStartBlock ) ; 327 328 // This is tricky, but to make the new block visible correctly 329 // we must select it. 330 if ( FCKBrowserInfo.IsIE ) 331 { 332 // Move the selection to the new block. 333 oRange.MoveToNodeContents( eNewBlock ) ; 334 335 oRange.Select() ; 336 } 337 338 // Move the selection to the new block. 339 oRange.MoveToElementEditStart( eStartBlock ) ; 340 } 341 else 342 { 343 // Check if the selection is at the end of the block. 344 if ( bIsEndOfBlock ) 345 { 346 var sStartBlockTag = eStartBlock.tagName.toUpperCase() ; 347 348 // If the entire block is selected, and we are in a LI, let's decrease its indentation. 349 if ( bIsStartOfBlock && sStartBlockTag == 'LI' ) 350 { 351 this._OutdentWithSelection( eStartBlock, oRange ) ; 352 oRange.Release() ; 353 return true ; 354 } 355 else 356 { 357 // If is a header tag, or we are in a Shift+Enter (#77), 358 // create a new block element. 359 if ( (/^H[1-6]$/).test( sStartBlockTag ) || this._HasShift ) 360 eNewBlock = this.Window.document.createElement( blockTag ) ; 361 // Otherwise, duplicate the current block. 362 else 363 { 364 eNewBlock = eStartBlock.cloneNode(false) ; 365 this._RecreateEndingTree( eStartBlock, eNewBlock ) ; 366 } 367 368 if ( FCKBrowserInfo.IsGeckoLike ) 369 { 370 eNewBlock.innerHTML = GECKO_BOGUS ; 371 372 // If the entire block is selected, let's add a bogus in the start block. 373 if ( bIsStartOfBlock ) 374 eStartBlock.innerHTML = GECKO_BOGUS ; 375 } 376 } 377 } 319 if ( ePreviousBlock ) 320 { 321 var sPreviousBlockTag = ePreviousBlock.tagName.toUpperCase() ; 322 323 // If is a header tag, or we are in a Shift+Enter (#77), 324 // create a new block element. 325 if ( this._HasShift || (/^H[1-6]$/).test( sPreviousBlockTag ) ) 326 eNewBlock = this.Window.document.createElement( blockTag ) ; 378 327 else 379 328 { 380 // Extract the contents of the block from the selection point to the end of its contents. 381 oRange.SetEnd( eStartBlock, 2 ) ; 382 var eDocFrag = oRange.ExtractContents() ; 383 384 // Duplicate the block element after it. 385 eNewBlock = eStartBlock.cloneNode(false) ; 386 387 // It could be that we are in a LI with a child UL/OL. Insert a bogus to give us space to type. 388 FCKDomTools.TrimNode( eDocFrag.RootNode ) ; 389 if ( eDocFrag.RootNode.firstChild.nodeType == 1 && eDocFrag.RootNode.firstChild.tagName.toUpperCase().Equals( 'UL', 'OL' ) ) 390 eNewBlock.innerHTML = GECKO_BOGUS ; 391 392 // Place the extracted contents in the duplicated block. 393 eDocFrag.AppendTo( eNewBlock ) ; 394 395 if ( FCKBrowserInfo.IsGecko ) 396 { 397 // In Gecko, the last child node must be a bogus <br>. 398 this._AppendBogusBr( eStartBlock ) ; 399 this._AppendBogusBr( eNewBlock ) ; 400 } 329 // Otherwise, duplicate the previous block. 330 eNewBlock = ePreviousBlock.cloneNode( false ) ; 331 this._RecreateEndingTree( ePreviousBlock, eNewBlock ) ; 401 332 } 402 403 if ( eNewBlock ) 404 { 405 FCKDomTools.InsertAfterNode( eStartBlock, eNewBlock ) ; 406 407 // Move the selection to the new block. 408 oRange.MoveToElementEditStart( eNewBlock ) ; 409 410 if ( FCKBrowserInfo.IsGecko ) 411 eNewBlock.scrollIntoView( false ) ; 412 } 413 } 414 } 415 else 416 { 417 // Move the selection to the end block. 418 oRange.MoveToElementEditStart( eEndBlock ) ; 333 } 334 else if ( eNextBlock ) 335 { 336 eNewBlock = eNextBlock.cloneNode( false ) ; 337 } 338 else 339 eNewBlock = this.Window.document.createElement( blockTag ) ; 340 341 if ( FCKBrowserInfo.IsGeckoLike ) 342 eNewBlock.innerHTML = GECKO_BOGUS ; 343 344 oRange.InsertNode( eNewBlock ) ; 345 346 // This is tricky, but to make the new block visible correctly 347 // we must select it. 348 if ( FCKBrowserInfo.IsIE ) 349 { 350 // Move the selection to the new block. 351 oRange.MoveToNodeContents( eNewBlock ) ; 352 oRange.Select() ; 353 } 354 355 oRange.MoveToElementEditStart( bIsStartOfBlock ? eNextBlock : eNewBlock ) ; 356 357 if ( FCKBrowserInfo.IsGecko ) 358 eNewBlock.scrollIntoView( false ) ; 419 359 } 420 360 … … 455 395 if ( !bHasShift && bIsEndOfBlock && (/^H[1-6]$/).test( sStartBlockTag ) ) 456 396 { 457 FCKDebug.Output( 'BR - Header' ) ;458 459 397 // Insert a BR after the current paragraph. 460 398 FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createElement( 'br' ) ) ; … … 469 407 else 470 408 { 471 FCKDebug.Output( 'BR - No Header' ) ;472 473 409 var eBr = this.Window.document.createElement( 'br' ) ; 474 410 … … 481 417 // If we are at the end of a block, we must be sure the bogus node is available in that block. 482 418 if ( bIsEndOfBlock && FCKBrowserInfo.IsGecko ) 483 this._AppendBogusBr( eBr.parentNode ) ;419 FCKTools.AppendBogusBr( eBr.parentNode ) ; 484 420 485 421 if ( FCKBrowserInfo.IsIE ) … … 500 436 501 437 return true ; 502 }503 504 // Transform a block without a block tag in a valid block (orphan text in the body or td, usually).505 FCKEnterKey.prototype._FixBlock = function( range, isStart, blockTag )506 {507 // Bookmark the range so we can restore it later.508 var oBookmark = range.CreateBookmark() ;509 510 // Collapse the range to the requested ending boundary.511 range.Collapse( isStart ) ;512 513 // Expands it to the block contents.514 range.Expand( 'block_contents' ) ;515 516 // Create the fixed block.517 var oFixedBlock = this.Window.document.createElement( blockTag ) ;518 519 // Move the contents of the temporary range to the fixed block.520 range.ExtractContents().AppendTo( oFixedBlock ) ;521 FCKDomTools.TrimNode( oFixedBlock ) ;522 523 // Insert the fixed block into the DOM.524 range.InsertNode( oFixedBlock ) ;525 526 // Move the range back to the bookmarked place.527 range.MoveToBookmark( oBookmark ) ;528 }529 530 // Appends a bogus <br> at the end of the element, if not yet available.531 FCKEnterKey.prototype._AppendBogusBr = function( element )532 {533 var eLastChild = element.getElementsByTagName('br') ;534 535 if ( eLastChild )536 eLastChild = eLastChild[ eLastChild.legth - 1 ] ;537 538 if ( !eLastChild || eLastChild.getAttribute( 'type', 2 ) != '_moz' )539 element.appendChild( FCKTools.CreateBogusBR( this.Window.document ) ) ;540 438 } 541 439 -
FCKeditor/trunk/editor/_source/commandclasses/fck_othercommands.js
r302 r308 280 280 281 281 var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', e ) ; 282 oFakeImage =FCK.InsertElement( oFakeImage ) ;282 FCK.InsertElement( oFakeImage ) ; 283 283 } 284 284 … … 380 380 } 381 381 } ; 382 383 // FCKRuleCommand 384 var FCKRuleCommand = function() 385 { 386 this.Name = 'Paste' ; 387 } 388 389 FCKRuleCommand.prototype = 390 { 391 Execute : function() 392 { 393 FCK.InsertElement( 'hr' ) ; 394 }, 395 396 GetState : function() 397 { 398 return FCK.GetNamedCommandState( 'InsertHorizotalRule' ) ; 399 } 400 } ; -
FCKeditor/trunk/editor/_source/fckjscoreextensions.js
r132 r308 76 76 } 77 77 78 Array.prototype.AddItem = function( item )79 {80 var i = this.length ;81 this[ i ] = item ;82 return i ;83 }84 85 Array.prototype.IndexOf = function( value )86 {87 for ( var i = 0 ; i < this.length ; i++ )88 {89 if ( this[i] == value )90 return i ;91 }92 return -1 ;93 }94 95 78 String.prototype.StartsWith = function( value ) 96 79 { … … 151 134 return this.replace( /\n/g, replacement ) ; 152 135 } 136 137 Array.prototype.AddItem = function( item ) 138 { 139 var i = this.length ; 140 this[ i ] = item ; 141 return i ; 142 } 143 144 Array.prototype.IndexOf = function( value ) 145 { 146 for ( var i = 0 ; i < this.length ; i++ ) 147 { 148 if ( this[i] == value ) 149 return i ; 150 } 151 return -1 ; 152 } -
FCKeditor/trunk/editor/_source/internals/fckcommands.js
r174 r308 70 70 case 'NewPage' : oCommand = new FCKNewPageCommand() ; break ; 71 71 case 'PageBreak' : oCommand = new FCKPageBreakCommand() ; break ; 72 case 'Rule' : oCommand = new FCKRuleCommand() ; break ; 72 73 73 74 case 'TextColor' : oCommand = new FCKTextColorCommand('ForeColor') ; break ; -
FCKeditor/trunk/editor/_source/internals/fck_gecko.js
r302 r308 177 177 } 178 178 179 FCK.InsertElement = function( element )180 {181 // Deletes the actual selection.182 var oSel = FCKSelection.Delete() ;183 184 // Gets the first available range.185 var oRange = oSel.getRangeAt(0) ;186 187 // Inserts the element in the range.188 oRange.insertNode( element ) ;189 190 // Set the cursor after the inserted fragment.191 FCKSelection.SelectNode( element ) ;192 FCKSelection.Collapse( false ) ;193 194 this.Focus() ;195 }196 197 179 FCK.PasteAsPlainText = function() 198 180 { -
FCKeditor/trunk/editor/_source/internals/fck_ie.js
r295 r308 318 318 } 319 319 320 FCK.InsertElement = function( element )321 {322 FCK.InsertHtml( element.outerHTML ) ;323 }324 325 320 FCK.GetClipboardHTML = function() 326 321 { -
FCKeditor/trunk/editor/_source/internals/fck.js
r302 r308 558 558 }, 559 559 560 CreateElement : function( tag ) 561 { 562 var e = FCK.EditorDocument.createElement( tag ) ; 563 return FCK.InsertElementAndGetIt( e ) ; 564 }, 565 566 InsertElementAndGetIt : function( e ) 567 { 568 e.setAttribute( 'FCKTempLabel', 'true' ) ; 569 570 this.InsertElement( e ) ; 571 572 var aEls = FCK.EditorDocument.getElementsByTagName( e.tagName ) ; 573 574 for ( var i = 0 ; i < aEls.length ; i++ ) 575 { 576 if ( aEls[i].getAttribute( 'FCKTempLabel' ) ) 560 InsertElement : function( element ) 561 { 562 // The parameter may be a string (element name), so transform it in an element. 563 if ( typeof element == 'string' ) 564 element = this.EditorDocument.createElement( element ) ; 565 566 var elementName = element.nodeName.toLowerCase() ; 567 568 // Create a range for the selection. V3 will have a new selection 569 // object that may internaly supply this feature. 570 var range = new FCKDomRange( this.EditorWindow ) ; 571 572 if ( FCKListsLib.BlockElements[ elementName ] != null ) 573 { 574 range.SplitBlock() ; 575 range.InsertNode( element ) ; 576 577 var next = FCKDomTools.GetNextSourceElement( element, false, null, [ 'hr','br','param','img','area','input' ] ) ; 578 579 // Be sure that we have something after the new element, so we can move the cursor there. 580 if ( !next && FCKConfig.EnterMode != 'br') 577 581 { 578 aEls[i].removeAttribute( 'FCKTempLabel' ) ; 579 return aEls[i] ; 582 next = this.EditorDocument.body.appendChild( this.EditorDocument.createElement( FCKConfig.EnterMode ) ) ; 583 584 if ( FCKBrowserInfo.IsGecko ) 585 next.innerHTML = GECKO_BOGUS ; 580 586 } 581 } 582 return null ; 587 588 if ( FCKListsLib.EmptyElements[ elementName ] == null ) 589 range.MoveToElementEditStart( element ) ; 590 else if ( next ) 591 range.MoveToElementEditStart( next ) ; 592 else 593 range.MoveToPosition( element, 4 ) ; 594 595 if ( FCKBrowserInfo.IsGecko ) 596 { 597 if ( next ) 598 next.scrollIntoView( false ) ; 599 element.scrollIntoView( false ) ; 600 } 601 } 602 else 603 { 604 // Delete the current selection and insert the node. 605 range.MoveToSelection() ; 606 range.DeleteContents() ; 607 range.InsertNode( element ) ; 608 609 // Move the selection right after the new element. 610 // DISCUSSION: Should we select the element instead? 611 range.SetStart( element, 4 ) ; 612 range.SetEnd( element, 4 ) ; 613 } 614 615 range.Select() ; 616 range.Release() ; 617 618 // REMOVE IT: The focus should not really be set here. It is up to the 619 // calling code to reset the focus if needed. 620 this.Focus() ; 621 622 return element ; 623 }, 624 625 _InsertBlockElement : function( blockElement ) 626 { 583 627 } 584 585 628 } ; 586 629 … … 592 635 // DEPRECATED in favor of "SetData". 593 636 FCK.SetHTML = FCK.SetData ; 637 638 // InsertElementAndGetIt and CreateElement are Deprecated : returns the same value as InsertElement. 639 FCK.InsertElementAndGetIt = FCK.CreateElement = FCK.InsertElement ; 594 640 595 641 // Replace all events attributes (like onclick). -
FCKeditor/trunk/editor/_source/internals/fcklistslib.js
r246 r308 32 32 33 33 // Block elements that may be filled with if empty. 34 NonEmptyBlockElements : { p:1,div:1, h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },34 NonEmptyBlockElements : { p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 }, 35 35 36 36 // Inline elements which MUST have child nodes. -
FCKeditor/trunk/editor/_source/internals/fcktoolbaritems.js
r152 r308 83 83 case 'PageBreak' : oItem = new FCKToolbarButton( 'PageBreak' , FCKLang.PageBreakLbl, FCKLang.PageBreak, null, false, true, 43 ) ; break ; 84 84 85 case 'Rule' : oItem = new FCKToolbarButton( ' InsertHorizontalRule', FCKLang.InsertLineLbl, FCKLang.InsertLine, null, false, true, 40 ) ; break ;85 case 'Rule' : oItem = new FCKToolbarButton( 'Rule' , FCKLang.InsertLineLbl, FCKLang.InsertLine, null, false, true, 40 ) ; break ; 86 86 87 87 case 'JustifyLeft' : oItem = new FCKToolbarButton( 'JustifyLeft' , FCKLang.LeftJustify, null, null, false, true, 30 ) ; break ; -
FCKeditor/trunk/editor/_source/internals/fcktools.js
r146 r308 224 224 return new fCloneCreator ; 225 225 } 226 227 // Appends a bogus <br> at the end of the element, if not yet available. 228 FCKTools.AppendBogusBr = function( element ) 229 { 230 if ( !element ) 231 return ; 232 233 var eLastChild = this.GetLastItem( element.getElementsByTagName('br') ) ; 234 235 if ( !eLastChild || eLastChild.getAttribute( 'type', 2 ) != '_moz' ) 236 element.appendChild( this.CreateBogusBR( this.GetElementDocument( element ) ) ) ; 237 } 238 239 FCKTools.GetLastItem = function( list ) 240 { 241 if ( list.length > 0 ) 242 return list[ list.length - 1 ] ; 243 244 return null ; 245 } -
FCKeditor/trunk/editor/_source/internals/fckxhtml_ie.js
r262 r308 171 171 FCKXHtml._AppendAttribute( node, 'name', nameAtt.value ) ; 172 172 173 node = FCKXHtml._AppendChildNodes( node, htmlNode ) ;173 node = FCKXHtml._AppendChildNodes( node, htmlNode, true ) ; 174 174 175 175 return node ;