Changeset 1714


Ignore:
Timestamp:
03/18/2008 09:24:36 AM (7 years ago)
Author:
fredck
Message:

Fixed #1647 : Hitting ENTER on list items containing block elements will not create new list item elements, instead of adding further blocks to the same list item.

Location:
FCKeditor/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • FCKeditor/trunk/_test/automated/_jsunit/app/jsUnitCore.js

    r1564 r1714  
    7676
    7777function _displayStringForValue(aVar) {
    78     var result = '<' + aVar + '>';
     78    var result = '[' + aVar + ']';
    7979    if (!(aVar === null || aVar === top.JSUNIT_UNDEFINED_VALUE)) {
    8080        result += ' (' + _trueTypeOf(aVar) + ')';
    8181    }
    82     return result;
     82    return '\n' + result + '\n';
    8383}
    8484
  • FCKeditor/trunk/_test/automated/tests/fckdomtools.html

    r1565 r1714  
    2929
    3030FCKScriptLoader.Load( 'FCKDomTools' ) ;
     31
     32        </script>
     33        <script type="text/javascript">
     34
     35var _BodyHtml ;
     36
     37function setUpPage()
     38{
     39        _BodyHtml = document.body.innerHTML ;
     40        setUpPageStatus = 'complete' ;
     41}
     42
     43// JsUnit special function called before every test start.
     44function setUp()
     45{
     46        // Reset the body (because of changes by test functions).
     47        document.body.innerHTML = _BodyHtml ;
     48}
     49
     50// Use window.onload to call a test outside JsUnit (for debugging).
     51// The "tests.js" script must be commented.
     52//window.onload = function()
     53//{
     54//      test_GetNextSourceNode() ;
     55//}
    3156
    3257        </script>
     
    89114}
    90115
     116function test_BreakParent_1()
     117{
     118        var p = document.getElementById( 'xBreakParent_P1' ) ;
     119       
     120        FCKDomTools.BreakParent( p.getElementsByTagName('span')[0], p.getElementsByTagName('i')[0] ) ;
     121
     122        assertEquals( 'SPAN breaks I', '<b>this <i>is some</i><span></span><i> sample</i> test text</b>', GetTestInnerHtml( p ) ) ;
     123}
     124
     125function test_BreakParent_2()
     126{
     127        var p = document.getElementById( 'xBreakParent_P1' ) ;
     128       
     129        FCKDomTools.BreakParent( p.getElementsByTagName('span')[0], p.getElementsByTagName('b')[0] ) ;
     130
     131        assertEquals( 'SPAN breaks B', '<b>this <i>is some</i></b><span></span><b><i> sample</i> test text</b>', GetTestInnerHtml( p ) ) ;
     132}
     133
     134function test_BreakParent_3()
     135{
     136        var p = document.getElementById( 'xBreakParent_P2' ) ;
     137       
     138        FCKDomTools.BreakParent( p.getElementsByTagName('span')[0], p.getElementsByTagName('i')[0] ) ;
     139
     140        assertEquals( 'SPAN breaks I', '<b><i></i><span>test</span><i></i></b>', GetTestInnerHtml( p ) ) ;
     141}
     142
     143function test_BreakParent_4()
     144{
     145        var p = document.getElementById( 'xBreakParent_P2' ) ;
     146       
     147        FCKDomTools.BreakParent( p.getElementsByTagName('span')[0], p.getElementsByTagName('b')[0] ) ;
     148
     149        assertEquals( 'SPAN breaks B', '<b><i></i></b><span>test</span><b><i></i></b>', GetTestInnerHtml( p ) ) ;
     150}
     151
     152function test_BreakParent_5()
     153{
     154        var p = document.getElementById( 'xBreakParent_P2' ) ;
     155       
     156        FCKDomTools.BreakParent( p.getElementsByTagName('i')[0], p.getElementsByTagName('b')[0] ) ;
     157
     158        assertEquals( 'I breaks B', '<b></b><i><span>test</span></i><b></b>', GetTestInnerHtml( p ) ) ;
     159}
     160
    91161        </script>
    92162</head>
     
    116186                        alt="" />
    117187        </p>
     188        <p id="xBreakParent_P1"><b>This <i>is some<span></span> sample</i> test text</b></p>
     189        <p id="xBreakParent_P2"><b><i><span>test</span></i></b></p>
    118190</body>
    119191</html>
  • FCKeditor/trunk/_test/automated/tests/fckw3crange.html

    r1565 r1714  
    629629}
    630630
     631function test_extractContents_Other_5()
     632{
     633        document.body.innerHTML = '<p><b><i>test</i></b></p>' ;
     634
     635        var range = FCKW3CRange.CreateRange( document ) ;
     636
     637        range.setStartAfter( document.getElementsByTagName('i')[0] ) ;
     638        range.setEndAfter( document.getElementsByTagName('b')[0] ) ;
     639
     640        var docFrag = range.extractContents() ;
     641
     642        var tmpDiv = document.createElement( 'div' ) ;
     643        if ( docFrag.AppendTo ) docFrag.AppendTo( tmpDiv ) ; else tmpDiv.appendChild( docFrag ) ;
     644
     645        assertEquals( 'Extracted HTML', '<b></b>', GetTestInnerHtml( tmpDiv ) ) ;
     646        assertEquals( 'HTML after extraction', '<p><b><i>test</i></b></p>', GetTestInnerHtml( document.body ) ) ;
     647
     648        assertEquals( 'range.startContainer', document.body.firstChild, range.startContainer ) ;
     649        assertEquals( 'range.startOffset', 1, range.startOffset ) ;
     650        assertEquals( 'range.endContainer', document.body.firstChild, range.endContainer ) ;
     651        assertEquals( 'range.endOffset', 1, range.endOffset ) ;
     652        assertTrue( 'range.collapsed', range.collapsed ) ;
     653}
     654
     655function test_extractContents_Other_6()
     656{
     657        document.body.innerHTML = '<p><b><i>test</i></b></p>' ;
     658
     659        var range = FCKW3CRange.CreateRange( document ) ;
     660
     661        range.setStartBefore( document.getElementsByTagName('b')[0] ) ;
     662        range.setEndBefore( document.getElementsByTagName('i')[0] ) ;
     663
     664        var docFrag = range.extractContents() ;
     665
     666        var tmpDiv = document.createElement( 'div' ) ;
     667        if ( docFrag.AppendTo ) docFrag.AppendTo( tmpDiv ) ; else tmpDiv.appendChild( docFrag ) ;
     668
     669        assertEquals( 'Extracted HTML', '<b></b>', GetTestInnerHtml( tmpDiv ) ) ;
     670        assertEquals( 'HTML after extraction', '<p><b><i>test</i></b></p>', GetTestInnerHtml( document.body ) ) ;
     671
     672        assertEquals( 'range.startContainer', document.body.firstChild, range.startContainer ) ;
     673        assertEquals( 'range.startOffset', 0, range.startOffset ) ;
     674        assertEquals( 'range.endContainer', document.body.firstChild, range.endContainer ) ;
     675        assertEquals( 'range.endOffset', 0, range.endOffset ) ;
     676        assertTrue( 'range.collapsed', range.collapsed ) ;
     677}
     678
    631679// W3C DOM Range Specs - Section 2.7 - Example 1
    632680function test_cloneContents_W3C_1()
     
    848896<script type="text/javascript">
    849897
     898var _BodyHtml ;
     899
     900function setUpPage()
     901{
     902        _BodyHtml = document.body.innerHTML ;
     903        setUpPageStatus = 'complete' ;
     904}
     905
    850906// JsUnit special function called before every test start.
    851907function setUp()
    852908{
    853909        // Reset the body (because of changes by test functions).
    854         document.body.innerHTML = '<h1 id="_H1">FCKW3CRange Test</h1><p id="_P">This is <b id="_B">some</b> text.</p><p>Another paragraph.</p>' ;
     910        document.body.innerHTML = _BodyHtml ;
    855911}
    856912
  • FCKeditor/trunk/_whatsnew.html

    r1713 r1714  
    7575                        to override JavaScript errors occuring inside the editing frame due to user added
    7676                        JavaScript code.</li>
     77                <li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1647">#1647</a>] Hitting
     78                        ENTER on list items containing block elements will not create new list item elements,
     79                        instead of adding further blocks to the same list item.</li>
    7780        </ul>
    7881        <h3>
  • FCKeditor/trunk/editor/_source/classes/fckenterkey.js

    r1565 r1714  
    401401        var oSplitInfo = oRange.SplitBlock() ;
    402402
    403         // FCKDebug.OutputObject( oSplitInfo ) ;
    404 
    405403        if ( oSplitInfo )
    406404        {
     
    411409                var bIsStartOfBlock     = oSplitInfo.WasStartOfBlock ;
    412410                var bIsEndOfBlock       = oSplitInfo.WasEndOfBlock ;
     411
     412                // If there is one block under a list item, modify the split so that the list item gets split as well. (Bug #1647)
     413                if ( eNextBlock )
     414                {
     415                        if ( eNextBlock.parentNode.nodeName.IEquals( 'li' ) )
     416                        {
     417                                FCKDomTools.BreakParent( eNextBlock, eNextBlock.parentNode ) ;
     418                                FCKDomTools.MoveNode( eNextBlock, eNextBlock.nextSibling, true ) ;
     419                        }
     420                }
     421                else if ( ePreviousBlock && ePreviousBlock.parentNode.nodeName.IEquals( 'li' ) )
     422                {
     423                        FCKDomTools.BreakParent( ePreviousBlock, ePreviousBlock.parentNode ) ;
     424                        oRange.MoveToElementEditStart( ePreviousBlock.nextSibling );
     425                        FCKDomTools.MoveNode( ePreviousBlock, ePreviousBlock.previousSibling ) ;
     426                }
    413427
    414428                // If we have both the previous and next blocks, it means that the
  • FCKeditor/trunk/editor/_source/classes/fckw3crange.js

    r1565 r1714  
    263263                        // If the start container has children and the offset is pointing
    264264                        // to a child, then we should start from its previous sibling.
    265                         if ( startNode.childNodes.length > 0 &&  startOffset <= startNode.childNodes.length - 1 )
    266                         {
    267                                 // If the offset points to the first node, we don't have a
    268                                 // sibling, so let's use the first one, but mark it for removal.
    269                                 if ( startOffset == 0 )
    270                                 {
    271                                         // Let's create a temporary node and mark it for removal.
    272                                         startNode = startNode.insertBefore( this._Document.createTextNode(''), startNode.firstChild ) ;
    273                                         removeStartNode = true ;
    274                                 }
    275                                 else
    276                                         startNode = startNode.childNodes[ startOffset ].previousSibling ;
    277                         }
     265
     266                        // If the offset points to the first node, we don't have a
     267                        // sibling, so let's use the first one, but mark it for removal.
     268                        if ( startOffset == 0 )
     269                        {
     270                                // Let's create a temporary node and mark it for removal.
     271                                startNode = startNode.insertBefore( this._Document.createTextNode(''), startNode.firstChild ) ;
     272                                removeStartNode = true ;
     273                        }
     274                        else if ( startOffset > startNode.childNodes.length - 1 )
     275                        {
     276                                // Let's create a temporary node and mark it for removal.
     277                                startNode = startNode.appendChild( this._Document.createTextNode('') ) ;
     278                                removeStartNode = true ;
     279                        }
     280                        else
     281                                startNode = startNode.childNodes[ startOffset ].previousSibling ;
    278282                }
    279283
  • FCKeditor/trunk/editor/_source/fckscriptloader.js

    r1565 r1714  
    4141                return ;
    4242
     43        FCKScriptLoader._LoadedScripts[ scriptName ] = true ;
     44
    4345        var oScriptInfo = this._Scripts[ scriptName ] ;
    4446
     
    6668                        this._LoadScript( sBaseScriptName + '_gecko.js' ) ;
    6769        }
    68 
    69         FCKScriptLoader._LoadedScripts[ scriptName ] = true ;
    7070}
    7171
     
    111111FCKScriptLoader.AddScript( 'FCKConfig'                  , 'internals/'  , ['FCKBrowserInfo','FCKConstants'] ) ;
    112112FCKScriptLoader.AddScript( 'FCKDebug'                   , 'internals/'  , ['FCKConfig'] ) ;
    113 FCKScriptLoader.AddScript( 'FCKDomTools'                , 'internals/'  , ['FCKJSCoreExtensions','FCKBrowserInfo','FCKTools'], FCK_GENERIC ) ;
     113FCKScriptLoader.AddScript( 'FCKDomTools'                , 'internals/'  , ['FCKJSCoreExtensions','FCKBrowserInfo','FCKTools','FCKDomRange'], FCK_GENERIC ) ;
    114114FCKScriptLoader.AddScript( 'FCKListsLib'                , 'internals/' ) ;
    115115FCKScriptLoader.AddScript( 'FCKListHandler'             , 'internals/'  , ['FCKConfig', 'FCKDocumentFragment', 'FCKJSCoreExtensions','FCKDomTools'], FCK_GENERIC ) ;
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy