PageSourceSearch

https://www.sley.fi/wp-content/cache/min/1/wp-content/plugins/tapahtumaupotukset/frontend.js?ver=1790917115

js sley.fi collected 2026-10-02 10:27:48 UTC 21,889 bytes, 119 lines download raw bytes

1(function(){var fragmentRequests=Object.create(null);var fragmentAttempts=Object.create(null);var reportedFailures=Object.create(null);var mapFrontendPromise=null;var pageSessionId=createSessionId();var lifecycleState={lastEvent:'script_init',lastEventAt:getTimestamp()};function getTimestamp(){if(typeof Date.now==='function'){return Date.now()}
2return new Date().getTime()}
3function createSessionId(){return getTimestamp().toString(36)+Math.random().toString(36).slice(2,10)}
4function eachNode(nodeList,callback){for(var index=0;index<nodeList.length;index++){callback(nodeList[index],index)}}
5function removeElement(element){if(element&&element.parentNode){element.parentNode.removeChild(element)}}
6function createError(code,message,statusCode){var error=new Error(message);error.code=code;error.statusCode=statusCode||0;return error}
7function getErrorMessage(error){if(error&&typeof error.message==='string'&&error.message!==''){return error.message}
8return'Unknown frontend error'}
9function trimString(value,maxLength){var stringValue=String(value||'');if(stringValue.length<=maxLength){return stringValue}
10return stringValue.slice(0,maxLength)}
11function formatBoolean(value){if(value===!0){return'true'}
12if(value===!1){return'false'}
13return''}
14function getFrontendConfig(){if(window.sleyEventsFrontend&&typeof window.sleyEventsFrontend==='object'){return window.sleyEventsFrontend}
15return{}}
16function getMapConfig(){if(window.sleyEventsMapConfig&&typeof window.sleyEventsMapConfig==='object'){return window.sleyEventsMapConfig}
17return{}}
18function getMapMobileMaxWidth(){var maxWidth=Number(getMapConfig().mapMobileMaxWidth);return maxWidth>0?maxWidth:767}
19function isMapViewportEligible(){var maxWidth=getMapMobileMaxWidth();if(typeof window==='undefined'){return!0}
20if(typeof window.matchMedia==='function'){return!window.matchMedia('(max-width: '+maxWidth+'px)').matches}
21return!window.innerWidth||window.innerWidth>maxWidth}
22function rememberLifecycle(eventName){lifecycleState.lastEvent=eventName;lifecycleState.lastEventAt=getTimestamp()}
23function startLifecycleTracking(){if(typeof document!=='undefined'&&typeof document.addEventListener==='function'){document.addEventListener('visibilitychange',function(){rememberLifecycle(document.visibilityState==='hidden'?'visibility_hidden':'visibility_visible')})}
24if(typeof window!=='undefined'&&typeof window.addEventListener==='function'){window.addEventListener('pagehide',function(){rememberLifecycle('pagehide')});window.addEventListener('beforeunload',function(){rememberLifecycle('beforeunload')})}}
25function getNavigationType(){if(typeof performance==='undefined'){return''}
26if(typeof performance.getEntriesByType==='function'){var entries=performance.getEntriesByType('navigation');if(entries&&entries[0]&&typeof entries[0].type==='string'){return entries[0].type}}
27if(performance.navigation&&typeof performance.navigation.type==='number'){switch(performance.navigation.type){case 0:return'navigate';case 1:return'reload';case 2:return'back_forward';default:return'legacy'}}
28return''}
29function getConnectionInfo(){if(typeof navigator==='undefined'){return{}}
30var connection=navigator.connection||navigator.mozConnection||navigator.webkitConnection;if(!connection){return{}}
31return{effectiveType:trimString(connection.effectiveType||'',32),downlink:typeof connection.downlink==='number'?connection.downlink:0,rtt:typeof connection.rtt==='number'?connection.rtt:0,saveData:formatBoolean(connection.saveData)}}
32function buildRequestMeta(fragmentUrl){var attempt=(fragmentAttempts[fragmentUrl]||0)+1;fragmentAttempts[fragmentUrl]=attempt;return{attempt:attempt,fragmentUrl:fragmentUrl,requestId:createSessionId(),requestUrl:buildRequestUrl(fragmentUrl),startedAt:getTimestamp()}}
33function sendClientFailure(logUrl,payload){if(typeof navigator!=='undefined'&&typeof navigator.sendBeacon==='function'&&typeof FormData!=='undefined'){try{var formData=new FormData();Object.keys(payload).forEach(function(key){if(payload[key]!==''){formData.append(key,String(payload[key]))}});navigator.sendBeacon(logUrl,formData);return}catch(error){}}
34var body=JSON.stringify(payload);if(typeof fetch==='function'){try{fetch(logUrl,{method:'POST',credentials:'same-origin',headers:{'Content-Type':'application/json'},body:body,keepalive:!0});return}catch(error){}}
35if(typeof XMLHttpRequest==='function'){try{var xhr=new XMLHttpRequest();xhr.open('POST',logUrl,!0);xhr.setRequestHeader('Content-Type','application/json');xhr.send(body)}catch(error){}}}
36function reportClientFailure(code,requestMeta,error){var config=getFrontendConfig();var logUrl=config.logUrl;if(!logUrl){return}
37requestMeta=requestMeta||{};var connectionInfo=getConnectionInfo();var lifecycleDelta=lifecycleState.lastEventAt?Math.max(0,getTimestamp()-lifecycleState.lastEventAt):0;var payload={code:trimString(code||'fragment_load_failed',64),error_name:trimString(error&&error.
37name?error.name:'',64),fragment_url:trimString(requestMeta.fragmentUrl||'',512),page_url:typeof window.location!=='undefined'?trimString(window.location.href,512):'',request_id:trimString(requestMeta.requestId||'',64),request_url:trimString(requestMeta.requestUrl||'',512),page_session_id:trimString(pageSessionId,64),attempt:requestMeta.attempt?Number(requestMeta.attempt):0,elapsed_ms:requestMeta.startedAt?Math.max(0,getTimestamp()-requestMeta.startedAt):0,message:trimString(getErrorMessage(error),300),navigation_type:trimString(getNavigationType(),32),ready_state:trimString(document.readyState||'',32),status_code:error&&error.statusCode?Number(error.statusCode):0,lifecycle_event:trimString(lifecycleState.lastEvent||'',64),lifecycle_delta_ms:lifecycleDelta,plugin_version:trimString(config.version||'',32),user_agent:typeof navigator!=='undefined'&&navigator.userAgent?trimString(navigator.userAgent,255):'',visibility_state:trimString(document.visibilityState||'',32),online:typeof navigator!=='undefined'?formatBoolean(navigator.onLine):'',connection_effective_type:connectionInfo.effectiveType||'',connection_rtt:connectionInfo.rtt||0,connection_downlink:connectionInfo.downlink||0,save_data:connectionInfo.saveData||''};var key=payload.request_id||[payload.code,payload.fragment_url,payload.message,payload.status_code].join('|');if(reportedFailures[key]){return}
38reportedFailures[key]=!0;sendClientFailure(logUrl,payload)}
39function setBadgeLabel(badge,text){var label=badge.querySelector('[data-sleyembed-badge-label]');if(label){label.textContent=text;return}
40badge.textContent=text}
41function updateCard(card,nowTimestamp){var startTimestamp=Number(card.getAttribute('data-start-timestamp'));var visibilityEndTimestamp=Number(card.getAttribute('data-visibility-end-timestamp'));if(!startTimestamp||!visibilityEndTimestamp){return!1}
42if(nowTimestamp>=visibilityEndTimestamp){removeElement(card);return!0}
43var badge=card.querySelector('[data-sleyembed-badge-role="status"]');if(!badge){return!1}
44if(nowTimestamp>=startTimestamp){setBadgeLabel(badge,badge.getAttribute('data-live-label')||'KÄYNNISSÄ');badge.classList.remove('sleyembed-badge--day');badge.classList.add('sleyembed-badge--live');return!1}
45setBadgeLabel(badge,badge.getAttribute('data-day-label')||'');badge.classList.remove('sleyembed-badge--live');badge.classList.add('sleyembed-badge--day');return!1}
46function updateCards(root){var cards=root.querySelectorAll('.sleyembed-card[data-start-timestamp][data-visibility-end-timestamp]');var nowTimestamp=Math.floor(Date.now()/1000);eachNode(cards,function(card){updateCard(card,nowTimestamp)})}
47function buildRequestUrl(baseUrl){var separator=baseUrl.indexOf('?')===-1?'?':'&';var bucket=Math.floor(Date.now()/(60*1000));return baseUrl+separator+'_fragment_cache='+bucket}
48function setUrlMapParam(baseUrl,enabled){try{var url=new URL(baseUrl,window.location.href);url.searchParams.set('map',enabled?'true':'false');return url.toString()}catch(error){var separatorIndex=baseUrl.indexOf('?');var path=separatorIndex===-1?baseUrl:baseUrl.slice(0,separatorIndex);var params=new URLSearchParams(separatorIndex===-1?'':baseUrl.slice(separatorIndex+1));params.set('map',enabled?'true':'false');var queryString=params.toString();return queryString?path+'?'+queryString:path}}
49function fragmentUrlRequestsMap(fragmentUrl){try{var url=new URL(fragmentUrl,window.location.href);var value=url.searchParams.get('map');return value==='1'||value==='true'}catch(error){return/(?:^|[?&])map=(?:1|true)(?:&|$)/.test(fragmentUrl)}}
50function fragmentUrlUsesMapRowLayout(fragmentUrl){try{var url=new URL(fragmentUrl,window.location.href);return url.searchParams.get('layout')==='grid'&&Number(url.searchParams.get('rows'))>0}catch(error){return/(?:^|[?&])layout=grid(?:&|$)/.test(fragmentUrl)&&/(?:^|[?&])rows=([1-9][0-9]*)(?:&|$)/.test(fragmentUrl)}}
51function fetchFragment(requestUrl,options){options=options||{};if(typeof fetch!=='function'){throw createError('fetch_unavailable','Fetch API unavailable')}
52var useCache=options.useCache!==!1;var promise=useCache?fragmentRequests[requestUrl]:null;if(!promise){promise=fetch(requestUrl,{credentials:'same-origin',headers:{Accept:'application/json'},signal:options.signal}).then(function(response){if(!response.ok){throw createError('http_error','HTTP '+response.status,response.status)}
53return response.json()});if(useCache){fragmentRequests[requestUrl]=promise;promise.then(function(){delete fragmentRequests[requestUrl]},function(){delete fragmentRequests[requestUrl]})}}
54return promise}
55function getContainerState(container){if(!container._sleyembedState){container._sleyembedState={searchTimer:0,searchController:null,searchSequence:0}}
56return container._sleyembedState}
57function getFragmentContentRoot(container){var contentRoot=container.querySelector('[data-sleyembed-fragment-content]');if(contentRoot){return contentRoot}
58contentRoot=document.createElement('div');contentRoot.className='sleyembed-fragment__content';contentRoot.setAttribute('data-sleyembed-fragment-content','');container.appendChild(contentRoot);return contentRoot}
59function hasFallbackContent(container){return container.getAttribute('data-has-fallback')==='true'}
60function getSearchInput(container){return container.querySelector('[data-sleyembed-search-input]')}
61function getSearchStatus(container){return container.querySelector('[data-sleyembed-search-status]')}
62function setSearchingState(container,isSearching,message){var status=getSearchStatus(container);container.classList.toggle('sleyembed-fragment--searching',isSearching);if(isSearching){container.setAttribute('aria-busy','true')}else{container.removeAttribute('aria-busy')}
63if(status){status.textContent=isSearching?(message||'Haetaan…'):''}}
64function renderFragmentError(container){var contentRoot=getFragmentContentRoot(container);if(hasFallbackContent(container)){setSearchingState(container,!1,'');container.removeAttribute('aria-busy');return}
65contentRoot.innerHTML='<div class="sleyembed-events__error">Tapahtumien lataus epäonnistui. <a href="https://tapahtumat.sley.fi/" target="_blank" rel="noopener">Avaa tapahtumakalenteri</a></div>';setSearchingState(container,!1,'');container.removeAttribute('aria-busy')}
66function handleFragmentFailure(container,requestMeta,error){renderFragmentError(container);reportClientFailure(error&&error.code?error.code:'fragment_load_failed',requestMeta,error)}
67function normalizeSearchValue(value){var stringValue=String(value||'').replace(/[\r\n]+/g,' ');if(typeof stringValue.toLocaleLowerCase==='function'){return stringValue.toLocaleLowerCase()}
68return stringValue.toLowerCase()}
69function tokenizeSearchQuery(query){var parts=normalizeSearchValue(query).replace(/,/g,' ').split(/\s+/);var tokens=[];eachNode(parts,function(part){if(part!==''){tokens.push(part)}});return tokens}
69
70function countMeaningfulSearchCharacters(query){return tokenizeSearchQuery(query).join('').length}
71function buildSearchFragmentUrl(baseUrl,query){try{var url=new URL(baseUrl,window.location.href);if(query===''){url.searchParams.delete('q')}else{url.searchParams.set('q',query)}
72return url.toString()}catch(error){var separatorIndex=baseUrl.indexOf('?');var path=separatorIndex===-1?baseUrl:baseUrl.slice(0,separatorIndex);var params=new URLSearchParams(separatorIndex===-1?'':baseUrl.slice(separatorIndex+1));if(query===''){params.delete('q')}else{params.set('q',query)}
73var queryString=params.toString();return queryString?path+'?'+queryString:path}}
74function setCardSearchVisibility(card,isVisible){card.hidden=!isVisible;if(isVisible){card.removeAttribute('aria-hidden')}else{card.setAttribute('aria-hidden','true')}}
75function clearLocalSearch(container){var cards=getFragmentContentRoot(container).querySelectorAll('.sleyembed-card');eachNode(cards,function(card){setCardSearchVisibility(card,!0)});return cards.length}
76function applyLocalSearch(container,query,preserveWhenEmptyMatch){var contentRoot=getFragmentContentRoot(container);var cards=contentRoot.querySelectorAll('.sleyembed-card');var terms=tokenizeSearchQuery(query);var visibility=[];var visibleCount=0;if(!terms.length){return clearLocalSearch(container)}
77eachNode(cards,function(card){var haystack=card.getAttribute('data-sleyembed-search-text')||'';var isVisible=!0;eachNode(terms,function(term){if(haystack.indexOf(term)===-1){isVisible=!1}});visibility.push(isVisible);if(isVisible){visibleCount++}});if(preserveWhenEmptyMatch&&visibleCount===0){return clearLocalSearch(container)}
78eachNode(cards,function(card,index){setCardSearchVisibility(card,visibility[index])});return visibleCount}
79function abortActiveSearch(container){var state=getContainerState(container);if(state.searchTimer){window.clearTimeout(state.searchTimer);state.searchTimer=0}
80if(state.searchController){state.searchController.abort();state.searchController=null}}
81function renderFragmentHtml(container,html,isSearchingRequest){var contentRoot=getFragmentContentRoot(container);contentRoot.innerHTML=html;container.setAttribute('data-has-fallback','true');if(isSearchingRequest){setSearchingState(container,!1,'')}else{container.removeAttribute('aria-busy')}
82updateCards(contentRoot)}
83function getMapShell(container){return container.querySelector('[data-sleyembed-map-shell]')}
84function removeMapShell(container){removeElement(getMapShell(container));container.removeAttribute('data-sleyembed-map');container.classList.remove('sleyembed-fragment--has-map');container.classList.remove('sleyembed-fragment--map-grid-rows')}
85function mapIdForContainer(container){var fragmentUrl=container.getAttribute('data-fragment-url')||'';var hash=0;var input=fragmentUrl||String(getTimestamp());for(var index=0;index<input.length;index++){hash=((hash<<5)-hash)+input.charCodeAt(index);hash|=0}
86return'sleyembed-map-'+Math.abs(hash).toString(36)}
87function ensureMapShell(container,groups){var shell=getMapShell(container);var script;if(!shell){shell=document.createElement('div');shell.className='sleyembed-map-shell';shell.setAttribute('data-sleyembed-map-shell','');shell.innerHTML=''+'<div class="sleyembed-map" data-sleyembed-map-canvas role="img" aria-label="Tapahtumakartta"></div>'+'<div class="sleyembed-map__overlay" data-sleyembed-map-overlay>'+'<div class="sleyembed-map__spinner" aria-hidden="true"></div>'+'<span data-sleyembed-map-overlay-text>Valmistellaan karttaa\u2026</span>'+'</div>'+'<div class="sleyembed-map__consent" data-sleyembed-map-consent hidden>'+'<div><strong>Tapahtumakartta käyttää Google Mapsia.</strong><p>Kartan avaaminen voi välittää selaintietoja Googlelle.</p></div>'+'<button type="button" class="sleyembed-map__consent-button" data-sleyembed-map-consent-button>Näytä kartta</button>'+'</div>'+'<script type="application/json" data-sleyembed-map-groups></script>';var canvas=shell.querySelector('[data-sleyembed-map-canvas]');if(canvas){canvas.id=mapIdForContainer(container)}
88container.insertBefore(shell,container.firstChild)}
89script=shell.querySelector('[data-sleyembed-map-groups]');if(script){script.textContent=JSON.stringify(Array.isArray(groups)?groups:[])}
90container.setAttribute('data-sleyembed-map','1');container.classList.add('sleyembed-fragment--has-map');if(fragmentUrlUsesMapRowLayout(container.getAttribute('data-fragment-url')||'')){container.classList.add('sleyembed-fragment--map-grid-rows')}}
91function loadMapFrontend(){var config=getMapConfig();if(window.SleyEventsMap&&typeof window.SleyEventsMap.init==='function'){return Promise.resolve(window.SleyEventsMap)}
92if(mapFrontendPromise){return mapFrontendPromise}
93if(!config.mapFrontendScriptUrl||typeof document==='undefined'){return Promise.reject(createError('map_script_missing','Map frontend script URL missing'))}
94mapFrontendPromise=new Promise(function(resolve,reject){var script=document.createElement('script');script.src=config.mapFrontendScriptUrl;script.async=!0;script.onload=function(){if(window.SleyEventsMap&&typeof window.SleyEventsMap.init==='function'){resolve(window.SleyEventsMap);return}
95reject(createError('map_script_invalid','Map frontend did not initialize'))};script.onerror=function(){reject(createError('map_script_failed','Map frontend script failed to load'))};(document.head||document.getElementsByTagName('head')[0]||document.body).appendChild(script)});return mapFrontendPromise}
96function updateMapFromPayload(container,payload){if(!payload||!Array.isArray(payload.mapGroups)){return}
97if(!isMapViewportEligible()){removeMapShell(container);return}
98ensureMapShell(container,payload.mapGroups);loadMapFrontend().then(function(mapFrontend){mapFrontend.init(container);mapFrontend.update(container,payload.mapGroups)}).catch(function(){})}
99function applyLocalMapSearch(container,query){if(window.SleyEventsMap&&typeof window.SleyEventsMap.filter==='function'){window.SleyEventsMap.filter(container,tokenizeSearchQuery(query))}}
100function loadFragment(container,options){options=options||{};var state=getContainerState(container);var fragmentUrl=options.fragmentUrl||container.getAttribute('data-fragment-url');if(!fragmentUrl){return}
101if(fragmentUrlRequestsMap(fragmentUrl)&&!isMapViewportEligible()){removeMapShell(container);fragmentUrl=setUrlMapParam(fragmentUrl,!1)}
102var sequence=typeof options.sequence==='number'?options.sequence:state.searchSequence;var requestMeta=buildRequestMeta(fragmentUrl);var contentRoot=getFragmentContentRoot(container);updateCards(contentRoot);try{fetchFragment(requestMeta.requestUrl,{signal:options.signal,useCache:options.useCache!==!1}).then(function(payload){if(sequence!==state.searchSequence){return}
103if(!payload||typeof payload.html!=='string'){throw createError('invalid_payload','Invalid fragment payload')}
104renderFragmentHtml(container,payload.html,!!options.searching);updateMapFromPayload(container,payload)}
104).catch(function(error){if(error&&error.name==='AbortError'){return}
105if(sequence!==state.searchSequence){return}
106handleFragmentFailure(container,requestMeta,error)})}catch(error){handleFragmentFailure(container,requestMeta,error)}}
107function scheduleSearchLoad(container,query,sequence){var state=getContainerState(container);var controller=typeof AbortController!=='undefined'?new AbortController():null;state.searchController=controller;state.searchTimer=window.setTimeout(function(){state.searchTimer=0;loadFragment(container,{fragmentUrl:buildSearchFragmentUrl(container.getAttribute('data-fragment-url')||'',query),signal:controller?controller.signal:undefined,useCache:!1,searching:!0,sequence:sequence})},300)}
108function handleSearchInput(container){var input=getSearchInput(container);if(!input){return}
109var query=String(input.value||'');var significantCharacters=countMeaningfulSearchCharacters(query);var state=getContainerState(container);state.searchSequence+=1;abortActiveSearch(container);if(significantCharacters===0){clearLocalSearch(container);applyLocalMapSearch(container,'');setSearchingState(container,!1,'');loadFragment(container,{fragmentUrl:buildSearchFragmentUrl(container.getAttribute('data-fragment-url')||'',''),useCache:!1,sequence:state.searchSequence});return}
110applyLocalSearch(container,query,significantCharacters>=2);applyLocalMapSearch(container,query);if(significantCharacters<2){setSearchingState(container,!1,'');return}
111setSearchingState(container,!0,'Haetaan…');scheduleSearchLoad(container,query,state.searchSequence)}
112function bindSearchInput(container){var input=getSearchInput(container);if(!input||input._sleyembedBound){return}
113input._sleyembedBound=!0;input.addEventListener('input',function(){handleSearchInput(container)})}
114function onReady(fn){if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',fn)}else{fn()}}
115if(typeof document!=='undefined'&&typeof document.addEventListener==='function'){document.addEventListener('click',function(event){var link=event.target&&event.target.closest?event.target.closest('[data-sleyembed-share="1"]'):null;if(!link||typeof navigator==='undefined'||typeof navigator.share!=='function'){return}
116event.preventDefault();navigator.share({title:link.getAttribute('data-share-title')||'',text:link.getAttribute('data-share-text')||'',url:link.getAttribute('data-share-url')||link.href}).catch(function(error){if(error&&error.name==='AbortError'){return}
117if(typeof window!=='undefined'&&typeof window.open==='function'){window.open(link.href,'_blank','noopener')}})})}
118startLifecycleTracking();onReady(function(){var containers=document.querySelectorAll('.sleyembed-fragment[data-fragment-url]');try{eachNode(containers,function(container){bindSearchInput(container);if(!isMapViewportEligible()){removeMapShell(container)}else if(getMapShell(container)){loadMapFrontend().then(function(mapFrontend){mapFrontend.init(container)}).catch(function(){})}
119loadFragment(container)})}catch(error){eachNode(containers,function(container){var fragmentUrl=container.getAttribute('data-fragment-url')||'';var requestMeta=buildRequestMeta(fragmentUrl);renderFragmentError(container);reportClientFailure('init_error',requestMeta,error)})}})})()

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.