PageSourceSearch

https://iblce.org/wp-content/themes/prosperity/assets/js/public/prosperity.js?ver=2.2.5

js iblce.org collected 2026-10-01 10:38:10 UTC 12,683 bytes, 401 lines download raw bytes

1'use strict';
2
3(function () {
4  // Initiate the menus when the DOM loads.
5  function initNavigation() {
6    if (!document.documentElement.classList) {
7      return;
8    }
9
10    var siteMenus = document.querySelectorAll('.site-menu');
11
12    if (!siteMenus.length) {
13      return;
14    }
15
16    for (var i = 0; i < siteMenus.length; i++) {
17      setToggleSubmenuOnFocus(siteMenus[i]);
18      setToggleSubmenuOnTouch(siteMenus[i]);
19    }
20
21    createMobileMenu();
22  }
23  /**
24   * Created a mobile menu based on the primary menu.
25   */
26
27  function createMobileMenu() {
28    var siteHeader = document.getElementById('masthead');
29    var mobileMenuContainer = document.getElementById('mobile-navigation');
30    var headerSearchForm = siteHeader.querySelector('.search-form');
31    var headerMenus = siteHeader.querySelectorAll('.menu');
32    var headerSocialMenu = siteHeader.querySelector('.social-list');
33    var mobileContent = document.createDocumentFragment();
34
35    if (null !== headerSearchForm) {
36      mobileContent.appendChild(headerSearchForm.cloneNode(true));
37    }
38
39    if (headerMenus.length) {
40      for (var i = 0; i < headerMenus.length; i++) {
41        var menu = headerMenus[i].cloneNode(true);
42        menu.removeAttribute('id');
43        mobileContent.appendChild(menu);
44      }
45    } // Copy social menu to the mobile navigation.
46
47    if (null !== headerSocialMenu) {
48      var socialMenuList = headerSocialMenu.getElementsByTagName('ul')[0];
49
50      if ('undefined' !== typeof socialMenuList) {
51        socialMenuList = socialMenuList.cloneNode(true);
52        socialMenuList.removeAttribute('id');
53        socialMenuList.classList.add('social-list');
54        mobileContent.appendChild(socialMenuList);
55      }
56    } // Add dropdown toggle that displays child menu items.
57
58    var parentMenuItems = mobileContent.querySelectorAll(
59      '.menu-item-has-children'
60    );
61
62    if (parentMenuItems.length) {
63      for (var _i = 0; _i < parentMenuItems.length; _i++) {
64        var buttonScreenReaderText = document.createElement('span');
65        buttonScreenReaderText.className = 'screen-reader-text';
66        buttonScreenReaderText.appendChild(
67          document.createTextNode(screenReaderText.expand)
68        );
69        var dropdownToggle = document.createElement('button');
70        dropdownToggle.className = 'dropdown-toggle clean-button has-icon';
71        dropdownToggle.setAttribute('aria-expanded', false);
72        dropdownToggle.appendChild(buttonScreenReaderText);
73
74        parentMenuItems[_i].appendChild(dropdownToggle);
75
76        parentMenuItems[_i].setAttribute('aria-haspopup', true);
77      }
78    } // Add a search form and list items to the mobile container.
79
80    mobileMenuContainer.appendChild(mobileContent); // Remove ID attributes from the list items to avoid repetition.
81
82    var mobileMenuItems = mobileMenuContainer.getElementsByTagName('li');
83    var mobileMenuItemsCount = mobileMenuItems.length;
84
85    if (mobileMenuItemsCount) {
86      for (var itemIndex = 0; itemIndex < mobileMenuItemsCount; itemIndex++) {
87        mobileMenuItems[itemIndex].removeAttribute('id');
88      }
89    } // Toggle buttons and submenu items with active children menu items.
90
91    var activeToggleButtons = mobileMenuContainer.querySelectorAll(
92      '.current-menu-ancestor > button'
93    );
94    var activeToggleSubMenus = mobileMenuContainer.querySelectorAll(
95      '.current-menu-ancestor > .sub-menu'
96    );
97    var activeToggleIndecators = mobileMenuContainer.querySelectorAll(
98      '.current-menu-ancestor > .arrow-icon'
99    );
100
101    if (activeToggleButtons.length) {
102      for (var _i2 = 0; _i2 < activeToggleButtons.length; _i2++) {
103        activeToggleButtons[_i2].classList.add('toggled-on');
104
105        activeToggleButtons[_i2].setAttribute('aria-expanded', true);
106      }
107    }
108
109    if (activeToggleSubMenus.length) {
110      for (var _i3 = 0; _i3 < activeToggleSubMenus.length; _i3++) {
111        activeToggleSubMenus[_i3].classList.add('toggled-on');
112      }
113    }
114
115    if (activeToggleIndecators.length) {
116      for (var _i4 = 0; _i4 < activeToggleIndecators.length; _i4++) {
117        activeToggleIndecators[_i4].classList.add('toggled-on');
118      }
119    }
120
121    var dropdownToggleButtons = mobileMenuContainer.querySelectorAll(
122      'button.dropdown-toggle'
123    );
124
125    if (dropdownToggleButtons.length) {
126      var dropdownToggleEvent = function dropdownToggleEvent(e) {
127        e.preventDefault();
128        var screenReader = e.target.querySelector('.screen-reader-text');
129        var arrowIconElement =
130          e.target.parentElement.querySelector('.arrow-icon');
131        arrowIconElement.classList.toggle('toggled-on');
132
133        if (-1 !== e.target.className.indexOf('toggled-on')) {
134          e.target.setAttribute('aria-expanded', false);
135
136          if (null !== screenReader) {
137            screenReader.textContent = screenReaderText.collapse;
138          }
139        } else {
140          e.target.setAttribute('aria-expanded', true);
141
142          if (null !== screenReader) {
143            screenReader.textContent = screenReaderText.expand;
144          }
145        }
146
147        e.target.classList.toggle('toggled-on');
148        var parentItem = e.target.parentNode;
149
150        for (var _i5 = 0; _i5 < parentItem.childNodes.length; _i5++) {
151          if ('UL' === parentItem.childNodes[_i5].nodeName) {
152            parentItem.childNodes[_i5].classList.toggle('toggled-on');
153          }
154        }
155      };
156
157      for (var _i6 = 0; _i6 < dropdownToggleButtons.length; _i6++) {
158        dropdownToggleButtons[_i6].addEventListener(
159          'click',
160          dropdownToggleEvent,
161          false
162        );
163      }
164    }
165  }
166  /**
167   * Toggle `focus` class to allow sub-menu access on focus and blur.
168   *
169   * @param {Object} container
170   */
171
172  function setToggleSubmenuOnFocus(container) {
173    // Get the first ul element insite the menu container.
174    var primaryMenu = container.getElementsByTagName('ul')[0]; // Get all the link elements within the menu.
175
176    var menuLinks = primaryMenu.getElementsByTagName('a');
177    var i, focusFn;
177 // Sets or removes .focus class on an element.
178
179    focusFn = function focusFn() {
180      var self = this; // Move up through the ancestors of the current link until we hit .nav-menu.
181
182      while (
183        !self.classList.contains('site-menu') &&
184        'nav' !== self.tagName.toLowerCase()
185      ) {
186        // On li elements toggle the class .focus.
187        if ('li' === self.tagName.toLowerCase()) {
188          if (self.classList.contains('focus')) {
189            self.classList.remove('focus');
190          } else {
191            self.classList.add('focus');
192          }
193        }
194
195        self = self.parentElement;
196      }
197    }; // Each time a menu link is focused or blurred, toggle focus.
198
199    for (i = 0; i < menuLinks.length; i++) {
200      menuLinks[i].addEventListener('focus', focusFn, false);
201      menuLinks[i].addEventListener('blur', focusFn, false);
202    }
203  }
204  /**
205   * Toggle `focus` class to allow sub-menu access on touch screens.
206   *
207   * @param {Object} container
208   */
209
210  function setToggleSubmenuOnTouch(container) {
211    var touchStartFn,
212      touchOutsideFn,
213      removeFocusFn,
214      i,
215      parentLink = container.querySelectorAll(
216        '.menu-item-has-children > a, .page_item_has_children > a'
217      );
218
219    removeFocusFn = function removeFocusFn() {
220      var focusedElements = container.querySelectorAll('li.focus');
221      var i;
222
223      for (i = 0; i < focusedElements.length; ++i) {
224        focusedElements[i].classList.remove('focus');
225      }
226    };
227
228    touchStartFn = function touchStartFn(e) {
229      var menuItem = this.parentNode,
230        i;
231
232      if (!menuItem.classList.contains('focus')) {
233        e.preventDefault();
234
235        for (i = 0; i < menuItem.parentNode.children.length; ++i) {
236          if (menuItem === menuItem.parentNode.children[i]) {
237            continue;
238          }
239
240          menuItem.parentNode.children[i].classList.remove('focus');
241        }
242
243        if (!container.classList.contains('is-touched')) {
244          container.classList.add('is-touched');
245        }
246
247        menuItem.classList.add('focus');
248      } else {
249        menuItem.classList.remove('focus');
250      }
251    };
252
253    touchOutsideFn = function touchOutsideFn(e) {
254      var isTochedMenu = container.classList.contains('is-touched');
255
256      if (!isTochedMenu) {
257        return;
258      }
259
260      var elementParent = e.target.parentNode;
261
262      if (
263        elementParent &&
264        !elementParent.classList.contains('menu-item') &&
265        isTochedMenu
266      ) {
267        removeFocusFn();
268      }
269    };
270
271    document.addEventListener('touchstart', touchOutsideFn, false);
272
273    for (i = 0; i < parentLink.length; ++i) {
274      parentLink[i].addEventListener('touchstart', touchStartFn, false);
275    }
276  }
277
278  if ('loading' === document.readyState) {
279    // The DOM has not yet been loaded.
280    document.addEventListener('DOMContentLoaded', initNavigation);
281  } else {
282    // The DOM has already been loaded.
283    initNavigation();
284  }
285})();
286/*
287 Handles additional functionalities of the theme.
288*/
289
290(function () {
291  var htmlRTL =
292    'rtl' === document.documentElement.getAttribute('dir') ? true : false;
293  var prosperityTheme = {
294    // Run on ready.
295    onReady: function onReady() {
296      this.setToggleSidebar();
297      this.skipLinkFocusFix();
298    },
299    // Set up a mobile toggle sidebar.
300    setToggleSidebar: function setToggleSidebar() {
301      var pageContainer = document.getElementById('page');
302
303      if (!pageContainer) {
304        return;
305      }
306
307      var toggleSection = document.getElementById('toggle-sidebar');
308      var toggleButton = document.getElementById('mobile-menu-toggle');
309      var closeBuutton = document.getElementById('close-toggle-sidebar');
310      toggleSection.style.display = 'block';
311      var toggleSectionWidth = toggleSection.offsetWidth;
312      toggleSection.style.removeProperty('display');
313
314      var bodyAction = function bodyAction(e) {
315        if (
316          !toggleSection.contains(e.target) &&
317          e.target.nodeName !== 'BUTTON'
318        ) {
319          document.body.classList.toggle('active-toggle-sidebar');
320          closeToggleSection();
321        }
322      };
323
324      var closeToggleSection = function closeToggleSection() {
325        // Move a content area to a regular position.
326        if (htmlRTL) {
327          pageContainer.style.removeProperty('left');
328        } else {
329          pageContainer.style.removeProperty('right');
330        } // Update aria attributes.
331
332        toggleSection.setAttribute('aria-hidden', true);
333        toggleButton.setAttribute('aria-expanded', false); // Detect all clicks on the document
334
335        document.body.removeEventListener('click', bodyAction, false);
336      };
337
338      var showToggleSection = function showToggleSection() {
339        // Move a content area to the side.
340        if (htmlRTL) {
341          pageContainer.style.left = toggleSectionWidth + 'px';
342        } else {
343          pageContainer.style.right = toggleSectionWidth + 'px';
344        } // Update aria attributes.
345
346        toggleSection.setAttribute('aria-hidden', false);
347        toggleButton.setAttribute('aria-expanded', true); // Detect all clicks on the document
348
349        document.body.addEventListener('click', bodyAction, false);
350      };
351
352      var buttonAction = function buttonAction() {
353        document.body.classList.toggle('active-toggle-sidebar');
354
355        if (-1 !== document.body.className.indexOf('active-toggle-sidebar')) {
356          showToggleSection();
357        } else {
358          closeToggleSection();
359        }
360      };
361
362      toggleButton.addEventListener('click', buttonAction, false);
363      closeBuutton.addEventListener('click', buttonAction, false);
364    },
365    // Helps with accessibility for keyboard only users.
366    skipLinkFocusFix: function skipLinkFocusFix() {
367      var isIe = /(trident|msie)/i.test(navigator.userAgent);
368
369      if (isIe && document.getElementById && window.addEventListener) {
370        window.addEventListener(
371          'hashchange',
372          function () {
373            var id = location.hash.substring(1),
374              element;
375
376            if (!/^[A-z0-9_-]+$/.test(id)) {
377              return;
378            }
379
380            element = document.getElementById(id);
381
382            if (element) {
383              if (
384                !/^(?:a|select|input|button|textarea)$/i.test(element.tagName)
385              ) {
386                element.tabIndex = -1;
387              }
388
389              element.focus();
390            }
391          },
392          false
393        );
394      }
395    },
396  }; // Things that need to happen when the document is ready.
397
398  document.addEventListener('DOMContentLoaded', function () {
399    prosperityTheme.onReady();
400  });
401})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.