JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.3
[ckeditor.git] / _source / plugins / pastetext / plugin.js
index 3a1678d..33eb8cd 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -14,15 +14,26 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
        {\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
@@ -44,99 +55,44 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
 \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