/*\r
-Copyright (c) 2003-2009, 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
{\r
exec : function( editor )\r
{\r
- // We use getClipboardData just to test if the clipboard access has\r
- // been granted by the user.\r
- if ( CKEDITOR.getClipboardData() === false || !window.clipboardData )\r
+ var clipboardText = CKEDITOR.tools.tryThese(\r
+ function()\r
+ {\r
+ var clipboardText = window.clipboardData.getData( 'Text' );\r
+ if ( !clipboardText )\r
+ throw 0;\r
+ return clipboardText;\r
+ }\r
+ // Any other approach that's working...\r
+ );\r
+\r
+ if ( !clipboardText ) // Clipboard access privilege is not granted.\r
{\r
editor.openDialog( 'pastetext' );\r
- return;\r
+ return false;\r
}\r
+ else\r
+ editor.fire( 'paste', { 'text' : clipboardText } );\r
\r
- editor.insertText( window.clipboardData.getData( 'Text' ) );\r
+ return true;\r
}\r
};\r
\r
\r
if ( editor.config.forcePasteAsPlainText )\r
{\r
- editor.on( 'beforePaste', function( event )\r
+ // Intercept the default pasting process.\r
+ editor.on( 'beforeCommandExec', function ( evt )\r
+ {\r
+ var mode = evt.data.commandData;\r
+ // Do NOT overwrite if HTML format is explicitly requested.\r
+ if ( evt.data.name == 'paste' && mode != 'html' )\r
{\r
- if ( editor.mode == "wysiwyg" )\r
- {\r
- setTimeout( function() { command.exec(); }, 0 );\r
- event.cancel();\r
- }\r
- },\r
- null, null, 20 );\r
- }\r
- },\r
- requires : [ 'clipboard' ]\r
- });\r
+ editor.execCommand( 'pastetext' );\r
+ evt.cancel();\r
+ }\r
+ }, null, null, 0 );\r
\r
- var clipboardDiv;\r
-\r
- CKEDITOR.getClipboardData = function()\r
- {\r
- if ( !CKEDITOR.env.ie )\r
- return false;\r
-\r
- var doc = CKEDITOR.document,\r
- body = doc.getBody();\r
-\r
- if ( !clipboardDiv )\r
- {\r
- clipboardDiv = doc.createElement( 'div',\r
+ editor.on( 'beforePaste', function( evt )\r
{\r
- attributes :\r
- {\r
- id: 'cke_hiddenDiv'\r
- },\r
- styles :\r
- {\r
- position : 'absolute',\r
- visibility : 'hidden',\r
- overflow : 'hidden',\r
- width : '1px',\r
- height : '1px'\r
- }\r
+ evt.data.mode = 'text';\r
});\r
+ }\r
\r
- clipboardDiv.setHtml( '' );\r
-\r
- clipboardDiv.appendTo( body );\r
- }\r
-\r
- // The "enabled" flag is used to check whether the paste operation has\r
- // been completed (the onpaste event has been fired).\r
- var enabled = false;\r
- var setEnabled = function()\r
- {\r
- enabled = true;\r
- };\r
-\r
- body.on( 'paste', setEnabled );\r
-\r
- // Create a text range and move it inside the div.\r
- var textRange = body.$.createTextRange();\r
- textRange.moveToElementText( clipboardDiv.$ );\r
-\r
- // The execCommand in will fire the "onpaste", only if the\r
- // security settings are enabled.\r
- textRange.execCommand( 'Paste' );\r
-\r
- // Get the DIV html and reset it.\r
- var html = clipboardDiv.getHtml();\r
- clipboardDiv.setHtml( '' );\r
+ editor.on( 'pasteState', function( evt )\r
+ {\r
+ editor.getCommand( 'pastetext' ).setState( evt.data );\r
+ });\r
+ },\r
\r
- body.removeListener( 'paste', setEnabled );\r
+ requires : [ 'clipboard' ]\r
+ });\r
\r
- // Return the HTML or false if not enabled.\r
- return enabled && html;\r
- };\r
})();\r
\r
-CKEDITOR.editor.prototype.insertText = function( text )\r
-{\r
- text = CKEDITOR.tools.htmlEncode( text );\r
-\r
- // TODO: Replace the following with fill line break processing (see V2).\r
- text = text.replace( /(?:\r\n)|\n|\r/g, '<br>' );\r
-\r
- this.insertHtml( text );\r
-};\r
\r
/**\r
* Whether to force all pasting operations to insert on plain text into the\r
* editor, loosing any formatting information possibly available in the source\r
* text.\r
+ * <strong>Note:</strong> paste from word is not affected by this configuration.\r
+ * @name CKEDITOR.config.forcePasteAsPlainText\r
* @type Boolean\r
* @default false\r
* @example\r
* config.forcePasteAsPlainText = true;\r
*/\r
-CKEDITOR.config.forcePasteAsPlainText = false;\r