PageSourceSearch

https://www.equikids.org/wp-content/plugins/equikids-quotes/assets/frontend.js?ver=1.0.2

js equikids.org collected 2026-10-09 03:29:31 UTC 6,016 bytes, 231 lines download raw bytes

1(function () {
2	function hideEmptyQuoteRows() {
3		var flags = document.querySelectorAll('.ek-quotes-empty-flag');
4		if (!flags.length) {
5			return;
6		}
7		flags.forEach(function (flag) {
8			var box = flag.closest('.Quotes_Box');
9			if (!box) {
10				box = document.querySelector('.Quotes_Box');
11			}
12			if (box) {
13				box.classList.add('ek-quotes-is-empty');
14				box.style.setProperty('display', 'none', 'important');
15			}
16		});
17	}
18
19	function visibleCount(slider) {
20		var width = window.innerWidth || document.documentElement.clientWidth;
21		if (width <= 640) {
22			return 1;
23		}
24		if (width <= 991) {
25			return 2;
26		}
27		return parseInt(slider.getAttribute('data-visible'), 10) || 3;
28	}
29
30	function markOverflowingCards(root) {
31		Array.prototype.slice.call(root.querySelectorAll('.ek-quotes-card')).forEach(function (card) {
32			var text = card.querySelector('.ek-quotes-text');
33			var more = card.querySelector('.ek-quotes-more');
34			if (!text || !more) {
35				return;
36			}
37			more.hidden = text.scrollHeight <= text.clientHeight + 2;
38		});
39	}
40
41	function setupModal() {
42		var modal = document.querySelector('.ek-quotes-modal');
43		if (!modal || modal.getAttribute('data-ekq-ready') === '1') {
44			return;
45		}
46
47		var nameEl = modal.querySelector('.ek-quotes-modal-name');
48		var textEl = modal.querySelector('.ek-quotes-modal-text');
49		var closeEls = modal.querySelectorAll('.ek-quotes-modal-close, .ek-quotes-modal-backdrop');
50
51		function closeModal() {
52			modal.hidden = true;
53			document.body.classList.remove('ek-quotes-modal-open');
54			document.dispatchEvent(new Event('ekq-modal-close'));
55		}
56
57		function openModal(name, quote) {
58			if (nameEl) {
59				nameEl.textContent = name || '';
60			}
61			if (textEl) {
62				textEl.textContent = quote ? '\u201C' + quote + '\u201D' : '';
63			}
64			modal.hidden = false;
65			document.body.classList.add('ek-quotes-modal-open');
66			document.dispatchEvent(new Event('ekq-modal-open'));
67		}
68
69		Array.prototype.slice.call(closeEls).forEach(function (el) {
70			el.addEventListener('click', closeModal);
71		});
72
73		document.addEventListener('keydown', function (event) {
74			if (event.key === 'Escape' && !modal.hidden) {
75				closeModal();
76			}
77		});
78
79		document.addEventListener('click', function (event) {
80			var button = event.target.closest('.ek-quotes-more');
81			if (!button) {
82				return;
83			}
84			event.preventDefault();
85			event.stopPropagation();
86			var card = button.closest('.ek-quotes-card');
87			if (!card) {
88				return;
89			}
90			openModal(card.getAttribute('data-name') || '', card.getAttribute('data-quote') || '');
91		});
92
93		modal.setAttribute('data-ekq-ready', '1');
94	}
95
96	function setupSlider(slider) {
97		var viewport = slider.querySelector('.ek-quotes-viewport');
98		var track = slider.querySelector('.ek-quotes-track');
99		var cards = Array.prototype.slice.call(slider.querySelectorAll('.ek-quotes-card'));
100		var prev = slider.querySelector('.ek-quotes-prev');
101		var next = slider.querySelector('.ek-quotes-next');
102		if (!viewport || !track || !cards.length) {
103			return;
104		}
105
106		var index = 0;
107		var timer = null;
108		var originals = cards.length;
109
110		function clonesNeeded() {
111			return Math.max(visibleCount(slider), 1);
112		}
113
114		function clearClones() {
115			Array.prototype.slice.call(track.querySelectorAll('.ek-quotes-clone')).forEach(function (node) {
116				node.parentNode.removeChild(node);
117			});
118		}
119
120		function buildClones() {
121			clearClones();
122			var need = clonesNeeded();
123			for (var i = 0; i < need; i += 1) {
124				var clone = cards[i % originals].cloneNode(true);
125				clone.classList.add('ek-quotes-clone');
126				clone.setAttribute('aria-hidden', 'true');
127				track.appendChild(clone);
128			}
129		}
130
131		function stepSize() {
132			var first = track.querySelector('.ek-quotes-card');
133			if (!first) {
134				return 0;
135			}
136			var styles = window.getComputedStyle(track);
137			var gap = parseFloat(styles.columnGap || styles.gap || '0') || 0;
138			return first.getBoundingClientRect().width + gap;
139		}
140
141		function apply(animate) {
142			track.style.transition = animate === false ? 'none' : 'transform 0.45s ease';
143			track.style.transform = 'translateX(' + (-index * stepSize()) + 'px)';
144		}
145
146		function go(direction) {
147			index += direction;
148			apply(true);
149			if (index >= originals) {
150				window.setTimeout(function () {
151					index = 0;
152					apply(false);
153				}, 460);
154			}
155			if (index < 0) {
156				index = originals - 1;
157				apply(false);
158				window.requestAnimationFrame(function () {
159					apply(true);
160				});
161			}
162		}
163
164		function start() {
165			stop();
166			if (document.body.classList.contains('ek-quotes-modal-open')) {
167				return;
168			}
169			if (originals < 1) {
170				return;
171			}
172			timer = window.setInterval(function () {
173				go(1);
174			}, 5000);
175		}
176
177		function stop() {
178			if (timer) {
179				window.clearInterval(timer);
180				timer = null;
181			}
182		}
183
184		function refresh() {
185			var canSlide = originals > 0;
186			buildClones();
187			if (index > originals - 1) {
188				index = 0;
189			}
190			apply(false);
191			markOverflowingCards(slider);
192			if (prev) {
193				prev.disabled = !canSlide;
194			}
195			if (next) {
196				next.disabled = !canSlide;
197			}
198			if (canSlide) {
199				start();
200			} else {
201				stop();
202			}
203		}
204
205		if (prev) {
206			prev.addEventListener('click', function () {
207				go(-1);
208				start();
209			});
210		}
211		if (next) {
212			next.addEventListener('click', function () {
213				go(1);
214				start();
215			});
216		}
217
218		slider.addEventListener('mouseenter', stop);
219		slider.addEventListener('mouseleave', start);
220		document.addEventListener('ekq-modal-open', stop);
221		document.addEventListener('ekq-modal-close', start);
222		window.addEventListener('resize', refresh);
223		refresh();
224	}
225
226	document.addEventListener('DOMContentLoaded', function () {
227		hideEmptyQuoteRows();
228		setupModal();
229		Array.prototype.slice.call(document.querySelectorAll('.ek-quotes-slider')).forEach(setupSlider);
230	});
231})();

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.