Changeset 1860

Show
Ignore:
Timestamp:
2008-04-01 00:07:18 (6 months ago)
Author:
wwalc
Message:

Fix for #1100 (Indented lists).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • MediaWiki/trunk/plugins/mediawiki/fckplugin.js

    r1859 r1860  
    9696 
    9797                var stringBuilder = new Array() ; 
    98                 this._AppendNode( rootNode, stringBuilder ) ; 
     98                this._AppendNode( rootNode, stringBuilder, '' ) ; 
    9999                return stringBuilder.join( '' ).Trim() ; 
    100100        }, 
     
    132132 
    133133        // This function is based on FCKXHtml._AppendNode. 
    134         _AppendNode : function( htmlNode, stringBuilder ) 
     134        _AppendNode : function( htmlNode, stringBuilder, prefix ) 
    135135        { 
    136136                if ( !htmlNode ) 
     
    223223 
    224224                                        if ( !basicElement[2] ) 
    225                                                 this._AppendChildNodes( htmlNode, stringBuilder ) ; 
     225                                                this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ; 
    226226 
    227227                                        if ( basic1 ) 
     
    236236                                                        var isFirstLevel = !htmlNode.parentNode.nodeName.IEquals( 'ul', 'ol', 'li' ) ; 
    237237 
    238                                                         this._AppendChildNodes( htmlNode, stringBuilder ) ; 
    239  
    240                                                         if ( isFirstLevel ) 
     238                                                        this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ; 
     239 
     240                                                        if ( isFirstLevel ) { 
    241241                                                                stringBuilder.push( '\n' ) ; 
     242                                                        } 
    242243 
    243244                                                        break ; 
     
    245246                                                case 'li' : 
    246247 
    247                                                         stringBuilder.push( '\n' ) ; 
     248                                                        if ( stringBuilder.length > 1 && stringBuilder[ stringBuilder.length - 1 ] != "*" && stringBuilder[ stringBuilder.length - 1 ] != "#") { 
     249                                                                stringBuilder.push( '\n' ) ; 
     250                                                        } 
    248251 
    249252                                                        var listPrefix = '' ; 
     
    256259                                                                else if ( parent.nodeName.toLowerCase() == 'ol' ) 
    257260                                                                        listPrefix = '#' + listPrefix ; 
     261                                                                else if ( parent.nodeName.toLowerCase() == 'dt' ) 
     262                                                                        listPrefix = ';' + listPrefix ; 
     263                                                                else if ( parent.nodeName.toLowerCase() == 'dd' ) 
     264                                                                        listPrefix = ':' + listPrefix ; 
    258265                                                                else if ( parent.nodeName.toLowerCase() != 'li' ) 
    259266                                                                        break ; 
     
    264271                                                        stringBuilder.push( listPrefix ) ; 
    265272                                                        stringBuilder.push( ' ' ) ; 
    266                                                         this._AppendChildNodes( htmlNode, stringBuilder ) ; 
     273                                                        this._AppendChildNodes( htmlNode, stringBuilder, listPrefix ) ; 
    267274 
    268275                                                        break ; 
     
    292299                                                        { 
    293300                                                                stringBuilder.push( isWikiUrl? '|' : ' ' ) ; 
    294                                                                 this._AppendChildNodes( htmlNode, stringBuilder ) ; 
     301                                                                this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ; 
    295302                                                        } 
    296303                                                        stringBuilder.push( isWikiUrl ? ']]' : ']' ) ; 
     
    299306                                                         
    300307                                                case 'dl' : 
    301                                                         stringBuilder.push( '\n' ) ; 
    302                                                         this._AppendChildNodes( htmlNode, stringBuilder ) ; 
    303                                                         if (stringBuilder.length > 0 && !stringBuilder[ stringBuilder.length - 1 ].EndsWith( '\n' )) 
    304                                                                 stringBuilder.push( '\n' ) ; 
     308                                                        this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ; 
     309                                                        var isFirstLevel = !htmlNode.parentNode.nodeName.IEquals( 'ul', 'ol', 'li', 'dl', 'dd' ) ; 
     310                                                        if (isFirstLevel) 
     311                                                                stringBuilder.push( '\n') ; 
    305312                                                        break ; 
    306313 
    307314                                                case 'dt' : 
     315                                                        if( stringBuilder.length > 1 && stringBuilder[ stringBuilder.length - 1 ] != ";" && stringBuilder[ stringBuilder.length - 1 ] != ":" ) 
     316                                                        { 
     317                                                                stringBuilder.push( '\n' + prefix ) ; 
     318                                                        } 
    308319                                                        stringBuilder.push( ';' ) ; 
    309                                                         this._AppendChildNodes( htmlNode, stringBuilder ) ; 
     320                                                        this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ; 
    310321                                                        break ; 
    311322 
    312323                                                case 'dd' : 
     324                                                        if ( stringBuilder.length > 1 && stringBuilder[ stringBuilder.length - 1 ] != ":" ) 
     325                                                        { 
     326                                                                stringBuilder.push( '\n' + prefix ) ; 
     327                                                        } 
    313328                                                        stringBuilder.push( ':' ) ; 
    314                                                         this._AppendChildNodes( htmlNode, stringBuilder ) ; 
    315                                                         stringBuilder.push( '\n' ) ; 
     329                                                        this._AppendChildNodes( htmlNode, stringBuilder, prefix + ":" ) ; 
    316330                                                        break ; 
    317331                                                         
     
    328342                                                        { 
    329343                                                                stringBuilder.push( '|+ ' ) ; 
    330                                                                 this._AppendChildNodes( htmlNode.caption, stringBuilder ) ; 
     344                                                                this._AppendChildNodes( htmlNode.caption, stringBuilder, prefix ) ; 
    331345                                                                stringBuilder.push( '\n' ) ; 
    332346                                                        } 
     
    356370 
    357371                                                                        this._IsInsideCell = true ; 
    358                                                                         this._AppendChildNodes( htmlNode.rows[r].cells[c], stringBuilder ) ; 
     372                                                                        this._AppendChildNodes( htmlNode.rows[r].cells[c], stringBuilder, prefix ) ; 
    359373                                                                        this._IsInsideCell = false ; 
    360374 
     
    478492                                                                stringBuilder.push( "\n " ) ; 
    479493                                                                this._inLSpace = true ; 
    480                                                                 this._AppendChildNodes( htmlNode, stringBuilder ) ; 
     494                                                                this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ; 
    481495                                                                this._inLSpace = false ; 
    482496                                                                if ( stringBuilder[stringBuilder.length-2] == "\n" && stringBuilder[stringBuilder.length-1] == " " ) 
     
    495509                                                                stringBuilder.push( '>' ) ; 
    496510                                                                this._inPre = true ; 
    497                                                                 this._AppendChildNodes( htmlNode, stringBuilder ) ; 
     511                                                                this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ; 
    498512                                                                this._inPre = false ; 
    499513                                                                stringBuilder.push( '<\/' ) ; 
     
    513527 
    514528                                                        stringBuilder.push( '>' ) ; 
    515                                                         this._AppendChildNodes( htmlNode, stringBuilder ) ; 
     529                                                        this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ; 
    516530                                                        stringBuilder.push( '<\/' ) ; 
    517531                                                        stringBuilder.push( sNodeName ) ; 
     
    578592        }, 
    579593 
    580         _AppendChildNodes : function( htmlNode, stringBuilder, isBlockElement ) 
     594        _AppendChildNodes : function( htmlNode, stringBuilder, listPrefix ) 
    581595        { 
    582596                var child = htmlNode.firstChild ; 
     
    584598                while ( child ) 
    585599                { 
    586                         this._AppendNode( child, stringBuilder ) ; 
     600                        this._AppendNode( child, stringBuilder, listPrefix ) ; 
    587601                        child = child.nextSibling ; 
    588602                }