Ticket #3593: 3593_4.patch

File 3593_4.patch, 3.7 KB (added by Garry Yao, 8 years ago)
  • _source/plugins/wysiwygarea/plugin.js

     
    374374                                                        body.removeAttribute( 'disabled' );
    375375                                                }
    376376                                                else
    377                                                         domDocument.designMode = 'on';
     377                                                        // Avoid opening design mode in a frame window thread,
     378                                                        // which will cause host page scrolling.(#4397)
     379                                                        setTimeout( function()
     380                                                        {
     381                                                                // Prefer 'contentEditable' instead of 'designMode'. (#3593)
     382                                                                if ( CKEDITOR.env.gecko && CKEDITOR.env.version >= 10900 )
     383                                                                        domDocument.$.body.contentEditable = true;
     384                                                                else if ( CKEDITOR.env.webkit || CKEDITOR.env.opera )
     385                                                                        domDocument.$.body.parentNode.contentEditable = true;
     386                                                                else
     387                                                                        domDocument.$.designMode = 'on';
     388                                                        }, 0 );
    378389
    379390                                                // IE, Opera and Safari may not support it and throw
    380391                                                // errors.
     
    416427                                                // IE standard compliant in editing frame doesn't focus the editor when
    417428                                                // clicking outside actual content, manually apply the focus. (#1659)
    418429                                                if ( CKEDITOR.env.ie
    419                                                         && domDocument.$.compatMode == 'CSS1Compat' )
     430                                                        && domDocument.$.compatMode == 'CSS1Compat'
     431                                                                || CKEDITOR.env.gecko )
    420432                                                {
    421433                                                        var htmlElement = domDocument.getDocumentElement();
    422434                                                        htmlElement.on( 'mousedown', function( evt )
     
    425437                                                                // have to use here a temporary element to 'redirect'
    426438                                                                // the focus.
    427439                                                                if ( evt.data.getTarget().equals( htmlElement ) )
    428                                                                         ieFocusGrabber.focus();
     440                                                                {
     441                                                                        CKEDITOR.env.gecko && blinkCursor();
     442                                                                        focusGrabber.focus();
     443                                                                }
    429444                                                        } );
    430445                                                }
    431446
     
    437452                                                                editor.focusManager.blur();
    438453                                                        });
    439454
    440                                                 focusTarget.on( 'focus', function()
     455                                                focusTarget.on( 'focus', function( evt )
    441456                                                        {
    442457                                                                // Gecko need a key event to 'wake up' the editing
    443458                                                                // ability when document is empty.(#3864)
     
    464479                                                                                else
    465480                                                                                        bogusText.remove();
    466481                                                                        }
     482
     483                                                                        // Make the cursor blinking even when we are not clicking on
     484                                                                        // body elements directly. (#3593)
     485                                                                        var originalTarget = evt.data.$.explicitOriginalTarget.nodeName;
     486                                                                        if ( originalTarget == 'HTML' || originalTarget == '#document' )
     487                                                                                blinkCursor();
    467488                                                                }
    468489
    469490                                                                editor.focusManager.focus();
     
    771792                                        editor.document.$.title = frameLabel;
    772793                                });
    773794
     795                        // Switch on design mode for a short while and close it after then.
     796                        function blinkCursor()
     797                        {
     798                                editor.document.$.designMode = 'on';
     799                                setTimeout( function ()
     800                                {
     801                                        editor.document.$.designMode = 'off';
     802                                }, 50 );
     803                        }
    774804
    775805                        // Create an invisible element to grab focus.
    776                         if ( CKEDITOR.env.ie )
     806                        if ( CKEDITOR.env.gecko || CKEDITOR.env.ie )
    777807                        {
    778                                 var ieFocusGrabber;
     808                                var focusGrabber;
    779809                                editor.on( 'uiReady', function()
    780810                                {
    781                                         ieFocusGrabber = editor.container.append( CKEDITOR.dom.element.createFromHtml(
     811                                        focusGrabber = editor.container.append( CKEDITOR.dom.element.createFromHtml(
    782812                                                // Use 'span' instead of anything else to fly under the screen-reader radar. (#5049)
    783813                                                '<span tabindex="-1" style="position:absolute; left:-10000" role="presentation"></span>' ) );
    784814
    785                                         ieFocusGrabber.on( 'focus', function()
     815                                        focusGrabber.on( 'focus', function()
    786816                                                {
    787817                                                        editor.focus();
    788818                                                } );
    789819                                } );
    790820                                editor.on( 'destroy', function()
    791821                                {
    792                                         ieFocusGrabber.clearCustomData();
     822                                        focusGrabber.clearCustomData();
    793823                                } );
    794824                        }
    795825                }
© 2003 – 2017 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy