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.