WordPress.org

Make WordPress Core

Ticket #46260: 46260.diff

File 46260.diff, 4.5 KB (added by pento, 6 months ago)
  • src/js/_enqueues/lib/comment-reply.js

    diff --git a/src/js/_enqueues/lib/comment-reply.js b/src/js/_enqueues/lib/comment-reply.js
    index 71f997328e..fb38dfe9cb 100644
    a b window.addComment = ( function( window ) { 
    6161                        return;
    6262                }
    6363
    64                 // Get required elements.
    65                 cancelElement = getElementById( config.cancelReplyId );
    66                 commentFormElement = getElementById( config.commentFormId );
    67 
    68                 // No cancel element, no replies.
    69                 if ( ! cancelElement ) {
    70                         return;
    71                 }
    72 
    73                 cancelElement.addEventListener( 'touchstart', cancelEvent );
    74                 cancelElement.addEventListener( 'click',      cancelEvent );
    75 
    76                 var links = replyLinks( context );
    77                 var element;
    78 
    79                 for ( var i = 0, l = links.length; i < l; i++ ) {
    80                         element = links[i];
    81 
    82                         element.addEventListener( 'touchstart', clickEvent );
    83                         element.addEventListener( 'click',      clickEvent );
    84                 }
    85         }
    86 
    87         /**
    88          * Return all links classed .comment-reply-link.
    89          *
    90          * @since 5.1.0
    91          *
    92          * @param {HTMLElement} context The parent DOM element to search for links.
    93          *
    94          * @return {HTMLCollection|NodeList|Array}
    95          */
    96         function replyLinks( context ) {
    97                 var selectorClass = config.commentReplyClass;
    98                 var allReplyLinks;
    99 
    10064                // childNodes is a handy check to ensure the context is a HTMLElement.
    10165                if ( ! context || ! context.childNodes ) {
    10266                        context = document;
    10367                }
    10468
    105                 if ( document.getElementsByClassName ) {
    106                         // Fastest.
    107                         allReplyLinks = context.getElementsByClassName( selectorClass );
    108                 }
    109                 else {
    110                         // Fast.
    111                         allReplyLinks = context.querySelectorAll( '.' + selectorClass );
    112                 }
     69                document.addEventListener( 'touchstart', cancelEvent );
     70                document.addEventListener( 'click',      cancelEvent );
    11371
    114                 return allReplyLinks;
     72                context.addEventListener( 'touchstart', clickEvent );
     73                context.addEventListener( 'click',      clickEvent );
    11574        }
    11675
    11776        /**
    window.addComment = ( function( window ) { 
    12281         * @param {Event} event The calling event.
    12382         */
    12483        function cancelEvent( event ) {
    125                 var cancelLink = this;
     84                if ( ! matches( event.target, '#' + config.cancelReplyId ) ) {
     85                        return;
     86                }
     87
     88                var cancelLink = event.target;
    12689                var temporaryFormId  = config.temporaryFormId;
    12790                var temporaryElement = getElementById( temporaryFormId );
    12891
    window.addComment = ( function( window ) { 
    147110         * @param {Event} event The calling event.
    148111         */
    149112        function clickEvent( event ) {
    150                 var replyLink = this,
     113                if ( ! matches( event.target, '.' + config.commentReplyClass ) ) {
     114                        return;
     115                }
     116
     117                var replyLink = event.target,
    151118                        commId    = getDataAttribute( replyLink, 'belowelement'),
    152119                        parentId  = getDataAttribute( replyLink, 'commentid' ),
    153120                        respondId = getDataAttribute( replyLink, 'respondelement'),
    window.addComment = ( function( window ) { 
    198165                return document.getElementById( elementId );
    199166        }
    200167
     168        /**
     169         * Checks if the element matches the selector.
     170         *
     171         * Local alias/polyfill for Element.prototype.matches.
     172         *
     173         * @since 5.1.0
     174         *
     175         * @param {HTMLElement} element  The element to be checked.
     176         * @param {String}      selector The selector to match.
     177         *
     178         * @return {Boolean} Whether or not the element matched the selector.
     179         */
     180        function matches( element, selector ) {
     181                if ( ! element ) {
     182                        return false;
     183                }
     184
     185                var matches = element.matches ||
     186                        element.matchesSelector ||
     187                        element.mozMatchesSelector ||
     188                        element.msMatchesSelector ||
     189                        element.oMatchesSelector ||
     190                        element.webkitMatchesSelector;
     191
     192                if ( matches ) {
     193                        return matches.call( element, selector );
     194                }
     195
     196                return false;
     197        }
     198
    201199        /**
    202200         * Moves the reply form from its current position to the reply location.
    203201         *
    window.addComment = ( function( window ) { 
    213211        function moveForm( addBelowId, commentId, respondId, postId ) {
    214212                // Get elements based on their IDs.
    215213                var addBelowElement = getElementById( addBelowId );
    216                 respondElement  = getElementById( respondId );
    217214
    218215                // Get the hidden fields.
    219216                var parentIdField   = getElementById( config.parentIdFieldId );
    220217                var postIdField     = getElementById( config.postIdFieldId );
    221218                var element, cssHidden, style;
    222219
    223                 if ( ! addBelowElement || ! respondElement || ! parentIdField ) {
     220                respondElement     = getElementById( respondId );
     221                cancelElement      = getElementById( config.cancelReplyId );
     222                commentFormElement = getElementById( config.commentFormId );
     223
     224                if ( ! addBelowElement || ! respondElement || ! parentIdField || ! cancelElement || ! commentFormElement ) {
    224225                        // Missing key elements, fail.
    225226                        return;
    226227                }