]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/js/comment-reply.js
WordPress 4.4
[autoinstalls/wordpress.git] / wp-includes / js / comment-reply.js
index 2f2e3b34e4dd0567ad4d5a538f9752ae2ead73dc..184726d35e6a1487b779762f0aad968a59854784 100644 (file)
@@ -1,47 +1,96 @@
 var addComment = {
-       moveForm : function(commId, parentId, respondId, postId) {
-               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');
+       moveForm: function( commId, parentId, respondId, postId ) {
+               var div, element, style, cssHidden,
+                       t           = this,
+                       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' ),
+                       commentForm = respond.getElementsByTagName( 'form' )[0];
 
-               if ( ! comm || ! respond || ! cancel || ! parent )
+               if ( ! comm || ! respond || ! cancel || ! parent || ! commentForm ) {
                        return;
+               }
 
                t.respondId = respondId;
                postId = postId || false;
 
-               if ( ! t.I('wp-temp-form-div') ) {
-                       div = document.createElement('div');
+               if ( ! t.I( 'wp-temp-form-div' ) ) {
+                       div = document.createElement( 'div' );
                        div.id = 'wp-temp-form-div';
                        div.style.display = 'none';
-                       respond.parentNode.insertBefore(div, respond);
+                       respond.parentNode.insertBefore( div, respond );
                }
 
-               comm.parentNode.insertBefore(respond, comm.nextSibling);
-               if ( post && postId )
+               comm.parentNode.insertBefore( respond, comm.nextSibling );
+               if ( post && postId ) {
                        post.value = postId;
+               }
                parent.value = parentId;
                cancel.style.display = '';
 
                cancel.onclick = function() {
-                       var t = addComment, temp = t.I('wp-temp-form-div'), respond = t.I(t.respondId);
+                       var t       = addComment,
+                               temp    = t.I( 'wp-temp-form-div' ),
+                               respond = t.I( t.respondId );
 
-                       if ( ! temp || ! respond )
+                       if ( ! temp || ! respond ) {
                                return;
+                       }
 
-                       t.I('comment_parent').value = '0';
-                       temp.parentNode.insertBefore(respond, temp);
-                       temp.parentNode.removeChild(temp);
+                       t.I( 'comment_parent' ).value = '0';
+                       temp.parentNode.insertBefore( respond, temp );
+                       temp.parentNode.removeChild( temp );
                        this.style.display = 'none';
                        this.onclick = null;
                        return false;
                };
 
-               try { t.I('comment').focus(); }
-               catch(e) {}
+               /*
+                * Set initial focus to the first form focusable element.
+                * Try/catch used just to avoid errors in IE 7- which return visibility
+                * 'inherit' when the visibility value is inherited from an ancestor.
+                */
+               try {
+                       for ( var i = 0; i < commentForm.elements.length; i++ ) {
+                               element = commentForm.elements[i];
+                               cssHidden = false;
+
+                               // Modern browsers.
+                               if ( 'getComputedStyle' in window ) {
+                                       style = window.getComputedStyle( element );
+                               // IE 8.
+                               } else if ( document.documentElement.currentStyle ) {
+                                       style = element.currentStyle;
+                               }
+
+                               /*
+                                * For display none, do the same thing jQuery does. For visibility,
+                                * check the element computed style since browsers are already doing
+                                * the job for us. In fact, the visibility computed style is the actual
+                                * computed value and already takes into account the element ancestors.
+                                */
+                               if ( ( element.offsetWidth <= 0 && element.offsetHeight <= 0 ) || style.visibility === 'hidden' ) {
+                                       cssHidden = true;
+                               }
+
+                               // Skip form elements that are hidden or disabled.
+                               if ( 'hidden' === element.type || element.disabled || cssHidden ) {
+                                       continue;
+                               }
+
+                               element.focus();
+                               // Stop after the first focusable element.
+                               break;
+                       }
+
+               } catch( er ) {}
 
                return false;
        },
 
-       I : function(e) {
-               return document.getElementById(e);
+       I: function( id ) {
+               return document.getElementById( id );
        }
 };