| 84 | return parseInt( a ) - parseInt( b ) ; |
| 85 | } |
| 86 | |
| 87 | oParser.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. |
| 105 | oParser.ParseEMailUri = function( sUrl ) |
| 106 | { |
94 | | // Look for the optional e-mail parameters. |
95 | | if ( oParts[2] ) |
| 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 ) |
97 | | var oMatch = oParts[2].match( /(^|&)subject=([^&]+)/i ) ; |
98 | | if ( oMatch ) oEMailInfo.Subject = decodeURIComponent( oMatch[2] ) ; |
| 141 | try |
| 142 | { |
| 143 | // Escape special chars. |
| 144 | func = func.replace( /\//g, '\\/' ) ; |
| 145 | func = func.replace( /\^/g, '\\^' ) ; |
| 146 | func = func.replace( /\$/g, '\\$' ) ; |
| 147 | func = func.replace( /\*/g, '\\*' ) ; |
| 148 | func = func.replace( /\+/g, '\\+' ) ; |
| 149 | func = func.replace( /\./g, '\\.' ) ; |
| 150 | func = func.replace( /\?/g, '\\?' ) ; |
| 151 | func = func.replace( /\(/g, '\\(' ) ; |
| 152 | func = func.replace( /\)/g, '\\)' ) ; |
| 153 | func = func.replace( /\[/g, '\\[' ) ; |
| 154 | func = func.replace( /\]/g, '\\]' ) ; |
100 | | oMatch = oParts[2].match( /(^|&)body=([^&]+)/i ) ; |
101 | | if ( oMatch ) oEMailInfo.Body = decodeURIComponent( oMatch[2] ) ; |
| 156 | // Define the possible keys. |
| 157 | var keys = new Array('NAME', 'DOMAIN', 'SUBJECT', 'BODY') ; |
| 158 | |
| 159 | // Get the order of the keys (hold them in the array <pos>) and |
| 160 | // the function replaced by regular expression patterns. |
| 161 | var sFunc = func ; |
| 162 | var pos = new Array() ; |
| 163 | for ( var i = 0 ; i < keys.length ; i ++ ) |
| 164 | { |
| 165 | var rexp = new RegExp( keys[i] ) ; |
| 166 | var p = func.search( rexp ) ; |
| 167 | if ( p >= 0 ) |
| 168 | { |
| 169 | sFunc = sFunc.replace( rexp, '\'([^\']*)\'' ) ; |
| 170 | pos[pos.length] = p + ':' + keys[i] ; |
| 171 | } |
| 172 | } |
| 173 | |
| 174 | // Sort the available keys. |
| 175 | pos.sort( oParser.SortNumerical ) ; |
| 176 | |
| 177 | // Replace the excaped single quotes in the url, such they do |
| 178 | // not affect the regexp afterwards. |
| 179 | aLinkInfo[2] = aLinkInfo[2].replace( /\\'/g, '###SINGLE_QUOTE###' ) ; |
| 180 | |
| 181 | // Create the regexp and execute it. |
| 182 | var rFunc = new RegExp( '^' + sFunc + '$' ) ; |
| 183 | var aMatch = rFunc.exec( aLinkInfo[2] ) ; |
| 184 | if ( aMatch ) |
| 185 | { |
| 186 | var aInfo = new Array(); |
| 187 | for ( var i = 1 ; i < aMatch.length ; i ++ ) |
| 188 | { |
| 189 | var k = pos[i-1].match(/^\d+:(.+)$/) ; |
| 190 | aInfo[k[1]] = aMatch[i].replace(/###SINGLE_QUOTE###/, '\'') ; |
| 191 | } |
| 192 | |
| 193 | // Fill the EMailInfo object that will be returned |
| 194 | oEMailInfo.Address = aInfo['NAME'] + '@' + aInfo['DOMAIN'] ; |
| 195 | oEMailInfo.Subject = decodeURIComponent( aInfo['SUBJECT'] ) ; |
| 196 | oEMailInfo.Body = decodeURIComponent( aInfo['BODY'] ) ; |
| 197 | |
| 198 | return oEMailInfo ; |
| 199 | } |
| 200 | } |
| 201 | catch (e) |
| 202 | { |
| 203 | } |
114 | | if ( subject.length > 0 ) |
115 | | sParams = '?subject=' + encodeURIComponent( subject ) ; |
| 250 | // Replace the keys by their values (embedded in single quotes). |
| 251 | func = func.replace(/NAME/g, "'" + name.replace(/'/g, '\\\'') + "'") ; |
| 252 | func = func.replace(/DOMAIN/g, "'" + domain.replace(/'/g, '\\\'') + "'") ; |
| 253 | func = func.replace(/SUBJECT/g, "'" + encodeURIComponent( subject ).replace(/'/g, '\\\'') + "'") ; |
| 254 | func = func.replace(/BODY/g, "'" + encodeURIComponent( body ).replace(/'/g, '\\\'') + "'") ; |
| 255 | return 'javascript:' + func ; |
| 256 | break ; |
| 257 | case 'encode' : |
| 258 | var sAddress = ''; |
| 259 | var sParams = '' ; |
117 | | if ( body.length > 0 ) |
118 | | { |
119 | | sParams += ( sParams.length == 0 ? '?' : '&' ) ; |
120 | | sParams += 'body=' + encodeURIComponent( body ) ; |
| 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 | for ( var i = 0 ; i < address.length ; i ++ ) { |
| 271 | if ( i > 0 ) { sAddress += ','; } |
| 272 | sAddress += address.charCodeAt(i) ; |
| 273 | } |
| 274 | |
| 275 | return 'javascript:location.href=\'mailto:\'+String.fromCharCode(' + sAddress + ')+\'' + sParams + '\'' ; |
| 276 | break ; |
| 277 | default : // 'none' |
| 278 | var sBaseUri = 'mailto:' + address ; |
| 279 | |
| 280 | var sParams = '' ; |
| 281 | |
| 282 | if ( subject.length > 0 ) |
| 283 | sParams = '?subject=' + encodeURIComponent( subject ) ; |
| 284 | |
| 285 | if ( body.length > 0 ) |
| 286 | { |
| 287 | sParams += ( sParams.length == 0 ? '?' : '&' ) ; |
| 288 | sParams += 'body=' + encodeURIComponent( body ) ; |
| 289 | } |
| 290 | |
| 291 | return sBaseUri + sParams ; |