Make WordPress Core

Ticket #29974: 29974.6.patch

File 29974.6.patch, 3.4 KB (added by azaozz, 9 years ago)
  • src/wp-includes/js/comment-reply.js

     
    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;
    3547                        return false;
    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];
    4054
     55                                // Skip form elements that are hidden, disabled, readonly.
     56                                if ( 'hidden' === element.type || element.hasAttribute( 'disabled' ) || element.hasAttribute( 'readonly' ) ) {
     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 ) {}
     85
    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};