clone of olivero for island lives
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.
 
 
 
 
 

63 lines
1.8 KiB

/**
* @file
* Customization of comments.
*/
((Drupal, once) => {
/**
* Initialize show/hide button for the comments.
*
* @param {Element} comments
* The comment wrapper element.
*/
function init(comments) {
comments
.querySelectorAll('[data-drupal-selector="comment"]')
.forEach((comment) => {
if (
comment.nextElementSibling != null &&
comment.nextElementSibling.matches('.indented')
) {
comment.classList.add('has-children');
}
});
comments.querySelectorAll('.indented').forEach((commentGroup) => {
const showHideWrapper = document.createElement('div');
showHideWrapper.setAttribute('class', 'show-hide-wrapper');
const toggleCommentsBtn = document.createElement('button');
toggleCommentsBtn.setAttribute('type', 'button');
toggleCommentsBtn.setAttribute('aria-expanded', 'true');
toggleCommentsBtn.setAttribute('class', 'show-hide-btn');
toggleCommentsBtn.innerText = Drupal.t('Replies');
commentGroup.parentNode.insertBefore(showHideWrapper, commentGroup);
showHideWrapper.appendChild(toggleCommentsBtn);
toggleCommentsBtn.addEventListener('click', (e) => {
commentGroup.classList.toggle('hidden');
e.currentTarget.setAttribute(
'aria-expanded',
commentGroup.classList.contains('hidden') ? 'false' : 'true',
);
});
});
}
/**
* Attaches the comment behavior to comments.
*
* @type {Drupal~behavior}
*
* @prop {Drupal~behaviorAttach} attach
* Attaches the show/hide behavior for indented comments.
*/
Drupal.behaviors.comments = {
attach(context) {
once('comments', '[data-drupal-selector="comments"]', context).forEach(
init,
);
},
};
})(Drupal, once);