Changeset 2187


Ignore:
Timestamp:
07/07/08 09:52:45 (6 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 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy