Ticket #8658: 20120111.patch

File 20120111.patch, 5.5 KB (added by yiminghe, 8 years ago)
  • _source/plugins/selection/plugin.js

     
    245245
    246246                                        if ( CKEDITOR.env.ie )
    247247                                        {
     248
     249                        // fix ie cursor if user click on empty document
     250                        (function(){
     251                            var started,
     252                                startRange;
     253
     254                            html.$.unselectable = true;
     255
     256                            function getRangeFromXy(x, y) {
     257                                var range = body.$.createTextRange();
     258
     259                                try {
     260                                    range['moveToPoint'](x, y);
     261                                } catch (ex) {
     262                                    range = null;
     263                                }
     264
     265                                return range;
     266                            }
     267
     268                            function onSelectionEnd() {
     269                                var range = doc.$.selection.createRange();
     270
     271                                if (startRange && !range.item && range.compareEndPoints('StartToEnd', range) === 0) {
     272                                    startRange.select();
     273                                }
     274                                doc.removeListener('mouseup', onSelectionEnd);
     275                                doc.removeListener('mousemove', onMouseMove);
     276                                startRange = started = 0;
     277                                saveSelection(1);
     278                            }
     279
     280                            function getXy(evt){
     281                                var docEl=html.$,bd=body.$,x=evt.pageX,y=evt.pageY;
     282
     283                                if(!x){
     284                                    x= evt.clientX + (docEl && docEl.scrollLeft || bd && bd.scrollLeft || 0) - (docEl && docEl.clientLeft || bd && bd.clientLeft || 0);
     285                                }
     286                                if(!y){
     287                                    y = evt.clientY + (docEl && docEl.scrollTop || bd && bd.scrollTop || 0) - (docEl && docEl.clientTop || bd && bd.clientTop || 0);
     288                                }
     289                                return [x,y];
     290                            }
     291
     292
     293                            function onMouseMove(e) {
     294                                var currentRange,evt=e.data.$;
     295
     296                                if (evt.button) {
     297
     298                                    var xy=getXy(evt);
     299
     300                                    currentRange = getRangeFromXy(xy[0], xy[1]);
     301
     302                                    if (currentRange) {
     303                                        if (currentRange.compareEndPoints('StartToStart', startRange) > 0)
     304                                            currentRange.setEndPoint('StartToStart', startRange);
     305                                        else
     306                                            currentRange.setEndPoint('EndToEnd', startRange);
     307
     308                                        currentRange.select();
     309                                    }
     310                                } else {
     311                                    onSelectionEnd();
     312                                }
     313                            }
     314
     315                            function cursorFix(e){
     316                                if (e.data.$.srcElement=== html.$) {
     317
     318                                    if (started) {
     319                                        onSelectionEnd();
     320                                    }
     321
     322                                    if (html.$.scrollHeight > html.$.clientHeight) {
     323                                        return;
     324                                    }
     325
     326                                    started = 1;
     327
     328                                    var xy=getXy(e.data.$);
     329
     330                                    startRange = getRangeFromXy(xy[0], xy[1]);
     331
     332                                    if (startRange) {
     333
     334                                        doc.on('mouseup', onSelectionEnd);
     335                                        doc.on('mousemove', onMouseMove);
     336
     337                                        editor.focus();
     338                                        startRange.select();
     339                                    }
     340                                }
     341                            }
     342
     343                            doc.on("mousedown",cursorFix);
     344                            doc.on("contextmenu",cursorFix);
     345                        })();
     346
    248347                                                // Other browsers don't loose the selection if the
    249348                                                // editor document loose the focus. In IE, we don't
    250349                                                // have support for it, so we reproduce it here, other
  • _source/plugins/wysiwygarea/plugin.js

     
    691691
    692692                                                // IE standard compliant in editing frame doesn't focus the editor when
    693693                                                // clicking outside actual content, manually apply the focus. (#1659)
    694                                                 if ( editable &&
    695                                                                 CKEDITOR.env.ie && domDocument.$.compatMode == 'CSS1Compat'
    696                                                                 || CKEDITOR.env.gecko
    697                                                                 || CKEDITOR.env.opera )
     694                        if ( CKEDITOR.env.gecko
     695                            || CKEDITOR.env.opera )
    698696                                                {
    699697                                                        var htmlElement = domDocument.getDocumentElement();
    700698                                                        htmlElement.on( 'mousedown', function( evt )
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy