PageSourceSearch

https://www.bihon.ro/wp-content/plugins/endless-core/js/article-slider.js?ver=1790773834

js bihon.ro collected 2026-10-01 12:12:06 UTC 15,775 bytes, 352 lines download raw bytes

1/**
2 * Egy kis segítő osztály.
3 */
4var utility = {};
5
6/**
7 * Realtime módosítja a címsávban az URL-t.
8 *
9 * @param {string} uri Ezt megadva a kapott szöveget a domain címhez fűzi.
10 */
11utility.modifyURI = function (uri) {
12    if (typeof uri !== 'undefined') {
13        window.history.replaceState('', '', window.location.protocol + '//' + window.location.hostname + '/' + uri);
14    } else {
15        window.history.replaceState('', '', window.location.protocol + '//' + window.location.hostname);
16    }
17};
18
19/**
20 * Ez a vezérlő scriptje a Slider layout-nak ami egy cikklistázó Divi modulhoz készült.
21 */
22var SLIDERS = {};
23
24/**
25 * Az init megkeresi az összes Slider-t és intézi az időzített cikkváltást valamint a "cikk számláló"/"aktív cikket jelző pont/pötty" és a "cikkváltó nyilak" felkonfigurálását.
26 *
27 * Az init és a slideren bellüli első majd utolsó kép betöltésekor a slider magassága is automatikusan állítva van, így elhelyezhető benne abszolút pozícióval a kép/szöveg doboz.
28 */
29SLIDERS.init = function () {
30    SLIDERS.elementContainingSlidersAndOpenCloseElementsClassName = '.slider-containing-article';
31    SLIDERS.sliderElementClassName = '.enews-article-slider';
32    SLIDERS.sliderContainerClassName = '.slider-container';
33    SLIDERS.sliderOpeningElementClassName = '.open-slider';
34    SLIDERS.sliderClosingElementClassName = '.close-slider';
35    SLIDERS.slidingElementClassName = '.slider-article';
36    SLIDERS.sliderIdContainingAttributeName = 'slider-id';
37    SLIDERS.sliderShowingClassName = '.show';
38    SLIDERS.existingSliders = {};
39    SLIDERS.uriHasNumberAtTheEnd = false;
40    SLIDERS.minimumIterationInterval = 100; /* ms */
41    SLIDERS.slidersFoundInDom = document.querySelectorAll(SLIDERS.sliderElementClassName);
42
43    /* Csak akkor teszünk bármit, ha van legalább egy Slider. */
44    if (SLIDERS.slidersFoundInDom.length > 0) {
45        /** Az URI per jelenként elválasztva egy tömbben. */
46        var pathArray = window.location.pathname.split('/');
47
48        /** Ellenőrizzük, hogy érdekel-e egyáltalán minket az URI vége. */
49        if ((isFinite(pathArray[pathArray.length - 1]) && pathArray[pathArray.length - 1] !== '') || (isFinite(pathArray[pathArray.length - 2]) && pathArray[pathArray.length - 2] !== '')) {
50            SLIDERS.uriHasNumberAtTheEnd = true;
51        }
52
53        /** Feldolgozzuk a megtalált Slider DOM elemeket. */
54        for (var index in SLIDERS.slidersFoundInDom) {
55            if (isFinite(index)) {
56                /** Egy Slider Objektum alapja. */
57                var currentSlider = {
58                    id: index,
59                    currentlyVisibleSlideId: 0,
60                    iterationIsEnabled: false,
61                    iterationId: null,
62                    iterationInterval: null,
63                    hasMultipleArticles: false,
64                    shouldItReactToUri: false,
65                    domElement: SLIDERS.slidersFoundInDom[index],
66                    slidingDomElements: SLIDERS.slidersFoundInDom[index].querySelectorAll(SLIDERS.slidingElementClassName)
67                };
68
69                /** Elhelyezzük a SLIDERS tárolójában. */
70                SLIDERS.existingSliders[index] = currentSlider;
71
72                /** Megadjuk a DOM elemnek az azonosítóit. */
73                currentSlider.domElement.id = 'enews-article-slider-' + index;
74                currentSlider.domElement.setAttribute('slider-id', index);
75
76                /** Ha kell elhelyezzük a nyilakat és pöttyöket. */
77                SLIDERS.setSlideSteppingArrowsAndDots(currentSlider);
78
79                /** Ellenőrizzük, hogy a Slider reagens legyen-e a megadott URI-re. */
80                if (currentSlider.domElement.getAttribute('data-slider-is-uri-reacting') === 'true') {
81                    currentSlider.shouldItReactToUri = true;
82                }
83
84                /* A slideren bellüli első majd utolsó kép betöltésekor a slider magassága is automatikusan állítva van. */
85                if (currentSlider.slidingDomElements[0].querySelectorAll('img').length > 0) {
86                    currentSlider.slidingDomElements[0].querySelector('img').onload = function () {
87                        SLIDERS.setSliderHeight(currentSlider);
88                    };
89                }
90                if (currentSlider.hasMultipleArticles && currentSlider.slidingDomElements[currentSlider.slidingDomElements.length - 1].querySelectorAll('img').length > 0) {
91                    currentSlider.slidingDomElements[currentSlider.slidingDomElements.length - 1].querySelector('img').onload = function () {
92                        SLIDERS.setSliderHeight(currentSlider);
93                    };
94                }
95
96                /* Ha a Slideren bellül volt autoplay megadva akkor intézzük a cikk/kép ciklikus léptetését. */
97                if (currentSlider.iterationIsEnabled) {
98                    currentSlider.iterationId = SLIDERS.iterateSlider(currentSlider.id, currentSlider.iterationInterval);
99                }
100            }
101        }
102
103        SLIDERS.setStartingSlides(pathArray);
104        SLIDERS.setSlidersShowHideEvents();
105        document.addEventListener('keyup', SLIDERS.stepOnKeys);
106    }
107};
108
109/**
110 * Ha a Slidernek több váltakozó eleme van akkor beállítjuk neki a nyilakat és a "cikk számláló" / "aktív cikket jelző pontokat/pöttyöket".
111 */
112SLIDERS.setSlideSteppingArrowsAndDots = function (currentSlider) {
113    if (currentSlider.domElement.getElementsByClassName('slider-
113display-left').length > 0) {
114        currentSlider.hasMultipleArticles = true;
115        var leftArrows = currentSlider.domElement.getElementsByClassName('slider-display-left');
116        for(var key in leftArrows) {
117            if(isFinite(key)) {
118                leftArrows[key].setAttribute('onclick', 'SLIDERS.stepArticle("' + currentSlider.id + '",-1)');
119            }
120        }
121
122        var rightArrows = currentSlider.domElement.getElementsByClassName('slider-display-right');
123        for(var key in rightArrows) {
124            if(isFinite(key)) {
125                rightArrows[key].setAttribute('onclick', 'SLIDERS.stepArticle("' + currentSlider.id + '",1)');
126            }
127        }
128
129        if (currentSlider.domElement.getAttribute('data-autoplay') !== false && parseInt(currentSlider.domElement.getAttribute('data-autoplay')) >= SLIDERS.minimumIterationInterval) {
130            currentSlider.iterationIsEnabled = true;
131            currentSlider.iterationInterval = parseInt(currentSlider.domElement.getAttribute('data-autoplay'));
132        }
133        for (var key in currentSlider.domElement.getElementsByClassName('dots')) {
134            if (isFinite(key)) {
135                currentSlider.domElement.getElementsByClassName('dots')[key].setAttribute('onclick', 'SLIDERS.showSlide("' + currentSlider.id + '",' + (parseInt(key)) + ')');
136            }
137        }
138    }
139};
140
141/**
142 * Ha esetleg van az URI végén megadott szám, utalva egy Slider kezdő poziciójára,
143 * akkor a twig-ekben érzékelésre konfigurált Slidereknek be állítjuk azt a kezdő elemet.
144 *
145 * Minden egyéb Slider az első elemre lesz állítva.
146 */
147SLIDERS.setStartingSlides = function (pathArray) {
148    for (var index in SLIDERS.existingSliders) {
149        if (isFinite(index)) {
150            var currentSlider = SLIDERS.existingSliders[index];
151            if (SLIDERS.uriHasNumberAtTheEnd && currentSlider.shouldItReactoToUri) {
152                if (isFinite(pathArray[pathArray.length - 1]) && pathArray[pathArray.length - 1] !== '') {
153                    SLIDERS.showSlide(currentSlider.id, pathArray[pathArray.length - 1]);
154                } else if (isFinite(pathArray[pathArray.length - 2]) && pathArray[pathArray.length - 2] !== '') {
155                    SLIDERS.showSlide(currentSlider.id, pathArray[pathArray.length - 2]);
156                }
157            } else {
158                SLIDERS.showSlide(currentSlider.id, 0);
159            }
160        }
161    }
162};
163
164/**
165 * Ha nem cikklistázó modulban van elhelyezve slider és nem állandóan látható slider-t tervezünk akkor,
166 * ez a metódus beállíthatja a rejtett slider megjelenítéséhez a click open event-et és close event-et.
167 */
168SLIDERS.setSlidersShowHideEvents = function () {
169    var sliderContainingElements = document.querySelectorAll(SLIDERS.elementContainingSlidersAndOpenCloseElementsClassName);
170    var sliderOpeningElements = null;
171    var sliderClosingElements = null;
172
173    if (sliderContainingElements.length > 0) {
174        for (var index in sliderContainingElements) {
175            if (
176                !isFinite(index) ||
177                sliderContainingElements[index].querySelectorAll(SLIDERS.sliderElementClassName).length === 0 ||
178                sliderContainingElements[index].querySelectorAll(SLIDERS.sliderOpeningElementClassName).length === 0 ||
179                sliderContainingElements[index].querySelectorAll(SLIDERS.sliderClosingElementClassName).length === 0
180            ) {
181                continue;
182            }
183
184            sliderOpeningElements = sliderContainingElements[index].querySelectorAll(SLIDERS.sliderOpeningElementClassName);
185            sliderClosingElements = sliderContainingElements[index].querySelectorAll(SLIDERS.sliderClosingElementClassName);
186
187            for (var openingElementIndex in sliderOpeningElements) {
188                if (isFinite(openingElementIndex)) {
189                    sliderOpeningElements[openingElementIndex].addEventListener('click', SLIDERS.showSlider);
190                }
191            }
192
193            for (var closingElementIndex in sliderClosingElements) {
194                if (isFinite(closingElementIndex)) {
195                    sliderClosingElements[closingElementIndex].addEventListener('click', SLIDERS.hideSlider);
196                }
197            }
198        }
199    }
200};
201
202/**
203 * Ez az időzített cikk/kép változtatását intézi.
204 */
205SLIDERS.iterateSlider = function (id, Interval) {
206    setInterval(
207        function () {
208            if (SLIDERS.existingSliders[id].iterationIsEnabled) {
209                SLIDERS.stepArticle(id, 1);
210            }
211        }, Interval);
212};
213
214/**
215 * A cikkek/képek kattintásra való léptetése.
216 */
217SLIDERS.stepArticle = function (id, n) {
218    SLIDERS.showSlide(id, SLIDERS.existingSliders[id].currentlyVisibleSlideId += n);
219};
220
221/**
222 * Cikk/kép léptetésekor minden a Slideren bellüli cikkek/képet elrejtünk, és megjelenítjük a kiválasztottat.
223 */
224SLIDERS.showSlide = function (id, n) {
225    var slides = SLIDERS.existingSliders[id].slidingDomElements;
226    var dots = SLIDERS.existingSliders[id].domElement.querySelectorAll('.dots');
227    var currentlyVisibleSlideId = parseInt(SLIDERS.existingSliders[id].currentlyVisibleSlideId);
228    /* Ellenőrizzük, hogy a kért slide indexe a minimum és maximum értékek között van-e. */
229    if (parseInt(n) >= slides.length) {
230        currentlyVisibleSlideId = 0;
231    } else if (parseInt(n) < 0) {
232        currentlyVisibleSlideId = parseInt(slides.length) - 1;
233    } else {
234        currentlyVisibleSlideId = parseInt(n);
235    }
236
237    // Az eredményt beállítjuk a Slideren értéknek.
238    SLIDERS.existingSliders[id].currentlyVisibleSlideId = currentlyVisibleSlideId;
239
240    /** Ha a Slidernek több cikke/képe is van akkor az épp láthatónak a jelző pöttyét/pontját is állítjuk. */
241    if (SLIDERS.existingSliders[id].hasMultipleArticles) {
242        for (var index in dots) {
243            if (isFinite(index)) {
244                slides[index].classList.remove('slider-show');
245                dots[index].classList.remove('slider-active-dot');
246            }
247        }
248        dots[currentlyVisibleSlideId].classList.add('slider-active-dot');
249    }
250
251    /** Hozzáadjuk a láthatóságért felelős osztályt a kiválasztott slide-hoz */
252    if (!slides[currentlyVisibleSlideId].classList.contains('slider-show')) {
253        slides[currentlyVisibleSlideId].classList.add('slider-show');
254    }
255
256    /** Ha URI reagens a Slider, akkor cikk/kép léptetéskor állítjuk az URI-t az épp látható slide indexének megfelelően. */
257    var pathArray = window.location.pathname.split('/');
258    var newUriArray = [];
259    if (isFinite(pathArray[pathArray.length - 1]) && pathArray[pathArray.length - 1] !== '' && pathArray[pathArray.length - 1] !== null && pathArray[pathArray.length - 1] !== undefined) {
260        newUriArray = pathArray.slice(1, -1);
261        newUriArray.push(currentlyVisibleSlideId);
262        utility.modifyURI(newUriArray.join('/') + '/');
263    } else if (isFinite(pathArray[pathArray.length - 2]) && pathArray[pathArray.length - 2] !== '' && pathArray[pathArray.length - 2] !== null && pathArray[pathArray.length - 2] !== undefined) {
264        newUriArray = pathArray.slice(1, -2);
265        newUriArray.push(currentlyVisibleSlideId);
266        utility.modifyURI(newUriArray.join('/') + '/');
267    }
268};
269
270/**
271 * Funkció a ciklikus léptetés bekapcsolásához.
272 */
273SLIDERS.enableAutoplay = function (id) {
274    SLIDERS.existingSliders[id].iterationIsEnabled = true;
275};
276
277/**
278 * Funkció a ciklikus léptetés kikapcsolásához.
279 */
280SLIDERS.disableAutoplay = function (id) {
281    SLIDERS.existingSliders[id].iterationIsEnabled = false;
282};
283
284/**
285 * Ez a nyíl gombokat figyeli, ha jobbra nyomja a felhasználó előre lépteti, ha balra akkor vissza.
286 *
287 * @param {type} event
288 */
289SLIDERS.stepOnKeys = function (event) {
290    var e = event || window.event;
291    var code = e.charCode || e.keyCode;
292    var activeSliderId = 0;
293    if (document.querySelectorAll(SLIDERS.sliderContainerClassName + SLIDERS.sliderShowingClassName).length > 0) {
294        activeSliderId = document.querySelector(SLIDERS.sliderContainerClassName + SLIDERS.sliderShowingClassName + ' ' + SLIDERS.sliderElementClassName).getAttribute(SLIDERS.sliderIdContainingAttributeName);
295    }
296    /* Left */
297    if (code === 37 || code === '37') {
298        SLIDERS.stepArticle(activeSliderId, -1);
299    }
300    /* Right */
301    if (code === 39 || code === '39') {
302        SLIDERS.stepArticle(activeSliderId, 1);
303    }
304};
305
306/**
307 * Az adott Slider magasságának újraszámolása.
308 */
309SLIDERS.setSliderHeight = function (currentSlider) {
310    var maxHeight = 0;
311    var slides = currentSlider.slidingDomElements;
312    for (var index in slides) {
313        if (isFinite(index)) {
314            slides[index].style.overflowY = 'visible';
315            var slideHeight = slides[index].scrollHeight;
316
317            if (slideHeight === 0 || slideHeight === '0px') {
318                slideHeight = slides[index].clientHeight;
319            }
320
321            if (maxHeight < slideHeight) {
322                maxHeight = slideHeight;
323            }
324        }
325    }
326
327    if (maxHeight === 0 || maxHeight === '0px') {
328        maxHeight = slides[0].scrollWidth / 4 * 3;
329    }
330
331    var dotsContainerHeight = 0;
332    if (currentSlider.hasMultipleArticles) {
333        dotsContainerHeight = currentSlider.domElement.querySelectorAll('.slider-display-bottom-middle')[0].scrollHeight;
334        if (dotsContainerHeight === 0 || dotsContainerHeight === '0px') {
335            dotsContainerHeight = currentSlider.domElement.querySelectorAll('.slider-display-bottom-middle')[0].clientHeight;
336        }
337    }
338    currentSlider.domElement.style.height = (maxHeight + dotsContainerHeight) + 'px';
339};
340
341SLIDERS.showSlider = function (event) {
342    event.target.closest(SLIDERS.elementContainingSlidersAndOpenCloseElementsClassName).querySelector(SLIDERS.sliderContainerClassName).classList.add(SLIDERS.sliderShowingClassName.replace('.', ''));
343};
344
345SLIDERS.hideSlider = function (event) {
346    event.target.closest(SLIDERS.elementContainingSlidersAndOpenCloseElementsClassName).querySelector(SLIDERS.sliderContainerClassName).classList.remove(SLIDERS.sliderShowingClassName.replace('.', ''));
347};
348
349/**
350 * Az SLIDERS init indítása.
351 */
352SLIDERS.init();

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.