JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.5.4
[ckeditor.git] / _source / plugins / pastetext / plugin.js
index 0d9cd9d..42dbf5d 100644 (file)
@@ -1,5 +1,5 @@
 /*\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
@@ -21,23 +21,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                        if ( !clipboardText )\r
                                                throw 0;\r
                                        return clipboardText;\r
-                               },\r
-                               function()\r
-                               {\r
-                                       window.netscape.security.PrivilegeManager.enablePrivilege( "UniversalXPConnect" );\r
-\r
-                                       var clip = window.Components.classes[ "@mozilla.org/widget/clipboard;1" ]\r
-                                                       .getService( window.Components.interfaces.nsIClipboard );\r
-                                       var trans = window.Components.classes[ "@mozilla.org/widget/transferable;1" ]\r
-                                                       .createInstance( window.Components.interfaces.nsITransferable );\r
-                                       trans.addDataFlavor( "text/unicode" );\r
-                                       clip.getData( trans, clip.kGlobalClipboard );\r
-\r
-                                       var str = {}, strLength = {}, clipboardText;\r
-                                       trans.getTransferData( "text/unicode", str, strLength );\r
-                                       str = str.value.QueryInterface( window.Components.interfaces.nsISupportsString );\r
-                                       clipboardText = str.data.substring( 0, strLength.value / 2 );\r
-                                       return clipboardText;\r
                                }\r
                                // Any other approach that's working...\r
                                );\r
@@ -54,20 +37,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                }\r
        };\r
 \r
-       function doInsertText( doc, text )\r
-       {\r
-               // Native text insertion.\r
-               if ( CKEDITOR.env.ie )\r
-               {\r
-                       var selection = doc.selection;\r
-                       if ( selection.type == 'Control' )\r
-                               selection.clear();\r
-                       selection.createRange().pasteHTML( text );\r
-               }\r
-               else\r
-                       doc.execCommand( 'inserthtml', false, text );\r
-       }\r
-\r
        // Register the plugin.\r
        CKEDITOR.plugins.add( 'pastetext',\r
        {\r
@@ -89,64 +58,30 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                // Intercept the default pasting process.\r
                                editor.on( 'beforeCommandExec', function ( evt )\r
                                {\r
-                                       if ( evt.data.name == 'paste' )\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
                                                editor.execCommand( 'pastetext' );\r
                                                evt.cancel();\r
                                        }\r
                                }, null, null, 0 );\r
+\r
+                               editor.on( 'beforePaste', function( evt )\r
+                               {\r
+                                       evt.data.mode = 'text';\r
+                               });\r
                        }\r
+\r
+                       editor.on( 'pasteState', function( evt )\r
+                               {\r
+                                       editor.getCommand( 'pastetext' ).setState( evt.data );\r
+                               });\r
                },\r
 \r
                requires : [ 'clipboard' ]\r
        });\r
 \r
-       function doEnter( editor, mode, times, forceMode )\r
-       {\r
-               while ( times-- )\r
-               {\r
-                       CKEDITOR.plugins.enterkey[ mode == CKEDITOR.ENTER_BR ? 'enterBr' : 'enterBlock' ]\r
-                                       ( editor, mode, null, forceMode );\r
-               }\r
-       }\r
-\r
-       CKEDITOR.editor.prototype.insertText = function( text )\r
-       {\r
-               this.focus();\r
-               this.fire( 'saveSnapshot' );\r
-\r
-               var mode = this.getSelection().getStartElement().hasAscendant( 'pre', true ) ? CKEDITOR.ENTER_BR : this.config.enterMode,\r
-                       isEnterBrMode = mode == CKEDITOR.ENTER_BR,\r
-                       doc = this.document.$,\r
-                       self = this,\r
-                       line;\r
-\r
-               text = CKEDITOR.tools.htmlEncode( text.replace( /\r\n|\r/g, '\n' ) );\r
-\r
-               var startIndex = 0;\r
-               text.replace( /\n+/g, function( match, lastIndex )\r
-                {\r
-                       line = text.substring( startIndex, lastIndex );\r
-                       startIndex = lastIndex + match.length;\r
-                       line.length && doInsertText( doc, line );\r
-\r
-                       var lineBreakNums = match.length,\r
-                               // Duo consequence line-break as a enter block.\r
-                               enterBlockTimes = isEnterBrMode ? 0 : Math.floor( lineBreakNums / 2 ),\r
-                               // Per link-break as a enter br.\r
-                               enterBrTimes = isEnterBrMode ? lineBreakNums : lineBreakNums % 2;\r
-\r
-                       // Line-breaks are converted to editor enter key strokes.\r
-                       doEnter( self, mode, enterBlockTimes );\r
-                       doEnter( self, CKEDITOR.ENTER_BR, enterBrTimes, isEnterBrMode ? false : true );\r
-                });\r
-\r
-               // Insert the last text line of text.\r
-               line = text.substring( startIndex, text.length );\r
-               line.length && doInsertText( doc, line );\r
-\r
-               this.fire( 'saveSnapshot' );\r
-       };\r
 })();\r
 \r
 \r
@@ -154,6 +89,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
  * 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