PageSourceSearch

https://www.ox.security/wp-content/cache/min/1/wp-content/themes/oxsecurity/js/jquery.main.js?ver=1790247466

js ox.security collected 2026-09-24 17:15:56 UTC 17,212 bytes, 68 lines download raw bytes

1(function($){$(document).ready(function(){function initNiceSelect(){$('.hs-form-block select.hs-input').niceSelect();$('.hs-form-block select.hs-input').on('change',function(){$(this).closest('.hs-form-field').addClass('focus')})}
2initNiceSelect();const formObserver=new MutationObserver(function(mutations){mutations.forEach(function(mutation){if(mutation.type==='childList'&&mutation.addedNodes.length>0){mutation.addedNodes.forEach(function(node){if(node.nodeType===1){if($(node).hasClass('hs-form')||$(node).find('.hs-form').length){setTimeout(function(){initNiceSelect()},100)}}})}})});formObserver.observe(document.body,{childList:!0,subtree:!0});$(window).on('message',function(e){if(e.originalEvent.data&&e.originalEvent.data.type==='hsFormCallback'){setTimeout(function(){initNiceSelect()},500)}});var checkCount=0;var checkInterval=setInterval(function(){if($('.hs-form-block select.hs-input').length>0){initNiceSelect();checkCount++}
3if(checkCount>=15){clearInterval(checkInterval)}},1000);setTimeout(function(){initNiceSelect()},3000);function initializeHubSpotFormFields(){const formFields=document.querySelectorAll('.hs-form-field');formFields.forEach(field=>{const input=field.querySelector('.hs-input');const niceSelect=field.querySelector('.nice-select');const checkbox=field.querySelector('input[type="checkbox"]');if(!input&&!niceSelect&&!checkbox)return;function updateFieldState(){const hasValue=input?input.value.trim()!=='':(niceSelect?niceSelect.querySelector('.current').textContent.trim()!=='':(checkbox?checkbox.checked:!1));const isFocused=document.activeElement===input||(niceSelect&&niceSelect.classList.contains('open'))||document.activeElement===checkbox;field.classList.remove('focus');if(isFocused||hasValue){field.classList.add('focus')}}
4if(input){input.addEventListener('focus',updateFieldState);input.addEventListener('blur',updateFieldState);input.addEventListener('input',updateFieldState);input.addEventListener('change',updateFieldState)}
5if(niceSelect){niceSelect.addEventListener('click',updateFieldState);document.addEventListener('click',function(e){if(!niceSelect.contains(e.target)){updateFieldState()}});const observer=new MutationObserver(updateFieldState);observer.observe(niceSelect,{childList:!0,subtree:!0,characterData:!0})}
6if(checkbox){checkbox.addEventListener('change',updateFieldState);checkbox.addEventListener('focus',updateFieldState);checkbox.addEventListener('blur',updateFieldState)}
7updateFieldState()})}
8initializeHubSpotFormFields();const observer=new MutationObserver(function(mutations){mutations.forEach(function(mutation){if(mutation.type==='childList'&&mutation.addedNodes.length>0){mutation.addedNodes.forEach(function(node){if(node.nodeType===1&&node.querySelector&&node.querySelector('.hs-form-field')){initializeHubSpotFormFields()}})}})});observer.observe(document.body,{childList:!0,subtree:!0});if(typeof window.hbspt!=='undefined'){window.addEventListener('message',function(event){if(event.data&&event.data.type==='hsFormCallback'&&event.data.eventName==='onFormReady'){setTimeout(initializeHubSpotFormFields,100)}});window.addEventListener('message',function(event){if(event.data&&event.data.type==='hsFormCallback'&&event.data.eventName==='onFormSubmit'){setTimeout(initializeHubSpotFormFields,100)}})}
9let initAttempts=0;const maxAttempts=5;const initInterval=setInterval(function(){if(initAttempts<maxAttempts){initializeHubSpotFormFields();initAttempts++}else{clearInterval(initInterval)}},2000);if($('.testimonial__slider').length){$('.testimonial__slider').slick({slidesToShow:1,slidesToScroll:1,arrows:!0,dots:!1,infinite:!0,speed:600,adaptiveHeight:!0,autoplay:!0,autoplaySpeed:5000,pauseOnHover:!0,responsive:[{breakpoint:992,settings:{slidesToShow:1,slidesToScroll:1,centerMode:!0,centerPadding:'0px'}}]})}
10if($('.full-testimonial__slider').length){$('.full-testimonial__slider').slick({slidesToShow:1,slidesToScroll:1,arrows:!0,dots:!1,infinite:!0,speed:600,adaptiveHeight:!0,autoplay:!1,autoplaySpeed:5000,pauseOnHover:!0,centerMode:!0,centerPadding:'calc((100% - 962px) / 2)',responsive:[{breakpoint:992,settings:{slidesToShow:1,slidesToScroll:1,centerMode:!1,centerPadding:'0px',arrows:!1,}},{breakpoint:768,settings:"unslick"}]})}
11var counterStarted=!1;function startCounters(){if(counterStarted)return;counterStarted=!0;var counterFrames=document.querySelectorAll('.counter__item-frame');if(counterFrames.length===0)return;var maxWidth=0;counterFrames.forEach(function(frame){var temp=document.createElement('div');temp.style.fontSize=window.getComputedStyle(frame).fontSize;temp.style.fontWeight=window.getComputedStyle(frame).fontWeight;temp.style.fontFamily=window.getComputedStyle(frame).fontFamily;temp.style.visibility='hidden';temp.style.position='absolute';temp.style.whiteSpace='nowrap';temp.style.display='flex';temp.style.justifyContent=window.getComputedStyle(frame).justifyContent;temp.innerHTML=frame.innerHTML;document.body.appendChild(temp);var width=temp.offsetWidth;document.body.removeChild(temp);maxWidth=Math.max(maxWidth,width)});counterFrames.forEach(function(frame){frame.style.width=(maxWidth+60)+'px';frame.style.minWidth=(maxWidth+60)+'px'});var counterItems=document.querySelectorAll('.counter__item-number');counterItems.forEach(function(item){var countTo=parseFloat(item.getAttribute('data-count'));if(isNaN(countTo))return;var duration=2000;var startTime=null;function animateCounter(timestamp){if(!startTime)startTime=timestamp;var progress=timestamp-startTime;var currentCount=Math.min((progress/duration*countTo),countTo);var displayValue=currentCount;if(countTo%1!==0){displayValue=currentCount.toFixed(1)}else{displayValue=Math.floor(currentCount)}
12item.textContent=displayValue;if(progress<duration){requestAnimationFrame(animateCounter)}else{if(countTo%1!==0){item.textContent=countTo.toFixed(1)}else{item.textContent=countTo}}}
13requestAnimationFrame(animateCounter)})}
14function isSectionInView(){var section=document.querySelector('.counter__items');if(!section){return!1}
15var rect=section.getBoundingClientRect();var windowHeight=window.innerHeight;return rect.top<windowHeight&&rect.bottom>0}
16$(window).on('scroll',function(){if(!counterStarted&&isSectionInView()){startCounters()}});if(!counterStarted&&isSectionInView()){startCounters()}
17function initHandsParallaxBlocks(){const sections=document.querySelectorAll('.cta-paralax, .hands-form, .cta-hands');if(!sections.length){return}
18const maxOffset=90;const desktopMinOffset=20;const mobileMinOffset=35;const mobileMq=window.matchMedia('(max-width: 768px)');let ticking=!1;const titleSafeGap=40;const ctaInfoContainerGap=2;function getParallaxOffsets(section){const isCtaInfoParallax=section.classList.contains('cta-info--has-parallax');const isCtaHands=section.classList.contains('cta-hands');const customMobileMin=parseFloat(getComputedStyle(section).getPropertyValue('--cta-paralax-mobile-min-offset'));const mobileMin=Number.isFinite(customMobileMin)?customMobileMin:mobileMinOffset;const desktopMin=isCtaInfoParallax?3:(isCtaHands?14:desktopMinOffset);if(isCtaHands&&mobileMq.matches){return{maxOffset:90,minOffset:mobileMin,}}
19return{maxOffset:isCtaHands?72:90,minOffset:mobileMq.matches?mobileMin:desktopMin,}}
20function getBlockSelectors(section){let prefix='cta-paralax';if(section.classList.contains('hands-form')){prefix='hands-form'}else if(section.classList.contains('cta-hands')){prefix='cta-hands'}
21return{headerTitle:section.querySelector('.'+prefix+'__header-title'),contentSafe:prefix==='cta-hands'?section.querySelector('.cta-hands__content'):(section.querySelector('.'+prefix+'__form-wrap')||section.querySelector('.'+prefix+'__button-wrap')||section.querySelector('.'+prefix+'__header-title')||section.querySelector('.'+prefix+'__content')),inner:section.querySelector('.'+prefix+'__inner'),leftEl:section.querySelector('.'+prefix+'__image--left'),rightEl:section.querySelector('.'+prefix+'__image--right'),}}
22function getContentSafeOffset(section,leftEl,rightEl,fallbackOffset,contentRect,gap){if(mobileMq.matches&&!section.classList.contains('cta-hands')){return fallbackOffset}
23const selectors=getBlockSelectors(section);const inner=selectors.inner;const safeGap=typeof gap==='number'?gap:titleSafeGap;if(!inner||!contentRect||!leftEl||!rightEl){return fallbackOffset}
24const innerRect=inner.getBoundingClientRect();
24const leftWidth=leftEl.offsetWidth||0;const rightWidth=rightEl.offsetWidth||0;if(!leftWidth||!rightWidth){return fallbackOffset}
25const leftRequired=1-((contentRect.left-safeGap-innerRect.left)/leftWidth);const rightRequired=1-((innerRect.right-(contentRect.right+safeGap))/rightWidth);const requiredPercent=Math.max(0,leftRequired*100,rightRequired*100);return Math.max(fallbackOffset,requiredPercent)}
26function getContentSafeOffsets(section,leftEl,rightEl,fallbackOffset,contentRect,gap){if(mobileMq.matches){return{left:fallbackOffset,right:fallbackOffset,}}
27const selectors=getBlockSelectors(section);const inner=selectors.inner;const safeGap=typeof gap==='number'?gap:titleSafeGap;if(!inner||!contentRect||!leftEl||!rightEl){return{left:fallbackOffset,right:fallbackOffset,}}
28const innerRect=inner.getBoundingClientRect();const leftWidth=leftEl.offsetWidth||0;const rightWidth=rightEl.offsetWidth||0;if(!leftWidth||!rightWidth){return{left:fallbackOffset,right:fallbackOffset,}}
29const leftRequired=Math.max(0,(1-((contentRect.left-safeGap-innerRect.left)/leftWidth))*100);const rightRequired=Math.max(0,(1-((innerRect.right-(contentRect.right+safeGap))/rightWidth))*100);return{left:Math.max(fallbackOffset,leftRequired),right:Math.max(fallbackOffset,rightRequired),}}
30function getTitleTextRect(titleEl){if(!titleEl){return null}
31const heading=titleEl.querySelector('h2')||titleEl;const range=document.createRange();try{range.selectNodeContents(heading);const rects=range.getClientRects();if(!rects.length){return heading.getBoundingClientRect()}
32let left=Infinity;let right=-Infinity;let top=Infinity;let bottom=-Infinity;for(let i=0;i<rects.length;i++){const r=rects[i];left=Math.min(left,r.left);right=Math.max(right,r.right);top=Math.min(top,r.top);bottom=Math.max(bottom,r.bottom)}
33return{left:left,right:right,top:top,bottom:bottom,width:right-left,height:bottom-top,}}catch(e){return heading.getBoundingClientRect()}}
34function getTitleSafeOffset(section,leftEl,rightEl,fallbackOffset){const selectors=getBlockSelectors(section);let safeRect=null;if(section.classList.contains('cta-hands')){if(mobileMq.matches){safeRect=getTitleTextRect(selectors.headerTitle);if(!safeRect&&selectors.contentSafe){safeRect=selectors.contentSafe.getBoundingClientRect()}}else if(selectors.contentSafe){safeRect=selectors.contentSafe.getBoundingClientRect()}else if(selectors.headerTitle){safeRect=selectors.headerTitle.getBoundingClientRect()}}else{const safeEl=selectors.headerTitle||selectors.contentSafe;if(safeEl){safeRect=safeEl.getBoundingClientRect()}}
35if(!safeRect){return fallbackOffset}
36const gap=section.classList.contains('cta-hands')?(mobileMq.matches?4:16):titleSafeGap;return getContentSafeOffset(section,leftEl,rightEl,fallbackOffset,safeRect,gap)}
37function getContainerSafeOffsets(section,leftEl,rightEl,fallbackOffset){const container=section.querySelector('.cta-info-container');if(!container){return{left:fallbackOffset,right:fallbackOffset,}}
38return getContentSafeOffsets(section,leftEl,rightEl,fallbackOffset,container.getBoundingClientRect(),ctaInfoContainerGap)}
39function getMobileEndGap(section){if(!mobileMq.matches||(!section.classList.contains('cta-paralax')&&!section.classList.contains('cta-hands'))){return 0}
40const gap=parseFloat(getComputedStyle(section).getPropertyValue('--cta-paralax-mobile-end-gap'));return Number.isFinite(gap)?gap:0}
41function getParallaxImageAdjustments(section){const styles=getComputedStyle(section);const xInset=parseFloat(styles.getPropertyValue('--cta-paralax-image-x-inset'));const yOffset=parseFloat(styles.getPropertyValue('--cta-paralax-image-y-offset'));return{xInset:Number.isFinite(xInset)?xInset:0,yOffset:Number.isFinite(yOffset)?yOffset:0,}}
42function getImageTransform(translate,side,section){const gap=getMobileEndGap(section);const isCtaInfoParallax=section.classList.contains('cta-info--has-parallax');const{xInset,yOffset}=getParallaxImageAdjustments(section);const translateY=yOffset?'translateY(calc(-50% + '+yOffset+'px))':'translateY(-50%)';const leftXInset=xInset?' + '+xInset+'px':'';const rightXInset=xInset?' - '+xInset+'px':'';if(isCtaInfoParallax){if(!gap){return'translateX('+(side==='left'?-translate:translate)+'%)'}
43if(side==='left'){return'translateX(calc('+(-translate)+'% - '+gap+'px))'}
44return'translateX(calc('+translate+'% + '+gap+'px))'}
45if(!gap){if(side==='left'){return translateY+' translateX(calc('+(-translate)+'%'+leftXInset+'))'}
46return translateY+' translateX(calc('+translate+'%'+rightXInset+'))'}
47if(side==='left'){return translateY+' translateX(calc('+(-translate)+'% - '+gap+'px'+leftXInset+'))'}
48return translateY+' translateX(calc('+translate+'% + '+gap+'px'+rightXInset+'))'}
49function getSectionProgress(section,rect,viewportHeight,viewportCenter){if(section.classList.contains('cta-hands')){if(rect.top>=viewportHeight){return 0}
50if(rect.bottom<=0){return 1}
51const startTop=viewportHeight;const endTop=viewportCenter-rect.height/2;const travel=startTop-endTop;if(travel<=0){return 1}
52return Math.max(0,Math.min(1,(startTop-rect.top)/travel))}
53const sectionCenter=rect.top+rect.height/2;const distance=sectionCenter-viewportCenter;const range=viewportHeight;if(distance>=0){return Math.max(0,Math.min(1,1-distance/range))}
54return 1}
55function applyMobileInitialOffset(){if(!mobileMq.matches){return}
56sections.forEach(function(section){if(section.classList.contains('cta-info--has-parallax')){return}
57const selectors=getBlockSelectors(section);const leftEl=selectors.leftEl;const rightEl=selectors.rightEl;const offsets=getParallaxOffsets(section);const parkOffset=section.classList.contains('cta-hands')?offsets.maxOffset:offsets.minOffset;if(leftEl){leftEl.style.transform=getImageTransform(parkOffset,'left',section)}
58if(rightEl){rightEl.style.transform=getImageTransform(parkOffset,'right',section)}})}
59function update(){sections.forEach(function(section){const rect=section.getBoundingClientRect();const viewportHeight=window.innerHeight||document.documentElement.clientHeight;const header=document.querySelector('.site-header');const headerHeight=header?header.offsetHeight:0;const viewportCenter=viewportHeight/2+headerHeight/2;const progress=getSectionProgress(section,rect,viewportHeight,viewportCenter);const offsets=getParallaxOffsets(section);const minOffset=offsets.minOffset;const maxOffset=offsets.maxOffset;const selectors=getBlockSelectors(section);const leftEl=selectors.leftEl;const rightEl=selectors.rightEl;const baseTranslate=Math.max(minOffset,(1-progress)*maxOffset);if(section.classList.contains('cta-info--has-parallax')){const safeOffsets=getContainerSafeOffsets(section,leftEl,rightEl,minOffset);if(leftEl){leftEl.style.transform=getImageTransform(Math.max(safeOffsets.left,baseTranslate),'left',section)}
60if(rightEl){rightEl.style.transform=getImageTransform(Math.max(safeOffsets.right,baseTranslate),'right',section)}}else{const safeMinOffset=getTitleSafeOffset(section,leftEl,rightEl,minOffset);let translate=Math.max(safeMinOffset,baseTranslate);
60if(section.classList.contains('cta-hands')&&mobileMq.matches){const minTravel=20;const endOffset=Math.max(minOffset,Math.min(safeMinOffset,maxOffset-minTravel));translate=maxOffset+(endOffset-maxOffset)*progress}
61if(section.classList.contains('cta-hands')){if(mobileMq.matches){const titleEl=selectors.headerTitle;const innerEl=selectors.inner;if(titleEl&&innerEl){const innerRect=innerEl.getBoundingClientRect();const titleRect=titleEl.getBoundingClientRect();const titleCenter=titleRect.top+titleRect.height/2-innerRect.top;if(leftEl){leftEl.style.top=(titleCenter-10)+'px'}
62if(rightEl){rightEl.style.top=titleCenter+'px'}}}else{if(leftEl){leftEl.style.top=''}
63if(rightEl){rightEl.style.top=''}}}
64if(leftEl){leftEl.style.transform=getImageTransform(translate,'left',section)}
65if(rightEl){rightEl.style.transform=getImageTransform(translate,'right',section)}}});ticking=!1}
66function onScroll(){if(!ticking){window.requestAnimationFrame(update);ticking=!0}}
67window.addEventListener('scroll',onScroll,{passive:!0});window.addEventListener('resize',update);applyMobileInitialOffset();update()}
68initHandsParallaxBlocks()})})(jQuery);document.addEventListener('DOMContentLoaded',function(){var header=document.querySelector('.site-header');window.addEventListener('scroll',function(){if(window.scrollY>20){header.classList.add('header-scrolled')}else{header.classList.remove('header-scrolled')}})});const stickyElement=document.querySelector('.compare-table__header');if(stickyElement&&stickyElement.parentNode){const sentinel=document.createElement('div');stickyElement.parentNode.insertBefore(sentinel,stickyElement);const observer=new IntersectionObserver(([entry])=>{if(!entry.isIntersecting){stickyElement.classList.add('compare-table__header--sticky')}else{stickyElement.classList.remove('compare-table__header--sticky')}},{threshold:[0],rootMargin:'-80px 0px 0px 0px'});observer.observe(sentinel)}

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.