PageSourceSearch

https://www.suedpol.org/wp-content/themes/suedpolHamburg/assets/js/jquery.suedpol.js?ver=2.1.2

js suedpol.org collected 2026-10-06 07:44:02 UTC 15,211 bytes, 474 lines download raw bytes

1function isElementInViewport(el) {
2
3    //special bonus for those using jQuery
4    if (typeof jQuery === "function" && el instanceof jQuery) {
5        el = el[0];
6    }
7
8    var windowHeight = jQuery(window).height();
9    var gridTop = windowHeight * .3;
10    var gridBottom = windowHeight * .3;
11    var headerHeight = jQuery('#sp-header').innerHeight();
12
13    var top = el.offsetTop;
14    var left = el.offsetLeft;
15    var width = el.offsetWidth;
16    var height = el.offsetHeight;
17
18    while (el.offsetParent) {
19        el = el.offsetParent;
20        top += el.offsetTop;
21        left += el.offsetLeft;
22    }
23
24    return (
25        top < (window.pageYOffset + window.innerHeight) &&
26        left < (window.pageXOffset + window.innerWidth) &&
27        (top + height) > window.pageYOffset &&
28        (left + width) > window.pageXOffset
29    );
30}
31
32// Store the window width
33var windowWidth = jQuery(window).width();
34
35function windowResized() {
36    // Check window width has actually changed and it's not just iOS triggering a resize event on scroll
37    if (jQuery(window).width() != windowWidth) {
38        // Update the window width for next time
39        windowWidth = jQuery(window).width();
40        return true;
41    }
42    return false;
43}
44
45function scrollToElement(selector, callback) {
46    jQuery(selector).length && jQuery("html").animate({
47        scrollTop: jQuery(selector).offset().top
48    }, 1000);
49    if (typeof callback === 'function') {
50        callback();
51    }
52}
53
54var polschmelzeStarted = true;
55
56function stickyLogo() {
57    var header = document.getElementById("sp-header");
58    var content = document.getElementById("content");
59    var sticky = header.offsetTop;
60    var contentPos = Math.floor(content.getBoundingClientRect().top);
61
62    var nav = document.querySelector('nav');
63    var lineOne = document.querySelector('nav .menu-btn .line--1');
64    var lineTwo = document.querySelector('nav .menu-btn .line--2');
65    var lineThree = document.querySelector('nav .menu-btn .line--3');
66    var link = document.querySelector('nav .nav-links');
67    if (Math.floor(jQuery(this).scrollTop()) >= sticky && contentPos < header.offsetHeight) {
68        var scrollTarget = '#page';
69        jQuery('#sp-header').addClass('sticky-logo');
70        jQuery('#sp-header #logo-animation').addClass('going-up');
71        jQuery('#sp-header #logo-animation').removeClass('going-down');
72        jQuery('#coords-circle').addClass('active');
73        jQuery('#sp-header .scroll-down').removeClass('active');
74        jQuery('.suedpol-navigation').addClass('active');
75        jQuery('#sp-header .scroll-down').removeClass('active');
76
77        jQuery('#nice-popup').fadeOut(1000);
78    } else {
79        var scrollTarget = '#programm';
80        jQuery('#sp-header').removeClass('sticky-logo');
81        jQuery('#sp-header #logo-animation').addClass('going-down');
82        jQuery('#sp-header #logo-animation').removeClass('going-up');
83        jQuery('#coords-circle').removeClass('active');
84        jQuery('.suedpol-navigation').removeClass('active');
85        nav.classList.remove('nav-open');
86        lineOne.classList.remove('line-cross');
87        lineTwo.classList.remove('line-fade-out');
88        lineThree.classList.remove('line-cross');
89        link.classList.remove('fade-in');
90        if (!jQuery('.suedpol-navigation').hasClass('active')) {
91            jQuery('#sp-header .scroll-down').addClass('active');
92        }
93
94        jQuery('#nice-popup').fadeIn(1000);
95    }
96}
97
98var dateNow = new Date();
99var timeNow = dateNow.getTime();
100var offsetmilliseconds = 0;
101var offsetTimeout = null;
102var jsonRequestOffset = 10;
103
104function getOffsetToTime(moodStopTime) {
105    if (switchAt) {
106        moodStopTime = switchAt;
107        switchAt = false;
108    }
109    timeNow = new Date().getTime();
110    var timeSplit = moodStopTime.split(':');
111    var nextSlotTime = new Date();
112    nextSlotTime.setHours(timeSplit[0]);
113    nextSlotTime.setMinutes(timeSplit[1]);
114    nextSlotTime.setSeconds(timeSplit[2]);
115    nextSlotTime.setMilliseconds(0);
116    if ((nextSlotTime - timeNow) <= 0) {
117        nextSlotTime.setDate(nextSlotTime.getDate() + 1);
118    }
119    // Add a short offset to ensure correct AJAX response...
120    nextSlotTime.setSeconds(nextSlotTime.getSeconds() + (jsonRequestOffset + 1));
121    offsetmilliseconds = nextSlotTime - timeNow;
122    // Substract the AJAX offset for correct slot-time display...
123    nextSlotTime.setSeconds(nextSlotTime.getSeconds() - jsonRequestOffset);
124    //var timeDifference = getMinuteDifference(dateNow, nextSlotTime);
125    console.log('Next slot coming up at:');
126    console.log(nextSlotTime);
127    return offsetmilliseconds;
128}
129
130function getMinuteDifference(date1, date2) {
131    var diff = (date1.getTime() - date2.getTime()) / 1000;
132    diff /= 60;
133    return Math.abs(Math.round(diff));
134}
135
136function setOffsetTimeout(offsetTimeout) {
137    if (offsetTimeout) {
138        clearTimeout(offsetTimeout);
139    }
140    //if it isn't time yet, set a timeout.
141    if (offsetmilliseconds >= 0) {
142        offsetTimeout = setTimeout(function () {
143            loadMood(switchTo, false);
144        }, offsetmilliseconds);
145    }
146}
147
148function loadMood(moodNr, initial) {
149    jQuery('#logo-shuffle').addClass('active');
150    if (typeof (moodNr) === 'undefined') moodNr = 0;
151    if (typeof (initial) === 'undefined') initial = false;
152    if (switchTo > 0 && !initial) {
153        moodNr = switchTo;
154        switchTo = 0;
155    }
156    var loadTime = new Date();
157    var action = 'Site loaded';
158    if (!initial) {
159        action = 'Slot changed';
160        loadTime.setSeconds(loadTime.getSeconds() - jsonRequestOffset);
161    }
162    var moodElement = null;
163    if (jQuery('#bgVideo').length > 0) {
164        moodElement = jQuery('#bgVideo');
165    } else {
166        moodElement = jQuery('#bgImage');
167    }
168    moodElement.removeClass('loaded');
169    jQuery.ajax({
170        method: 'post',
171        url: '/?json_get_mood=' + moodNr,
172        dataType: 'json',
173        data: moodNr,
174        processData: false,
175        contentType: false,
176        beforeSend: function (data) {
177            //something
178        },
179        success: function (data) {
180            var moodMP4 = data.loop.mp4;
181            var moodJPG = data.loop.jpg;
182            var moodWEBP = data.loop.webp;
183            var moodName = data.loop.theme;
184            var moodAction = 'Current';
185            if (jQuery('#bgVideo').length > 0) {
186                moodElement.attr('src', moodMP4);
187                moodElement.attr('poster', moodWEBP);
188                moodElement.load();
189            } else {
190                moodElement.attr('style', 'background-image: url(' + moodWEBP + ');');
191            }
192            moodElement.addClass('loaded');
193            console.log('-----------------------------------------------------------------');
194            console.log(action + ' at:');
195            console.log(loadTime);
196            console.log('Current slot: ' + data.slotID);
197            if ((moodName != currentTheme) && !initial) {
198                moodAction = 'New';
199                console.log('Mood switched!');
200            }
201            console.log(moodAction + ' mood is: "' + moodName + '"');
202            currentTheme = moodName;
203            moodStopTime = data.to;
204            offsetmilliseconds = getOffsetToTime(moodStopTime);
205            setOffsetTimeout(offsetTimeout);
206        },
207        error: function (data) {
208            console.log(data);
209        }
210    });
211}
212
213var allPlayerElements;
214'use strict';
215// Init & load WaveSurfer
216document.addEventListener('DOMContentLoaded', function () {
217    if (jQuery('.artist-media ul li.audio-player').length > 0) {
218        allPlayerElements = document.getElementsByClassName('audio-player');
219
220        jQuery.each(allPlayerElements, function () {
221            var wavesurfer;
222            var playerID = jQuery(this).attr('data-playerid');
223            var dataSrc = jQuery(this).attr('data-src');
224            var playButton = document.getElementById('button-' + playerID);
225            var options = {
226                container: '#waveform-' + playerID,
227                scrollParent: true,
228                autoCenter: true,
229                cursorColor: '#eee',
230                fillParent: false,
231                forceDecode: true,
232                height: 90,
233                hideScrollbar: true,
234                barWidth: 2,
235                barRadius: 2,
236                maxCanvasWidth: 1500,
237                minPxPerSec: 40,
238                partialRender: true,
239                pixelRatio: 1,
240                waveColor: '#ff9600',
241                removeMediaElementOnDestroy: false,
242                responsive: true,
243                normalize: true,
244                interact: true,
245                mediaType: 'audio'
246            };
247
248            if (location.search.match('scroll')) {
249                options.minPxPerSec = 50;
250                options.scrollParent = true;
251            }
252
253            if (location.search.match('normalize')) {
254                options.normalize = true;
255            }
256
257            jQuery(this).click(function () {
258                wavesurfer.on('audioprocess', function () {
259                    playButton.setAttribute('class', 'fas fa-pause-circle');
260                });
261                wavesurfer.on('pause', function () {
262                    playButton.setAttribute('class', 'fas fa-play-circle');
263                });
264                wavesurfer.playPause();
265            });
266        });
267    }
268});
269
270function validateEmail(input) {
271
272    if (input.value == '' || input.value === null) {
273        //No email entered...
274        jQuery('#form-error').text('Bitte gib eine E-Mailadresse ein.');
275
276        return false;
277    } else {
278        var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
279
280        if (/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/.test(input.value)) {
281            //Valid email entered...
282            return true;
283
284        } else {
285            //Invalid email entered...
286            jQuery('#form-error').text('Bitte gib eine gültige E-Mailadresse ein.');
287
288            return false;
289        }
290    }
291}
292
293function validateNewsletterForm() {
294    if (validateEmail(document.newsletterform.email)) {
295        RVerify.configure({
296            maskClosable: true,
297            title: 'Ich bin kein Roboter.',
298            text: 'Ziehe den Slider, bis das Bild gerade ist.',
299            zIndex: 999999999999999,
300            album: [
301                '/wp-content/themes/suedpolHamburg/assets/images/suedpol_smiley.png'
302            ]
303        });
304
305        RVerify.action(function (code) {
306            switch (code) {
307                case 0:
308                    //Verify successful...
309                    return false;
310                    break;
311                case 1:
312                    //Verify successful...
313                    document.getElementById("newsletterform").submit();
314                    break;
315                case 2:
316                    //Verification aborted...
317                    return false;
318                    break;
319            }
320
321            return false;
322        });
323
324        return false;
325    } else {
326        return false;
327    }
328}
329
330function captchaFlohpolForm() {
331        RVerify.configure({
332            maskClosable: true,
333            title: 'Ich bin kein Roboter.',
334            text: 'Ziehe den Slider, bis das Bild gerade ist.',
335            zIndex: 999999999999999,
336            album: [
337                '/wp-content/themes/suedpolHamburg/assets/images/suedpol_smiley.png'
338            ]
339        });
340
341        RVerify.action(function (code) {
342            switch (code) {
343                case 0:
344                    return false;
345                    break;
346                case 1:
347                    document.getElementById("flohpol-anmeldung").submit();
348                    break;
349                case 2:
350                    //Verification aborted...
351                    return false;
352                    break;
353            }
354
355            return false;
356        });
357
358    return false;
359}
360
361function initCoordsCircle(el) {
362    el.circleText({
363        turn: false,
364        padding: 0,
365        radius: 265,
366        duration: 50
367    });
368}
369
370// Get the header
371var header = document.getElementById("sp-header");
372var content = document.getElementById("content");
373
374// Get the offset position of the navbar
375var sticky = header.offsetTop;
376var contentPos = content.getBoundingClientRect().top;
377
378let expedition_forecast = document.getElementById("event_calendar");
379eventtitles[999];
380
381
382
383jQuery(function () {
384    var el = jQuery('#coords-circle');
385    initCoordsCircle(el);
386    loadMood(startMood, true);
387
388    // Touch Device Detection
389    var isTouchDevice = 'ontouchstart' in document.documentElement;
390    if (isTouchDevice) {
391        jQuery('body').removeClass('no-touch');
392    }
393
394    if (jQuery('body').hasClass('home')) {
395        let logo_shuffle = document.getElementById("logo-animation");
396        stickyLogo();
397        logo_shuffle.classList.add("going-down");
398    }
399
400
401    jQuery('#page').reveal_on_scroll(false);
402
403    jQuery('#newsletter-form #email').keyup(function () {
404        jQuery('#form-error').html('');
405    });
406
407    jQuery('.newsletter-placeholder').on('click', function (index) {
408        jQuery(this).fadeOut('fast');
409        jQuery('input#email').focus();
410    });
411
412    jQuery('input#email').on('blur', function (index) {
413        if (jQuery('input#email').val() == "") {
414            jQuery('.newsletter-placeholder').fadeIn('fast');
415        }
416    });
417
418    jQuery('a.artist-read-more').click(function () {
419        var postID = jQuery(this).data('id');
420        jQuery('.artist-content.postid-' + postID).addClass('scrollRevealed');
421        jQuery('.artist-content.postid-' + postID).slideDown('fast');
422    });
423});
424
425jQuery(window).scroll(function () {
426    if (jQuery('body').hasClass('home')) {
427        stickyLogo();
428    }
429});
430
431let body = document.querySelector("body");
432let coords_ticker = document.getElementById("logo-animation");
433let scroll_down = document.getElementById("scroll-down");
434let scroll_up = document.getElementById("menu-scroll-up");
435
436coords_ticker.addEventListener("click", function () {
437    if (body.classList.contains("home")) {
438        event.preventDefault();
439        if(this.classList.contains("going-down")) {
440            this.classList.remove("going-down");
441            this.classList.add("going-up");
442            scrollToElement('#programm', function () {
443                stickyLogo();
444            });
445        } else {
446            this.classList.add("going-down");
447            stickyLogo();
448            scrollToElement('#page', function () {
449                jQuery('#sp-header').removeClass('sticky-logo');
450                scroll_up.classList.remove('active');
451            });
452        }
453    }
454});
455
456scroll_down.addEventListener("click", function () {
457    event.preventDefault()
458    scrollToElement('#programm', function () {
459        stickyLogo();
460    });
461});
462
463scroll_up.addEventListener("click", function () {
464    event.preventDefault()
465    setTimeout(() => {
466        stickyLogo();
467        scrollToElement('#page', function () {
468            jQuery('#sp-header').removeClass('sticky-logo');
469            jQuery(this).removeClass('active');
470        });
471    }, 300);
472});
473
474

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.