Changeset 2229 for FCKeditor/branches

Show
Ignore:
Timestamp:
2008-07-17 11:15:46 (5 months ago)
Author:
martinkou
Message:

Merged all changes in trunk up to r2228.

Location:
FCKeditor/branches/features/new_samples
Files:
86 modified
2 copied

Legend:

Unmodified
Added
Removed
  • FCKeditor/branches/features/new_samples/editor/css/fck_editorarea.css

    r1565 r2229  
    2727 */ 
    2828 
    29 /* 
    30    The "body" styles should match your editor web site, mainly regarding 
    31    background color and font family and size. 
    32 */ 
     29/** 
     30 * The "body" styles should match your editor web site, mainly regarding 
     31 * background color and font family and size. 
     32 */ 
    3333 
    3434body 
     
    5151} 
    5252 
    53 /* 
    54         Just uncomment the following block if you want to avoid spaces between 
    55         paragraphs. Remember to apply the same style in your output front end page. 
    56 */ 
     53/** 
     54 * Just uncomment the following block if you want to avoid spaces between 
     55 * paragraphs. Remember to apply the same style in your output front end page. 
     56 */ 
    5757 
    5858/* 
     
    6464*/ 
    6565 
     66/** 
     67 * Uncomment the following block, or only selected lines if appropriate, 
     68 * if you have some style items that would break the styles combo box. 
     69 * You can also write other CSS overrides inside the style block below 
     70 * as needed and they will be applied to inside the style combo only. 
     71 */ 
     72 
    6673/* 
    67     The following are some sample styles used in the "Styles" toolbar command. 
    68     You should instead remove them, and include the styles used by the site 
    69     you are using the editor in. 
     74.SC_Item *, .SC_ItemSelected * 
     75{ 
     76        margin: 0px !important; 
     77        padding: 0px !important; 
     78        text-indent: 0px !important; 
     79        clip: auto !important; 
     80        position: static !important; 
     81} 
    7082*/ 
     83 
     84/** 
     85 * The following are some sample styles used in the "Styles" toolbar command. 
     86 * You should instead remove them, and include the styles used by the site 
     87 * you are using the editor in. 
     88 */ 
    7189 
    7290.Bold 
  • FCKeditor/branches/features/new_samples/editor/dialog/fck_anchor.html

    r1565 r2229  
    122122        { 
    123123                // Nothing was selected, so now just create a normal A 
    124                 aNewAnchors.push( oEditor.FCK.InsertElement( 'a' ) ) ; 
     124                if ( FCKBrowserInfo.IsIE ) 
     125                        aNewAnchors.push( oEditor.FCK.InsertElement( '<a name="' + FCKTools.HTMLEncode( sNewName ).replace( '"', '&quot;' ) + '">' ) ) ; 
     126                else 
     127                { 
     128                        var n ; 
     129                        aNewAnchors.push( ( n = oEditor.FCK.InsertElement( 'a' ), n.name = sNewName, n ) ) ; 
     130                } 
    125131        } 
    126132        else 
     
    135141        { 
    136142                oAnchor = aNewAnchors[i] ; 
    137  
    138                 // Set the name 
    139                 oAnchor.name = sNewName ; 
    140143 
    141144                // IE does require special processing to show the Anchor's image 
  • FCKeditor/branches/features/new_samples/editor/dialog/fck_link/fck_link.js

    r2043 r2229  
    7878var oParser = new Object() ; 
    7979 
    80 oParser.ParseEMailUrl = function( emailUrl ) 
     80// This method simply returns the two inputs in numerical order. You can even 
     81// provide strings, as the method would parseInt() the values. 
     82oParser.SortNumerical = function(a, b) 
     83{ 
     84        return parseInt( a ) - parseInt( b ) ; 
     85} 
     86 
     87oParser.ParseEMailParams = function(sParams) 
     88{ 
     89        // Initialize the oEMailParams object. 
     90        var oEMailParams = new Object() ; 
     91        oEMailParams.Subject = '' ; 
     92        oEMailParams.Body = '' ; 
     93 
     94        var aMatch = sParams.match( /(^|^\?|&)subject=([^&]+)/i ) ; 
     95        if ( aMatch ) oEMailParams.Subject = decodeURIComponent( aMatch[2] ) ; 
     96 
     97        aMatch = sParams.match( /(^|^\?|&)body=([^&]+)/i ) ; 
     98        if ( aMatch ) oEMailParams.Body = decodeURIComponent( aMatch[2] ) ; 
     99 
     100        return oEMailParams ; 
     101} 
     102 
     103// This method returns either an object containing the email info, or FALSE 
     104// if the parameter is not an email link. 
     105oParser.ParseEMailUri = function( sUrl ) 
    81106{ 
    82107        // Initializes the EMailInfo object. 
    83108        var oEMailInfo = new Object() ; 
    84         oEMailInfo.Address      = '' ; 
    85         oEMailInfo.Subject      = '' ; 
    86         oEMailInfo.Body         = '' ; 
    87  
    88         var oParts = emailUrl.match( /^([^\?]+)\??(.+)?/ ) ; 
    89         if ( oParts ) 
    90         { 
    91                 // Set the e-mail address. 
    92                 oEMailInfo.Address = oParts[1] ; 
    93  
    94                 // Look for the optional e-mail parameters. 
    95                 if ( oParts[2] ) 
    96                 { 
    97                         var oMatch = oParts[2].match( /(^|&)subject=([^&]+)/i ) ; 
    98                         if ( oMatch ) oEMailInfo.Subject = decodeURIComponent( oMatch[2] ) ; 
    99  
    100                         oMatch = oParts[2].match( /(^|&)body=([^&]+)/i ) ; 
    101                         if ( oMatch ) oEMailInfo.Body = decodeURIComponent( oMatch[2] ) ; 
    102                 } 
    103         } 
    104  
    105         return oEMailInfo ; 
     109        oEMailInfo.Address = '' ; 
     110        oEMailInfo.Subject = '' ; 
     111        oEMailInfo.Body = '' ; 
     112 
     113        var aLinkInfo = sUrl.match( /^(\w+):(.*)$/ ) ; 
     114        if ( aLinkInfo && aLinkInfo[1] == 'mailto' ) 
     115        { 
     116                // This seems to be an unprotected email link. 
     117                var aParts = aLinkInfo[2].match( /^([^\?]+)\??(.+)?/ ) ; 
     118                if ( aParts ) 
     119                { 
     120                        // Set the e-mail address. 
     121                        oEMailInfo.Address = aParts[1] ; 
     122 
     123                        // Look for the optional e-mail parameters. 
     124                        if ( aParts[2] ) 
     125                        { 
     126                                var oEMailParams = oParser.ParseEMailParams( aParts[2] ) ; 
     127                                oEMailInfo.Subject = oEMailParams.Subject ; 
     128                                oEMailInfo.Body = oEMailParams.Body ; 
     129                        } 
     130                } 
     131                return oEMailInfo ; 
     132        } 
     133        else if ( aLinkInfo && aLinkInfo[1] == 'javascript' ) 
     134        { 
     135                // This may be a protected email. 
     136 
     137                // Try to match the url against the EMailProtectionFunction. 
     138                var func = FCKConfig.EMailProtectionFunction ; 
     139                if ( func != null ) 
     140                { 
     141                        try 
     142                        { 
     143                                // Escape special chars. 
     144                                func = func.replace( /([/^$*+.?()\[\]])/g, '\\$1' ) ; 
     145 
     146                                // Define the possible keys. 
     147                                var keys = new Array('NAME', 'DOMAIN', 'SUBJECT', 'BODY') ; 
     148 
     149                                // Get the order of the keys (hold them in the array <pos>) and 
     150                                // the function replaced by regular expression patterns. 
     151                                var sFunc = func ; 
     152                                var pos = new Array() ; 
     153                                for ( var i = 0 ; i < keys.length ; i ++ ) 
     154                                { 
     155                                        var rexp = new RegExp( keys[i] ) ; 
     156                                        var p = func.search( rexp ) ; 
     157                                        if ( p >= 0 ) 
     158                                        { 
     159                                                sFunc = sFunc.replace( rexp, '\'([^\']*)\'' ) ; 
     160                                                pos[pos.length] = p + ':' + keys[i] ; 
     161                                        } 
     162                                } 
     163 
     164                                // Sort the available keys. 
     165                                pos.sort( oParser.SortNumerical ) ; 
     166 
     167                                // Replace the excaped single quotes in the url, such they do 
     168                                // not affect the regexp afterwards. 
     169                                aLinkInfo[2] = aLinkInfo[2].replace( /\\'/g, '###SINGLE_QUOTE###' ) ; 
     170 
     171                                // Create the regexp and execute it. 
     172                                var rFunc = new RegExp( '^' + sFunc + '$' ) ; 
     173                                var aMatch = rFunc.exec( aLinkInfo[2] ) ; 
     174                                if ( aMatch ) 
     175                                { 
     176                                        var aInfo = new Array(); 
     177                                        for ( var i = 1 ; i < aMatch.length ; i ++ ) 
     178                                        { 
     179                                                var k = pos[i-1].match(/^\d+:(.+)$/) ; 
     180                                                aInfo[k[1]] = aMatch[i].replace(/###SINGLE_QUOTE###/g, '\'') ; 
     181                                        } 
     182 
     183                                        // Fill the EMailInfo object that will be returned 
     184                                        oEMailInfo.Address = aInfo['NAME'] + '@' + aInfo['DOMAIN'] ; 
     185                                        oEMailInfo.Subject = decodeURIComponent( aInfo['SUBJECT'] ) ; 
     186                                        oEMailInfo.Body = decodeURIComponent( aInfo['BODY'] ) ; 
     187 
     188                                        return oEMailInfo ; 
     189                                } 
     190                        } 
     191                        catch (e) 
     192                        { 
     193                        } 
     194                } 
     195 
     196                // Try to match the email against the encode protection. 
     197                var aMatch = aLinkInfo[2].match( /^location\.href='mailto:'\+(String\.fromCharCode\([\d,]+\))\+'(.*)'$/ ) ; 
     198                if ( aMatch ) 
     199                { 
     200                        // The link is encoded 
     201                        oEMailInfo.Address = eval( aMatch[1] ) ; 
     202                        if ( aMatch[2] ) 
     203                        { 
     204                                var oEMailParams = oParser.ParseEMailParams( aMatch[2] ) ; 
     205                                oEMailInfo.Subject = oEMailParams.Subject ; 
     206                                oEMailInfo.Body = oEMailParams.Body ; 
     207                        } 
     208                        return oEMailInfo ; 
     209                } 
     210        } 
     211        return false; 
    106212} 
    107213 
    108214oParser.CreateEMailUri = function( address, subject, body ) 
    109215{ 
    110         var sBaseUri = 'mailto:' + address ; 
    111  
    112         var sParams = '' ; 
    113  
    114         if ( subject.length > 0 ) 
    115                 sParams = '?subject=' + encodeURIComponent( subject ) ; 
    116  
    117         if ( body.length > 0 ) 
    118         { 
    119                 sParams += ( sParams.length == 0 ? '?' : '&' ) ; 
    120                 sParams += 'body=' + encodeURIComponent( body ) ; 
    121         } 
    122  
    123         return sBaseUri + sParams ; 
     216        // Switch for the EMailProtection setting. 
     217        switch ( FCKConfig.EMailProtection ) 
     218        { 
     219                case 'function' : 
     220                        var func = FCKConfig.EMailProtectionFunction ; 
     221                        if ( func == null ) 
     222                        { 
     223                                if ( FCKConfig.Debug ) 
     224                                { 
     225                                        alert('EMailProtection alert!\nNo function defined. Please set "FCKConfig.EMailProtectionFunction"') ; 
     226                                } 
     227                                return ''; 
     228                        } 
     229 
     230                        // Split the email address into name and domain parts. 
     231                        var aAddressParts = address.split( '@', 2 ) ; 
     232                        if ( aAddressParts[1] == undefined ) 
     233                        { 
     234                                aAddressParts[1] = '' ; 
     235                        } 
     236 
     237                        // Replace the keys by their values (embedded in single quotes). 
     238                        func = func.replace(/NAME/g, "'" + aAddressParts[0].replace(/'/g, '\\\'') + "'") ; 
     239                        func = func.replace(/DOMAIN/g, "'" + aAddressParts[1].replace(/'/g, '\\\'') + "'") ; 
     240                        func = func.replace(/SUBJECT/g, "'" + encodeURIComponent( subject ).replace(/'/g, '\\\'') + "'") ; 
     241                        func = func.replace(/BODY/g, "'" + encodeURIComponent( body ).replace(/'/g, '\\\'') + "'") ; 
     242                        return 'javascript:' + func ; 
     243                        break ; 
     244                case 'encode' : 
     245                        var aParams = [] ; 
     246                        var aAddressCode = [] ; 
     247 
     248                        if ( subject.length > 0 ) 
     249                                aParams.push( 'subject='+ encodeURIComponent( subject ) ) ; 
     250                        if ( body.length > 0 ) 
     251                                aParams.push( 'body=' + encodeURIComponent( body ) ) ; 
     252                        for ( var i = 0 ; i < address.length ; i++ ) 
     253                                aAddressCode.push( address.charCodeAt( i ) ) ; 
     254 
     255                        return 'javascript:location.href=\'mailto:\'+String.fromCharCode(' + aAddressCode.join( ',' ) + ')+\'?' + aParams.join( '&' ) + '\'' ; 
     256                default : // 'none' 
     257                        var sBaseUri = 'mailto:' + address ; 
     258 
     259                        var sParams = '' ; 
     260 
     261                        if ( subject.length > 0 ) 
     262                                sParams = '?subject=' + encodeURIComponent( subject ) ; 
     263 
     264                        if ( body.length > 0 ) 
     265                        { 
     266                                sParams += ( sParams.length == 0 ? '?' : '&' ) ; 
     267                                sParams += 'body=' + encodeURIComponent( body ) ; 
     268                        } 
     269 
     270                        return sBaseUri + sParams ; 
     271        } 
    124272} 
    125273 
     
    264412        var sProtocol = oRegex.UriProtocol.exec( sHRef ) ; 
    265413 
    266         if ( sProtocol ) 
     414        // Search for a protected email link. 
     415        var oEMailInfo = oParser.ParseEMailUri( sHRef ); 
     416 
     417        if ( oEMailInfo ) 
     418        { 
     419                sType = 'email' ; 
     420 
     421                GetE('txtEMailAddress').value = oEMailInfo.Address ; 
     422                GetE('txtEMailSubject').value = oEMailInfo.Subject ; 
     423                GetE('txtEMailBody').value    = oEMailInfo.Body ; 
     424        } 
     425        else if ( sProtocol ) 
    267426        { 
    268427                sProtocol = sProtocol[0].toLowerCase() ; 
     
    271430                // Remove the protocol and get the remaining URL. 
    272431                var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ; 
    273  
    274                 if ( sProtocol == 'mailto:' )   // It is an e-mail link. 
    275                 { 
    276                         sType = 'email' ; 
    277  
    278                         var oEMailInfo = oParser.ParseEMailUrl( sUrl ) ; 
    279                         GetE('txtEMailAddress').value   = oEMailInfo.Address ; 
    280                         GetE('txtEMailSubject').value   = oEMailInfo.Subject ; 
    281                         GetE('txtEMailBody').value              = oEMailInfo.Body ; 
    282                 } 
    283                 else                            // It is a normal link. 
    284                 { 
    285                         sType = 'url' ; 
    286                         GetE('txtUrl').value = sUrl ; 
    287                 } 
     432                sType = 'url' ; 
     433                GetE('txtUrl').value = sUrl ; 
    288434        } 
    289435        else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 )        // It is an anchor link. 
  • FCKeditor/branches/features/new_samples/editor/dialog/fck_paste.html

    r1565 r2229  
    6565                var eFrameSpace = document.getElementById( 'xFrameSpace' ) ; 
    6666                eFrameSpace.innerHTML = '<iframe id="frmData" src="' + sFrameUrl + '" ' + 
    67                                         'height="98%" width="99%" frameborder="0" style="border: #000000 1px; background-color: #ffffff"></iframe>' ; 
     67                                        'height="98%" width="99%" frameborder="0" style="border: #000000 1px; background-color: #ffffff"><\/iframe>' ; 
    6868 
    6969                var oFrame = eFrameSpace.firstChild ; 
     
    188188 
    189189        html = html.replace(/<o:p>\s*<\/o:p>/g, '') ; 
    190         html = html.replace(/<o:p>.*?<\/o:p>/g, '&nbsp;') ; 
     190        html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, '&nbsp;') ; 
    191191 
    192192        // Remove mso-xxx styles. 
     
    225225                html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ; 
    226226 
     227        // Remove style, meta and link tags 
     228        html = html.replace( /<STYLE[^>]*>[\s\S]*?<\/STYLE[^>]*>/gi, '' ) ; 
     229        html = html.replace( /<(?:META|LINK)[^>]*>\s*/gi, '' ) ; 
     230 
    227231        // Remove empty styles. 
    228232        html =  html.replace( /\s*style="\s*"/gi, '' ) ; 
     
    235239        html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ; 
    236240 
    237         html = html.replace( /<SPAN\s*>(.*?)<\/SPAN>/gi, '$1' ) ; 
    238  
    239         html = html.replace( /<FONT\s*>(.*?)<\/FONT>/gi, '$1' ) ; 
     241        html = html.replace( /<SPAN\s*>([\s\S]*?)<\/SPAN>/gi, '$1' ) ; 
     242 
     243        html = html.replace( /<FONT\s*>([\s\S]*?)<\/FONT>/gi, '$1' ) ; 
    240244 
    241245        // Remove XML elements and declarations 
    242246        html = html.replace(/<\\?\?xml[^>]*>/gi, '' ) ; 
    243247 
     248        // Remove w: tags with contents. 
     249        html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '' ) ; 
     250 
    244251        // Remove Tags with XML namespace declarations: <o:p><\/o:p> 
    245252        html = html.replace(/<\/?\w+:[^>]*>/gi, '' ) ; 
    246253 
    247254        // Remove comments [SF BUG-1481861]. 
    248         html = html.replace(/<\!--.*?-->/g, '' ) ; 
     255        html = html.replace(/<\!--[\s\S]*?-->/g, '' ) ; 
    249256 
    250257        html = html.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ; 
     
    253260 
    254261        // Remove "display:none" tags. 
    255         html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none(.*?)<\/\1>/ig, '' ) ; 
     262        html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none[\s\S]*?<\/\1>/ig, '' ) ; 
    256263 
    257264        // Remove language tags 
     
    268275 
    269276                // Word likes to insert extra <font> tags, when using MSIE. (Wierd). 
    270                 html = html.replace( /<(H\d)><FONT[^>]*>(.*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' ); 
    271                 html = html.replace( /<(H\d)><EM>(.*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' ); 
     277                html = html.replace( /<(H\d)><FONT[^>]*>([\s\S]*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' ); 
     278                html = html.replace( /<(H\d)><EM>([\s\S]*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' ); 
    272279        } 
    273280        else 
     
    283290 
    284291                // Transform <P> to <DIV>