/** * @summary Handles the addition of the comment form. * * @since 2.7.0 * * @type {Object} */ var addComment = { /** * @summary Retrieves the elements corresponding to the given IDs. * * @since 2.7.0 * * @param {string} commId The comment ID. * @param {string} parentId The parent ID. * @param {string} respondId The respond ID. * @param {string} postId The post ID. * @returns {boolean} Always returns false. */ 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 || ! commentForm ) { return; } t.respondId = respondId; postId = postId || false; 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 ); } comm.parentNode.insertBefore( respond, comm.nextSibling ); if ( post && postId ) { post.value = postId; } parent.value = parentId; cancel.style.display = ''; /** * @summary Puts back the comment, hides the cancel button and removes the onclick event. * * @returns {boolean} Always returns false. */ cancel.onclick = function() { var t = addComment, temp = t.I( 'wp-temp-form-div' ), respond = t.I( t.respondId ); if ( ! temp || ! respond ) { return; } t.I( 'comment_parent' ).value = '0'; temp.parentNode.insertBefore( respond, temp ); temp.parentNode.removeChild( temp ); this.style.display = 'none'; this.onclick = null; return false; }; /* * Sets initial focus to the first form focusable element. * Uses try/catch 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; }, /** * @summary Returns the object corresponding to the given ID. * * @since 2.7.0 * * @param {string} id The ID. * @returns {Element} The element belonging to the ID. */ I: function( id ) { return document.getElementById( id ); } };