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.