/*\r
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.\r
For licensing, see LICENSE.html or http://ckeditor.com/license\r
*/\r
(function()\r
{\r
+ function forceHtmlMode( evt ) { evt.data.mode = 'html'; }\r
+\r
CKEDITOR.plugins.add( 'pastefromword',\r
{\r
init : function( editor )\r
// Flag indicate this command is actually been asked instead of a generic\r
// pasting.\r
var forceFromWord = 0;\r
- var resetFromWord = function()\r
+ var resetFromWord = function( evt )\r
{\r
- setTimeout( function() { forceFromWord = 0; }, 0 );\r
+ evt && evt.removeListener();\r
+ editor.removeListener( 'beforePaste', forceHtmlMode );\r
+ forceFromWord && setTimeout( function() { forceFromWord = 0; }, 0 );\r
};\r
\r
// Features bring by this command beside the normal process:\r
canUndo : false,\r
exec : function()\r
{\r
+ // Ensure the received data format is HTML and apply content filtering. (#6718)\r
forceFromWord = 1;\r
- if( editor.execCommand( 'paste' ) === false )\r
+ editor.on( 'beforePaste', forceHtmlMode );\r
+\r
+ if ( editor.execCommand( 'paste', 'html' ) === false )\r
{\r
- editor.on( 'dialogHide', function ( evt )\r
- {\r
- evt.removeListener();\r
- resetFromWord();\r
- });\r
+ editor.on( 'dialogShow', function ( evt )\r
+ {\r
+ evt.removeListener();\r
+ evt.data.on( 'cancel', resetFromWord );\r
+ });\r
+\r
+ editor.on( 'dialogHide', function( evt )\r
+ {\r
+ evt.data.removeListener( 'cancel', resetFromWord );\r
+ } );\r
}\r
+\r
+ editor.on( 'afterPaste', resetFromWord );\r
}\r
});\r
\r
command : 'pastefromword'\r
});\r
\r
+ editor.on( 'pasteState', function( evt )\r
+ {\r
+ editor.getCommand( 'pastefromword' ).setState( evt.data );\r
+ });\r
+\r
editor.on( 'paste', function( evt )\r
{\r
var data = evt.data,\r
// Event continuation with the original data.\r
if ( isLazyLoad )\r
editor.fire( 'paste', data );\r
- else if( !editor.config.pasteFromWordPromptCleanup\r
+ else if ( !editor.config.pasteFromWordPromptCleanup\r
|| ( forceFromWord || confirm( editor.lang.pastefromword.confirmCleanup ) ) )\r
{\r
data[ 'html' ] = CKEDITOR.cleanWord( mswordHtml, editor );\r
|| ( this.path + 'filter/default.js' ) );\r
\r
// Load with busy indicator.\r
- CKEDITOR.scriptLoader.load( filterFilePath, callback, null, false, true );\r
+ CKEDITOR.scriptLoader.load( filterFilePath, callback, null, true );\r
}\r
\r
return !isLoaded;\r
- }\r
+ },\r
+\r
+ requires : [ 'clipboard' ]\r
});\r
})();\r
\r
/**\r
- * Whether prompt the user about the clean-up of content from MS-Word.\r
+ * Whether to prompt the user about the clean up of content being pasted from\r
+ * MS Word.\r
* @name CKEDITOR.config.pasteFromWordPromptCleanup\r
+ * @since 3.1\r
* @type Boolean\r
* @default undefined\r
* @example\r
*/\r
\r
/**\r
- * The file that provides the MS-Word Filtering rules.\r
- * Note: It's a global configuration which are shared by all editor instances.\r
+ * The file that provides the MS Word cleanup function for pasting operations.\r
+ * Note: This is a global configuration shared by all editor instances present\r
+ * in the page.\r
* @name CKEDITOR.config.pasteFromWordCleanupFile\r
+ * @since 3.1\r
* @type String\r
* @default 'default'\r
* @example\r