Ticket #2816: 2816_3.patch

File 2816_3.patch, 20.6 KB (added by Garry Yao, 12 years ago)

Revise coding styles

Line 
1Index: _source/core/editor.js
2===================================================================
3--- _source/core/editor.js      (revision 3041)
4+++ _source/core/editor.js      (working copy)
5@@ -380,8 +380,24 @@
6                execCommand : function( commandName, data )
7                {
8                        var command = this.getCommand( commandName );
9+                       var exeResult;
10+                       var commandEvent =
11+
12+                       /**
13+                        * The event data for this command
14+                        * @type FCKEDITOR.command.Event
15+                        */
16+                       {
17+                               name :commandName,
18+                               command :command
19+                       };
20                        if ( command && command.state != CKEDITOR.TRISTATE_DISABLED )
21-                               return command.exec( this, data );
22+                       {
23+                               this.fire( 'beforeCommandExec' , commandEvent );
24+                               exeResult = command.exec( this , data );
25+                               this.fire( 'afterCommandExec' , commandEvent );
26+                               return exeResult;
27+                       }
28
29                        // throw 'Unknown command name "' + commandName + '"';
30                        return false;
31Index: _source/plugins/dialog/plugin.js
32===================================================================
33--- _source/plugins/dialog/plugin.js    (revision 3041)
34+++ _source/plugins/dialog/plugin.js    (working copy)
35@@ -205,6 +205,7 @@
36
37                this.on( 'ok', function( evt )
38                        {
39+                               this._.editor.fire('beforeDialogClose');
40                                iterContents( function( item )
41                                        {
42                                                if ( item.validate )
43@@ -234,6 +235,7 @@
44
45                this.on( 'cancel', function( evt )
46                        {
47+                               this._.editor.fire( 'beforeDialogClose' );
48                                iterContents( function( item )
49                                        {
50                                                if ( item.isChanged() )
51@@ -461,11 +463,10 @@
52                                        } );
53
54                        // Save editor selection and grab the focus.
55-                       if ( !this._.parentDialog )
56-                               this.saveSelection();
57                        this._.dummyText.focus();
58                        this._.dummyText.$.select();
59
60+                       this._.editor.fire( 'beforeDialogShow', this );
61                        // Execute onLoad for the first show.
62                        this.fireOnce( 'load', {} );
63                        this.fire( 'show', {} );
64@@ -575,9 +576,6 @@
65                                CKEDITOR.document.removeListener( 'keydown', accessKeyDownHandler );
66                                CKEDITOR.document.removeListener( 'keyup', accessKeyUpHandler );
67
68-                               // Restore focus and (if not already restored) selection in the editing area.
69-                               this.restoreSelection();
70-                               this._.editor.focus();
71                        }
72                        else
73                                CKEDITOR.dialog._.currentZIndex -= 10;
74@@ -818,46 +816,8 @@
75                getParentEditor : function()
76                {
77                        return this._.editor;
78-               },
79-
80-               /**
81-                * Saves the current selection position in the editor.
82-                * This function is automatically called when a non-nested dialog is opened,
83-                * but it may also be called by event handlers in dialog definition.
84-                * @example
85-                */
86-               saveSelection : function()
87-               {
88-                       if ( this._.editor.mode )
89-                       {
90-                               var selection = new CKEDITOR.dom.selection( this._.editor.document );
91-                               this._.selectedRanges = selection.getRanges();
92-                       }
93-               },
94-
95-               /**
96-                * Clears the saved selection in the dialog object.
97-                * This function should be called if the dialog's code has already changed the
98-                * current selection position because the dialog closed. (e.g. at onOk())
99-                * @example
100-                */
101-               clearSavedSelection : function()
102-               {
103-                       delete this._.selectedRanges;
104-               },
105+               }
106
107-               /**
108-                * Restores the editor's selection from the previously saved position in this
109-                * dialog.
110-                * This function is automatically called when a non-nested dialog is closed,
111-                * but it may also be called by event handlers in dialog definition.
112-                * @example
113-                */
114-               restoreSelection : function()
115-               {
116-                       if ( this._.editor.mode && this._.selectedRanges )
117-                               ( new CKEDITOR.dom.selection( this._.editor.document ) ).selectRanges( this._.selectedRanges );
118-               }
119        };
120
121        CKEDITOR.tools.extend( CKEDITOR.dialog,
122Index: _source/plugins/link/dialogs/link.js
123===================================================================
124--- _source/plugins/link/dialogs/link.js        (revision 3041)
125+++ _source/plugins/link/dialogs/link.js        (working copy)
126@@ -636,8 +636,6 @@
127                onShow : function()
128                {
129                        this.fakeObj = false;
130-                       // IE BUG: Selection must be in the editor for getSelection() to work.
131-                       this.restoreSelection();
132                        var editor = this.getParentEditor(),
133                                selection = editor.getSelection(),
134                                ranges = selection.getRanges(),
135@@ -696,7 +694,6 @@
136                                {
137                                        loadLink.apply( this, [ editor, selection, ranges, element ] );
138                                        selection.selectElement( element );
139-                                       this.saveSelection();
140                                }
141
142                                element = rangeRoot.getAscendant( 'img', true );
143@@ -706,7 +703,6 @@
144                                        element = editor.fakeobjects.restoreElement( this.fakeObj );
145                                        loadLink.apply( this, [ editor, selection, ranges, element ] );
146                                        selection.selectElement( this.fakeObj );
147-                                       this.saveSelection();
148                                }
149                        }
150
151@@ -803,10 +799,6 @@
152
153                        if ( !this._.selectedElement )
154                        {
155-                               // IE BUG: Selection must be in the editor for getSelection() to work.
156-                               this.restoreSelection();
157-                               this.clearSavedSelection();
158-
159                                // Create element if current selection is collapsed.
160                                var selection = editor.getSelection(),
161                                        ranges = selection.getRanges();
162Index: _source/plugins/link/dialogs/anchor.js
163===================================================================
164--- _source/plugins/link/dialogs/anchor.js      (revision 3041)
165+++ _source/plugins/link/dialogs/anchor.js      (working copy)
166@@ -8,7 +8,6 @@
167        // Function called in onShow to load selected element.
168        var loadElements = function( editor, selection, ranges, element )
169        {
170-               this.saveSelection();
171                this.editMode = true;
172                this.editObj = element;
173
174@@ -36,9 +35,6 @@
175                        // Insert a new anchor.
176                        if ( !this.editMode )
177                        {
178-                               // It doesn't work with IE.
179-                               this.restoreSelection();
180-                               this.clearSavedSelection();
181
182                                var fakeElement = editor.fakeobjects.protectElement( this.editObj );
183                                editor.insertElement( fakeElement );
184@@ -53,9 +49,6 @@
185                        this.fakeObj = false;
186                        this.editMode = false;
187
188-                       // IE BUG: Selection must be in the editor for getSelection() to work.
189-                       this.restoreSelection();
190-
191                        var editor = this.getParentEditor(),
192                                selection = editor.getSelection(),
193                                ranges = selection.getRanges();
194@@ -71,7 +64,6 @@
195                                        element = editor.fakeobjects.restoreElement( this.fakeObj );
196                                        loadElements.apply( this, [ editor, selection, ranges, element ] );
197                                        selection.selectElement( this.fakeObj );
198-                                       this.saveSelection();
199                                }
200                        }
201                        this.pushDefault();
202Index: _source/plugins/specialchar/dialogs/specialchar.js
203===================================================================
204--- _source/plugins/specialchar/dialogs/specialchar.js  (revision 3041)
205+++ _source/plugins/specialchar/dialogs/specialchar.js  (working copy)
206@@ -140,7 +140,6 @@
207                                                                                                target = target.$;
208                                                                                                if ( value = target.getAttribute( 'value' ) )
209                                                                                                {
210-                                                                                                       this.getDialog().restoreSelection();
211                                                                                                        editor.insertHtml( value );
212                                                                                                        this.getDialog().hide();
213                                                                                                }
214Index: _source/plugins/image/dialogs/image.js
215===================================================================
216--- _source/plugins/image/dialogs/image.js      (revision 3041)
217+++ _source/plugins/image/dialogs/image.js      (working copy)
218@@ -228,7 +228,7 @@
219                var oImageOriginal = dialog.editObj[ 'imageOriginal' ];
220                if ( oImageOriginal && oImageOriginal.getCustomData( 'isReady' ) == 'true' )
221                {
222-                       if ( value != undefined )
223+                       if ( value != undefined )
224                                dialog.imageLockRatio = value
225                        else
226                                dialog.imageLockRatio = !dialog.imageLockRatio;
227@@ -341,7 +341,6 @@
228        {
229                this.editObj[ 'image' ] = false;
230                this.editMode[ 'image' ] = false;               // Default:  Create a new Image
231-               this.saveSelection();
232
233                this.setValueOf( "Link", "txtUrl", "" );
234                this.setValueOf( "Link", "cmbTarget", "" );
235@@ -501,9 +500,6 @@
236                        // Insert a new Image.
237                        if ( this.editMode[ 'image' ] == false )
238                        {
239-                               // It doesn't work with IE.
240-                               this.restoreSelection();
241-                               this.clearSavedSelection();
242
243                                if ( useLink )
244                                        //Insert a new Link.
245@@ -559,8 +555,6 @@
246                        this.dimensionsInStyle[ 'height' ] = false;
247                        this.forceResetSize = false;
248
249-                       // IE BUG: Selection must be in the editor for getSelection() to work.
250-                       this.restoreSelection();
251
252                        var editor = this.getParentEditor(),
253                                selection = editor.getSelection(),
254@@ -602,7 +596,6 @@
255                                {
256                                        loadElements.apply( this, [ editor, selection, ranges, element ] );
257                                        selection.selectElement( element );
258-                                       this.saveSelection();
259                                }
260                        }
261                        updateOriginal( this, false );
262Index: _source/plugins/forms/dialogs/textarea.js
263===================================================================
264--- _source/plugins/forms/dialogs/textarea.js   (revision 3041)
265+++ _source/plugins/forms/dialogs/textarea.js   (working copy)
266@@ -17,7 +17,6 @@
267        // Function called in onShow to load selected element.
268        var loadSelection = function( editor, selection, ranges, element )
269        {
270-               this.saveSelection();
271                this.editObj = element;
272                this.editMode = true;
273
274@@ -47,8 +46,6 @@
275                        // Default: create a new element.
276                        this.editMode = false;
277
278-                       // IE BUG: Selection must be in the editor for getSelection() to work.
279-                       this.restoreSelection();
280
281                        var editor = this.getParentEditor(),
282                                selection = editor.getSelection(),
283@@ -80,8 +77,6 @@
284
285                        if ( this.editMode == false )
286                        {
287-                               this.restoreSelection();
288-                               this.clearSavedSelection();
289                                editor.insertElement( this.editObj );
290                        }
291                        return true;
292Index: _source/plugins/forms/dialogs/radio.js
293===================================================================
294--- _source/plugins/forms/dialogs/radio.js      (revision 3041)
295+++ _source/plugins/forms/dialogs/radio.js      (working copy)
296@@ -17,7 +17,6 @@
297        // Function called in onShow to load selected element.
298        var loadSelection = function( editor, selection, ranges, element )
299        {
300-               this.saveSelection();
301                this.editObj = element;
302                this.editMode = true;
303
304@@ -44,8 +43,6 @@
305                        this.editMode = false;
306                        this.changedAttibutes = new Array();
307
308-                       // IE BUG: Selection must be in the editor for getSelection() to work.
309-                       this.restoreSelection();
310
311                        var editor = this.getParentEditor(),
312                                selection = editor.getSelection(),
313@@ -79,8 +76,6 @@
314                        if ( this.editMode == false )
315                        {
316                                // It doesn't work with IE.
317-                               this.restoreSelection();
318-                               this.clearSavedSelection();
319                                editor.insertElement( this.editObj );
320                        }
321                        return true;
322Index: _source/plugins/forms/dialogs/form.js
323===================================================================
324--- _source/plugins/forms/dialogs/form.js       (revision 3041)
325+++ _source/plugins/forms/dialogs/form.js       (working copy)
326@@ -17,7 +17,6 @@
327        // Function called in onShow to load selected element.
328        var loadSelection = function( editor, selection, ranges, element )
329        {
330-               this.saveSelection();
331                this.editObj = element;
332                this.editMode = true;
333
334@@ -54,8 +53,6 @@
335
336                        if ( this.editMode == false )
337                        {
338-                               this.restoreSelection();
339-                               this.clearSavedSelection();
340                                editor.insertElement( this.editObj );
341                        }
342                        return true;
343@@ -66,8 +63,6 @@
344                        this.editMode = false;
345                        this.changedAttibutes = new Array();
346
347-                       // IE BUG: Selection must be in the editor for getSelection() to work.
348-                       this.restoreSelection();
349
350                        var editor = this.getParentEditor(),
351                                selection = editor.getSelection(),
352Index: _source/plugins/forms/dialogs/textfield.js
353===================================================================
354--- _source/plugins/forms/dialogs/textfield.js  (revision 3041)
355+++ _source/plugins/forms/dialogs/textfield.js  (working copy)
356@@ -17,7 +17,6 @@
357        // Function called in onShow to load selected element.
358        var loadSelection = function( editor, selection, ranges, element )
359        {
360-               this.saveSelection();
361                this.editObj = element;
362                this.editMode = true;
363
364@@ -49,8 +48,6 @@
365                        // Default: create a new element.
366                        this.editMode = false;
367
368-                       // IE BUG: Selection must be in the editor for getSelection() to work.
369-                       this.restoreSelection();
370
371                        var editor = this.getParentEditor(),
372                                selection = editor.getSelection(),
373@@ -86,8 +83,6 @@
374
375                        if ( this.editMode == false )
376                        {
377-                               this.restoreSelection();
378-                               this.clearSavedSelection();
379                                editor.insertElement( this.editObj );
380                        }
381                        return true;
382Index: _source/plugins/forms/dialogs/select.js
383===================================================================
384--- _source/plugins/forms/dialogs/select.js     (revision 3041)
385+++ _source/plugins/forms/dialogs/select.js     (working copy)
386@@ -44,7 +44,6 @@
387
388                dialog.editObj = element;
389                dialog.editMode = true;
390-               dialog.saveSelection();
391
392                dialog.getContentElement( 'info', 'txtName' ).setValue( dialog.editObj.getAttribute( "name" ) );
393                dialog.getContentElement( 'info', 'txtSize' ).setValue( dialog.editObj.getAttribute( "size" ) );
394@@ -74,8 +73,6 @@
395                        this.editMode = false;
396                        this.changedAttibutes = new Array();
397
398-                       // IE BUG: Selection must be in the editor for getSelection() to work.
399-                       this.restoreSelection();
400
401                        var editor = this.getParentEditor(),
402                                selection = editor.getSelection(),
403@@ -91,7 +88,6 @@
404                                {
405                                        loadSelection.apply( this, [ editor, selection, ranges, element ] );
406                                        selection.selectElement( element );
407-                                       this.saveSelection();
408                                }
409                        }
410
411@@ -139,7 +135,6 @@
412
413                        if ( this.editMode == false )
414                        {
415-                               this.restoreSelection();
416                                parentEditor.insertElement( this.editObj );
417                        }
418                        return true;
419Index: _source/plugins/forms/dialogs/hiddenfield.js
420===================================================================
421--- _source/plugins/forms/dialogs/hiddenfield.js        (revision 3041)
422+++ _source/plugins/forms/dialogs/hiddenfield.js        (working copy)
423@@ -17,7 +17,6 @@
424        // Function called in onShow to load selected element.
425        var loadSelection = function( editor, selection, ranges, element )
426        {
427-               this.saveSelection();
428                this.editObj = element;
429                this.editMode = true;
430
431@@ -41,8 +40,6 @@
432                        this.editMode = false;
433                        this.changedAttibutes = new Array();
434
435-                       // IE BUG: Selection must be in the editor for getSelection() to work.
436-                       this.restoreSelection();
437
438                        var editor = this.getParentEditor(),
439                                selection = editor.getSelection(),
440@@ -74,8 +71,6 @@
441
442                        if ( this.editMode == false )
443                        {
444-                               this.restoreSelection();
445-                               this.clearSavedSelection();
446                                editor.insertElement( this.editObj );
447                        }
448                        return true;
449Index: _source/plugins/forms/dialogs/checkbox.js
450===================================================================
451--- _source/plugins/forms/dialogs/checkbox.js   (revision 3041)
452+++ _source/plugins/forms/dialogs/checkbox.js   (working copy)
453@@ -10,10 +10,6 @@
454                minHeight : 230,
455                onShow : function()
456                {
457-                       // IE BUG: Selection must be in the editor for getSelectedElement()
458-                       // to work.
459-                       this.restoreSelection();
460-
461                        var element = this.getParentEditor().getSelection().getSelectedElement();
462
463                        if ( element && element.getAttribute( 'type' ) == "checkbox" )
464@@ -39,8 +35,6 @@
465
466                        if ( isInsertMode )
467                        {
468-                               this.restoreSelection();
469-                               this.clearSavedSelection();
470                                editor.insertElement( element );
471                        }
472                },
473Index: _source/plugins/forms/dialogs/button.js
474===================================================================
475--- _source/plugins/forms/dialogs/button.js     (revision 3041)
476+++ _source/plugins/forms/dialogs/button.js     (working copy)
477@@ -26,7 +26,6 @@
478                this.setValueOf( 'info', 'txtValue', value );
479                this.setValueOf( 'info', 'txtType', type );
480
481-               this.saveSelection();
482                this.editMode = true;
483                this.editObj = element;
484
485@@ -43,8 +42,6 @@
486                        // Default: create a new element.
487                        this.editMode = false;
488
489-                       // IE BUG: Selection must be in the editor for getSelection() to work.
490-                       this.restoreSelection();
491
492                        var editor = this.getParentEditor(),
493                                selection = editor.getSelection(),
494@@ -80,8 +77,6 @@
495
496                        if ( this.editMode == false )
497                        {
498-                               this.restoreSelection();
499-                               this.clearSavedSelection();
500                                editor.insertElement( this.editObj );
501                        }
502                        return true;
503Index: _source/plugins/flash/dialogs/flash.js
504===================================================================
505--- _source/plugins/flash/dialogs/flash.js      (revision 3041)
506+++ _source/plugins/flash/dialogs/flash.js      (working copy)
507@@ -163,7 +163,6 @@
508        var loadElements = function( editor, selection, ranges, fakeElement, realElement )
509        {
510                selection.selectElement( fakeElement );
511-               this.saveSelection();
512                this.editMode[ 'fakeobject' ] = realElement.getName();
513                this.editObj[ 'fakeobject' ] = fakeElement;
514
515@@ -326,8 +325,6 @@
516                        this.dimensionsInStyle[ 'width' ] = false;
517                        this.dimensionsInStyle[ 'height' ] = false;
518
519-                       // IE BUG: Selection must be in the editor for getSelection() to work.
520-                       this.restoreSelection();
521
522                        var editor = this.getParentEditor(),
523                                selection = editor.getSelection(),
524@@ -415,9 +412,6 @@
525                                else
526                                        this.editObj[ 'fakeobject' ] = CKEDITOR.plugins.fakeobjects.protectElement( this.editObj[ 'object' ] );
527
528-                               // It doesn't work with IE.
529-                               this.restoreSelection();
530-                               this.clearSavedSelection();
531                                editor.insertElement( this.editObj[ 'fakeobject' ] );
532                        }
533                        else
534Index: _source/plugins/table/dialogs/table.js
535===================================================================
536--- _source/plugins/table/dialogs/table.js      (revision 3041)
537+++ _source/plugins/table/dialogs/table.js      (working copy)
538@@ -16,7 +16,6 @@
539                onShow : function()
540                {
541                        // Detect if there's a selected table.
542-                       this.restoreSelection();
543                        var selection = editor.getSelection(),
544                                ranges = selection.getRanges(),
545                                me = this,
546@@ -148,7 +147,6 @@
547                        // Insert the table element if we're creating one.
548                        if ( !this._.selectedElement )
549                        {
550-                               this.restoreSelection();
551                                editor.insertElement( table );
552                                this.clearSavedSelection();
553                        }
554Index: _source/plugins/selection/plugin.js
555===================================================================
556--- _source/plugins/selection/plugin.js (revision 3041)
557+++ _source/plugins/selection/plugin.js (working copy)
558@@ -90,6 +90,18 @@
559                                                // IE is the only to provide the "selectionchange"
560                                                // event.
561                                                editor.document.on( 'selectionchange', checkSelectionChangeTimeout, editor );
562+
563+                                               //Destory previous saved selection.
564+                                               editor.document.on( 'selectionchange', function ()
565+                                               {
566+                                                       editor.dropSavedRanges();
567+                                               } );
568+
569+                                               // Save selection on editor window blur
570+                                               ( new CKEDITOR.dom.element( editor.document.$.body ) ).on( 'beforedeactivate',
571+                                               function (){
572+                                                       editor.saveSelection();
573+                                               } );
574                                        }
575                                        else
576                                        {
577@@ -102,7 +114,14 @@
578                                        }
579                                });
580
581-                       editor.addCommand( 'selectAll', selectAllCmd );
582+                       //restore selection for commands.
583+                       if ( CKEDITOR.env.ie )
584+                       {
585+                               editor.on( 'beforeCommandExec',  editor.restoreSelection,  editor);
586+                               editor.on( 'beforeDialogShow',  editor.restoreSelection,  editor);
587+                               editor.on( 'beforeDialogClose',  editor.restoreSelection,  editor);
588+                       }
589+                       editor.addCommand( 'selectAll',  selectAllCmd );
590                        editor.ui.addButton( 'SelectAll',
591                                {
592                                        label : editor.lang.selectAll,
593@@ -141,6 +160,56 @@
594        return retval;
595};
596
597+//Selection restore  APIs for IE, see #2816
598+if( CKEDITOR.env.ie )
599+{
600+       CKEDITOR.tools.extend( CKEDITOR.editor.prototype,  {
601+
602+               /**
603+                * Record the current selection status range of this document.
604+                * Note: This save doesn't resistant to dom changes, resort to undo/redo plugin for such need.
605+                */
606+               saveSelection : function()
607+               {
608+                       if ( this.mode === 'wysiwyg' && !this._.selectedRanges )
609+                       {
610+                               var selection = new CKEDITOR.dom.selection( this.document );
611+                               this._.selectedRanges = selection.getRanges();
612+                       }
613+               },
614+
615+               /**
616+                * Clears the saved selection ranges when expired.
617+                */
618+               dropSavedRanges : function()
619+               {
620+                       if( this._.selectedRanges )
621+                       {
622+                               delete this._.selectedRanges;
623+                       }
624+               },
625+
626+               /**
627+                * Retrieve the last saved ranges
628+                * @return {CKEDITOR.dom.range}
629+                */
630+               getSavedRange: function()
631+               {
632+                       return this._.selectionRanges||null;
633+               },
634+
635+               /**
636+                * Restores the last ranges record and select the ranges in document.
637+                */
638+               restoreSelection : function()
639+               {
640+                       if ( this._.selectedRanges && this.mode === 'wysiwyg' )
641+                       {
642+                               ( new CKEDITOR.dom.selection( this.document ) ).selectRanges( this._.selectedRanges );
643+                       }
644+               }
645+});
646+}
647/**
648  * Gets the current selection from the document.
649  * @returns {CKEDITOR.dom.selection} A selection object.
650Index: _source/plugins/smiley/dialogs/smiley.js
651===================================================================
652--- _source/plugins/smiley/dialogs/smiley.js    (revision 3041)
653+++ _source/plugins/smiley/dialogs/smiley.js    (working copy)
654@@ -54,8 +54,6 @@
655                        else if ( targetName != 'img' )
656                                return;
657
658-                       this.getDialog().restoreSelection();
659-                       
660                        var src = target.getAttribute( 'src' ),
661                                title = target.getAttribute( 'title' );
662                       
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy