/*\r
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
For licensing, see LICENSE.html or http://ckeditor.com/license\r
*/\r
\r
'_source/' + // @Packager.RemoveLine\r
'skins/' + skinName + '/' ) );\r
\r
+ /**\r
+ * The name of the skin used by this editor instance. The skin name can\r
+ * be set though the {@link CKEDITOR.config.skin} setting.\r
+ * @name CKEDITOR.editor.prototype.skinName\r
+ * @type String\r
+ * @example\r
+ * alert( editor.skinName ); // "kama" (e.g.)\r
+ */\r
editor.skinName = skinName;\r
+\r
+ /**\r
+ * The full URL of the skin directory.\r
+ * @name CKEDITOR.editor.prototype.skinPath\r
+ * @type String\r
+ * @example\r
+ * alert( editor.skinPath ); // "http://example.com/ckeditor/skins/kama/" (e.g.)\r
+ */\r
editor.skinPath = skinPath;\r
+\r
+ /**\r
+ * The CSS class name used for skin identification purposes.\r
+ * @name CKEDITOR.editor.prototype.skinClass\r
+ * @type String\r
+ * @example\r
+ * alert( editor.skinClass ); // "cke_skin_kama" (e.g.)\r
+ */\r
editor.skinClass = 'cke_skin_' + skinName;\r
\r
+ /**\r
+ * The <a href="http://en.wikipedia.org/wiki/Tabbing_navigation">tabbing\r
+ * navigation</a> order that has been calculated for this editor\r
+ * instance. This can be set by the {@link CKEDITOR.config.tabIndex}\r
+ * setting or taken from the "tabindex" attribute of the\r
+ * {@link #element} associated to the editor.\r
+ * @name CKEDITOR.editor.prototype.tabIndex\r
+ * @type Number\r
+ * @default 0 (zero)\r
+ * @example\r
+ * alert( editor.tabIndex ); // "0" (e.g.)\r
+ */\r
editor.tabIndex = editor.config.tabIndex || editor.element.getAttribute( 'tabindex' ) || 0;\r
\r
// Fire the "configLoaded" event.\r
{\r
CKEDITOR.lang.load( editor.config.language, editor.config.defaultLanguage, function( languageCode, lang )\r
{\r
+ /**\r
+ * The code for the language resources that have been loaded\r
+ * for the user internface elements of this editor instance.\r
+ * @name CKEDITOR.editor.prototype.langCode\r
+ * @type String\r
+ * @example\r
+ * alert( editor.langCode ); // "en" (e.g.)\r
+ */\r
editor.langCode = languageCode;\r
\r
+ /**\r
+ * An object holding all language strings used by the editor\r
+ * interface.\r
+ * @name CKEDITOR.editor.prototype.lang\r
+ * @type CKEDITOR.lang\r
+ * @example\r
+ * alert( editor.lang.bold ); // "Negrito" (e.g. if language is Portuguese)\r
+ */\r
// As we'll be adding plugin specific entries that could come\r
// from different language code files, we need a copy of lang,\r
// not a direct reference to it.\r
plugins = plugins.replace( removeRegex, '' );\r
}\r
\r
+ // Load the Adobe AIR plugin conditionally.\r
+ CKEDITOR.env.air && ( plugins += ',adobeair' );\r
+\r
// Load all plugins defined in the "plugins" setting.\r
CKEDITOR.plugins.load( plugins.split( ',' ), function( plugins )\r
{\r
// The list of URLs to language files.\r
var languageFiles = [];\r
\r
- // Cache the loaded plugin names.\r
+ /**\r
+ * And object holding references to all plugins used by this\r
+ * editor istance.\r
+ * @name CKEDITOR.editor.prototype.plugins\r
+ * @type Object\r
+ * @example\r
+ * alert( editor.plugins.dialog.path ); // "http://example.com/ckeditor/plugins/dialog/" (e.g.)\r
+ */\r
editor.plugins = plugins;\r
\r
// Loop through all plugins, to build the list of language\r
var theme = editor.config.theme;\r
CKEDITOR.themes.load( theme, function()\r
{\r
+ /**\r
+ * The theme used by this editor instance.\r
+ * @name CKEDITOR.editor.prototype.theme\r
+ * @type CKEDITOR.theme\r
+ * @example\r
+ * alert( editor.theme ); "http://example.com/ckeditor/themes/default/" (e.g.)\r
+ */\r
var editorTheme = editor.theme = CKEDITOR.themes.get( theme );\r
editorTheme.path = CKEDITOR.themes.getPath( theme );\r
editorTheme.build( editor );\r
\r
// Setup the submit function because it doesn't fire the\r
// "submit" event.\r
- if ( !form.$.submit.nodeName )\r
+ if ( !form.$.submit.nodeName && !form.$.submit.length )\r
{\r
form.$.submit = CKEDITOR.tools.override( form.$.submit, function( originalSubmit )\r
{\r
throw '[CKEDITOR.editor] The instance "' + this.name + '" already exists.';\r
\r
/**\r
+ * A unique random string assigned to each editor instance in the page.\r
+ * @name CKEDITOR.editor.prototype.id\r
+ * @type String\r
+ */\r
+ this.id = CKEDITOR.tools.getNextId();\r
+\r
+ /**\r
* The configurations for this editor instance. It inherits all\r
* settings defined in (@link CKEDITOR.config}, combined with settings\r
* loaded from custom configuration files and those defined inline in\r
if ( !noUpdate )\r
this.updateElement();\r
\r
- if ( this.mode )\r
- {\r
- // -> currentMode.unload( holderElement );\r
- this._.modes[ this.mode ].unload( this.getThemeSpace( 'contents' ) );\r
- }\r
-\r
- this.theme.destroy( this );\r
-\r
- var toolbars,\r
- index = 0,\r
- j,\r
- items,\r
- instance;\r
-\r
- if ( this.toolbox )\r
- {\r
- toolbars = this.toolbox.toolbars;\r
- for ( ; index < toolbars.length ; index++ )\r
- {\r
- items = toolbars[ index ].items;\r
- for ( j = 0 ; j < items.length ; j++ )\r
- {\r
- instance = items[ j ];\r
- if ( instance.clickFn ) CKEDITOR.tools.removeFunction( instance.clickFn );\r
- if ( instance.keyDownFn ) CKEDITOR.tools.removeFunction( instance.keyDownFn );\r
-\r
- if ( instance.index ) CKEDITOR.ui.button._.instances[ instance.index ] = null;\r
- }\r
- }\r
- }\r
-\r
- if ( this.contextMenu )\r
- CKEDITOR.tools.removeFunction( this.contextMenu._.functionId );\r
-\r
- if ( this._.filebrowserFn )\r
- CKEDITOR.tools.removeFunction( this._.filebrowserFn );\r
+ this.theme && this.theme.destroy( this );\r
\r
this.fire( 'destroy' );\r
CKEDITOR.remove( this );\r
return eventData.dataValue;\r
},\r
\r
+ /**\r
+ * Gets the "raw data" currently available in the editor. This is a\r
+ * fast method which return the data as is, without processing, so it's\r
+ * not recommended to use it on resulting pages. It can be used instead\r
+ * combined with the {@link #loadSnapshot} so one can automatic save\r
+ * the editor data from time to time while the user is using the\r
+ * editor, to avoid data loss, without risking performance issues.\r
+ * @example\r
+ * alert( editor.getSnapshot() );\r
+ */\r
getSnapshot : function()\r
{\r
var data = this.fire( 'getSnapshot' );\r
return data;\r
},\r
\r
+ /**\r
+ * Loads "raw data" in the editor. This data is loaded with processing\r
+ * straight to the editing area. It should not be used as a way to load\r
+ * any kind of data, but instead in combination with\r
+ * {@link #getSnapshot} produced data.\r
+ * @example\r
+ * var data = editor.getSnapshot();\r
+ * editor.<b>loadSnapshot( data )</b>;\r
+ */\r
loadSnapshot : function( snapshot )\r
{\r
this.fire( 'loadSnapshot', snapshot );\r
},\r
\r
/**\r
+ * Insert text content into the currently selected position in the\r
+ * editor, in WYSIWYG mode, styles of the selected element will be applied to the inserted text,\r
+ * spaces around the text will be leaving untouched.\r
+ * <strong>Note:</strong> two subsequent line-breaks will introduce one paragraph, which element depends on {@link CKEDITOR.config.enterMode};\r
+ * A single line-break will be instead translated into one <br />.\r
+ * @since 3.5\r
+ * @param {String} text Text to be inserted into the editor.\r
+ * @example\r
+ * CKEDITOR.instances.editor1.<b>insertText( ' line1 \n\n line2' )</b>;\r
+ */\r
+ insertText : function( text )\r
+ {\r
+ this.fire( 'insertText', text );\r
+ },\r
+\r
+ /**\r
* Inserts an element into the currently selected position in the\r
* editor.\r
* @param {CKEDITOR.dom.element} element The element to be inserted\r
this.fire( 'insertElement', element );\r
},\r
\r
+ /**\r
+ * Checks whether the current editor contents present changes when\r
+ * compared to the contents loaded into the editor at startup, or to\r
+ * the contents available in the editor when {@link #resetDirty} has\r
+ * been called.\r
+ * @returns {Boolean} "true" is the contents present changes.\r
+ * @example\r
+ * function beforeUnload( e )\r
+ * {\r
+ * if ( CKEDITOR.instances.editor1.<b>checkDirty()</b> )\r
+ * return e.returnValue = "You'll loose the changes made in the editor.";\r
+ * }\r
+ *\r
+ * if ( window.addEventListener )\r
+ * window.addEventListener( 'beforeunload', beforeUnload, false );\r
+ * else\r
+ * window.attachEvent( 'onbeforeunload', beforeUnload );\r
+ */\r
checkDirty : function()\r
{\r
return ( this.mayBeDirty && this._.previousValue !== this.getSnapshot() );\r
},\r
\r
+ /**\r
+ * Resets the "dirty state" of the editor so subsequent calls to\r
+ * {@link #checkDirty} will return "false" if the user will not make\r
+ * further changes to the contents.\r
+ * @example\r
+ * alert( editor.checkDirty() ); // "true" (e.g.)\r
+ * editor.<b>resetDirty()</b>;\r
+ * alert( editor.checkDirty() ); // "false"\r
+ */\r
resetDirty : function()\r
{\r
if ( this.mayBeDirty )\r
\r
/**\r
* Fired when all plugins are loaded and initialized into the editor instance.\r
- * @name CKEDITOR#pluginsLoaded\r
+ * @name CKEDITOR.editor#pluginsLoaded\r
+ * @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ */\r
+\r
+/**\r
+ * Fired before the command execution when {@link #execCommand} is called.\r
+ * @name CKEDITOR.editor#beforeCommandExec\r
+ * @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ * @param {String} data.name The command name.\r
+ * @param {Object} data.commandData The data to be sent to the command. This\r
+ * can be manipulated by the event listener.\r
+ * @param {CKEDITOR.command} data.command The command itself.\r
+ */\r
+\r
+/**\r
+ * Fired after the command execution when {@link #execCommand} is called.\r
+ * @name CKEDITOR.editor#afterCommandExec\r
+ * @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ * @param {String} data.name The command name.\r
+ * @param {Object} data.commandData The data sent to the command.\r
+ * @param {CKEDITOR.command} data.command The command itself.\r
+ * @param {Object} data.returnValue The value returned by the command execution.\r
+ */\r
+\r
+/**\r
+ * Fired every custom configuration file is loaded, before the final\r
+ * configurations initialization.<br />\r
+ * <br />\r
+ * Custom configuration files can be loaded thorugh the\r
+ * {@link CKEDITOR.config.customConfig} setting. Several files can be loading\r
+ * by chaning this setting.\r
+ * @name CKEDITOR.editor#customConfigLoaded\r
+ * @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ * @example\r
+ */\r
+\r
+/**\r
+ * Fired once the editor configuration is ready (loaded and processed).\r
+ * @name CKEDITOR.editor#configLoaded\r
+ * @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ * @example\r
+ * if( editor.config.fullPage )\r
+ * alert( 'This is a full page editor' );\r
+ */\r
+\r
+/**\r
+ * Fired when this editor instance is destroyed. The editor at this\r
+ * point isn't usable and this event should be used to perform clean up\r
+ * in any plugin.\r
+ * @name CKEDITOR.editor#destroy\r
+ * @event\r
+ */\r
+\r
+/**\r
+ * Internal event to get the current data.\r
+ * @name CKEDITOR.editor#beforeGetData\r
+ * @event\r
+ */\r
+\r
+/**\r
+ * Internal event to perform the #getSnapshot call.\r
+ * @name CKEDITOR.editor#getSnapshot\r
+ * @event\r
+ */\r
+\r
+/**\r
+ * Internal event to perform the #loadSnapshot call.\r
+ * @name CKEDITOR.editor#loadSnapshot\r
+ * @event\r
+ */\r
+\r
+\r
+/**\r
+ * Event fired before the #getData call returns allowing additional manipulation.\r
+ * @name CKEDITOR.editor#getData\r
+ * @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ * @param {String} data.dataValue The data that will be returned.\r
+ */\r
+\r
+/**\r
+ * Event fired before the #setData call is executed allowing additional manipulation.\r
+ * @name CKEDITOR.editor#setData\r
+ * @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ * @param {String} data.dataValue The data that will be used.\r
+ */\r
+\r
+/**\r
+ * Event fired at the end of the #setData call is executed. Usually it's better to use the\r
+ * {@link CKEDITOR.editor.prototype.dataReady} event.\r
+ * @name CKEDITOR.editor#afterSetData\r
+ * @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ * @param {String} data.dataValue The data that has been set.\r
+ */\r
+\r
+/**\r
+ * Internal event to perform the #insertHtml call\r
+ * @name CKEDITOR.editor#insertHtml\r
+ * @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ * @param {String} data The HTML to insert.\r
+ */\r
+\r
+/**\r
+ * Internal event to perform the #insertText call\r
+ * @name CKEDITOR.editor#insertText\r
+ * @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ * @param {String} text The text to insert.\r
+ */\r
+\r
+/**\r
+ * Internal event to perform the #insertElement call\r
+ * @name CKEDITOR.editor#insertElement\r
* @event\r
+ * @param {CKEDITOR.editor} editor This editor instance.\r
+ * @param {Object} element The element to insert.\r
*/\r