123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /**
- * @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);
|