Changeset 2187


Ignore:
Timestamp:
07/07/08 09:52:45 (7 years ago)
Author:
martinkou
Message:

Added the ability to add nested div nested containers.

Location:
FCKeditor/branches/features/div_container/editor
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • FCKeditor/branches/features/div_container/editor/_source/internals/fckdomtools.js

    r2096 r2187  
    697697        SetElementMarker : function ( markerObj, element, attrName, value)
    698698        {
    699                 var id = String( parseInt( Math.random() * 0xfffffff, 10 ) ) ;
     699                var id = String( parseInt( Math.random() * 0xffffffff, 10 ) ) ;
    700700                element._FCKMarkerId = id ;
    701701                element[attrName] = value ;
  • FCKeditor/branches/features/div_container/editor/dialog/fck_div.html

    r2186 r2187  
    193193        var block ;
    194194
    195         if ( true )
    196         {
    197                 iterator.EnforceRealBlocks = true ;
    198                 var paragraphs = [] ;
    199                 while ( ( block = iterator.GetNextParagraph() ) )
    200                         paragraphs.push( block ) ;
    201 
    202                 // If no paragraphs, create one from the current selection position.
    203                 if ( paragraphs.length < 1 )
     195        iterator.EnforceRealBlocks = true ;
     196        var paragraphs = [] ;
     197        var groups = [] ;
     198        var lastBlockLimit = null ;
     199        while ( ( block = iterator.GetNextParagraph() ) )
     200        {
     201                var elementPath = new FCKElementPath( block ) ;
     202                if ( elementPath.BlockLimit != lastBlockLimit )
    204203                {
    205                         para = range.Window.document.createElement( FCKConfig.EnterMode.IEquals( 'p' ) ? 'p' : 'div' ) ;
    206                         range.InsertNode( para ) ;
    207                         para.appendChild( range.Window.document.createTextNode( '\ufeff' ) ) ;
    208                         range.MoveToBookmark( bookmark ) ;
    209                         range.MoveToNodeContents( para ) ;
    210                         range.Collapse( true ) ;
    211                         bookmark = range.CreateBookmark() ;
    212                         paragraphs.push( para ) ;
     204                        groups.push( [] ) ;
     205                        lastBlockLimit = elementPath.BlockLimit ;
    213206                }
    214 
    215                 // Make sure all paragraphs have the same parent.
    216                 var commonParent = paragraphs[0].parentNode ;
    217                 var tmp = [] ;
    218                 for ( var i = 0 ; i < paragraphs.length ; i++ )
    219                 {
    220                         block = paragraphs[i] ;
    221                         commonParent = FCKDomTools.GetCommonParents( block.parentNode, commonParent ).pop() ;
    222                 }
    223                 var lastBlock = null ;
    224                 while ( paragraphs.length > 0 )
    225                 {
    226                         block = paragraphs.shift() ;
    227                         while ( block.parentNode != commonParent )
    228                                 block = block.parentNode ;
    229                         if ( block != lastBlock )
    230                                 tmp.push( block ) ;
    231                         lastBlock = block ;
    232                 }
    233 
    234                 // If any of the selected blocks is a $tagName, remove it to prevent nested $tagNames.
    235                 while ( tmp.length > 0 )
    236                 {
    237                         block = tmp.shift() ;
    238                         if ( block.nodeName.IEquals( 'div' ) )
    239                         {
    240                                 var docFrag = oEditor.FCKTools.GetElementDocument( block ).createDocumentFragment() ;
    241                                 while ( block.firstChild )
    242                                 {
    243                                         docFrag.appendChild( block.removeChild( block.firstChild ) ) ;
    244                                         paragraphs.push( docFrag.lastChild ) ;
    245                                 }
    246                                 block.parentNode.replaceChild( docFrag, block ) ;
    247                         }
    248                         else
    249                                 paragraphs.push( block ) ;
    250                 }
    251 
    252                 // Now we have all the blocks to be included in a new $tagName node.
    253                 bqBlock = range.Window.document.createElement( 'div' ) ;
    254                 commonParent.insertBefore( bqBlock, paragraphs[0] ) ;
    255                 while ( paragraphs.length > 0 )
    256                 {
    257                         block = paragraphs.shift() ;
    258                         bqBlock.appendChild( block ) ;
    259                 }
     207                groups[groups.length - 1].push( block ) ;
     208        }
     209
     210        for ( var i = 0 ; i < groups.length ; i++ )
     211        {
     212                var divNode = FCK.EditorDocument.createElement( 'div' ) ;
     213                groups[i][0].parentNode.insertBefore( divNode, groups[i][0] ) ;
     214                for ( var j = 0 ; j < groups[i].length ; j++ )
     215                        FCKDomTools.MoveNode( groups[i][j], divNode ) ;
     216                bqBlock = divNode ;
    260217        }
    261218
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy