| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| window.addComment = ( function( window ) { |
| |
| var document = window.document; |
|
|
| |
| var config = { |
| commentReplyClass : 'comment-reply-link', |
| commentReplyTitleId : 'reply-title', |
| cancelReplyId : 'cancel-comment-reply-link', |
| commentFormId : 'commentform', |
| temporaryFormId : 'wp-temp-form-div', |
| parentIdFieldId : 'comment_parent', |
| postIdFieldId : 'comment_post_ID' |
| }; |
|
|
| |
| var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; |
|
|
| |
| var cutsTheMustard = 'querySelector' in document && 'addEventListener' in window; |
|
|
| |
| |
| |
| |
| var supportsDataset = !! document.documentElement.dataset; |
|
|
| |
| var cancelElement; |
|
|
| |
| var commentFormElement; |
|
|
| |
| var respondElement; |
|
|
| |
| var observer; |
|
|
| if ( cutsTheMustard && document.readyState !== 'loading' ) { |
| ready(); |
| } else if ( cutsTheMustard ) { |
| window.addEventListener( 'DOMContentLoaded', ready, false ); |
| } |
|
|
| |
| |
| |
| |
| |
| function ready() { |
| |
| init(); |
|
|
| |
| observeChanges(); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| function init( context ) { |
| if ( ! cutsTheMustard ) { |
| return; |
| } |
|
|
| |
| cancelElement = getElementById( config.cancelReplyId ); |
| commentFormElement = getElementById( config.commentFormId ); |
|
|
| |
| if ( ! cancelElement ) { |
| return; |
| } |
|
|
| cancelElement.addEventListener( 'touchstart', cancelEvent ); |
| cancelElement.addEventListener( 'click', cancelEvent ); |
|
|
| |
| var submitFormHandler = function( e ) { |
| if ( ( e.metaKey || e.ctrlKey ) && e.keyCode === 13 ) { |
| commentFormElement.removeEventListener( 'keydown', submitFormHandler ); |
| e.preventDefault(); |
| |
| commentFormElement.submit.click(); |
| return false; |
| } |
| }; |
|
|
| if ( commentFormElement ) { |
| commentFormElement.addEventListener( 'keydown', submitFormHandler ); |
| } |
|
|
| var links = replyLinks( context ); |
| var element; |
|
|
| for ( var i = 0, l = links.length; i < l; i++ ) { |
| element = links[i]; |
|
|
| element.addEventListener( 'touchstart', clickEvent ); |
| element.addEventListener( 'click', clickEvent ); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| function replyLinks( context ) { |
| var selectorClass = config.commentReplyClass; |
| var allReplyLinks; |
|
|
| |
| if ( ! context || ! context.childNodes ) { |
| context = document; |
| } |
|
|
| if ( document.getElementsByClassName ) { |
| |
| allReplyLinks = context.getElementsByClassName( selectorClass ); |
| } |
| else { |
| |
| allReplyLinks = context.querySelectorAll( '.' + selectorClass ); |
| } |
|
|
| return allReplyLinks; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| function cancelEvent( event ) { |
| var cancelLink = this; |
| var temporaryFormId = config.temporaryFormId; |
| var temporaryElement = getElementById( temporaryFormId ); |
|
|
| if ( ! temporaryElement || ! respondElement ) { |
| |
| return; |
| } |
|
|
| getElementById( config.parentIdFieldId ).value = '0'; |
|
|
| |
| var headingText = temporaryElement.textContent; |
| temporaryElement.parentNode.replaceChild( respondElement, temporaryElement ); |
| cancelLink.style.display = 'none'; |
|
|
| var replyHeadingElement = getElementById( config.commentReplyTitleId ); |
| var replyHeadingTextNode = replyHeadingElement && replyHeadingElement.firstChild; |
| var replyLinkToParent = replyHeadingTextNode && replyHeadingTextNode.nextSibling; |
|
|
| if ( replyHeadingTextNode && replyHeadingTextNode.nodeType === Node.TEXT_NODE && headingText ) { |
| if ( replyLinkToParent && 'A' === replyLinkToParent.nodeName && replyLinkToParent.id !== config.cancelReplyId ) { |
| replyLinkToParent.style.display = ''; |
| } |
|
|
| replyHeadingTextNode.textContent = headingText; |
| } |
|
|
| event.preventDefault(); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| function clickEvent( event ) { |
| var replyNode = getElementById( config.commentReplyTitleId ); |
| var defaultReplyHeading = replyNode && replyNode.firstChild.textContent; |
| var replyLink = this, |
| commId = getDataAttribute( replyLink, 'belowelement' ), |
| parentId = getDataAttribute( replyLink, 'commentid' ), |
| respondId = getDataAttribute( replyLink, 'respondelement' ), |
| postId = getDataAttribute( replyLink, 'postid' ), |
| replyTo = getDataAttribute( replyLink, 'replyto' ) || defaultReplyHeading, |
| follow; |
|
|
| if ( ! commId || ! parentId || ! respondId || ! postId ) { |
| |
| |
| |
| |
| return; |
| } |
|
|
| |
| |
| |
| |
| follow = window.addComment.moveForm( commId, parentId, respondId, postId, replyTo ); |
| if ( false === follow ) { |
| event.preventDefault(); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| function observeChanges() { |
| if ( ! MutationObserver ) { |
| return; |
| } |
|
|
| var observerOptions = { |
| childList: true, |
| subtree: true |
| }; |
|
|
| observer = new MutationObserver( handleChanges ); |
| observer.observe( document.body, observerOptions ); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| function handleChanges( mutationRecords ) { |
| var i = mutationRecords.length; |
|
|
| while ( i-- ) { |
| |
| if ( mutationRecords[ i ].addedNodes.length ) { |
| init(); |
| return; |
| } |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| function getDataAttribute( element, attribute ) { |
| if ( supportsDataset ) { |
| return element.dataset[attribute]; |
| } |
| else { |
| return element.getAttribute( 'data-' + attribute ); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| function getElementById( elementId ) { |
| return document.getElementById( elementId ); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| function moveForm( addBelowId, commentId, respondId, postId, replyTo ) { |
| |
| var addBelowElement = getElementById( addBelowId ); |
| respondElement = getElementById( respondId ); |
|
|
| |
| var parentIdField = getElementById( config.parentIdFieldId ); |
| var postIdField = getElementById( config.postIdFieldId ); |
| var element, cssHidden, style; |
|
|
| var replyHeading = getElementById( config.commentReplyTitleId ); |
| var replyHeadingTextNode = replyHeading && replyHeading.firstChild; |
| var replyLinkToParent = replyHeadingTextNode && replyHeadingTextNode.nextSibling; |
|
|
| if ( ! addBelowElement || ! respondElement || ! parentIdField ) { |
| |
| return; |
| } |
|
|
| if ( 'undefined' === typeof replyTo ) { |
| replyTo = replyHeadingTextNode && replyHeadingTextNode.textContent; |
| } |
|
|
| addPlaceHolder( respondElement ); |
|
|
| |
| if ( postId && postIdField ) { |
| postIdField.value = postId; |
| } |
|
|
| parentIdField.value = commentId; |
|
|
| cancelElement.style.display = ''; |
| addBelowElement.parentNode.insertBefore( respondElement, addBelowElement.nextSibling ); |
|
|
| if ( replyHeadingTextNode && replyHeadingTextNode.nodeType === Node.TEXT_NODE ) { |
| if ( replyLinkToParent && 'A' === replyLinkToParent.nodeName && replyLinkToParent.id !== config.cancelReplyId ) { |
| replyLinkToParent.style.display = 'none'; |
| } |
|
|
| replyHeadingTextNode.textContent = replyTo; |
| } |
|
|
| |
| |
| |
| |
| cancelElement.onclick = function() { |
| return false; |
| }; |
|
|
| |
| try { |
| for ( var i = 0; i < commentFormElement.elements.length; i++ ) { |
| element = commentFormElement.elements[i]; |
| cssHidden = false; |
|
|
| |
| if ( 'getComputedStyle' in window ) { |
| |
| style = window.getComputedStyle( element ); |
| } else if ( document.documentElement.currentStyle ) { |
| |
| style = element.currentStyle; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| if ( ( element.offsetWidth <= 0 && element.offsetHeight <= 0 ) || style.visibility === 'hidden' ) { |
| cssHidden = true; |
| } |
|
|
| |
| if ( 'hidden' === element.type || element.disabled || cssHidden ) { |
| continue; |
| } |
|
|
| element.focus(); |
| |
| break; |
| } |
| } |
| catch(e) { |
|
|
| } |
|
|
| |
| |
| |
| |
| return false; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| function addPlaceHolder( respondElement ) { |
| var temporaryFormId = config.temporaryFormId; |
| var temporaryElement = getElementById( temporaryFormId ); |
| var replyElement = getElementById( config.commentReplyTitleId ); |
| var initialHeadingText = replyElement ? replyElement.firstChild.textContent : ''; |
|
|
| if ( temporaryElement ) { |
| |
| return; |
| } |
|
|
| temporaryElement = document.createElement( 'div' ); |
| temporaryElement.id = temporaryFormId; |
| temporaryElement.style.display = 'none'; |
| temporaryElement.textContent = initialHeadingText; |
| respondElement.parentNode.insertBefore( temporaryElement, respondElement ); |
| } |
|
|
| return { |
| init: init, |
| moveForm: moveForm |
| }; |
| })( window ); |
|
|