1/** 2 * NOTICE OF LICENSE 3 * 4 * @author Klarna Bank AB www.klarna.com 5 * @copyright Copyright (c) permanent, Klarna Bank AB 6 * @license ISC 7 * @see /LICENSE 8 * 9 * International Registered Trademark & Property of Klarna Bank AB 10 */ 11(function () { 12 var klarnaSdkPromise = null; 13 14 function getKlarnaSdk() { 15 if (klarnaSdkPromise) { 16 return klarnaSdkPromise; 17 } 18 19 klarnaSdkPromise = (async function () { 20 const { KlarnaSDK } = await import('https://js.klarna.com/web-sdk/v2/klarna.mjs'); 21 22 return await KlarnaSDK({ 23 clientId: klarnapayment.onsite_messaging.client_id, 24 products: ['MESSAGING'], 25 }); 26 })(); 27 28 return klarnaSdkPromise; 29 } 30 31 async function mountOnsiteMessagingPlacements() { 32 if (!klarnapayment.onsite_messaging || !klarnapayment.onsite_messaging.client_id) { 33 return; 34 } 35 36 const $containers = $('.klarna-onsite-messaging-container'); 37 38 if ($containers.length === 0) { 39 return; 40 } 41 42 try { 43 const Klarna = await getKlarnaSdk(); 44 45 $containers.each(function () { 46 const container = this; 47 const $container = $(container); 48 const key = $container.data('key'); 49 const locale = $container.data('locale'); 50 const theme = $container.data('theme'); 51 const purchaseAmount = parseInt($container.data('purchase-amount'), 10); 52 53 if (!key || !locale) { 54 console.warn('Klarna onsite messaging: missing required data attributes', { 55 key: key, 56 locale: locale, 57 }); 58 59 return; 60 } 61 62 if (container.querySelector('[data-key="' + key + '"]:not(.klarna-onsite-messaging-container)')) { 63 return; 64 } 65 66 const placementOptions = { 67 key: key, 68 locale: locale, 69 }; 70 71 if (theme) { 72 placementOptions.theme = theme; 73 } 74 75 if (purchaseAmount && !isNaN(purchaseAmount) && purchaseAmount > 0) { 76 placementOptions.amount = purchaseAmount; 77 } 78 79 try { 80 Klarna.Messaging.placement(placementOptions).mount(container); 81 } catch (error) { 82 console.error('Klarna onsite messaging: failed to mount placement', error); 83 } 84 }); 85 } catch (error) { 86 console.error('Klarna onsite messaging: failed to initialize SDK', error); 87 } 88 } 89 90 window.addEventListener('DOMContentLoaded', mountOnsiteMessagingPlacements); 91 92 $(document).ready(function () { 93 if (typeof prestashop === 'undefined' || typeof prestashop.on !== 'function') { 94 return; 95 } 96 97 prestashop.on('updatedProduct', mountOnsiteMessagingPlacements); 98 prestashop.on('updatedCart', mountOnsiteMessagingPlacements); 99 }); 100})();
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.