X-Git-Url: https://jasonwoof.com/gitweb/?p=ckeditor.git;a=blobdiff_plain;f=_source%2Fplugins%2Fwysiwygarea%2Fplugin.js;h=5ea1f1aaed438cc26459d302b5ee96bc92e6bada;hp=e626aada71776c345d8966eebe1b60ef62a627c9;hb=039a051ccf3901311661022a30afd60fc38130c9;hpb=c9fdde67e6384bd5a66adc2b3bba5c4ce9db56c7 diff --git a/_source/plugins/wysiwygarea/plugin.js b/_source/plugins/wysiwygarea/plugin.js index e626aad..5ea1f1a 100644 --- a/_source/plugins/wysiwygarea/plugin.js +++ b/_source/plugins/wysiwygarea/plugin.js @@ -14,7 +14,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license var nonExitableElementNames = { table:1,pre:1 }; // Matching an empty paragraph at the end of document. - var emptyParagraphRegexp = /\s*<(p|div|address|h\d|center)[^>]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\1>)?(?=\s*$|<\/body>)/gi; + var emptyParagraphRegexp = /(^|]*>)\s*<(p|div|address|h\d|center)[^>]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi; var notWhitespaceEval = CKEDITOR.dom.walker.whitespaces( true ); @@ -92,6 +92,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license var marker = this.document.getById( 'cke_paste_marker' ); marker.scrollIntoView(); marker.remove(); + marker = null; } CKEDITOR.tools.setTimeout( function() @@ -132,14 +133,14 @@ For licensing, see LICENSE.html or http://ckeditor.com/license // Remove the original contents. range.deleteContents(); - clone = !i && element || element.clone( true ); + clone = !i && element || element.clone( 1 ); // If we're inserting a block at dtd-violated position, split // the parent blocks until we reach blockLimit. var current, dtd; if ( isBlock ) { - while ( ( current = range.getCommonAncestor( false, true ) ) + while ( ( current = range.getCommonAncestor( 0, 1 ) ) && ( dtd = CKEDITOR.dtd[ current.getName() ] ) && !( dtd && dtd [ elementName ] ) ) { @@ -530,7 +531,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license CKEDITOR.env.gecko && CKEDITOR.tools.setTimeout( activateEditing, 0, null, editor ); - domWindow = editor.window = new CKEDITOR.dom.window( domWindow ); + domWindow = editor.window = new CKEDITOR.dom.window( domWindow ); domDocument = editor.document = new CKEDITOR.dom.document( domDocument ); domDocument.on( 'dblclick', function( evt ) @@ -542,7 +543,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license }); // Gecko/Webkit need some help when selecting control type elements. (#3448) - if ( !( CKEDITOR.env.ie || CKEDITOR.env.opera) ) + if ( !( CKEDITOR.env.ie || CKEDITOR.env.opera ) ) { domDocument.on( 'mousedown', function( ev ) { @@ -625,6 +626,8 @@ For licensing, see LICENSE.html or http://ckeditor.com/license editor.focusManager.blur(); }); + var wasFocused; + domWindow.on( 'focus', function() { var doc = editor.document; @@ -633,6 +636,15 @@ For licensing, see LICENSE.html or http://ckeditor.com/license blinkCursor(); else if ( CKEDITOR.env.opera ) doc.getBody().focus(); + // Webkit needs focus for the first time on the HTML element. (#6153) + else if ( CKEDITOR.env.webkit ) + { + if ( !wasFocused ) + { + editor.document.getDocumentElement().focus(); + wasFocused = 1; + } + } editor.focusManager.focus(); }); @@ -873,9 +885,9 @@ For licensing, see LICENSE.html or http://ckeditor.com/license if ( editor.dataProcessor ) data = editor.dataProcessor.toDataFormat( data, fixForBody ); - // Strip the last blank paragraph within document. + // Reset empty if the document contains only one empty paragraph. if ( config.ignoreEmptyParagraph ) - data = data.replace( emptyParagraphRegexp, '' ); + data = data.replace( emptyParagraphRegexp, function( match, lookback ) { return lookback; } ); if ( docType ) data = docType + '\n' + data; @@ -930,6 +942,10 @@ For licensing, see LICENSE.html or http://ckeditor.com/license // Temporary solution caused by #6025, supposed be unified by #6154. else if ( CKEDITOR.env.opera && editor.document ) { + // Required for Opera when switching focus + // from another iframe, e.g. panels. (#6444) + var iframe = editor.window.$.frameElement; + iframe.blur(), iframe.focus(); editor.document.getBody().focus(); editor.selectionChange(); @@ -952,7 +968,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license var titleBackup; // Setting voice label as window title, backup the original one // and restore it before running into use. - editor.on( 'contentDom', function () + editor.on( 'contentDom', function() { var title = editor.document.getElementsByTag( 'title' ).getItem( 0 ); title.setAttribute( '_cke_title', editor.document.$.title ); @@ -970,6 +986,9 @@ For licensing, see LICENSE.html or http://ckeditor.com/license selectors.push( 'html.CSS1Compat ' + tag + '[contenteditable=false]' ); editor.addCss( selectors.join( ',' ) + '{ display:inline-block;}' ); } + // Set the HTML style to 100% to have the text cursor in affect (#6341) + else if ( CKEDITOR.env.gecko ) + editor.addCss( 'html { height: 100% !important; }' ); // Switch on design mode for a short while and close it after then. function blinkCursor( retry ) @@ -978,10 +997,11 @@ For licensing, see LICENSE.html or http://ckeditor.com/license function() { editor.document.$.designMode = 'on'; - setTimeout( function () + setTimeout( function() { editor.document.$.designMode = 'off'; - editor.document.getBody().focus(); + if ( CKEDITOR.currentInstance == editor ) + editor.document.getBody().focus(); }, 50 ); }, function() @@ -1043,7 +1063,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license // Fixing Firefox 'Back-Forward Cache' break design mode. (#4514) if ( CKEDITOR.env.gecko ) { - ( function () + (function() { var body = document.body;