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.
64 lines
1.8 KiB
64 lines
1.8 KiB
12 months ago
|
/**
|
||
|
* @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);
|