export default class ReplyToComment { constructor(cfg = {}) { if (!cfg.form || cfg.form.className !== 'comments__foot') { return false; } if (!cfg.links || cfg.links.length === 0) { return false; } this.form = cfg.form; this.backupForm = cfg.form.querySelector('#respond').cloneNode(true); this.links = Array.prototype.slice.call(cfg.links); this.links.forEach((link) => { link.addEventListener('click', e => this.handleLinkClick(e, link)); }); } insertForm(container, id, author) { const form = this.backupForm.cloneNode(true); const cancel = form.querySelector('#cancel-comment-reply-link'); form.querySelector('.comment-respond__title-text').innerHTML = `Reply to ${author}`; form.querySelector('#submit').value = 'Post reply'; form.querySelector('#comment_parent').value = id; cancel.style.display = 'inline-block'; cancel.addEventListener('click', e => this.handleCancelClick(e, container)); container.appendChild(form); } handleCancelClick(e, container) { e.preventDefault(); container.parentNode.querySelector('.comment__reply').classList.remove('is-hidden'); while (container.firstChild) { container.removeChild(container.firstChild); } this.form.appendChild(this.backupForm); } handleLinkClick(e, link) { e.preventDefault(); link.classList.add('is-hidden'); while (this.form.firstChild) { this.form.removeChild(this.form.firstChild); } const container = link.parentNode.querySelector('.comment__inline-reply'); const { commentId, commentAuthor } = link.dataset; this.insertForm(container, commentId, commentAuthor); } }