-/*\r
-Copyright (c) 2003-2011, 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
- {\r
-\r
- // Flag indicate this command is actually been asked instead of a generic\r
- // pasting.\r
- var forceFromWord = 0;\r
- var resetFromWord = function( evt )\r
- {\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
- // 1. No more bothering of user about the clean-up.\r
- // 2. Perform the clean-up even if content is not from MS-Word.\r
- // (e.g. from a MS-Word similar application.)\r
- editor.addCommand( 'pastefromword',\r
- {\r
- canUndo : false,\r
- exec : function()\r
- {\r
- // Ensure the received data format is HTML and apply content filtering. (#6718)\r
- forceFromWord = 1;\r
- editor.on( 'beforePaste', forceHtmlMode );\r
-\r
- if ( editor.execCommand( 'paste', 'html' ) === false )\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
- // Register the toolbar button.\r
- editor.ui.addButton( 'PasteFromWord',\r
- {\r
- label : editor.lang.pastefromword.toolbar,\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
- mswordHtml;\r
-\r
- // MS-WORD format sniffing.\r
- if ( ( mswordHtml = data[ 'html' ] )\r
- && ( forceFromWord || ( /(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/ ).test( mswordHtml ) ) )\r
- {\r
- var isLazyLoad = this.loadFilterRules( function()\r
- {\r
- // Event continuation with the original data.\r
- if ( isLazyLoad )\r
- editor.fire( 'paste', data );\r
- else if ( !editor.config.pasteFromWordPromptCleanup\r
- || ( forceFromWord || confirm( editor.lang.pastefromword.confirmCleanup ) ) )\r
- {\r
- data[ 'html' ] = CKEDITOR.cleanWord( mswordHtml, editor );\r
- }\r
- });\r
-\r
- // The cleanup rules are to be loaded, we should just cancel\r
- // this event.\r
- isLazyLoad && evt.cancel();\r
- }\r
- }, this );\r
- },\r
-\r
- loadFilterRules : function( callback )\r
- {\r
-\r
- var isLoaded = CKEDITOR.cleanWord;\r
-\r
- if ( isLoaded )\r
- callback();\r
- else\r
- {\r
- var filterFilePath = CKEDITOR.getUrl(\r
- CKEDITOR.config.pasteFromWordCleanupFile\r
- || ( this.path + 'filter/default.js' ) );\r
-\r
- // Load with busy indicator.\r
- CKEDITOR.scriptLoader.load( filterFilePath, callback, null, true );\r
- }\r
-\r
- return !isLoaded;\r
- },\r
-\r
- requires : [ 'clipboard' ]\r
- });\r
-})();\r
-\r
-/**\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
- * config.pasteFromWordPromptCleanup = true;\r
- */\r
-\r
-/**\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
- * // Load from 'pastefromword' plugin 'filter' sub folder (custom.js file).\r
- * CKEDITOR.config.pasteFromWordCleanupFile = 'custom';\r
- */\r