| | 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 ; |