Changeset 2201 for FCKeditor/branches
- Timestamp:
- 2008-07-09 07:36:18 (5 months ago)
- Location:
- FCKeditor/branches/features/div_container
- Files:
-
- 77 modified
-
editor/css/fck_editorarea.css (modified) (3 diffs)
-
editor/dialog/fck_anchor.html (modified) (2 diffs)
-
editor/dialog/fck_link/fck_link.js (modified) (3 diffs)
-
editor/dialog/fck_paste.html (modified) (7 diffs)
-
editor/dialog/fck_replace.html (modified) (1 diff)
-
editor/fckeditor.html (modified) (1 diff)
-
editor/lang/af.js (modified) (2 diffs)
-
editor/lang/ar.js (modified) (2 diffs)
-
editor/lang/bg.js (modified) (2 diffs)
-
editor/lang/bn.js (modified) (2 diffs)
-
editor/lang/bs.js (modified) (2 diffs)
-
editor/lang/ca.js (modified) (2 diffs)
-
editor/lang/cs.js (modified) (2 diffs)
-
editor/lang/da.js (modified) (2 diffs)
-
editor/lang/de.js (modified) (2 diffs)
-
editor/lang/el.js (modified) (2 diffs)
-
editor/lang/en-au.js (modified) (2 diffs)
-
editor/lang/en-ca.js (modified) (2 diffs)
-
editor/lang/en.js (modified) (2 diffs)
-
editor/lang/en-uk.js (modified) (2 diffs)
-
editor/lang/eo.js (modified) (2 diffs)
-
editor/lang/es.js (modified) (2 diffs)
-
editor/lang/et.js (modified) (2 diffs)
-
editor/lang/eu.js (modified) (2 diffs)
-
editor/lang/fa.js (modified) (2 diffs)
-
editor/lang/fi.js (modified) (2 diffs)
-
editor/lang/fo.js (modified) (2 diffs)
-
editor/lang/fr-ca.js (modified) (2 diffs)
-
editor/lang/fr.js (modified) (2 diffs)
-
editor/lang/gl.js (modified) (2 diffs)
-
editor/lang/gu.js (modified) (2 diffs)
-
editor/lang/he.js (modified) (2 diffs)
-
editor/lang/hi.js (modified) (2 diffs)
-
editor/lang/hr.js (modified) (2 diffs)
-
editor/lang/hu.js (modified) (2 diffs)
-
editor/lang/it.js (modified) (2 diffs)
-
editor/lang/ja.js (modified) (2 diffs)
-
editor/lang/km.js (modified) (2 diffs)
-
editor/lang/ko.js (modified) (2 diffs)
-
editor/lang/lt.js (modified) (2 diffs)
-
editor/lang/lv.js (modified) (2 diffs)
-
editor/lang/mn.js (modified) (2 diffs)
-
editor/lang/ms.js (modified) (2 diffs)
-
editor/lang/nb.js (modified) (2 diffs)
-
editor/lang/nl.js (modified) (2 diffs)
-
editor/lang/no.js (modified) (2 diffs)
-
editor/lang/pl.js (modified) (2 diffs)
-
editor/lang/pt-br.js (modified) (2 diffs)
-
editor/lang/pt.js (modified) (2 diffs)
-
editor/lang/ro.js (modified) (2 diffs)
-
editor/lang/ru.js (modified) (2 diffs)
-
editor/lang/sk.js (modified) (2 diffs)
-
editor/lang/sl.js (modified) (2 diffs)
-
editor/lang/sr.js (modified) (2 diffs)
-
editor/lang/sr-latn.js (modified) (2 diffs)
-
editor/lang/sv.js (modified) (2 diffs)
-
editor/lang/th.js (modified) (2 diffs)
-
editor/lang/_translationstatus.txt (modified) (1 diff)
-
editor/lang/tr.js (modified) (2 diffs)
-
editor/lang/uk.js (modified) (2 diffs)
-
editor/lang/vi.js (modified) (2 diffs)
-
editor/lang/zh-cn.js (modified) (3 diffs)
-
editor/lang/zh.js (modified) (3 diffs)
-
editor/_source/classes/fckenterkey.js (modified) (1 diff)
-
editor/_source/classes/fckstyle.js (modified) (3 diffs)
-
editor/_source/commandclasses/fckfitwindow.js (modified) (2 diffs)
-
editor/_source/commandclasses/fck_othercommands.js (modified) (1 diff)
-
editor/_source/commandclasses/fckshowblocks.js (modified) (1 diff)
-
editor/_source/fckeditorapi.js (modified) (1 diff)
-
editor/_source/internals/fckcommands.js (modified) (1 diff)
-
editor/_source/internals/fck_contextmenu.js (modified) (1 diff)
-
editor/_source/internals/fckdomtools.js (modified) (1 diff)
-
editor/_source/internals/fck.js (modified) (5 diffs)
-
editor/_source/internals/fcktablehandler.js (modified) (4 diffs)
-
fckconfig.js (modified) (1 diff)
-
_samples/sample.css (modified) (1 diff)
-
_whatsnew.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
FCKeditor/branches/features/div_container/editor/css/fck_editorarea.css
r1565 r2201  27 27 */ 28 28  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 */ 33 33  34 34 body … …  51 51 } 52 52  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 */ 57 57  58 58 /* … …  64 64 */ 65 65   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  66 73 /* 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 } 70 82 */  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 */ 71 89  72 90 .Bold -
FCKeditor/branches/features/div_container/editor/dialog/fck_anchor.html
r1565 r2201  122 122 { 123 123 // 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( '"', '"' ) + '">' ) ) ;  126 else  127 {  128 var n ;  129 aNewAnchors.push( ( n = oEditor.FCK.InsertElement( 'a' ), n.name = sNewName, n ) ) ;  130 } 125 131 } 126 132 else … …  135 141 { 136 142 oAnchor = aNewAnchors[i] ; 137  Â138  // Set the nameÂ139  oAnchor.name = sNewName ;Â140 143  141 144 // IE does require special processing to show the Anchor's image -
FCKeditor/branches/features/div_container/editor/dialog/fck_link/fck_link.js
r2043 r2201  78 78 var oParser = new Object() ; 79 79  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.  82 oParser.SortNumerical = function(a, b)  83 {  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 ) 81 106 { 82 107 // Initializes the EMailInfo object. 83 108 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; 106 212 } 107 213  108 214 oParser.CreateEMailUri = function( address, subject, body ) 109 215 { 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 } 124 272 } 125 273  … …  264 412 var sProtocol = oRegex.UriProtocol.exec( sHRef ) ; 265 413  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 ) 267 426 { 268 427 sProtocol = sProtocol[0].toLowerCase() ; … …  271 430 // Remove the protocol and get the remaining URL. 272 431 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 ; 288 434 } 289 435 else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 ) // It is an anchor link. -
FCKeditor/branches/features/div_container/editor/dialog/fck_paste.html
r1565 r2201  65 65 var eFrameSpace = document.getElementById( 'xFrameSpace' ) ; 66 66 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>' ; 68 68  69 69 var oFrame = eFrameSpace.firstChild ; … …  188 188  189 189 html = html.replace(/<o:p>\s*<\/o:p>/g, '') ; 190  html = html.replace(/<o:p> .*?<\/o:p>/g, ' ') ; 190 html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, ' ') ; 191 191  192 192 // Remove mso-xxx styles. … …  225 225 html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ; 226 226   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  227 231 // Remove empty styles. 228 232 html = html.replace( /\s*style="\s*"/gi, '' ) ; … …  235 239 html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ; 236 240  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' ) ; 240 244  241 245 // Remove XML elements and declarations 242 246 html = html.replace(/<\\?\?xml[^>]*>/gi, '' ) ; 243 247   248 // Remove w: tags with contents.  249 html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '' ) ;  250  244 251 // Remove Tags with XML namespace declarations: <o:p><\/o:p> 245 252 html = html.replace(/<\/?\w+:[^>]*>/gi, '' ) ; 246 253  247 254 // Remove comments [SF BUG-1481861]. 248  html = html.replace(/<\!-- .*?-->/g, '' ) ; 255 html = html.replace(/<\!--[\s\S]*?-->/g, '' ) ; 249 256  250 257 html = html.replace( /<(U|I|STRIKE)> <\/\1>/g, ' ' ) ; … …  253 260  254 261 // 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, '' ) ; 256 263  257 264 // Remove language tags … …  268 275  269 276 // 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>' ); 272 279 } 273 280 else … …  283 290  284 291 // Transform <P> to <DIV> 285  var re = new RegExp( '(<P)([^>]*> .*?)(<\/P>)', 'gi' ) ; // Different because of a IE 5.0 error 292 var re = new RegExp( '(<P)([^>]*>[\\s\\S]*?)(<\/P>)', 'gi' ) ; // Different because of a IE 5.0 error 286 293 html = html.replace( re, '<div$2<\/div>' ) ; 287 294  -
FCKeditor/branches/features/div_container/editor/dialog/fck_replace.html
r2060 r2201  186 186 if ( focusNode.nodeType != 1 ) 187 187 focusNode = focusNode.parentNode ; 188  focusNode.scrollIntoView(false ) ; 188 FCKDomTools.ScrollIntoView( focusNode, false ) ; 189 189 this._cursors = charRange._cursors ; 190 190 }, -
FCKeditor/branches/features/div_container/editor/fckeditor.html
r2185 r2201 Â