PageSourceSearch

https://www.clickadu.com/wp-content/themes/clickadu/assets/js/defaut.js?ver=7.0.6

js clickadu.com collected 2026-10-01 13:06:28 UTC 7,724 bytes, 256 lines download raw bytes

1jQuery(document).ready(function ($) {
2
3  $('.slick-slider').slick();
4
5  $('.format-tab').on('shown.bs.tab', function (e) {
6    const target = $(e.target).attr("data-bs-target");
7
8    $(target).find('.slick-formats').slick('setPosition');
9  });
10
11  $('.header_burger').click(function (event) {
12    $('.header_burger, .navbar-collapse').toggleClass('show');
13    $('body').toggleClass('lock');
14  });
15
16  $('.list-toggle').click(function () {
17    // Move up DOM tree to nearest list
18    // Toggle collapsed and expanded classes
19    $(this).closest('ul').toggleClass('collapsed').toggleClass('expanded');
20  });
21
22
23  // Glossary
24  document.querySelectorAll('.glossary-block__btn').forEach(link => {
25    link.addEventListener('click', (e) => {
26      e.currentTarget.parentElement.classList.toggle('expanded');
27    });
28  });
29
30  function glossaryFilter() {
31    const input = document.getElementById('glossary-filter');
32    const navButtons = document.querySelectorAll('.btn-glossary-nav');
33
34    function clearFields(termBlocks, termItems, inputField) {
35      termBlocks.forEach(block => block.classList.remove('inactive'));
36      termItems.forEach(item => item.style.display = '');
37      inputField.value = '';
38    }
39
40    if (input) {
41      input.addEventListener('keyup', () => {
42        const termBlocks = document.querySelectorAll('.glossary-block');
43        const termItems = document.querySelectorAll('.glossary-block__item');
44        const searchTerm = input.value.toUpperCase();
45
46        navButtons.forEach(button => button.classList.remove('current'));
47
48        termBlocks.forEach(block => block.classList.add('inactive'));
49        termItems.forEach(item => item.style.display = 'none');
50
51        termItems.forEach(item => {
52          if (item.dataset.item.toUpperCase().includes(searchTerm)) {
53            item.style.display = 'block';
54            item.closest('.glossary-block').classList.remove('inactive');
55          }
56        });
57      });
58
59      navButtons.forEach(button => {
60        button.addEventListener('click', (e) => {
61          const navData = button.dataset.nav;
62          const termBlocks = document.querySelectorAll('.glossary-block');
63          const termItems = document.querySelectorAll('.glossary-block__item');
64
65          clearFields(termBlocks, termItems, input);
66
67          navButtons.forEach(btn => btn.classList.remove('current'));
68          e.target.classList.add('current');
69
70          if (navData !== 'all') {
71            termBlocks.forEach(block => {
72              if (block.dataset.term !== navData) {
73                block.classList.add('inactive');
74              }
75            });
76          }
77        });
78      });
79    }
80  }
81
82  glossaryFilter();
83
84
85  const btnNav = document.getElementById('btnNav');
86  btnNav && btnNav.addEventListener('click', () => {
87    document.body.classList.toggle('menu-open');
88  });
89
90  const btnSubmenu = document.querySelectorAll('.header-navigation__item-icon');
91  btnSubmenu.forEach(b => {
92    b.addEventListener('click', function () {
93      const openSubmenuParent = document.querySelector('.header-navigation__item.show');
94      if (openSubmenuParent && openSubmenuParent !== this.parentNode) {
95        openSubmenuParent.classList.remove('show');
96      }
97
98      const submenu = this.parentNode.querySelector('.header-navigation__sub');
99      if (submenu) {
100        this.parentNode.classList.toggle('show')
101      }
102    })
103  })
104
105  // Table of content
106  const container = document.getElementById('ez-toc-container');
107  if (container) {
108    const anchors = document.querySelectorAll('.ez-toc-section');
109    const links = document.querySelectorAll('.ez-toc-link');
110    const activeClasses = 'current';
111    const headerHeight = document.getElementById('header').offsetHeight;
112
113    links.forEach((link) => {
114      link.addEventListener('click', (e) => {
115        e.preventDefault();
116        const target = e.currentTarget.getAttribute('href').substring(1);
117        const el = document.getElementById(target);
118        const elementPosition = el.getBoundingClientRect().top + window.pageYOffset;
119        window.scrollTo({
120          top: elementPosition - headerHeight - 30,
121          behavior: 'smooth'
122        });
123      });
124    });
125
126    window.addEventListener('scroll', () => {
127      let scrollTop = window.scrollY;
128
129      links.forEach((link) => {
130        link.classList.remove(activeClasses);
131      });
132
133      for (let i = anchors.length - 1; i >= 0; i--) {
134        const anchorTop = anchors[i].getBoundingClientRect().top + scrollTop - headerHeight - 40;
135
136        if (scrollTop >= anchorTop) {
137          links[i].classList.add(activeClasses);
138          break;
139        }
140      }
141    });
142  }
143
144  // Referral links
145  (function () {
146    const STORAGE_KEY = 'utmData';
147    const SIGNUP_PATH = 'auth/signUp';
148    const UTM_PARAMS = [
149      'utm_rid',
150      'utm_source',
151      'utm_medium',
152      'utm_campaign',
153      'utm_content',
154      'utm_term',
155      'rfd'
156    ];
157
158    function collectUtmFromUrl() {
159      const params = new URLSearchParams(window.location.search);
160      const data = {};
161      UTM_PARAMS.forEach(key => {
162        const value = params.get(key);
163        if (value) data[key] = value;
164      });
165      return data;
166    }
167
168    function getStoredUtmData() {
169      try {
170        const raw = localStorage.getItem(STORAGE_KEY);
171        return raw ? JSON.parse(raw) : {};
172      } catch {
173        return {};
174      }
175    }
176
177    function saveUtmData(newData) {
178      const existingData = getStoredUtmData();
179      const merged = { ...existingData, ...newData };
180      if (Object.keys(merged).length > 0) {
181        localStorage.setItem(STORAGE_KEY, JSON.stringify(merged));
182      }
183      return merged;
184    }
185
186    function addUtmToSignupLinks(utmData) {
187      if (!utmData || Object.keys(utmData).length === 0) {
188        return;
189      }
190
191      const links = document.querySelectorAll(`a[href*="${SIGNUP_PATH}"]`);
192      links.forEach(link => {
193        try {
194          const url = new URL(link.href);
195          Object.entries(utmData).forEach(([key, value]) => {
196            url.searchParams.set(key, value);
197          });
198          link.href = url.toString();
199        } catch {}
200      });
201    }
202
203    const utmFromUrl = collectUtmFromUrl();
204    const mergedUtmData = saveUtmData(utmFromUrl);
205    addUtmToSignupLinks(mergedUtmData);
206  })();
207
208  // Tooltips
209  const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
210  const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
211
212  // Tabs
213  const triggerTabList = document.querySelectorAll('.formats-nav__button');
214  let currentIndex = 0;
215
216  const btnNextTab = document.getElementById('btnNextTab');
217  const btnPrevTab = document.getElementById('btnPrevTab');
218
219  if (btnNextTab) {
220    btnNextTab.addEventListener('click', function () {
221      currentIndex = (currentIndex + 1) % triggerTabList.length;
222
223      const nextTabTrigger = new bootstrap.Tab(triggerTabList[currentIndex]);
224      nextTabTrigger.show();
225    });
226  }
227
228  if (btnPrevTab) {
229    btnPrevTab.addEventListener('click', function () {
230      currentIndex = (currentIndex - 1 + triggerTabList.length) % triggerTabList.length;
231
232      const prevTabTrigger = new bootstrap.Tab(triggerTabList[currentIndex]);
233      prevTabTrigger.show();
234    });
235  }
236
237
238  // Adaptive table
239  const wysiwygDivs = document.querySelectorAll("div.wysiwyg");
240
241  wysiwygDivs.forEach(div => {
242    const tables = div.querySelectorAll("table");
243
244    tables.forEach(table => {
245      const wrapper = document.createElement("div");
246      wrapper.style.overflowX = "auto";
247      wrapper.style.width = "100%";
248
249      table.parentNode.insertBefore(wrapper, table);
250
251      wrapper.appendChild(table);
252    });
253  });
254
255});
256

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.