search.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /**
  2. * DO NOT EDIT THIS FILE.
  3. * See the following change record for more information,
  4. * https://www.drupal.org/node/2815083
  5. * @preserve
  6. **/
  7. (function (Drupal) {
  8. var searchWideButtonSelector = '[data-drupal-selector="block-search-wide-button"]';
  9. var searchWideButton = document.querySelector(searchWideButtonSelector);
  10. var searchWideWrapperSelector = '[data-drupal-selector="block-search-wide-wrapper"]';
  11. var searchWideWrapper = document.querySelector(searchWideWrapperSelector);
  12. function searchIsVisible() {
  13. return searchWideWrapper.classList.contains('is-active');
  14. }
  15. Drupal.olivero.searchIsVisible = searchIsVisible;
  16. function watchForClickOut(e) {
  17. var clickInSearchArea = e.target.matches("\n ".concat(searchWideWrapperSelector, ",\n ").concat(searchWideWrapperSelector, " *,\n ").concat(searchWideButtonSelector, ",\n ").concat(searchWideButtonSelector, " *\n "));
  18. if (!clickInSearchArea && searchIsVisible()) {
  19. toggleSearchVisibility(false);
  20. }
  21. }
  22. function watchForFocusOut(e) {
  23. if (e.relatedTarget) {
  24. var inSearchBar = e.relatedTarget.matches("".concat(searchWideWrapperSelector, ", ").concat(searchWideWrapperSelector, " *"));
  25. var inSearchButton = e.relatedTarget.matches("".concat(searchWideButtonSelector, ", ").concat(searchWideButtonSelector, " *"));
  26. if (!inSearchBar && !inSearchButton) {
  27. toggleSearchVisibility(false);
  28. }
  29. }
  30. }
  31. function watchForEscapeOut(e) {
  32. if (e.key === 'Escape' || e.key === 'Esc') {
  33. toggleSearchVisibility(false);
  34. }
  35. }
  36. function handleFocus() {
  37. if (searchIsVisible()) {
  38. searchWideWrapper.querySelector('input[type="search"]').focus();
  39. } else if (searchWideWrapper.contains(document.activeElement)) {
  40. searchWideButton.focus();
  41. }
  42. }
  43. function toggleSearchVisibility(visibility) {
  44. searchWideButton.setAttribute('aria-expanded', visibility === true);
  45. searchWideWrapper.addEventListener('transitionend', handleFocus, {
  46. once: true
  47. });
  48. if (visibility === true) {
  49. Drupal.olivero.closeAllSubNav();
  50. searchWideWrapper.classList.add('is-active');
  51. document.addEventListener('click', watchForClickOut, {
  52. capture: true
  53. });
  54. document.addEventListener('focusout', watchForFocusOut, {
  55. capture: true
  56. });
  57. document.addEventListener('keyup', watchForEscapeOut, {
  58. capture: true
  59. });
  60. } else {
  61. searchWideWrapper.classList.remove('is-active');
  62. document.removeEventListener('click', watchForClickOut, {
  63. capture: true
  64. });
  65. document.removeEventListener('focusout', watchForFocusOut, {
  66. capture: true
  67. });
  68. document.removeEventListener('keyup', watchForEscapeOut, {
  69. capture: true
  70. });
  71. }
  72. }
  73. Drupal.olivero.toggleSearchVisibility = toggleSearchVisibility;
  74. Drupal.behaviors.searchWide = {
  75. attach: function attach(context) {
  76. var searchWideButtonEl = once('search-wide', searchWideButtonSelector, context).shift();
  77. if (searchWideButtonEl) {
  78. searchWideButtonEl.setAttribute('aria-expanded', searchIsVisible());
  79. searchWideButtonEl.addEventListener('click', function () {
  80. toggleSearchVisibility(!searchIsVisible());
  81. });
  82. }
  83. }
  84. };
  85. })(Drupal);