You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.4 KiB
127 lines
3.4 KiB
/** |
|
* @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 ); |
|
} |
|
};
|
|
|