Commits

Anonymous committed 8733786

Update to CKEditor 3.6.3

  • Participants
  • Parent commits d27a3c2
  • Tags 3.6.3

Comments (0)

Files changed (645)

 CHANGES
 *******
 
-3.6.2 (unreleased)
+3.6.3 (2012-05-02)
 ==================
 
-- Nothing changed yet.
+- Update to CKEditor 3.6.3.
 
 
 3.6.1 (2011-06-16)

File hgtools-1.0b3-py2.6.egg

Binary file removed.

File js/ckeditor/resources/_source/adapters/jquery.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 

File js/ckeditor/resources/_source/core/_bootstrap.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 

File js/ckeditor/resources/_source/core/ckeditor.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 

File js/ckeditor/resources/_source/core/ckeditor_base.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 
 // Must be updated on changes in the script as well as updated in the
 // ckeditor_source.js and ckeditor_basic_source.js files.
 
-// if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.6.1',rev:'7072',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/')d+=(d.indexOf('?')>=0?'&':'?')+('t=')+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
+// if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'',version:'3.6.3',revision:'7474',rnd:Math.floor(Math.random()*900)+100,_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f<e.length;f++){var g=e[f].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(g){d=g[1];break;}}}if(d.indexOf(':/')==-1)if(d.indexOf('/')===0)d=location.href.match(/^.*?:\/\/[^\/]*/)[0]+d;else d=location.href.match(/^[^\?]*\/(?:)/)[0]+d;if(!d)throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return d;})(),getUrl:function(d){if(d.indexOf(':/')==-1&&d.indexOf('/')!==0)d=this.basePath+d;if(this.timestamp&&d.charAt(d.length-1)!='/'&&!/[&?]t=/.test(d))d+=(d.indexOf('?')>=0?'&':'?')+'t='+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();
 
 // #### Raw code
 // ATTENTION: read the above "Compressed Code" notes when changing this code.
 			// The production implementation contains a fixed timestamp, unique
 			// for each release and generated by the releaser.
 			// (Base 36 value of each component of YYMMDDHH - 4 chars total - e.g. 87bm == 08071122)
-			timestamp : 'B5GJ5GG',
+			timestamp : 'C3HA5RM',
 
 			/**
 			 * Contains the CKEditor version number.
 			 * @example
 			 * alert( CKEDITOR.version );  // e.g. 'CKEditor 3.4.1'
 			 */
-			version : '3.6.1',
+			version : '3.6.3',
 
 			/**
 			 * Contains the CKEditor revision number.
 			 * @example
 			 * alert( CKEDITOR.revision );  // e.g. '3975'
 			 */
-			revision : '7072',
+			revision : '7474',
+
+			/**
+			 * A 3-digit random integer, valid for the entire life of the CKEDITOR object.
+			 * @type Number
+			 * @example
+			 * alert( CKEDITOR.rnd );  // e.g. '319'
+			 */
+			rnd : Math.floor( Math.random() * ( 999/*Max*/ - 100/*Min*/ + 1 ) ) + 100/*Min*/,
 
 			/**
 			 * Private object used to hold core stuff. It should not be used outside of

File js/ckeditor/resources/_source/core/ckeditor_basic.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 

File js/ckeditor/resources/_source/core/command.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 
 		if ( this.editorFocus )     // Give editor focus if necessary (#4355).
 			editor.focus();
 
+		if ( this.fire( 'exec' ) === true )
+			return true;
+
 		return ( commandDefinition.exec.call( this, editor, data ) !== false );
 	};
 
+	/**
+	 * Explicitly update the status of the command, by firing the {@link CKEDITOR.command#event:refresh} event,
+	 * as well as invoke the {@link CKEDITOR.commandDefinition.prototype.refresh} method if defined, this method
+	 * is to allow different parts of the editor code to contribute in command status resolution.
+	 */
+	this.refresh = function()
+	{
+		if ( this.fire( 'refresh' ) === true )
+			return true;
+
+		return ( commandDefinition.refresh && commandDefinition.refresh.apply( this, arguments ) !== false );
+	};
+
 	CKEDITOR.tools.extend( this, commandDefinition,
 		// Defaults
 		/** @lends CKEDITOR.command.prototype */

File js/ckeditor/resources/_source/core/commanddefinition.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 

File js/ckeditor/resources/_source/core/config.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 
 /**
- * @fileOverview Defines the {@link CKEDITOR.config} object, which holds the
+ * @fileOverview Defines the <code>{@link CKEDITOR.config}</code> object that stores the
  * default configuration settings.
  */
 
 /**
- * Used in conjuction with {@link CKEDITOR.config.enterMode} and
- * {@link CKEDITOR.config.shiftEnterMode} to make the editor produce &lt;p&gt;
- * tags when using the ENTER key.
+ * Used in conjunction with <code>{@link CKEDITOR.config.enterMode}</code>
+ * and <code>{@link CKEDITOR.config.shiftEnterMode}</code> configuration
+ * settings to make the editor produce <code>&lt;p&gt;</code> tags when
+ * using the <em>Enter</em> key.
  * @constant
  */
 CKEDITOR.ENTER_P	= 1;
 
 /**
- * Used in conjuction with {@link CKEDITOR.config.enterMode} and
- * {@link CKEDITOR.config.shiftEnterMode} to make the editor produce &lt;br&gt;
- * tags when using the ENTER key.
+ * Used in conjunction with <code>{@link CKEDITOR.config.enterMode}</code>
+ * and <code>{@link CKEDITOR.config.shiftEnterMode}</code> configuration
+ * settings to make the editor produce <code>&lt;br&gt;</code> tags when
+ * using the <em>Enter</em> key.
  * @constant
  */
 CKEDITOR.ENTER_BR	= 2;
 
 /**
- * Used in conjuction with {@link CKEDITOR.config.enterMode} and
- * {@link CKEDITOR.config.shiftEnterMode} to make the editor produce &lt;div&gt;
- * tags when using the ENTER key.
+ * Used in conjunction with <code>{@link CKEDITOR.config.enterMode}</code>
+ * and <code>{@link CKEDITOR.config.shiftEnterMode}</code> configuration
+ * settings to make the editor produce <code>&lt;div&gt;</code> tags when
+ * using the <em>Enter</em> key.
  * @constant
  */
 CKEDITOR.ENTER_DIV	= 3;
 
 /**
- * @namespace Holds the default configuration settings. Changes to this object are
- * reflected in all editor instances, if not specificaly specified for those
- * instances.
+ * @namespace Stores default configuration settings. Changes to this object are
+ * reflected in all editor instances, if not specified otherwise for a particular
+ * instance.
  */
 CKEDITOR.config =
 {
 	/**
 	 * The URL path for the custom configuration file to be loaded. If not
-	 * overloaded with inline configurations, it defaults to the "config.js"
+	 * overloaded with inline configuration, it defaults to the <code>config.js</code>
 	 * file present in the root of the CKEditor installation directory.<br /><br />
 	 *
 	 * CKEditor will recursively load custom configuration files defined inside
 	 * other custom configuration files.
 	 * @type String
-	 * @default '&lt;CKEditor folder&gt;/config.js'
+	 * @default <code>'<em>&lt;CKEditor folder&gt;</em>/config.js'</code>
 	 * @example
 	 * // Load a specific configuration file.
-	 * CKEDITOR.replace( 'myfiled', { customConfig : '/myconfig.js' } );
+	 * CKEDITOR.replace( 'myfield', { customConfig : '/myconfig.js' } );
 	 * @example
 	 * // Do not load any custom configuration file.
-	 * CKEDITOR.replace( 'myfiled', { customConfig : '' } );
+	 * CKEDITOR.replace( 'myfield', { customConfig : '' } );
 	 */
 	customConfig : 'config.js',
 
 	/**
-	 * Whether the replaced element (usually a textarea) is to be updated
-	 * automatically when posting the form containing the editor.
+	 * Whether the replaced element (usually a <code>&lt;textarea&gt;</code>)
+	 * is to be updated automatically when posting the form containing the editor.
 	 * @type Boolean
-	 * @default true
+	 * @default <code>true</code>
 	 * @example
 	 * config.autoUpdateElement = true;
 	 */
 	 * The base href URL used to resolve relative and absolute URLs in the
 	 * editor content.
 	 * @type String
-	 * @default '' (empty)
+	 * @default <code>''</code> (empty)
 	 * @example
 	 * config.baseHref = 'http://www.example.com/path/';
 	 */
 	baseHref : '',
 
 	/**
-	 * The CSS file(s) to be used to apply style to the contents. It should
+	 * The CSS file(s) to be used to apply style to editor contents. It should
 	 * reflect the CSS used in the final pages where the contents are to be
 	 * used.
 	 * @type String|Array
-	 * @default '&lt;CKEditor folder&gt;/contents.css'
+	 * @default <code>'<em>&lt;CKEditor folder&gt;</em>/contents.css'</code>
 	 * @example
 	 * config.contentsCss = '/css/mysitestyles.css';
 	 * config.contentsCss = ['/css/mysitestyles.css', '/css/anotherfile.css'];
 	contentsCss : CKEDITOR.basePath + 'contents.css',
 
 	/**
-	 * The writting direction of the language used to write the editor
+	 * The writing direction of the language used to create the editor
 	 * contents. Allowed values are:
 	 * <ul>
-	 *     <li>'ui' - which indicate content direction will be the same with the user interface language direction;</li>
-	 *     <li>'ltr' - for Left-To-Right language (like English);</li>
-	 *     <li>'rtl' - for Right-To-Left languages (like Arabic).</li>
+	 *     <li><code>'ui'</code> &ndash; indicates that content direction will be the same as the user interface language direction;</li>
+	 *     <li><code>'ltr'</code> &ndash; for Left-To-Right language (like English);</li>
+	 *     <li><code>'rtl'</code> &ndash; for Right-To-Left languages (like Arabic).</li>
 	 * </ul>
-	 * @default 'ui'
+	 * @default <code>'ui'</code>
 	 * @type String
 	 * @example
 	 * config.contentsLangDirection = 'rtl';
 	contentsLangDirection : 'ui',
 
 	/**
-	 * Language code of  the writting language which is used to author the editor
+	 * Language code of  the writing language which is used to create the editor
 	 * contents.
-	 * @default Same value with editor's UI language.
+	 * @default Same value as editor UI language.
 	 * @type String
 	 * @example
 	 * config.contentsLanguage = 'fr';
 	contentsLanguage : '',
 
 	/**
-	 * The user interface language localization to use. If empty, the editor
-	 * automatically localize the editor to the user language, if supported,
-	 * otherwise the {@link CKEDITOR.config.defaultLanguage} language is used.
-	 * @default '' (empty)
+	 * The user interface language localization to use. If left empty, the editor
+	 * will automatically be localized to the user language. If the user language is not supported,
+	 * the language specified in the <code>{@link CKEDITOR.config.defaultLanguage}</code>
+	 * configuration setting is used.
+	 * @default <code>''</code> (empty)
 	 * @type String
 	 * @example
 	 * // Load the German interface.
 	language : '',
 
 	/**
-	 * The language to be used if {@link CKEDITOR.config.language} is left empty and it's not
-	 * possible to localize the editor to the user language.
-	 * @default 'en'
+	 * The language to be used if the <code>{@link CKEDITOR.config.language}</code>
+	 * setting is left empty and it is not possible to localize the editor to the user language.
+	 * @default <code>'en'</code>
 	 * @type String
 	 * @example
 	 * config.defaultLanguage = 'it';
 	defaultLanguage : 'en',
 
 	/**
-	 * Sets the behavior for the ENTER key. It also dictates other behaviour
-	 * rules in the editor, like whether the &lt;br&gt; element is to be used
+	 * Sets the behavior of the <em>Enter</em> key. It also determines other behavior
+	 * rules of the editor, like whether the <code>&lt;br&gt;</code> element is to be used
 	 * as a paragraph separator when indenting text.
-	 * The allowed values are the following constants, and their relative
-	 * behavior:
+	 * The allowed values are the following constants that cause the behavior outlined below:
 	 * <ul>
-	 *     <li>{@link CKEDITOR.ENTER_P} (1): new &lt;p&gt; paragraphs are created;</li>
-	 *     <li>{@link CKEDITOR.ENTER_BR} (2): lines are broken with &lt;br&gt; elements;</li>
-	 *     <li>{@link CKEDITOR.ENTER_DIV} (3): new &lt;div&gt; blocks are created.</li>
+	 *     <li><code>{@link CKEDITOR.ENTER_P}</code> (1) &ndash; new <code>&lt;p&gt;</code> paragraphs are created;</li>
+	 *     <li><code>{@link CKEDITOR.ENTER_BR}</code> (2) &ndash; lines are broken with <code>&lt;br&gt;</code> elements;</li>
+	 *     <li><code>{@link CKEDITOR.ENTER_DIV}</code> (3) &ndash; new <code>&lt;div&gt;</code> blocks are created.</li>
 	 * </ul>
-	 * <strong>Note</strong>: It's recommended to use the
-	 * {@link CKEDITOR.ENTER_P} value because of its semantic value and
-	 * correctness. The editor is optimized for this value.
+	 * <strong>Note</strong>: It is recommended to use the
+	 * <code>{@link CKEDITOR.ENTER_P}</code> setting because of its semantic value and
+	 * correctness. The editor is optimized for this setting.
 	 * @type Number
-	 * @default {@link CKEDITOR.ENTER_P}
+	 * @default <code>{@link CKEDITOR.ENTER_P}</code>
 	 * @example
 	 * // Not recommended.
 	 * config.enterMode = CKEDITOR.ENTER_BR;
 	enterMode : CKEDITOR.ENTER_P,
 
 	/**
-	 * Force the respect of {@link CKEDITOR.config.enterMode} as line break regardless of the context,
-	 * E.g. If {@link CKEDITOR.config.enterMode} is set to {@link CKEDITOR.ENTER_P},
-	 * press enter key inside a 'div' will create a new paragraph with 'p' instead of 'div'.
+	 * Force the use of <code>{@link CKEDITOR.config.enterMode}</code> as line break regardless
+	 * of the context. If, for example, <code>{@link CKEDITOR.config.enterMode}</code> is set
+	 * to <code>{@link CKEDITOR.ENTER_P}</code>, pressing the <em>Enter</em> key inside a
+	 * <code>&lt;div&gt;</code> element will create a new paragraph with <code>&lt;p&gt;</code>
+	 * instead of a <code>&lt;div&gt;</code>.
 	 * @since 3.2.1
-	 * @default false
+	 * @type Boolean
+	 * @default <code>false</code>
 	 * @example
 	 * // Not recommended.
 	 * config.forceEnterMode = true;
 	forceEnterMode : false,
 
 	/**
-	 * Just like the {@link CKEDITOR.config.enterMode} setting, it defines the behavior for the SHIFT+ENTER key.
-	 * The allowed values are the following constants, and their relative
-	 * behavior:
+	 * Similarly to the <code>{@link CKEDITOR.config.enterMode}</code> setting, it defines the behavior
+	 * of the <em>Shift+Enter</em> key combination.
+	 * The allowed values are the following constants the behavior outlined below:
 	 * <ul>
-	 *     <li>{@link CKEDITOR.ENTER_P} (1): new &lt;p&gt; paragraphs are created;</li>
-	 *     <li>{@link CKEDITOR.ENTER_BR} (2): lines are broken with &lt;br&gt; elements;</li>
-	 *     <li>{@link CKEDITOR.ENTER_DIV} (3): new &lt;div&gt; blocks are created.</li>
+	 *     <li><code>{@link CKEDITOR.ENTER_P}</code> (1) &ndash; new <code>&lt;p&gt;</code> paragraphs are created;</li>
+	 *     <li><code>{@link CKEDITOR.ENTER_BR}</code> (2) &ndash; lines are broken with <code>&lt;br&gt;</code> elements;</li>
+	 *     <li><code>{@link CKEDITOR.ENTER_DIV}</code> (3) &ndash; new <code>&lt;div&gt;</code> blocks are created.</li>
 	 * </ul>
 	 * @type Number
-	 * @default {@link CKEDITOR.ENTER_BR}
+	 * @default <code>{@link CKEDITOR.ENTER_BR}</code>
 	 * @example
 	 * config.shiftEnterMode = CKEDITOR.ENTER_P;
 	 */
 
 	/**
 	 * A comma separated list of plugins that are not related to editor
-	 * instances. Reserved to plugins that extend the core code only.<br /><br />
+	 * instances. Reserved for plugins that extend the core code only.<br /><br />
 	 *
-	 * There are no ways to override this setting, except by editing the source
-	 * code of CKEditor (_source/core/config.js).
+	 * There are no ways to override this setting except by editing the source
+	 * code of CKEditor (<code>_source/core/config.js</code>).
 	 * @type String
 	 * @example
 	 */
 	corePlugins : '',
 
 	/**
-	 * Sets the doctype to be used when loading the editor content as HTML.
+	 * Sets the <code>DOCTYPE</code> to be used when loading the editor content as HTML.
 	 * @type String
-	 * @default '&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;'
+	 * @default <code>'&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;'</code>
 	 * @example
-	 * // Set the doctype to the HTML 4 (quirks) mode.
+	 * // Set the DOCTYPE to the HTML 4 (Quirks) mode.
 	 * config.docType = '&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;';
 	 */
 	docType : '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
 
 	/**
-	 * Sets the "id" attribute to be used on the body element of the editing
-	 * area. This can be useful when reusing the original CSS file you're using
-	 * on your live website and you want to assing to the editor the same id
-	 * you're using for the region that'll hold the contents. In this way,
-	 * id specific CSS rules will be enabled.
+	 * Sets the <code>id</code> attribute to be used on the <code>body</code> element
+	 * of the editing area. This can be useful when you intend to reuse the original CSS
+	 * file you are using on your live website and want to assign the editor the same ID
+	 * as the section that will include the contents. In this way ID-specific CSS rules will
+	 * be enabled.
 	 * @since 3.1
 	 * @type String
-	 * @default '' (empty)
+	 * @default <code>''</code> (empty)
 	 * @example
 	 * config.bodyId = 'contents_id';
 	 */
 	bodyId : '',
 
 	/**
-	 * Sets the "class" attribute to be used on the body element of the editing
-	 * area. This can be useful when reusing the original CSS file you're using
-	 * on your live website and you want to assing to the editor the same class
-	 * name you're using for the region that'll hold the contents. In this way,
-	 * class specific CSS rules will be enabled.
+	 * Sets the <code>class</code> attribute to be used on the <code>body</code> element
+	 * of the editing area. This can be useful when you intend to reuse the original CSS
+	 * file you are using on your live website and want to assign the editor the same class
+	 * as the section that will include the contents. In this way class-specific CSS rules will
+	 * be enabled.
 	 * @since 3.1
 	 * @type String
-	 * @default '' (empty)
+	 * @default <code>''</code> (empty)
 	 * @example
 	 * config.bodyClass = 'contents';
 	 */
 	bodyClass : '',
 
 	/**
-	 * Indicates whether the contents to be edited are being inputted as a full
-	 * HTML page. A full page includes the &lt;html&gt;, &lt;head&gt; and
-	 * &lt;body&gt; tags. The final output will also reflect this setting,
-	 * including the &lt;body&gt; contents only if this setting is disabled.
+	 * Indicates whether the contents to be edited are being input as a full
+	 * HTML page. A full page includes the <code>&lt;html&gt;</code>,
+	 * <code>&lt;head&gt;</code>, and <code>&lt;body&gt;</code> elements.
+	 * The final output will also reflect this setting, including the
+	 * <code>&lt;body&gt;</code> contents only if this setting is disabled.
 	 * @since 3.1
 	 * @type Boolean
-	 * @default false
+	 * @default <code>false</code>
 	 * @example
 	 * config.fullPage = true;
 	 */
 	fullPage : false,
 
 	/**
-	 * The height of editing area( content ), in relative or absolute, e.g. 30px, 5em.
-	 * Note: Percentage unit is not supported yet. e.g. 30%.
+	 * The height of the editing area (that includes the editor content). This
+	 * can be an integer, for pixel sizes, or any CSS-defined length unit.<br>
+	 * <br>
+	 * <strong>Note:</strong> Percent units (%) are not supported.
 	 * @type Number|String
-	 * @default '200'
+	 * @default <code>200</code>
 	 * @example
-	 * config.height = 500;
-	 * config.height = '25em';
-	 * config.height = '300px';
+	 * config.height = 500; // 500 pixels.
+	 * @example
+	 * config.height = '25em'; // CSS length.
+	 * @example
+	 * config.height = '300px'; // CSS length.
 	 */
 	height : 200,
 
 	/**
-	 * Comma separated list of plugins to load and initialize for an editor
-	 * instance. This should be rarely changed, using instead the
-	 * {@link CKEDITOR.config.extraPlugins} and
-	 * {@link CKEDITOR.config.removePlugins} for customizations.
+	 * Comma separated list of plugins to be loaded and initialized for an editor
+	 * instance. This setting should rarely be changed. It is recommended to use the
+	 * <code>{@link CKEDITOR.config.extraPlugins}</code> and
+	 * <code>{@link CKEDITOR.config.removePlugins}</code> for customization purposes instead.
 	 * @type String
 	 * @example
 	 */
 		'wsc',
 
 	/**
-	 * List of additional plugins to be loaded. This is a tool setting which
-	 * makes it easier to add new plugins, whithout having to touch and
-	 * possibly breaking the {@link CKEDITOR.config.plugins} setting.
+	 * A list of additional plugins to be loaded. This setting makes it easier
+	 * to add new plugins without having to touch and potentially break the
+	 * <code>{@link CKEDITOR.config.plugins}</code> setting.
 	 * @type String
 	 * @example
 	 * config.extraPlugins = 'myplugin,anotherplugin';
 	extraPlugins : '',
 
 	/**
-	 * List of plugins that must not be loaded. This is a tool setting which
-	 * makes it easier to avoid loading plugins definied in the
-	 * {@link CKEDITOR.config.plugins} setting, whithout having to touch it and
-	 * potentially breaking it.
+	 * A list of plugins that must not be loaded. This setting makes it possible
+	 * to avoid loading some plugins defined in the <code>{@link CKEDITOR.config.plugins}</code>
+	 * setting, without having to touch it and potentially break it.
 	 * @type String
 	 * @example
 	 * config.removePlugins = 'elementspath,save,font';
 	removePlugins : '',
 
 	/**
-	 * List of regular expressions to be executed over the input HTML,
-	 * indicating HTML source code that matched must <strong>not</strong> present in WYSIWYG mode for editing.
+	 * List of regular expressions to be executed on input HTML,
+	 * indicating HTML source code that when matched, must <strong>not</strong> be available in the WYSIWYG
+	 * mode for editing.
 	 * @type Array
-	 * @default [] (empty array)
+	 * @default <code>[]</code> (empty array)
 	 * @example
-	 * config.protectedSource.push( /<\?[\s\S]*?\?>/g );   // PHP Code
-	 * config.protectedSource.push( /<%[\s\S]*?%>/g );   // ASP Code
-	 * config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi );   // ASP.Net Code
+	 * config.protectedSource.push( /<\?[\s\S]*?\?>/g );   // PHP code
+	 * config.protectedSource.push( /<%[\s\S]*?%>/g );   // ASP code
+	 * config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi );   // ASP.Net code
 	 */
 	protectedSource : [],
 
 	/**
-	 * The editor tabindex value.
+	 * The editor <code>tabindex</code> value.
 	 * @type Number
-	 * @default 0 (zero)
+	 * @default <code>0</code> (zero)
 	 * @example
 	 * config.tabIndex = 1;
 	 */
 	tabIndex : 0,
 
 	/**
-	 * The theme to be used to build the UI.
+	 * The theme to be used to build the user interface.
 	 * @type String
-	 * @default 'default'
+	 * @default <code>'default'</code>
 	 * @see CKEDITOR.config.skin
 	 * @example
 	 * config.theme = 'default';
 	 * The skin to load. It may be the name of the skin folder inside the
 	 * editor installation path, or the name and the path separated by a comma.
 	 * @type String
-	 * @default 'default'
+	 * @default <code>'default'</code>
 	 * @example
 	 * config.skin = 'v2';
 	 * @example
 	skin : 'kama',
 
 	/**
-	 * The editor width in CSS size format or pixel integer.
+	 * The editor UI outer width. This can be an integer, for pixel sizes, or
+	 * any CSS-defined unit.<br>
+	 * <br>
+	 * Unlike the <code>{@link CKEDITOR.config.height}</code> setting, this
+	 * one will set the outer width of the entire editor UI, not for the
+	 * editing area only.
 	 * @type String|Number
-	 * @default '' (empty)
+	 * @default <code>''</code> (empty)
 	 * @example
-	 * config.width = 850;
+	 * config.width = 850; // 850 pixels wide.
 	 * @example
-	 * config.width = '75%';
+	 * config.width = '75%'; // CSS unit.
 	 */
 	width : '',
 
 	/**
-	 * The base Z-index for floating dialogs and popups.
+	 * The base Z-index for floating dialog windows and popups.
 	 * @type Number
-	 * @default 10000
+	 * @default <code>10000</code>
 	 * @example
 	 * config.baseFloatZIndex = 2000
 	 */
 
 /**
  * Indicates that some of the editor features, like alignment and text
- * direction, should used the "computed value" of the feature to indicate it's
- * on/off state, instead of using the "real value".<br />
+ * direction, should use the "computed value" of the feature to indicate its
+ * on/off state instead of using the "real value".<br />
  * <br />
- * If enabled, in a left to right written document, the "Left Justify"
- * alignment button will show as active, even if the aligment style is not
+ * If enabled in a Left-To-Right written document, the "Left Justify"
+ * alignment button will be shown as active, even if the alignment style is not
  * explicitly applied to the current paragraph in the editor.
  * @name CKEDITOR.config.useComputedState
  * @type Boolean
- * @default true
+ * @default <code>true</code>
  * @since 3.4
  * @example
  * config.useComputedState = false;

File js/ckeditor/resources/_source/core/dataprocessor.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 

File js/ckeditor/resources/_source/core/dom.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 

File js/ckeditor/resources/_source/core/dom/comment.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 
  *		a DOM comment node.
  */
 
-CKEDITOR.dom.comment = CKEDITOR.tools.createClass(
+/**
+ * Represents a DOM comment node.
+ * @constructor
+ * @augments CKEDITOR.dom.node
+ * @param {Object|String} comment A native DOM comment node or a string containing
+ *		the text to use to create a new comment node.
+ * @param {CKEDITOR.dom.document} [ownerDocument] The document that will contain
+ *		the node in case of new node creation. Defaults to the current document.
+ * @example
+ * var nativeNode = document.createComment( 'Example' );
+ * var comment = CKEDITOR.dom.comment( nativeNode );
+ * @example
+ * var comment = CKEDITOR.dom.comment( 'Example' );
+ */
+CKEDITOR.dom.comment = function( comment, ownerDocument )
 {
-	base : CKEDITOR.dom.node,
+	if ( typeof comment == 'string' )
+		comment = ( ownerDocument ? ownerDocument.$ : document ).createComment( comment );
 
-	$ : function( text, ownerDocument )
-	{
-		if ( typeof text == 'string' )
-			text = ( ownerDocument ? ownerDocument.$ : document ).createComment( text );
+	CKEDITOR.dom.domObject.call( this, comment );
+};
 
-		this.base( text );
-	},
+CKEDITOR.dom.comment.prototype = new CKEDITOR.dom.node();
 
-	proto :
+CKEDITOR.tools.extend( CKEDITOR.dom.comment.prototype,
+	/** @lends CKEDITOR.dom.comment.prototype */
 	{
 		type : CKEDITOR.NODE_COMMENT,
 
 		{
 			return '<!--' + this.$.nodeValue + '-->';
 		}
-	}
-});
+	});

File js/ckeditor/resources/_source/core/dom/document.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 

File js/ckeditor/resources/_source/core/dom/documentfragment.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 

File js/ckeditor/resources/_source/core/dom/domobject.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 
 			{
 				var listener = nativeListeners[ eventName ] = getNativeListener( this, eventName );
 
-				if ( this.$.attachEvent )
+				if ( this.$.addEventListener )
+					this.$.addEventListener( eventName, listener, !!CKEDITOR.event.useCapture );
+				else if ( this.$.attachEvent )
 					this.$.attachEvent( 'on' + eventName, listener );
-				else if ( this.$.addEventListener )
-					this.$.addEventListener( eventName, listener, !!CKEDITOR.event.useCapture );
 			}
 
 			// Call the original implementation.
 				var listener = nativeListeners && nativeListeners[ eventName ];
 				if ( listener )
 				{
-					if ( this.$.detachEvent )
+					if ( this.$.removeEventListener )
+						this.$.removeEventListener( eventName, listener, false );
+					else if ( this.$.detachEvent )
 						this.$.detachEvent( 'on' + eventName, listener );
-					else if ( this.$.removeEventListener )
-						this.$.removeEventListener( eventName, listener, false );
 
 					delete nativeListeners[ eventName ];
 				}

File js/ckeditor/resources/_source/core/dom/element.js

 /*
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */
 
 		 * in the future.
 		 * @returns {String} The text value.
 		 * @example
-		 * var element = CKEDITOR.dom.element.createFromHtml( '&lt;div&gt;Same &lt;i&gt;text&lt;/i&gt;.&lt;/div&gt;' );
+		 * var element = CKEDITOR.dom.element.createFromHtml( '&lt;div&gt;Sample &lt;i&gt;text&lt;/i&gt;.&lt;/div&gt;' );
 		 * alert( <b>element.getText()</b> );  // "Sample text."
 		 */
 		getText : function()
 			return false;
 		},
 
-		isEditable : function()
+		/**
+		 * Decide whether one element is able to receive cursor.
+		 * @param {Boolean} [textCursor=true] Only consider element that could receive text child.
+		 */
+		isEditable : function( textCursor )
 		{
-			if ( this.isReadOnly() )
-				return false;
-
-			// Get the element name.
 			var name = this.getName();
 
-			// Get the element DTD (defaults to span for unknown elements).
-			var dtd = !CKEDITOR.dtd.$nonEditable[ name ]
-						&& ( CKEDITOR.dtd[ name ] || CKEDITOR.dtd.span );
+			if ( this.isReadOnly()
+					|| this.getComputedStyle( 'display' ) == 'none'
+					|| this.getComputedStyle( 'visibility' ) == 'hidden'
+				 	|| this.is( 'a' ) && this.data( 'cke-saved-name' ) && !this.getChildCount()
+					|| CKEDITOR.dtd.$nonEditable[ name ] )
+			{
+				return false;
+			}
 
-			// In the DTD # == text node.
-			return ( dtd && dtd['#'] );
+			if ( textCursor !== false )
+			{
+				// Get the element DTD (defaults to span for unknown elements).
+				var dtd = CKEDITOR.dtd[ name ] || CKEDITOR.dtd.span;
+				// In the DTD # == text node.
+				return ( dtd && dtd[ '#'] );
+			}
+
+			return true;
 		},
 
 		isIdentical : function( otherElement )
 		 */
 		isVisible : function()
 		{
-			var isVisible = !!this.$.offsetHeight && this.getComputedStyle( 'visibility' ) != 'hidden',
+			var isVisible = ( this.$.offsetHeight || this.$.offsetWidth ) && this.getComputedStyle( 'visibility' ) != 'hidden',
 				elementWindow,
 				elementWindowFrame;
 
 				}
 			}
 
-			return isVisible;
+			return !!isVisible;
 		},
 
 		/**
 					if ( CKEDITOR.env.ie || CKEDITOR.env.opera )
 					{
 						var element = this.$,
+							elements = element.getElementsByTagName("*"),
 							e,
 							i = 0;
 
 						element.unselectable = 'on';
 
-						while ( ( e = element.all[ i++ ] ) )
+						while ( ( e = elements[ i++ ] ) )
 						{
 							switch ( e.tagName.toLowerCase() )
 							{
 		getDocumentPosition : function( refDocument )
 		{
 			var x = 0, y = 0,
-				body = this.getDocument().getBody(),
-				quirks = this.getDocument().$.compatMode == 'BackCompat';
-
-			var doc = this.getDocument();
+				doc = this.getDocument(),
+				body = doc.getBody(),
+				quirks = doc.$.compatMode == 'BackCompat';
 
 			if ( document.documentElement[ "getBoundingClientRect" ] )
 			{
 			return { x : x, y : y };
 		},
 
-		scrollIntoView : function( alignTop )
+		/**
+		 * Make any page element visible inside the browser viewport.
+		 * @param {Boolean} [alignToTop]
+		 */
+		scrollIntoView : function( alignToTop )
 		{
-			// Get the element window.
-			var win = this.getWindow(),
-				winHeight = win.getViewPaneSize().height;
+			var parent = this.getParent();
+			if ( !parent ) return;
 
-			// Starts from the offset that will be scrolled with the negative value of
-			// the visible window height.
-			var offset = winHeight * -1;
+			// Scroll the element into parent container from the inner out.
+			do
+			{
+				// Check ancestors that overflows.
+				var overflowed =
+					parent.$.clientWidth && parent.$.clientWidth < parent.$.scrollWidth
+					|| parent.$.clientHeight && parent.$.clientHeight < parent.$.scrollHeight;
 
-			// Append the view pane's height if align to top.
-			// Append element height if we are aligning to the bottom.
-			if ( alignTop )
-				offset += winHeight;
-			else
+				if ( overflowed )
+					this.scrollIntoParent( parent, alignToTop, 1 );
+
+				// Walk across the frame.
+				if ( parent.is( 'html' ) )
+				{
+					var win = parent.getWindow();
+
+					// Avoid security error.
+					try
+					{
+						var iframe = win.$.frameElement;
+						iframe && ( parent = new CKEDITOR.dom.element( iframe ) );
+					}
+					catch(er){}
+				}
+			}
+			while ( ( parent = parent.getParent() ) );
+		},
+
+		/**
+		 * Make any page element visible inside one of the ancestors by scrolling the parent.
+		 * @param {CKEDITOR.dom.element|CKEDITOR.dom.window} parent The container to scroll into.
+		 * @param {Boolean} [alignToTop] Align the element's top side with the container's
+		 * when <code>true</code> is specified; align the bottom with viewport bottom when
+		 * <code>false</code> is specified. Otherwise scroll on either side with the minimum
+		 * amount to show the element.
+		 * @param {Boolean} [hscroll] Whether horizontal overflow should be considered.
+		 */
+		scrollIntoParent : function( parent, alignToTop, hscroll )
+		{
+			!parent && ( parent = this.getWindow() );
+
+			var doc = parent.getDocument();
+			var isQuirks = doc.$.compatMode == 'BackCompat';
+
+			// On window <html> is scrolled while quirks scrolls <body>.
+			if ( parent instanceof CKEDITOR.dom.window )
+				parent = isQuirks ? doc.getBody() : doc.getDocumentElement();
+
+			// Scroll the parent by the specified amount.
+			function scrollBy( x, y )
 			{
-				offset += this.$.offsetHeight || 0;
-
-				// Consider the margin in the scroll, which is ok for our current needs, but
-				// needs investigation if we will be using this function in other places.
-				offset += parseInt( this.getComputedStyle( 'marginBottom' ) || 0, 10 ) || 0;
+				// Webkit doesn't support "scrollTop/scrollLeft"
+				// on documentElement/body element.
+				if ( /body|html/.test( parent.getName() ) )
+					parent.getWindow().$.scrollBy( x, y );
+				else
+				{
+					parent.$[ 'scrollLeft' ] += x;
+					parent.$[ 'scrollTop' ] += y;
+				}
 			}
 
-			// Append the offsets for the entire element hierarchy.
-			var elementPosition = this.getDocumentPosition();
-			offset += elementPosition.y;
+			// Figure out the element position relative to the specified window.
+			function screenPos( element, refWin )
+			{
+				var pos = { x: 0, y: 0 };
 
-			// offset value might be out of range(nagative), fix it(#3692).
-			offset = offset < 0 ? 0 : offset;
+				if ( !( element.is( isQuirks ? 'body' : 'html' ) ) )
+				{
+					var box = element.$.getBoundingClientRect();
+					pos.x = box.left, pos.y = box.top;
+				}
 
-			// Scroll the window to the desired position, if not already visible(#3795).
-			var currentScroll = win.getScrollPosition().y;
-			if ( offset > currentScroll || offset < currentScroll - winHeight )
-				win.$.scrollTo( 0, offset );
+				var win = element.getWindow();
+				if ( !win.equals( refWin ) )
+				{
+					var outerPos = screenPos( CKEDITOR.dom.element.get( win.$.frameElement ), refWin );
+					pos.x += outerPos.x, pos.y += outerPos.y;
+				}
+
+				return pos;
+			}
+
+			// calculated margin size.
+			function margin( element, side )
+			{
+				return parseInt( element.getComputedStyle( 'margin-' + side ) || 0, 10 ) || 0;
+			}
+
+			var win = parent.getWindow();
+
+			var thisPos = screenPos( this, win ),
+				parentPos = screenPos( parent, win ),
+				eh = this.$.offsetHeight,
+				ew = this.$.offsetWidth,
+				ch = parent.$.clientHeight,
+				cw = parent.$.clientWidth,
+				lt,
+				br;
+
+			// Left-top margins.
+			lt =
+			{
+				x : thisPos.x - margin( this, 'left' ) - parentPos.x || 0,
+				y : thisPos.y - margin( this, 'top' ) - parentPos.y|| 0
+			};
+
+			// Bottom-right margins.
+			br =
+			{
+				x : thisPos.x + ew + margin( this, 'right' ) - ( ( parentPos.x ) + cw ) || 0,