1(function(){const is={arr:function(a){return Array.isArray(a)},obj:function(a){return Object.prototype.toString.call(a).includes("Object")},str:function(a){return typeof a==="string"},fnc:function(a){return typeof a==="function"},und:function(a){return typeof a==="undefined"},nil:function(a){return is.und(a)||a===null},};function getMediaQueryString(minWidth,maxWidth){if(minWidth&&maxWidth){return `(min-width: ${minWidth}px) and (max-width: ${maxWidth}px)`} 2if(maxWidth){return `(max-width: ${maxWidth}px)`} 3if(minWidth){return `(min-width: ${minWidth}px)`} 4return null} 5function matchAnyMedia(){const{BASE_BREAKPOINT_ID,breakpoints}=window.BreakdanceFrontend.data;return breakpoints.filter((b)=>b.id!==BASE_BREAKPOINT_ID).some((b)=>matchMedia(b))} 6function matchMedia(idOrBreakpoint){const{BASE_BREAKPOINT_ID,breakpoints}=window.BreakdanceFrontend.data;const isId=typeof idOrBreakpoint==="string";const breakpoint=isId?breakpoints.find((b)=>b.id===idOrBreakpoint):idOrBreakpoint;if(!breakpoint)return!1;if(breakpoint.id===BASE_BREAKPOINT_ID)return!matchAnyMedia();const{minWidth,maxWidth}=breakpoint;const mediaQuery=getMediaQueryString(minWidth,maxWidth);return window.matchMedia(mediaQuery).matches} 7function getCurrentBreakpoint(breakpointIds){const{BASE_BREAKPOINT_ID,breakpoints}=window.BreakdanceFrontend.data;const activeBreakpoint=breakpoints.filter((b)=>{if(!breakpointIds)return!0;return breakpointIds.includes(b.id)}).sort((a,b)=>a.maxWidth-b.maxWidth).find((b)=>matchMedia(b));return(activeBreakpoint||breakpoints.find((b)=>b.id===BASE_BREAKPOINT_ID))} 8function selectString(str){try{return document.querySelectorAll(str)}catch(e){return null}} 9function toArray(o){if(is.arr(o)){return o} 10if(is.str(o)){o=selectString(o)||o} 11if(o instanceof NodeList||o instanceof HTMLCollection){return[].slice.call(o)} 12return[o]} 13function cloneObject(obj){return JSON.parse(JSON.stringify(obj))} 14function mergeObjects(obj1,source){const target=cloneObject(obj1);if(!is.obj(source)){return target} 15Object.keys(source).forEach((key)=>{const targetValue=target[key];const sourceValue=source[key];if(is.obj(targetValue)&&is.obj(sourceValue)){target[key]=mergeObjects(Object.assign({},targetValue),sourceValue)}else if(!is.nil(sourceValue)){target[key]=sourceValue}});return target} 16function on(eventName,element,callback){if(!is.fnc(callback)){callback=element;element=null} 17if(element){toArray(element).forEach((el)=>{el.addEventListener(eventName,callback)})}else{window.addEventListener(eventName,callback)}} 18function off(eventName,element,callback){if(!is.fnc(callback)){callback=element;element=null} 19if(element){toArray(element).forEach((el)=>{el.removeEventListener(eventName,callback)})}else{window.removeEventListener(eventName,callback)}} 20function onResize(callback){const resizeObserver=new ResizeObserver(callback);resizeObserver.observe(document.body);return()=>{resizeObserver.disconnect()}} 21function debounce(callback,wait,immediate){let timeout;return function(){const context=this,args=arguments;const later=function(){timeout=null;if(!immediate)callback.apply(context,args)};const callNow=immediate&&!timeout;clearTimeout(timeout);timeout=setTimeout(later,wait);if(callNow)callback.apply(context,args)}} 22function throttle(callback,wait){let waiting=!1;return function(){if(!waiting){callback.apply(this,arguments);waiting=!0;setTimeout(()=>{waiting=!1},wait)}}} 23function prefersReducedMotion(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches} 24function makeAjaxRequest(url,options){return fetch(url,options)} 25function isBuilder(){try{return!!window.parent.Breakdance}catch(e){return!1}} 26document.addEventListener("DOMContentLoaded",()=>{if(!document.querySelector("#bde-main")){document.querySelector(".bde-skip-link")?.remove()}});if(!window.BreakdanceFrontend){window.BreakdanceFrontend={}} 27window.BreakdanceFrontend.utils={is,getCurrentBreakpoint,getMediaQueryString,matchMedia,matchAnyMedia,toArray,cloneObject,mergeObjects,on,off,onResize,debounce,throttle,prefersReducedMotion,makeAjaxRequest,isBuilder,}})()
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.