/*\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
\r
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
}\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
// 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
* 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