WordPress.org

Make WordPress Core

Changeset 35593


Ignore:
Timestamp:
11/10/15 00:43:01 (2 years ago)
Author:
afercia
Message:

Comments: in comment_form() when replying to a comment ensure to set focus on the first focusable form element, regardless of what that form element is.

Props azaozz.
See #29974.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/js/comment-reply.js

    r26195 r35593  
    11var addComment = { 
    2     moveForm : function(commId, parentId, respondId, postId) { 
    3         var t = this, div, comm = t.I(commId), respond = t.I(respondId), cancel = t.I('cancel-comment-reply-link'), parent = t.I('comment_parent'), post = t.I('comment_post_ID'); 
     2    moveForm: function( commId, parentId, respondId, postId ) { 
     3        var div, element, node, style, cssHidden, 
     4            t           = this, 
     5            comm        = t.I( commId ), 
     6            respond     = t.I( respondId ), 
     7            cancel      = t.I( 'cancel-comment-reply-link' ), 
     8            parent      = t.I( 'comment_parent' ), 
     9            post        = t.I( 'comment_post_ID' ), 
     10            commentForm = respond.getElementsByTagName( 'form' )[0]; 
    411 
    5         if ( ! comm || ! respond || ! cancel || ! parent ) 
     12        if ( ! comm || ! respond || ! cancel || ! parent || ! commentForm ) { 
    613            return; 
     14        } 
    715 
    816        t.respondId = respondId; 
    917        postId = postId || false; 
    1018 
    11         if ( ! t.I('wp-temp-form-div') ) { 
    12             div = document.createElement('div'); 
     19        if ( ! t.I( 'wp-temp-form-div' ) ) { 
     20            div = document.createElement( 'div' ); 
    1321            div.id = 'wp-temp-form-div'; 
    1422            div.style.display = 'none'; 
    15             respond.parentNode.insertBefore(div, respond); 
     23            respond.parentNode.insertBefore( div, respond ); 
    1624        } 
    1725 
    18         comm.parentNode.insertBefore(respond, comm.nextSibling); 
    19         if ( post && postId ) 
     26        comm.parentNode.insertBefore( respond, comm.nextSibling ); 
     27        if ( post && postId ) { 
    2028            post.value = postId; 
     29        } 
    2130        parent.value = parentId; 
    2231        cancel.style.display = ''; 
    2332 
    2433        cancel.onclick = function() { 
    25             var t = addComment, temp = t.I('wp-temp-form-div'), respond = t.I(t.respondId); 
     34            var t       = addComment, 
     35                temp    = t.I( 'wp-temp-form-div' ), 
     36                respond = t.I( t.respondId ); 
    2637 
    27             if ( ! temp || ! respond ) 
     38            if ( ! temp || ! respond ) { 
    2839                return; 
     40            } 
    2941 
    30             t.I('comment_parent').value = '0'; 
    31             temp.parentNode.insertBefore(respond, temp); 
    32             temp.parentNode.removeChild(temp); 
     42            t.I( 'comment_parent' ).value = '0'; 
     43            temp.parentNode.insertBefore( respond, temp ); 
     44            temp.parentNode.removeChild( temp ); 
    3345            this.style.display = 'none'; 
    3446            this.onclick = null; 
     
    3648        }; 
    3749 
    38         try { t.I('comment').focus(); } 
    39         catch(e) {} 
     50        // Set initial focus to the first form focusable element. 
     51        try { 
     52            for ( var i = 0; i < commentForm.elements.length; i++ ) { 
     53                element = commentForm.elements[i]; 
     54 
     55                // Skip form elements that are hidden or disabled. 
     56                if ( 'hidden' === element.type || element.hasAttribute( 'disabled' ) ) { 
     57                    continue; 
     58                } 
     59 
     60                if ( 'getComputedStyle' in window ) { 
     61                    node = element; 
     62                    cssHidden = false; 
     63 
     64                    while( node.parentNode ) { 
     65                        style = window.getComputedStyle( node ); 
     66 
     67                        if ( style.display === 'none' || style.visibility === 'hidden' ) { 
     68                            cssHidden = true; 
     69                            break; 
     70                        } 
     71 
     72                        node = node.parentNode; 
     73                    } 
     74 
     75                    if ( cssHidden ) { 
     76                        continue; 
     77                    } 
     78                } 
     79 
     80                element.focus(); 
     81                // Stop after the first focusable element. 
     82                break; 
     83            } 
     84        } catch( er ) {} 
    4085 
    4186        return false; 
    4287    }, 
    4388 
    44     I : function(e) { 
    45         return document.getElementById(e); 
     89    I: function( id ) { 
     90        return document.getElementById( id ); 
    4691    } 
    4792}; 
Note: See TracChangeset for help on using the changeset viewer.