Ticket #3281: 3281.patch

File 3281.patch, 18.0 KB (added by Wiktor Walc, 11 years ago)
  • FCKeditorParser.body.php

     
    3333         * @param string $text
    3434         * @return string
    3535         */
    36         private function fck_addToStrtr($text, $replaceLineBreaks = true) {
     36        private function fck_addToStrtr($text) {
    3737                $key = 'Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw';
    3838                $this->fck_mw_strtr_span_counter++;
    39                 if ($replaceLineBreaks) {
    40                         $this->fck_mw_strtr_span[$key] = str_replace(array("\r\n", "\n", "\r"),"fckLR",$text);
    41                 }
    42                 else {
    43                         $this->fck_mw_strtr_span[$key] = $text;
    44                 }
     39                $this->fck_mw_strtr_span[$key] = $text;
    4540                return $key;
    4641        }
    4742
     
    8378                }
    8479
    8580                if (empty($argv)) {
    86                         $ret = "<span class=\"fck_mw_".$class."\" _fck_mw_customtag=\"true\" _fck_mw_tagname=\"".$this->fck_mw_taghook."\">";
     81                        $ret = "<pre class=\"fck_mw_".$class."\" _fck_mw_customtag=\"true\" _fck_mw_tagname=\"".$this->fck_mw_taghook."\">";
    8782                }
    8883                else {
    89                         $ret = "<span class=\"fck_mw_".$class."\" _fck_mw_customtag=\"true\" _fck_mw_tagname=\"".$this->fck_mw_taghook."\"";
     84                        $ret = "<pre class=\"fck_mw_".$class."\" _fck_mw_customtag=\"true\" _fck_mw_tagname=\"".$this->fck_mw_taghook."\"";
    9085                        foreach ($argv as $key=>$value) {
    9186                                $ret .= " ".$key."=\"".$value."\"";
    9287                        }
     
    9792                }
    9893                else {
    9994                        $ret .= htmlspecialchars($str);
    100                         $ret .= "</span>";
     95                        $ret .= "</pre>";
    10196                }
    10297
    10398                $replacement = $this->fck_addToStrtr($ret);
     
    114109        */
    115110        function fck_wikiTag( $tagName, $str, $argv = array()) {
    116111                if (empty($argv)) {
    117                         $ret = "<span class=\"fck_mw_".$tagName."\" _fck_mw_customtag=\"true\" _fck_mw_tagname=\"".$tagName."\">";
     112                        $ret = "<pre class=\"fck_mw_".$tagName."\" _fck_mw_customtag=\"true\" _fck_mw_tagname=\"".$tagName."\">";
    118113                }
    119114                else {
    120                         $ret = "<span class=\"fck_mw_".$tagName."\" _fck_mw_customtag=\"true\" _fck_mw_tagname=\"".$tagName."\"";
     115                        $ret = "<pre class=\"fck_mw_".$tagName."\" _fck_mw_customtag=\"true\" _fck_mw_tagname=\"".$tagName."\"";
    121116                        foreach ($argv as $key=>$value) {
    122117                                $ret .= " ".$key."=\"".$value."\"";
    123118                        }
     
    128123                }
    129124                else {
    130125                        $ret .= htmlspecialchars($str);
    131                         $ret .= "</span>";
     126                        $ret .= "</pre>";
    132127                }
    133128
    134129                $replacement = $this->fck_addToStrtr($ret);
     
    312307                        if (substr($text, $spaceStart, 1) === "\n" and substr($text, $spaceStart + $spaceLen, 1) === "\n") {
    313308                                # Remove the comment, leading and trailing
    314309                                # spaces, and leave only one newline.
    315                                 $replacement = $this->fck_addToStrtr(substr($text, $spaceStart, $spaceLen+1), false);
     310                                $replacement = $this->fck_addToStrtr(substr($text, $spaceStart, $spaceLen+1));
    316311                                $text = substr_replace($text, $replacement."\n", $spaceStart, $spaceLen + 1);
    317312                        }
    318313                        else {
    319314                                # Remove just the comment.
    320                                 $replacement = $this->fck_addToStrtr(substr($text, $start, $end - $start), false);
     315                                $replacement = $this->fck_addToStrtr(substr($text, $start, $end - $start));
    321316                                $text = substr_replace($text, $replacement, $start, $end - $start);
    322317                        }
    323318                }
     
    416411                                        $inner = htmlspecialchars(strtr(substr($text, $startingPos, $pos - $startingPos + 19), $strtr));
    417412                                        $this->fck_mw_strtr_span['href="Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw"'] = 'href="'.$inner.'"';
    418413                                        if($opened <= $closed) {                                                // {{template}} is NOT in [] or [[]]
    419                                                 $this->fck_mw_strtr_span['Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw'] = '<span class="fck_mw_template">'.str_replace(array("\r\n", "\n", "\r"),"fckLR",$inner).'</span>';
     414                                                $this->fck_mw_strtr_span['Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw'] = '<pre class="fck_mw_template">'.$inner.'</pre>';
    420415                                        }else{
    421                                                 $this->fck_mw_strtr_span['Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw'] = str_replace(array("\r\n", "\n", "\r"),"fckLR",$inner);
     416                                                $this->fck_mw_strtr_span['Fckmw'.$this->fck_mw_strtr_span_counter.'fckmw'] = $inner;
    422417                                        }
    423418                                        $startingPos = $pos + 19;
    424419                                        $this->fck_mw_strtr_span_counter++;
     
    468463        function replaceFreeExternalLinks( $text ) { return $text; }
    469464        function stripNoGallery(&$text) {}
    470465        function stripToc( $text ) {
    471                 //$prefix = '<span class="fck_mw_magic">';
    472                 //$suffix = '</span>';
     466                //$prefix = '<pre class="fck_mw_magic">';
     467                //$suffix = '</pre>';
    473468                $prefix = '';
    474469                $suffix = '';
    475470
     
    512507                        global $leaveRawTemplates;
    513508                        if (!empty($leaveRawTemplates)) {
    514509                                foreach ($leaveRawTemplates as $l) {
    515                                         $this->fck_mw_strtr_span[$l] = substr($this->fck_mw_strtr_span[$l], 30, -7);
     510                                        $this->fck_mw_strtr_span[$l] = substr($this->fck_mw_strtr_span[$l], 29, -6);
    516511                                }
    517512                        }
    518513                        $text = strtr($parserOutput->getText(), $this->fck_mw_strtr_span);
  • plugins/mediawiki/dialogs/ref.html

     
    7979{
    8080        if ( !oRef )
    8181        {
    82                 oRef = FCK.EditorDocument.createElement( 'SPAN' ) ;
     82                oRef = FCK.EditorDocument.createElement( 'PRE' ) ;
    8383                oRef.className = 'fck_mw_ref' ;
    8484        }
    8585
  • plugins/mediawiki/dialogs/source.html

     
    3434var FCKConfig   = oEditor.FCKConfig ;
    3535var FCKRegexLib = oEditor.FCKRegexLib ;
    3636var FCKTools    = oEditor.FCKTools ;
     37var FCKBrowserInfo      = oEditor.FCKBrowserInfo ;
    3738
    3839document.write( '<script src="' + FCKConfig.BasePath + 'dialog/common/fck_dialog_common.js" type="text/javascript"><\/script>' ) ;
    3940
     
    7374{
    7475        if ( !oSource ) return ;
    7576
    76         GetE('xSourceText').value = FCKTools.HTMLDecode( oSource.innerHTML ).replace(/fckLR/g,'\r\n').replace( /&quot;/g, '"' );
     77        GetE('xSourceText').value = FCKTools.HTMLDecode( oSource.innerHTML ).replace(/<br>/g,'\r\n').replace( /&quot;/g, '"' );
    7778        GetE('xSourceLang').value = oSource.getAttribute( 'lang' ) ;
    7879}
    7980
     
    8485
    8586        if ( !oSource )
    8687        {
    87                 oSource = FCK.EditorDocument.createElement( 'SPAN' ) ;
     88                oSource = FCK.EditorDocument.createElement( 'PRE' ) ;
    8889                oSource.className = 'fck_mw_source' ;
    8990        }
    9091
    91         var sourceData = FCKTools.HTMLEncode(GetE('xSourceText').value.Trim().replace(/(\r\n|\n)/g, 'fckLR')).replace( /"/g, '&quot;' ) ;
     92        var sourceData = FCKTools.HTMLEncode(GetE('xSourceText').value.Trim()).replace( /"/g, '&quot;' ) ;
    9293        var lang = GetE('xSourceLang').value.Trim().toLowerCase();
    9394
    9495        if ( lang.length && supportedLanguages.indexOf( ',' + lang + ',' ) == -1) {
     
    9697                return false;
    9798        }
    9899
    99         oSource.innerHTML = sourceData ;
     100        if ( FCKBrowserInfo.IsIE )
     101        {
     102                var className = oSource.className;
     103                var temp = FCK.EditorDocument.createElement( 'div' ) ;
     104                temp.appendChild( oSource ) ;
     105                oSource.outerHTML = '<pre>\n' + sourceData + '</pre>' ;
     106                oSource = temp.removeChild( temp.firstChild ) ;
     107                oSource.className = className;
     108        }
     109        else
     110        {
     111                oSource.innerHTML = sourceData ;
     112        }
     113
    100114        oSource.setAttribute( 'lang', lang ) ;
    101115
    102         if ( !oFakeImage )
     116        if ( !oFakeImage || FCKBrowserInfo.IsIE )
    103117        {
    104118                oFakeImage      = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__MWSource', oSource ) ;
    105119                oFakeImage.setAttribute( '_fck_mw_source', 'true', 0 ) ;
  • plugins/mediawiki/dialogs/special.html

     
    3434var FCKConfig   = oEditor.FCKConfig ;
    3535var FCKRegexLib = oEditor.FCKRegexLib ;
    3636var FCKTools    = oEditor.FCKTools ;
     37var FCKBrowserInfo      = oEditor.FCKBrowserInfo ;
    3738
    3839document.write( '<script src="' + FCKConfig.BasePath + 'dialog/common/fck_dialog_common.js" type="text/javascript"><\/script>' ) ;
    3940
     
    4243
    4344// Get the selected flash embed (if available).
    4445var oFakeImage = FCK.Selection.GetSelectedElement() ;
    45 var oTemplateSpan ;
     46var oSpecialTag ;
    4647var sFakeClass = 'FCK__MWSpecial';
    4748var sSelectedTag = "";
    4849
     
    5253        {
    5354                if ( oFakeImage.getAttribute('_fck_mw_special') )
    5455                {
    55                         oTemplateSpan = FCK.GetRealElement( oFakeImage ) ;
     56                        oSpecialTag = FCK.GetRealElement( oFakeImage ) ;
    5657                        sFakeClass = 'FCK__MWSpecial';
    5758                }
    5859                else if ( oFakeImage.getAttribute('_fck_mw_html') )
    5960                {
    60                         oTemplateSpan = FCK.GetRealElement( oFakeImage ) ;
     61                        oSpecialTag = FCK.GetRealElement( oFakeImage ) ;
    6162                        sFakeClass = 'FCK__MWHtml';
    6263                }
    6364                else if ( oFakeImage.getAttribute('_fck_mw_nowiki') )
    6465                {
    65                         oTemplateSpan = FCK.GetRealElement( oFakeImage ) ;
     66                        oSpecialTag = FCK.GetRealElement( oFakeImage ) ;
    6667                        sFakeClass = 'FCK__MWNowiki';
    6768                }
    6869                else if ( oFakeImage.getAttribute('_fck_mw_noinclude') )
    6970                {
    70                         oTemplateSpan = FCK.GetRealElement( oFakeImage ) ;
     71                        oSpecialTag = FCK.GetRealElement( oFakeImage ) ;
    7172                        sFakeClass = 'FCK__MWNoinclude';
    7273                }
    7374                else if ( oFakeImage.getAttribute('_fck_mw_gallery') )
    7475                {
    75                         oTemplateSpan = FCK.GetRealElement( oFakeImage ) ;
     76                        oSpecialTag = FCK.GetRealElement( oFakeImage ) ;
    7677                        sFakeClass = 'FCK__MWGallery';
    7778                }
    7879                else if ( oFakeImage.getAttribute('_fck_mw_onlyinclude') )
    7980                {
    80                         oTemplateSpan = FCK.GetRealElement( oFakeImage ) ;
     81                        oSpecialTag = FCK.GetRealElement( oFakeImage ) ;
    8182                        sFakeClass = 'FCK__MWOnlyinclude';
    8283                }
    8384                else if ( oFakeImage.getAttribute('_fck_mw_includeonly') )
    8485                {
    85                         oTemplateSpan = FCK.GetRealElement( oFakeImage ) ;
     86                        oSpecialTag = FCK.GetRealElement( oFakeImage ) ;
    8687                        sFakeClass = 'FCK__MWIncludeonly';
    8788                }
    8889                else
     
    131132        oEditor.window.parent.sajax_request_type = 'GET' ;
    132133        oEditor.window.parent.sajax_do_call( 'wfSajaxSearchSpecialTagFCKeditor',[empty], LoadSearchResults ) ;
    133134
    134         if ( !oTemplateSpan ) return ;
     135        if ( !oSpecialTag ) {
     136                return ;
     137        }
    135138
    136         GetE('xTemplateRaw').value = FCKTools.HTMLDecode(oTemplateSpan.innerHTML).replace(/fckLR/g,'\r\n' ).replace( /&quot;/g, '"' ) ;
    137         var tagName = oTemplateSpan.getAttribute('_fck_mw_tagname').toLowerCase();
     139        GetE('xTemplateRaw').value = FCKTools.HTMLDecode(oSpecialTag.innerHTML).replace(/<br>/g,'\r\n' ).replace( /&quot;/g, '"' ) ;
     140        var tagName = oSpecialTag.getAttribute('_fck_mw_tagname').toLowerCase();
    138141
    139142        sSelectedTag = tagName ;
    140143        GetE('xSelectTag').value = tagName;
     
    158161//#### The OK button was hit.
    159162function Ok()
    160163{
    161         if ( !oTemplateSpan )
     164        if ( !oSpecialTag )
    162165        {
    163                 oTemplateSpan = FCK.EditorDocument.createElement( 'SPAN' ) ;
    164                 oTemplateSpan.className = 'fck_mw_special' ;
    165                 SetAttribute( oTemplateSpan, '_fck_mw_customtag', 'true' ) ;
     166                oSpecialTag = FCK.EditorDocument.createElement( 'PRE' ) ;
     167                oSpecialTag.className = 'fck_mw_special' ;
    166168        }
    167169
    168         var templateData = FCKTools.HTMLEncode(GetE('xTemplateRaw').value.Trim().replace(/(\r\n|\n)/g, 'fckLR' )).replace( /"/g, '&quot;' ) ;
     170        var templateData = FCKTools.HTMLEncode(GetE('xTemplateRaw').value.Trim()).replace( /"/g, '&quot;' ) ;
    169171
    170         oTemplateSpan.innerHTML = templateData ;
    171         SetAttribute( oTemplateSpan, '_fck_mw_tagname', GetE('xSelectTag').value ) ;
     172        if ( FCKBrowserInfo.IsIE )
     173        {
     174                var className = oSpecialTag.className;
     175                var temp = FCK.EditorDocument.createElement( 'div' ) ;
     176                temp.appendChild( oSpecialTag ) ;
     177                oSpecialTag.outerHTML = '<pre>\n' + templateData + '</pre>' ;
     178                oSpecialTag = temp.removeChild( temp.firstChild ) ;
     179                oSpecialTag.className = className;
     180        }
     181        else
     182        {
     183                oSpecialTag.innerHTML = templateData ;
     184        }
    172185
     186        SetAttribute( oSpecialTag, '_fck_mw_tagname', GetE('xSelectTag').value ) ;
     187        SetAttribute( oSpecialTag, '_fck_mw_customtag', 'true' ) ;
     188
    173189        switch (GetE('xSelectTag').value)
    174190        {
    175191                case 'noinclude':
     
    195211                break;
    196212        }
    197213
    198         if ( !oFakeImage )
     214        if ( !oFakeImage || FCKBrowserInfo.IsIE )
    199215        {
    200                 oFakeImage      = oEditor.FCKDocumentProcessor_CreateFakeImage( sFakeClass, oTemplateSpan ) ;
     216                oFakeImage      = oEditor.FCKDocumentProcessor_CreateFakeImage( sFakeClass, oSpecialTag ) ;
    201217                oFakeImage.setAttribute( '_fck_mw_special', 'true', 0 ) ;
    202218                oFakeImage      = FCK.InsertElement( oFakeImage ) ;
    203219        }
  • plugins/mediawiki/dialogs/template.html

     
    3434var FCKConfig   = oEditor.FCKConfig ;
    3535var FCKRegexLib = oEditor.FCKRegexLib ;
    3636var FCKTools    = oEditor.FCKTools ;
     37var FCKBrowserInfo      = oEditor.FCKBrowserInfo ;
    3738
    3839document.write( '<script src="' + FCKConfig.BasePath + 'dialog/common/fck_dialog_common.js" type="text/javascript"><\/script>' ) ;
    3940
     
    103104        inputText = FCKConfig.ProtectedSource.Revert(inputText, 0);             //#2509
    104105        if (inputText.length>0 && inputText.indexOf('{{#')<0 && inputText.indexOf('{{:')<0 )
    105106        {
    106                 var templateName = inputText.substring(2,inputText.indexOf('fckLR'));
    107                 if (inputText.indexOf('fckLR')<1)
     107                var templateName = inputText.substring(2,inputText.indexOf('<br>'));
     108                if (inputText.indexOf('<br>')<1)
    108109                        templateName = inputText.substring(2,inputText.indexOf('|'));
    109110                if (inputText.indexOf('|')<1)
    110111                        templateName = inputText.substring(2,inputText.indexOf('}}'));
    111112
    112113                SetUrl(templateName.charAt(0).toUpperCase() + templateName.substr(1));
    113114        }
    114         GetE('xTemplateRaw').value = inputText.replace(/fckLR/g,'\r\n').replace( /&quot;/g, '"' );
     115        GetE('xTemplateRaw').value = inputText.replace(/<br>/g,'\r\n').replace( /&quot;/g, '"' );
    115116}
    116117
    117118function SetUrl(link)
     
    126127{
    127128        if ( !oTemplateSpan )
    128129        {
    129                 oTemplateSpan = FCK.EditorDocument.createElement( 'SPAN' ) ;
     130                oTemplateSpan = FCK.EditorDocument.createElement( 'PRE' ) ;
    130131                oTemplateSpan.className = 'fck_mw_template' ;
    131132        }
    132133
    133134        var protectedValue = FCKConfig.ProtectedSource.Protect(GetE('xTemplateRaw').value);
    134         var templateData = FCKTools.HTMLEncode(protectedValue.toString().Trim().replace(/(\r\n|\n)/g, 'fckLR')).replace( /"/g, '&quot;' ) ;
     135        var templateData = FCKTools.HTMLEncode(protectedValue.toString().Trim()).replace( /"/g, '&quot;' ) ;
    135136
    136137        if ( !( /^{{[\s\S]+}}$/.test( templateData ) ) )
    137138        {
     
    139140                return false ;
    140141        }
    141142
    142         oTemplateSpan.innerHTML = templateData ;
     143        if ( FCKBrowserInfo.IsIE )
     144        {
     145                var className = oTemplateSpan.className;
     146                var temp = FCK.EditorDocument.createElement( 'div' ) ;
     147                temp.appendChild( oTemplateSpan ) ;
     148                oTemplateSpan.outerHTML = '<pre>\n' + templateData + '</pre>' ;
     149                oTemplateSpan = temp.removeChild( temp.firstChild ) ;
     150                oTemplateSpan.className = className;
     151        }
     152        else
     153        {
     154                oTemplateSpan.innerHTML = templateData ;
     155        }
    143156
    144         if ( !oFakeImage )
     157        if ( !oFakeImage || FCKBrowserInfo.IsIE )
    145158        {
    146159                oFakeImage      = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__MWTemplate', oTemplateSpan ) ;
    147160                oFakeImage.setAttribute( '_fck_mw_template', 'true', 0 ) ;
  • plugins/mediawiki/fckplugin.js

     
    608608
    609609                                                        break ;
    610610
    611                                                 case 'span' :
     611                                                case 'pre' :
    612612                                                        switch ( htmlNode.className )
    613613                                                        {
    614                                                                 case 'fck_mw_source' :
     614                                                                case 'fck_mw_source':
    615615                                                                        var refLang = htmlNode.getAttribute( 'lang' ) ;
    616616
    617617                                                                        stringBuilder.push( '<source' ) ;
    618618                                                                        stringBuilder.push( ' lang="' + refLang + '"' ) ;
    619619                                                                        stringBuilder.push( '>' ) ;
    620                                                                         stringBuilder.push( FCKTools.HTMLDecode(htmlNode.innerHTML).replace(/fckLR/g,'\r\n') ) ;
     620                                                                        this._inPre = true ;
     621                                                                        this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ;
     622                                                                        this._inPre = false ;
    621623                                                                        stringBuilder.push( '</source>' ) ;
    622                                                                         return ;
     624                                                                        return;
    623625
    624626                                                                case 'fck_mw_ref' :
    625627                                                                        var refName = htmlNode.getAttribute( 'name' ) ;
     
    634636                                                                        else
    635637                                                                        {
    636638                                                                                stringBuilder.push( '>' ) ;
    637                                                                                 stringBuilder.push( htmlNode.innerHTML ) ;
     639                                                                                this._inPre = true ;
     640                                                                                this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ;
     641                                                                                this._inPre = false ;
    638642                                                                                stringBuilder.push( '</ref>' ) ;
    639643                                                                        }
    640644                                                                        return ;
     
    648652                                                                        return ;
    649653
    650654                                                                case 'fck_mw_template' :
    651                                                                         stringBuilder.push( FCKTools.HTMLDecode(htmlNode.innerHTML).replace(/fckLR/g,'\r\n') ) ;
     655                                                                        this._inPre = true ;
     656                                                                        this._AppendChildNodes( htmlNode, stringBuilder, prefix ) ;
     657                                                                        this._inPre = false ;
    652658                                                                        return ;
    653659
    654660                                                                case 'fck_mw_magic' :
     
    677683
    678684                                                                case 'fck_mw_onlyinclude' :
    679685                                                                        sNodeName = 'onlyinclude' ;
     686                                                                        break ;
    680687
    681                                                                         break ;
     688                                                                case 'fck_mw_special' :
     689                                                                        if ( htmlNode.getAttribute( '_fck_mw_customtag' ) )
     690                                                                                sNodeName = htmlNode.getAttribute( '_fck_mw_tagname' ) ;
     691                                                                        break;
     692
    682693                                                        }
    683694
    684                                                         // Change the node name and fell in the "default" case.
    685                                                         if ( htmlNode.getAttribute( '_fck_mw_customtag' ) )
    686                                                                 sNodeName = htmlNode.getAttribute( '_fck_mw_tagname' ) ;
    687 
    688                                                 case 'pre' :
    689695                                                        var attribs = this._GetAttributesStr( htmlNode ) ;
    690 
    691696                                                        if ( htmlNode.className == "_fck_mw_lspace")
    692697                                                        {
    693698                                                                stringBuilder.push( "\n " ) ;
     
    729734                                                                        stringBuilder.push( '>' ) ;
    730735                                                                }
    731736                                                        }
     737                                                        break ;
    732738
    733                                                         break ;
    734739                                                default :
    735740                                                        var attribs = this._GetAttributesStr( htmlNode ) ;
    736741
     
    811816                                }
    812817                                else
    813818                                {
    814                                         textValue = FCKTools.HTMLDecode(textValue).replace(/fckLR/g,'\r\n');
     819                                        textValue = FCKTools.HTMLDecode(textValue);
    815820                                }
    816821
    817822                                stringBuilder.push( textValue ) ;
     
    10001005        }
    10011006
    10021007        // Templates and magic words.
    1003         var aSpans = document.getElementsByTagName( 'SPAN' ) ;
     1008        var aSpans = document.getElementsByTagName( 'PRE' ) ;
    10041009
    10051010        var eSpan ;
    10061011        var i = aSpans.length - 1 ;
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy