1// Home Page animation 2 3var observer = new IntersectionObserver(function(entries) { 4 entries.forEach(function(entry) { 5 if (entry.isIntersecting) { 6 entry.target.style.visibility = 'visible'; 7 entry.target.style.animationPlayState = 'running'; 8 } else { 9 entry.target.style.visibility = 'hidden'; 10 entry.target.style.animationPlayState = 'paused'; 11 } 12 }); 13}); 14 15document.querySelectorAll('.para-text-bold, .know-more').forEach(function(el) { 16 observer.observe(el); 17}); 18 19 20 21// // Jquery 22// jQuery(document).ready(function() { 23 24// jQuery('.features ul li').on('click', function(){ 25// // console.log('removed class et_pb_tab_active') 26// jQuery('.features ul li').removeClass('et_pb_tab_active'); 27// // console.log('add class et_pb_tab_active'); 28// jQuery(this).addClass('et_pb_tab_active'); 29// }); 30 31 32// // alert('hello'); 33// jQuery('.features ul li a').focus(function() { 34// // Action to be performed when the link is focused 35// jQuery(this).css('outline', 'none'); 36// jQuery(this).css('box-shadow', 'none'); 37// }); 38// jQuery('.header-card-slider').slick({ 39// centerMode: true, 40// centerPadding: '0px', 41// slidesToShow: 3, 42// autoplay: true, 43// autoplaySpeed: 3000, 44// responsive: [ 45// { 46// breakpoint: 1024, 47// settings: { 48// arrows: false, 49// centerMode: true, 50// centerPadding: '0px', 51// slidesToShow: 3 52// } 53// }, 54// { 55// breakpoint: 768, 56// settings: { 57// arrows: false, 58// centerMode: true, 59// centerPadding: '0px', 60// slidesToShow: 3, 61// } 62// }, 63// { 64// breakpoint: 480, 65// settings: { 66// arrows: false, 67// centerMode: true, 68// centerPadding: '0px', 69// slidesToShow: 3, 70// } 71// } 72// ] 73// }); 74 75// }); 76 77// let marqueeElement2 = document.querySelectorAll('.client-slider'); 78// function stopClient() { 79// marqueeElement2.forEach(item => { 80 81// item.style.animationPlayState = 'paused'; 82// }) 83// } 84// function startClient() { 85// marqueeElement2.forEach(item => { 86 87// item.style.animationPlayState = 'running'; 88// }) 89// } 90 91 92// jQuery(document).ready(function ($) { 93// // Wait until window.lottie is available 94// function waitForLottie(timeout = 5000) { 95// return new Promise((resolve, reject) => { 96// if (typeof window.lottie !== "undefined") { 97// return resolve(window.lottie); 98// } 99 100// const start = Date.now(); 101// const check = () => { 102// if (typeof window.lottie !== "undefined") { 103// resolve(window.lottie); 104// } else if (Date.now() - start >= timeout) { 105// reject(new Error("Lottie not available within timeout.")); 106// } else { 107// requestAnimationFrame(check); 108// } 109// }; 110// check(); 111// }); 112// } 113 114// // Animation config list 115// var animations = [ 116// { id: "lottie-routing", json: "/wp-content/uploads/2026/07/jsonformatter2.txt", key: "routing" }, 117// { id: "lottie-automatedRC", json: "/wp-content/uploads/2024/05/automatedRC.json", key: "automated" }, 118// { id: "lottie-paybylink", json: "/wp-content/uploads/2024/05/pbl.json", key: "bylink" }, 119// { id: "lottie-NT", json: "/wp-content/uploads/2024/05/networkToken.json", key: "network" }, 120// { id: "lottie-recurring", json: "/wp-content/uploads/2024/05/subscription-engine.json", key: "recurring" }, 121// { id: "lottie-flows", json: "/wp-content/uploads/2026/07/integration_flow.json", key: "flow" } 122// ]; 123 124// // Assign data-animation-name attributes to list items 125// $(".features ul li").each(function (index) { 126// if (animations[index]) { 127// $(this).attr("data-animation-name", animations[index].key); 128// } 129// }); 130 131// // When Lottie is available, load animations 132// waitForLottie().then(function (lottie) { 133// window.animation = window.animation || {}; 134 135// $.each(animations, function (i, anim) { 136// $.getJSON(anim.json, function (result) { 137// var params = { 138// container: document.getElementById(anim.id), 139// renderer: "svg", 140// loop: true, 141// autoplay: true, 142// animationData: result, 143// }; 144// var loadedAnim = lottie.loadAnimation(params); 145// window.animation[anim.key] = loadedAnim; 146// }); 147// }); 148 149// // Attach click behavior after animations are registered 150// $('[data-animation-name]').on("click", function (e) { 151// e.preventDefault(); 152// e.stopPropagation(); 153 154// var $clicked = $(this); 155// var $siblings = $clicked.parent().find("li"); 156 157// $siblings.each(function () { 158// var animName = $(this).data("animation-name"); 159// if (window.animation[animName]) { 160// window.animation[animName].stop(); 161// } 162// }); 163 164// var whichAnimation = window.animation[$clicked.data("animation-name")]; 165// if (whichAnimation) { 166// whichAnimation.play(); 167// } 168// }); 169// }).catch(function (err) { 170// console.error("Lottie failed to load:", err.message); 171// }); 172// }); 173 174jQuery(function ($) { 175 "use strict"; 176 177 const config = [ 178 ["lottie-routing", "/wp-content/uploads/2026/07/tr-4.json"], 179 ["lottie-automatedRC", "/wp-content/uploads/2026/07/automate.json"], 180 ["lottie-paybylink", "/wp-content/uploads/2026/07/qr_code_animation.json"], 181 ["lottie-NT", "/wp-content/uploads/2024/05/networkToken.json"], 182 ["lottie-recurring", "/wp-content/uploads/2026/07/reccuring-txn.json"], 183 ["lottie-flows", "/wp-content/uploads/2026/07/integration_flow.json"] 184 ]; 185 186 const $tabs = $(".features ul li"); 187 const animations = []; 188 let timer = null; 189 let activeIndex = -1; 190 191 if (!$tabs.length) return; 192 193 function syncAnimation() { 194 clearTimeout(timer); 195 196 timer = setTimeout(function () { 197 const index = $tabs.index( 198 $tabs.filter(".et_pb_tab_active").first() 199 ); 200 201 if (index < 0 || !animations[index]) return; 202 if (index === activeIndex && !animations[index].isPaused) return; 203 204 activeIndex = index; 205 206 animations.forEach(function (animation, i) { 207 if (!animation) return; 208 209 if (i === index) { 210 animation.resize(); 211 animation.goToAndPlay(0, true); 212 } else { 213 animation.pause(); 214 } 215 }); 216 // Center active tab on mobile 217 if (window.innerWidth <= 767) { 218 const activeTab = $tabs.eq(index)[0]; 219 220 if (activeTab) { 221 const container = activeTab.parentElement; 222 223 const target = 224 activeTab.offsetLeft - 225 (container.clientWidth - activeTab.offsetWidth) / 2; 226 227 const maxScroll = container.scrollWidth - container.clientWidth; 228 229 container.scrollTo({ 230 left: Math.max(0, Math.min(target, maxScroll)), 231 behavior: "smooth" 232 }); 233 } 234 } 235 }, 150); 236 } 237
238 function init() { 239 config.forEach(function ([id, url], index) { 240 const container = document.getElementById(id); 241 242 if (!container) return; 243 244 $.getJSON(url) 245 .done(function (data) { 246 const animation = window.lottie.loadAnimation({ 247 container, 248 renderer: "svg", 249 loop: true, 250 autoplay: false, 251 animationData: data 252 }); 253 254 animations[index] = animation; 255 256 animation.addEventListener("DOMLoaded", syncAnimation); 257 }) 258 .fail(function () { 259 console.error("[Lottie] Failed:", url); 260 }); 261 }); 262 263 $tabs 264 .off("click.celerisLottie") 265 .on("click.celerisLottie", syncAnimation); 266 267 $(".features ul li a") 268 .off("focus.celerisLottie") 269 .on("focus.celerisLottie", function () { 270 this.style.outline = "none"; 271 this.style.boxShadow = "none"; 272 }); 273 } 274 275 function waitForLottie(timeout = 5000) { 276 const start = performance.now(); 277 278 function check() { 279 if (window.lottie) { 280 init(); 281 return; 282 } 283 284 if (performance.now() - start >= timeout) { 285 console.error("[Lottie] Library not available."); 286 return; 287 } 288 289 requestAnimationFrame(check); 290 } 291 292 check(); 293 } 294 295 waitForLottie(); 296}); 297 298 299 300// Section 9 301jQuery(document).ready(function(){ 302 // map safe IDs -> canonical URLs (server-controlled JS file) 303 const urlMap = { 304 'celeris-card-1': 'https://celerispay.com/celeris-and-payplug-announce-strategic-partnership/', 305 'celeris-card-2': 'https://celerispay.com/celeris-integrates-with-paysafe-acquirer/', 306 'celeris-card-3': 'https://celerispay.com/celeris-unveils-strategic-integration-with-unlimit/', 307 'celeris-card-4': 'https://celerispay.com/alto-global-processing-partnering-with-celeris/' 308 }; 309 310 // simple validator: only allow https and our domain 311 function isAllowedUrl(urlStr){ 312 try{ 313 const u = new URL(urlStr); 314 return (u.protocol === 'https:' && (u.hostname === 'celerispay.com' || u.hostname.endsWith('.celerispay.com'))); 315 }catch(e){ 316 return false; 317 } 318 } 319 320 // delegate click on the wrapper (faster and resilient to dynamic cards) 321 jQuery('.hm-section-9 .celeris-row-1 .celeris-card-wrapper').on('click', '[id^="celeris-card-"]', function(e){ 322 const id = this.id; 323 const url = urlMap[id]; 324 if (url && isAllowedUrl(url)) { 325 // we can use location.assign which is clearer semantically 326 window.location.assign(url); 327 } else { 328 console.warn('Blocked or unknown redirect for', id); 329 } 330 }); 331}); 332
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.