docs: function addListenersToEditable() {
  			var editable = editor.editable();
  
  			// We'll be catching all pasted content in one line, regardless of whether
  			// it's introduced by a document command execution (e.g. toolbar buttons) or
  			// user paste behaviors (e.g. CTRL+V).
  			editable.on( mainPasteEvent, function( evt ) {
  				if ( CKEDITOR.env.ie && preventBeforePasteEvent )
  					return;
  
  				// If you've just asked yourself why preventPasteEventNow() is not here, but
  				// in listener for CTRL+V and exec method of 'paste' command
  				// you've asked the same question we did.
  				//
  				// THE ANSWER:
  				//
  				// First thing to notice - this answer makes sense only for IE,
  				// because other browsers don't listen for 'paste' event.
  				//
  				// What would happen if we move preventPasteEventNow() here?
  				// For:
  				// * CTRL+V - IE fires 'beforepaste', so we prevent 'paste' and pasteDataFromClipboard(). OK.
  				// * editor.execCommand( 'paste' ) - we fire 'beforepaste', so we prevent
  				//		'paste' and pasteDataFromClipboard() and doc.execCommand( 'Paste' ). OK.
  				// * native context menu - IE fires 'beforepaste', so we prevent 'paste', but unfortunately
  				//		on IE we fail with pasteDataFromClipboard() here, because of... we don't know why, but
  				//		we just fail, so... we paste nothing. FAIL.
  				// * native menu bar - the same as for native context menu.
  				//
  				// But don't you know any way to distinguish first two cases from last two?
  				// Only one - special flag set in CTRL+V handler and exec method of 'paste'
  				// command. And that's what we did using preventPasteEventNow().
  
  				pasteDataFromClipboard( evt );
  			} );
  
  			// It's not possible to clearly handle all four paste methods (ctrl+v, native menu bar
  			// native context menu, editor's command) in one 'paste/beforepaste' event in IE.
  			//
  			// For ctrl+v & editor's command it's easy to handle pasting in 'beforepaste' listener,
  			// so we do this. For another two methods it's better to use 'paste' event.
  			//
  			// 'paste' is always being fired after 'beforepaste' (except of weird one on opening native
  			// context menu), so for two methods handled in 'beforepaste' we're canceling 'paste'
  			// using preventPasteEvent state.
  			//
  			// 'paste' event in IE is being fired before getClipboardDataByPastebin executes its callback.
  			//
  			// QUESTION: Why didn't you handle all 4 paste methods in handler for 'paste'?
  			//		Wouldn't this just be simpler?
  			// ANSWER: Then we would have to evt.data.preventDefault() only for native
  			//		context menu and menu bar pastes. The same with execIECommand().
  			//		That would force us to mark CTRL+V and editor's paste command with
  			//		special flag, other than preventPasteEvent. But we still would have to
  			//		have preventPasteEvent for the second event fired by execIECommand.
  			//		Code would be longer and not cleaner.
  			CKEDITOR.env.ie && editable.on( 'paste', function( evt ) {
  				if ( preventPasteEvent )
  					return;
  				// Cancel next 'paste' event fired by execIECommand( 'paste' )
  				// at the end of this callback.
  				preventPasteEventNow();
  
  				// Prevent native paste.
  				evt.data.preventDefault();
  
  				pasteDataFromClipboard( evt );
  
  				// Force IE to paste content into pastebin so pasteDataFromClipboard will work.
  				if ( !execIECommand( 'paste' ) )
  					editor.openDialog( 'paste' );
  			} );
  
  			// [IE] Dismiss the (wrong) 'beforepaste' event fired on context/toolbar menu open. (#7953)
  			if ( CKEDITOR.env.ie ) {
  				editable.on( 'contextmenu', preventBeforePasteEventNow, null, null, 0 );
  
  				editable.on( 'beforepaste', function( evt ) {
  					// Do not prevent event on CTRL+V and SHIFT+INS because it blocks paste (#11970).
  					if ( evt.data && !evt.data.$.ctrlKey && !evt.data.$.shiftKey )
  						preventBeforePasteEventNow();
  				}, null, null, 0 );
  
  			}
  
  			editable.on( 'beforecut', function() {
  				!preventBeforePasteEvent && fixCut( editor );
  			} );
  
  			var mouseupTimeout;
  
  			// Use editor.document instead of editable in non-IEs for observing mouseup
  			// since editable won't fire the event if selection process started within
  			// iframe and ended out of the editor (#9851).
  			editable.attachListener( CKEDITOR.env.ie ? editable : editor.document.getDocumentElement(), 'mouseup', function() {
  				mouseupTimeout = setTimeout( function() {
  					setToolbarStates();
  				}, 0 );
  			} );
  
  			// Make sure that deferred mouseup callback isn't executed after editor instance
  			// had been destroyed. This may happen when editor.destroy() is called in parallel
  			// with mouseup event (i.e. a button with onclick callback) (#10219).
  			editor.on( 'destroy', function() {
  				clearTimeout( mouseupTimeout );
  			} );
  
  			editable.on( 'keyup', setToolbarStates );
  		}