Ticket #3582: 3582_3.patch

File 3582_3.patch, 13.5 KB (added by Garry Yao, 9 years ago)
  • _source/plugins/dialog/plugin.js

     
    927927                                var editor = this._.editor;
    928928                                editor.focus();
    929929
    930                                 if ( editor.mode == 'wysiwyg' && CKEDITOR.env.ie )
     930                                if ( editor.mode == 'wysiwyg' )
    931931                                {
    932932                                        var selection = editor.getSelection();
    933933                                        selection && selection.unlock( true );
     
    29882988                         */
    29892989                        openDialog : function( dialogName, callback )
    29902990                        {
    2991                                 if ( this.mode == 'wysiwyg' && CKEDITOR.env.ie )
     2991                                if ( this.mode == 'wysiwyg' )
    29922992                                {
    29932993                                        var selection = this.getSelection();
    29942994                                        selection && selection.lock();
  • _source/plugins/link/dialogs/anchor.js

     
    66CKEDITOR.dialog.add( 'anchor', function( editor )
    77{
    88        // Function called in onShow to load selected element.
    9         var loadElements = function( editor, selection, element )
     9        var loadElements = function( element )
    1010        {
    11                 this.editMode = true;
    12                 this.editObj = element;
     11                this._.selectedElement = element;
    1312
    14                 var attributeValue = this.editObj.getAttribute( 'name' );
     13                var attributeValue = element.data( 'cke-saved-name' );
    1514                if ( attributeValue )
    1615                        this.setValueOf( 'info','txtName', attributeValue );
    1716                else
     
    2423                minHeight : 60,
    2524                onOk : function()
    2625                {
    27                         // Always create a new anchor, because of IE BUG.
    28                         var name = this.getValueOf( 'info', 'txtName' ),
    29                                 element = CKEDITOR.env.ie && !( CKEDITOR.document.$.documentMode >= 8 ) ?
    30                                 editor.document.createElement( '<a name="' + CKEDITOR.tools.htmlEncode( name ) + '">' ) :
    31                                 editor.document.createElement( 'a' );
    32 
    33                         // Move contents and attributes of old anchor to new anchor.
    34                         if ( this.editMode )
     26                        var name = this.getValueOf( 'info', 'txtName' );
     27                        var attributes =
    3528                        {
    36                                 this.editObj.copyAttributes( element, { name : 1 } );
    37                                 this.editObj.moveChildren( element );
    38                         }
     29                                name : name,
     30                                'data-cke-saved-name' : name
     31                        };
    3932
    40                         // Set name.
    41                         element.data( 'cke-saved-name', false );
    42                         element.setAttribute( 'name', name );
    43 
    44                         // Insert a new anchor.
    45                         var fakeElement = editor.createFakeElement( element, 'cke_anchor', 'anchor' );
    46                         if ( !this.editMode )
    47                                 editor.insertElement( fakeElement );
     33                        if ( this._.selectedElement )
     34                                this._.selectedElement.setAttributes( attributes );
    4835                        else
    4936                        {
    50                                 fakeElement.replace( this.fakeObj );
    51                                 editor.getSelection().selectElement( fakeElement );
     37                                if ( CKEDITOR.env.ie6Compat )
     38                                        attributes[ 'class' ] = 'cke_anchor';
     39                                // Apply style.
     40                                var style = new CKEDITOR.style( { element : 'a', attributes : attributes } );
     41                                style.apply( editor.document );
    5242                        }
     43                },
    5344
    54                         return true;
     45                onHide : function()
     46                {
     47                        delete this._.selectedElement;
    5548                },
     49
    5650                onShow : function()
    5751                {
    58                         this.editObj = false;
    59                         this.fakeObj = false;
    60                         this.editMode = false;
     52                        var selection = editor.getSelection(),
     53                                fullySelected = selection.getSelectedElement(),
     54                                partialSelected;
    6155
    62                         var selection = editor.getSelection();
    63                         var element = selection.getSelectedElement();
    64                         if ( element && element.data( 'cke-real-element-type' ) && element.data( 'cke-real-element-type' ) == 'anchor' )
     56                        // Detect the anchor under selection.
     57                        if ( fullySelected && fullySelected.is( 'a' ) && fullySelected.hasAttribute( 'name' ) )
     58                                loadElements.call( this, fullySelected );
     59                        else
    6560                        {
    66                                 this.fakeObj = element;
    67                                 element = editor.restoreRealElement( this.fakeObj );
    68                                 loadElements.apply( this, [ editor, selection, element ] );
    69                                 selection.selectElement( this.fakeObj );
    70                         }
     61                                partialSelected = CKEDITOR.plugins.link.getSelectedLink( editor );
     62                                if ( partialSelected )
     63                                {
     64                                        loadElements.call( this, partialSelected );
     65                                        selection.selectElement( partialSelected );
     66                                }
     67                        }
     68
    7169                        this.getContentElement( 'info', 'txtName' ).focus();
    7270                },
    7371                contents : [
  • _source/plugins/wysiwygarea/plugin.js

     
    6262                if ( range.checkReadOnly() )
    6363                        return;
    6464
    65                 if ( CKEDITOR.env.ie )
    66                 {
    67                         var selIsLocked = selection.isLocked;
     65                var selIsLocked = selection.isLocked;
     66                selIsLocked && selection.unlock();
    6867
    69                         if ( selIsLocked )
    70                                 selection.unlock();
    71 
     68                if ( CKEDITOR.env.ie )
     69                {
    7270                        var $sel = selection.getNative();
    7371
    7472                        // Delete control selections to avoid IE bugs on pasteHTML.
     
    9997                        }
    10098                        catch (e) {}
    10199
    102                         if ( selIsLocked )
    103                                 this.getSelection().lock();
    104100                }
    105101                else
    106102                        this.document.$.execCommand( 'inserthtml', false, data );
    107103
     104                selIsLocked && this.getSelection().lock();
     105
    108106                // Webkit does not scroll to the cursor position after pasting (#5558)
    109107                if ( CKEDITOR.env.webkit )
    110108                {
     
    635633                                                        var element = evt.data.getTarget(),
    636634                                                                data = { element : element, dialog : '' };
    637635                                                        editor.fire( 'doubleclick', data );
    638                                                         data.dialog && editor.openDialog( data.dialog );
    639                                                 });
     636                                                        data.dialog && editor.openDialog( data.dialog, function()
     637                                                        {
     638                                                                // Select the clicked element, in IE, this means the element will
     639                                                                // be embraced anyway in the locked selection.
     640                                                                element && editor.getSelection().selectElement( element )
     641                                                                element && console.log( 'element selected');
     642                                                        } );
     643                                                });
    640644
    641645                                                // Prevent automatic submission in IE #6336
    642646                                                CKEDITOR.env.ie && domDocument.on( 'click', function( evt )
  • _source/plugins/htmldataprocessor/plugin.js

     
    9595        delete blockLikeTags.pre;
    9696        var defaultDataFilterRules =
    9797        {
    98                 elements : {
    99                         a : function( element )
    100                         {
    101                                 var attrs = element.attributes;
    102                                 if ( attrs && attrs[ 'data-cke-saved-name' ] )
    103                                         attrs[ 'class' ] = ( attrs[ 'class' ] ? attrs[ 'class' ] + ' ' : '' ) + 'cke_anchor';
    104                         }
    105                 },
     98                elements : {},
    10699                attributeNames :
    107100                [
    108101                        // Event attributes (onXYZ) must not be directly set. They can become
  • _source/plugins/link/plugin.js

     
    3131
    3232                // Add the CSS styles for anchor placeholders.
    3333                var side = editor.lang.dir == 'rtl' ? 'right' : 'left';
    34                 editor.addCss(
    35                         'img.cke_anchor' +
    36                         '{' +
     34                var background =
    3735                                'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/anchor.gif' ) + ');' +
    38                                 'background-position: center center;' +
    3936                                'background-repeat: no-repeat;' +
    40                                 'border: 1px solid #a9a9a9;' +
    41                                 'width: 18px !important;' +
    42                                 'height: 18px !important;' +
    43                         '}\n' +
    44                         'a.cke_anchor' +
    45                         '{' +
    46                                 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/anchor.gif' ) + ');' +
    47                                 'background-position: ' + side + ' center;' +
    48                                 'background-repeat: no-repeat;' +
    49                                 'border: 1px solid #a9a9a9;' +
     37                                'border: 1px solid #a9a9a9;',
     38                        anchorCss = '{' +
     39                                background +
     40                                'background-position: 0 center;' +
    5041                                'padding-' + side + ': 18px;' +
    51                         '}'
    52                         );
     42                                ( CKEDITOR.env.ie6Compat ? 'height: 1ex;' : '' ) +
     43                        '}';
    5344
     45                editor.addCss( 'a.cke_anchor, a[name]' + anchorCss );
     46
    5447                // Register selection change handler for the unlink button.
    5548                 editor.on( 'selectionChange', function( evt )
    5649                        {
     
    141134                var dataProcessor = editor.dataProcessor,
    142135                        dataFilter = dataProcessor && dataProcessor.dataFilter;
    143136
    144                 if ( dataFilter )
     137                if ( dataFilter && CKEDITOR.env.ie6Compat )
    145138                {
    146139                        dataFilter.addRules(
    147140                                {
     
    150143                                                a : function( element )
    151144                                                {
    152145                                                        var attributes = element.attributes;
    153                                                         if ( attributes.name && !attributes.href )
    154                                                                 return editor.createFakeParserElement( element, 'cke_anchor', 'anchor' );
     146                                                        if ( attributes.name )
     147                                                                attributes[ 'class' ] = ( attributes[ 'class' ] || '' ) + ' cke_anchor';
    155148                                                }
    156149                                        }
    157150                                });
  • _source/core/dom/element.js

     
    10301030                                                this.$.tabIndex = value;
    10311031                                        else if ( name == 'checked' )
    10321032                                                this.$.checked = value;
     1033                                        else if ( name == 'name' )
     1034                                        {
     1035                                                var replacement = this.getDocument().createElement( '<' + this.getName() +' name="' + value + '">' );
     1036                                                this.copyAttributes( replacement, { name : 1 } );
     1037                                                this.getParent() && replacement.replace( this );
     1038                                                this.moveChildren( replacement );
     1039                                                this.$ = replacement.$;
     1040                                        }
    10331041                                        else
    10341042                                                standard.apply( this, arguments );
    10351043                                        return this;
  • _source/plugins/link/dialogs/link.js

     
    243243
    244244                // Find out whether we have any anchors in the editor.
    245245                // Get all IMG elements in CK document.
    246                 var elements = editor.document.getElementsByTag( 'img' ),
    247                         realAnchors = new CKEDITOR.dom.nodeList( editor.document.$.anchors ),
    248                         anchors = retval.anchors = [];
     246                var allAnchors = new CKEDITOR.dom.nodeList( editor.document.$.anchors ),
     247                        anchors = retval.anchors = [],
     248                        item;
    249249
    250                 for ( var i = 0; i < elements.count() ; i++ )
    251                 {
    252                         var item = elements.getItem( i );
    253                         if ( item.data( 'cke-realelement' ) && item.data( 'cke-real-element-type' ) == 'anchor' )
    254                                 anchors.push( editor.restoreRealElement( item ) );
    255                 }
     250                for ( var i = 0 ; i < allAnchors.count() ; i++ )
     251                        anchors.push( allAnchors.getItem( i ) );
    256252
    257                 for ( i = 0 ; i < realAnchors.count() ; i++ )
    258                         anchors.push( realAnchors.getItem( i ) );
    259 
    260253                for ( i = 0 ; i < anchors.length ; i++ )
    261254                {
    262255                        item = anchors[ i ];
     
    11511144                ],
    11521145                onShow : function()
    11531146                {
    1154                         this.fakeObj = false;
    1155 
    11561147                        var editor = this.getParentEditor(),
    11571148                                selection = editor.getSelection(),
    11581149                                element = null;
     
    11601151                        // Fill in all the relevant fields if there's already one link selected.
    11611152                        if ( ( element = plugin.getSelectedLink( editor ) ) && element.hasAttribute( 'href' ) )
    11621153                                selection.selectElement( element );
    1163                         else if ( ( element = selection.getSelectedElement() ) && element.is( 'img' )
    1164                                         && element.data( 'cke-real-element-type' )
    1165                                         && element.data( 'cke-real-element-type' ) == 'anchor' )
    1166                         {
    1167                                 this.fakeObj = element;
    1168                                 element = editor.restoreRealElement( this.fakeObj );
    1169                                 selection.selectElement( this.fakeObj );
    1170                         }
    11711154                        else
    11721155                                element = null;
    11731156
     
    13041287                                if ( data.adv[ 'advName' ] )
    13051288                                {
    13061289                                        attributes[ 'name' ] = attributes[ 'data-cke-saved-name' ] = data.adv[ 'advName' ];
    1307                                         attributes[ 'class' ] = ( attributes[ 'class' ] ? attributes[ 'class' ] + ' ' : '' ) + 'cke_anchor';
     1290                                        if ( CKEDITOR.env.ie6Compat )
     1291                                                attributes[ 'class' ] = ( attributes[ 'class' ] ? attributes[ 'class' ] + ' ' : '' ) + 'cke_anchor';
    13081292                                }
    13091293                                else
    13101294                                        removeAttributes = removeAttributes.concat( [ 'data-cke-saved-name', 'name' ] );
     
    13501334                                        href = element.data( 'cke-saved-href' ),
    13511335                                        textView = element.getHtml();
    13521336
    1353                                 // IE BUG: Setting the name attribute to an existing link doesn't work.
    1354                                 // Must re-create the link from weired syntax to workaround.
    1355                                 if ( CKEDITOR.env.ie && !( CKEDITOR.document.$.documentMode >= 8 ) && attributes.name != element.getAttribute( 'name' ) )
    1356                                 {
    1357                                         var newElement = new CKEDITOR.dom.element( '<a name="' + CKEDITOR.tools.htmlEncode( attributes.name ) + '">',
    1358                                                         editor.document );
    1359 
    1360                                         selection = editor.getSelection();
    1361 
    1362                                         element.copyAttributes( newElement, { name : 1 } );
    1363                                         element.moveChildren( newElement );
    1364                                         newElement.replace( element );
    1365                                         element = newElement;
    1366 
    1367                                         selection.selectElement( element );
    1368                                 }
    1369 
    13701337                                element.setAttributes( attributes );
    13711338                                element.removeAttributes( removeAttributes );
    13721339                                // Update text view when user changes protocol (#4612).
     
    13761343                                        element.setHtml( data.type == 'email' ?
    13771344                                                data.email.address : attributes[ 'data-cke-saved-href' ] );
    13781345                                }
    1379                                 // Make the element display as an anchor if a name has been set.
    1380                                 if ( element.getAttribute( 'name' ) )
    1381                                         element.addClass( 'cke_anchor' );
    1382                                 else
    1383                                         element.removeClass( 'cke_anchor' );
     1346
     1347                                if ( CKEDITOR.env.ie6Compat )
     1348                                {
     1349                                        // Make the element display as an anchor if a name has been set.
     1350                                        if ( element.getAttribute( 'name' ) )
     1351                                                element.addClass( 'cke_anchor' );
     1352                                        else
     1353                                                element.removeClass( 'cke_anchor' );
     1354                                }
    13841355
    1385                                 if ( this.fakeObj )
    1386                                         editor.createFakeElement( element, 'cke_anchor', 'anchor' ).replace( this.fakeObj );
    1387 
    13881356                                delete this._.selectedElement;
    13891357                        }
    13901358                },
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy