WordPress.org

Make WordPress Core

Ticket #46071: 46071.diff

File 46071.diff, 5.2 KB (added by azaozz, 3 years ago)
  • src/js/_enqueues/lib/link.js

     
    55 /* global wpLink */
    66
    77( function( $, wpLinkL10n, wp ) {
    8         var editor, searchTimer, River, Query, correctedURL, linkNode,
     8        var editor, searchTimer, River, Query, correctedURL,
    99                emailRegexp = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,63}$/i,
    1010                urlRegexp = /^(https?|ftp):\/\/[A-Z0-9.-]+\.[A-Z]{2,63}[^ "]*$/i,
    1111                inputs = {},
     
    1313                isTouch = ( 'ontouchend' in document );
    1414
    1515        function getLink() {
    16                 return linkNode || editor.dom.getParent( editor.selection.getNode(), 'a[href]' );
     16                if ( editor ) {
     17                        return editor.$( 'a[data-wplink-edit="true"]' );
     18                }
     19
     20                return null;
    1721        }
    1822
    1923        window.wpLink = {
     
    97101                        }
    98102                },
    99103
    100                 open: function( editorId, url, text, node ) {
     104                open: function( editorId, url, text ) {
    101105                        var ed,
    102106                                $body = $( document.body );
    103107
    104108                        $body.addClass( 'modal-open' );
    105109                        wpLink.modalOpen = true;
    106                         linkNode = node;
    107110
    108111                        wpLink.range = null;
    109112
     
    205208                                return false;
    206209                        }
    207210
    208                         if ( linkNode ) {
    209                                 nodes = linkNode.childNodes;
     211                        if ( linkNode.length ) {
     212                                nodes = linkNode[0].childNodes;
    210213
    211                                 if ( nodes.length === 0 ) {
     214                                if ( ! nodes || ! nodes.length ) {
    212215                                        return false;
    213216                                }
    214217
     
    229232                                linkNode = getLink(),
    230233                                onlyText = this.hasSelectedText( linkNode );
    231234
    232                         if ( linkNode ) {
    233                                 linkText = linkNode.textContent || linkNode.innerText;
    234                                 href = editor.dom.getAttrib( linkNode, 'href' );
     235                        if ( linkNode.length ) {
     236                                linkText = linkNode.text();
     237                                href = linkNode.attr( 'href' );
    235238
    236239                                if ( ! $.trim( linkText ) ) {
    237240                                        linkText = text || '';
     
    243246
    244247                                if ( href !== '_wp_link_placeholder' ) {
    245248                                        inputs.url.val( href );
    246                                         inputs.openInNewTab.prop( 'checked', '_blank' === editor.dom.getAttrib( linkNode, 'target' ) );
     249                                        inputs.openInNewTab.prop( 'checked', '_blank' === linkNode.attr( 'target' ) );
    247250                                        inputs.submit.val( wpLinkL10n.update );
    248251                                } else {
    249252                                        this.setDefaultValues( linkText );
     
    414417                                return;
    415418                        }
    416419
    417                         $link = editor.$( getLink() );
     420                        $link = getLink();
    418421
    419422                        editor.undoManager.transact( function() {
    420423                                if ( ! $link.length ) {
     
    437440                                        }
    438441
    439442                                        attrs['data-wplink-edit'] = null;
    440                                         attrs['data-mce-href'] = null; // attrs.href
     443                                        attrs['data-mce-href'] = attrs.href;
    441444                                        $link.attr( attrs );
    442445                                }
    443446                        } );
     
    446449                        editor.focus();
    447450
    448451                        if ( $link.length ) {
    449                                 $mceCaret = $link.parent( '#_mce_caret' );
    450 
    451                                 if ( $mceCaret.length ) {
    452                                         $mceCaret.before( $link.removeAttr( 'data-mce-bogus' ) );
    453                                 }
    454 
    455452                                editor.selection.select( $link[0] );
    456                                 editor.selection.collapse();
    457453
    458454                                if ( editor.plugins.wplink ) {
    459455                                        editor.plugins.wplink.checkLink( $link[0] );
     
    468464
    469465                updateFields: function( e, li ) {
    470466                        inputs.url.val( li.children( '.item-permalink' ).val() );
     467
     468                        if ( inputs.wrap.hasClass( 'has-text-field' ) && ! inputs.text.val() ) {
     469                                inputs.text.val( li.children( '.item-title' ).text() );
     470                        }
    471471                },
    472472
    473473                getUrlFromSelection: function( selection ) {
  • src/js/_enqueues/vendor/tinymce/plugins/wplink/plugin.js

     
    226226                        linkNode = getSelectedLink();
    227227                        editToolbar.tempHide = false;
    228228
    229                         if ( linkNode ) {
    230                                 editor.dom.setAttribs( linkNode, { 'data-wplink-edit': true } );
    231                         } else {
     229                        if ( ! linkNode ) {
    232230                                removePlaceholders();
    233231                                editor.execCommand( 'mceInsertLink', false, { href: '_wp_link_placeholder' } );
    234232
     
    235233                                linkNode = editor.$( 'a[href="_wp_link_placeholder"]' )[0];
    236234                                editor.nodeChanged();
    237235                        }
     236
     237                        editor.dom.setAttribs( linkNode, { 'data-wplink-edit': true } );
    238238                } );
    239239
    240240                editor.addCommand( 'wp_link_apply', function() {
     
    284284                } );
    285285
    286286                editor.addCommand( 'wp_link_cancel', function() {
     287                        inputInstance.reset();
     288
    287289                        if ( ! editToolbar.tempHide ) {
    288                                 inputInstance.reset();
    289290                                removePlaceholders();
    290291                        }
    291292                } );
     
    583584                                        var url = inputInstance.getURL() || null,
    584585                                                text = inputInstance.getLinkText() || null;
    585586
    586                                         /*
    587                                          * Accessibility note: moving focus back to the editor confuses
    588                                          * screen readers. They will announce again the Editor ARIA role
    589                                          * `application` and the iframe `title` attribute.
    590                                          *
    591                                          * Unfortunately IE looses the selection when the editor iframe
    592                                          * looses focus, so without returning focus to the editor, the code
    593                                          * in the modal will not be able to get the selection, place the caret
    594                                          * at the same location, etc.
    595                                          */
    596                                         if ( tinymce.Env.ie ) {
    597                                                 editor.focus(); // Needed for IE
    598                                         }
     587                                        window.wpLink.open( editor.id, url, text );
    599588
    600589                                        editToolbar.tempHide = true;
    601                                         window.wpLink.open( editor.id, url, text, linkNode );
    602 
    603                                         inputInstance.reset();
     590                                        editToolbar.hide();
    604591                                }
    605592                        }
    606593                } );