var nonExitableElementNames = { table:1,pre:1 };\r
\r
// Matching an empty paragraph at the end of document.\r
- var emptyParagraphRegexp = /\s*<(p|div|address|h\d|center|li)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\1>)?\s*(?=$|<\/body>)/gi;\r
+ var emptyParagraphRegexp = /\s*<(p|div|address|h\d|center)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\1>)?(?=\s*$|<\/body>)/gi;\r
\r
var notWhitespaceEval = CKEDITOR.dom.walker.whitespaces( true );\r
\r
}\r
}\r
\r
- $sel.createRange().pasteHTML( data );\r
+ try\r
+ {\r
+ $sel.createRange().pasteHTML( data );\r
+ }\r
+ catch (e) {}\r
\r
if ( selIsLocked )\r
this.getSelection().lock();\r
function restoreDirty( editor )\r
{\r
if ( !editor.checkDirty() )\r
- setTimeout( function(){ editor.resetDirty(); } );\r
+ setTimeout( function(){ editor.resetDirty(); }, 0 );\r
}\r
\r
var isNotWhitespace = CKEDITOR.dom.walker.whitespaces( true ),\r
{\r
restoreDirty( editor );\r
\r
+ // Memorize scroll position to restore it later (#4472).\r
+ var hostDocument = editor.element.getDocument();\r
+ var hostDocumentElement = hostDocument.getDocumentElement();\r
+ var scrollTop = hostDocumentElement.$.scrollTop;\r
+ var scrollLeft = hostDocumentElement.$.scrollLeft;\r
+\r
// Simulating keyboard character input by dispatching a keydown of white-space text.\r
var keyEventSimulate = doc.$.createEvent( "KeyEvents" );\r
keyEventSimulate.initKeyEvent( 'keypress', true, true, win.$, false,\r
false, false, false, 0, 32 );\r
doc.$.dispatchEvent( keyEventSimulate );\r
\r
+ if ( scrollTop != hostDocumentElement.$.scrollTop || scrollLeft != hostDocumentElement.$.scrollLeft )\r
+ hostDocument.getWindow().$.scrollTo( scrollLeft, scrollTop );\r
+\r
// Restore the original document status by placing the cursor before a bogus br created (#5021).\r
bodyChildsNum && body.getFirst().remove();\r
doc.getBody().appendBogus();\r
' allowTransparency="true"' +\r
'></iframe>' );\r
\r
- // #5689 Running inside of Firefox chrome the load event doesn't bubble like in a normal page\r
- if (document.location.protocol == 'chrome:')\r
+ // Running inside of Firefox chrome the load event doesn't bubble like in a normal page (#5689)\r
+ if ( document.location.protocol == 'chrome:' )\r
CKEDITOR.event.useCapture = true;\r
\r
// With FF, it's better to load the data on iframe.load. (#3894,#4058)\r
doc.close();\r
});\r
\r
- // #5689 Reset adjustment back to default\r
- if (document.location.protocol == 'chrome:')\r
+ // Reset adjustment back to default (#5689)\r
+ if ( document.location.protocol == 'chrome:' )\r
CKEDITOR.event.useCapture = false;\r
\r
+ // The container must be visible when creating the iframe in FF (#5956)\r
+ var element = editor.element,\r
+ isHidden = CKEDITOR.env.gecko && !element.isVisible(),\r
+ previousStyles = {};\r
+ if ( isHidden )\r
+ {\r
+ element.show();\r
+ previousStyles = {\r
+ position : element.getStyle( 'position' ),\r
+ top : element.getStyle( 'top' )\r
+ };\r
+ element.setStyles( { position : 'absolute', top : '-3000px' } );\r
+ }\r
+\r
mainElement.append( iframe );\r
+\r
+ if ( isHidden )\r
+ {\r
+ setTimeout( function()\r
+ {\r
+ element.hide();\r
+ element.setStyles( previousStyles );\r
+ }, 1000 );\r
+ }\r
};\r
\r
// The script that launches the bootstrap logic on 'domReady', so the document\r