1 /* 2 Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. 3 For licensing, see LICENSE.html or http://ckeditor.com/license 4 */ 5 6 /** 7 * @file Paste as plain text plugin 8 */ 9 10 (function() 11 { 12 // The pastetext command definition. 13 var pasteTextCmd = 14 { 15 exec : function( editor ) 16 { 17 var clipboardText = CKEDITOR.tools.tryThese( 18 function() 19 { 20 var clipboardText = window.clipboardData.getData( 'Text' ); 21 if ( !clipboardText ) 22 throw 0; 23 return clipboardText; 24 } 25 // Any other approach that's working... 26 ); 27 28 if ( !clipboardText ) // Clipboard access privilege is not granted. 29 { 30 editor.openDialog( 'pastetext' ); 31 return false; 32 } 33 else 34 editor.fire( 'paste', { 'text' : clipboardText } ); 35 36 return true; 37 } 38 }; 39 40 // Register the plugin. 41 CKEDITOR.plugins.add( 'pastetext', 42 { 43 init : function( editor ) 44 { 45 var commandName = 'pastetext', 46 command = editor.addCommand( commandName, pasteTextCmd ); 47 48 editor.ui.addButton( 'PasteText', 49 { 50 label : editor.lang.pasteText.button, 51 command : commandName 52 }); 53 54 CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/pastetext.js' ) ); 55 56 if ( editor.config.forcePasteAsPlainText ) 57 { 58 // Intercept the default pasting process. 59 editor.on( 'beforeCommandExec', function ( evt ) 60 { 61 var mode = evt.data.commandData; 62 // Do NOT overwrite if HTML format is explicitly requested. 63 if ( evt.data.name == 'paste' && mode != 'html' ) 64 { 65 editor.execCommand( 'pastetext' ); 66 evt.cancel(); 67 } 68 }, null, null, 0 ); 69 70 editor.on( 'beforePaste', function( evt ) 71 { 72 evt.data.mode = 'text'; 73 }); 74 } 75 76 editor.on( 'pasteState', function( evt ) 77 { 78 editor.getCommand( 'pastetext' ).setState( evt.data ); 79 }); 80 }, 81 82 requires : [ 'clipboard' ] 83 }); 84 85 })(); 86 87 88 /** 89 * Whether to force all pasting operations to insert on plain text into the 90 * editor, loosing any formatting information possibly available in the source 91 * text. 92 * <strong>Note:</strong> paste from word is not affected by this configuration. 93 * @name CKEDITOR.config.forcePasteAsPlainText 94 * @type Boolean 95 * @default false 96 * @example 97 * config.forcePasteAsPlainText = true; 98 */ 99