diff -r 490d5cc509ed -r cf61fcea0001 wp/wp-includes/js/comment-reply.js --- a/wp/wp-includes/js/comment-reply.js Tue Jun 09 11:14:17 2015 +0000 +++ b/wp/wp-includes/js/comment-reply.js Mon Oct 14 17:39:30 2019 +0200 @@ -1,47 +1,127 @@ +/** + * @summary Handles the addition of the comment form. + * + * @since 2.7.0 + * + * @type {Object} + */ 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'); + /** + * @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 ) + 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 = ''; + /** + * @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); + 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) {} + /* + * 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; }, - I : function(e) { - return document.getElementById(e); + /** + * @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 ); } };