1document.addEventListener("DOMContentLoaded", function () { 2 // ========================= 3 // 1. Khá»i tạo Splide 4 // ========================= 5 var el = document.querySelector(".splide"); 6 if (el && typeof Splide !== "undefined") { 7 new Splide(el, { 8 type: "loop", 9 autoplay: true, 10 perPage: 8, 11 gap: 0, 12 pagination: false, 13 arrows: false, 14 breakpoints: { 15 1024: { perPage: 6 }, 16 768: { perPage: 4 }, 17 480: { perPage: 3 }, 18 }, 19 }).mount(); 20 // console.log("Splide Äã khá»i tạo!"); 21 } 22 23 // ========================= 24 // 2. Hà m toggle banner bottom 25 // ========================= 26 window.closeBannerBottom = function () { 27 var el = document.querySelector(".banners-bottom"); 28 var openBtn = document.getElementById("open-banner-bottom"); 29 if (el && openBtn) { 30 el.style.display = "none"; 31 openBtn.style.display = "block"; 32 } 33 }; 34 35 window.openBannerBottom = function () { 36 var el = document.querySelector(".banners-bottom"); 37 var openBtn = document.getElementById("open-banner-bottom"); 38 if (el && openBtn) { 39 el.style.display = "block"; 40 openBtn.style.display = "none"; 41 } 42 }; 43 44 // ========================= 45 // 3. Helper: gắn handler cho link ẩn URL 46 // ========================= 47 function attachHiddenLinkHandler(link) { 48 if (!link) return; 49 50 // Tránh add trùng nhiá»u lần 51 if (link.dataset.bcBound === "1") return; 52 link.dataset.bcBound = "1"; 53 54 link.addEventListener("click", function (e) { 55 e.preventDefault(); 56 57 var encoded = this.getAttribute("data-href"); 58 if (!encoded) return; 59 60 try { 61 var url = atob(encoded); // decode base64 62 var target = this.getAttribute("data-target") || "_self"; 63 64 if (target === "_blank") { 65 window.open(url, "_blank", "noopener,noreferrer"); 66 } else { 67 window.location.href = url; 68 } 69 } catch (err) { 70 console.error("Decode hidden link error:", err); 71 } 72 }); 73 } 74 75 // ========================= 76 // 4. Gắn handler cho tất cả <a.bc-hidden-link> Äã render từ shortcode 77 // ========================= 78 document.querySelectorAll("a.bc-hidden-link").forEach(function (link) { 79 attachHiddenLinkHandler(link); 80 }); 81 82 // ========================= 83 // 5. Auto bind buttons 84 // - Header button (.header-button a.button): CHá» main1 85 // - .btnMainSite/.btnMainSite2/.btnMainSite3: main1/main2/main3 86 // ========================= 87 try { 88 // BANNERCFG ÄÆ°á»£c truyá»n từ PHP (wp_localize_script) 89 var cfg = typeof BANNERCFG !== "undefined" ? BANNERCFG : {}; 90 91 // Auto bind ON/OFF 92 var autoBind = String(cfg.autobind || "0") === "1"; 93 if (!autoBind) { 94 // console.log("HPPS Banner: auto bind OFF"); 95 return; 96 } 97 98 // urls 99 var main1Login = cfg.main1_login || ""; 100 var main1Register = cfg.main1_register || ""; 101 var main2Url = cfg.main2 || ""; 102 var main3Url = cfg.main3 || ""; 103 104 // Nếu main1 chưa có gì thì thôi (vì header button cần main1) 105 // Nhưng vẫn cho phép bind main2/main3 nếu có 106 // => không return sá»m á» Äây. 107 108 // helper encode + apply hidden link 109 function setHiddenLink(el, url) { 110 if (!el || !url) return; 111 112 if (el.getAttribute("data-bc-skip") === "1") return; 113 114 var encoded = btoa(url); 115 116 // nếu là <a> thì set href giả 117 if (el.tagName && el.tagName.toLowerCase() === "a") { 118 el.setAttribute("href", "tracking-link"); 119 } 120 121 el.classList.add("bc-hidden-link"); 122 el.setAttribute("data-href", encoded); 123 el.setAttribute("data-target", "_blank"); 124 el.setAttribute("rel", "nofollow noopener"); 125 126 attachHiddenLinkHandler(el); 127 128 // Nếu không phải <a> (button/div), thêm click open tab 129 if (!el.tagName || el.tagName.toLowerCase() !== "a") { 130 if (el.dataset.bcClickBound !== "1") { 131 el.dataset.bcClickBound = "1"; 132 el.addEventListener("click", function (e) { 133 e.preventDefault(); 134 window.open(url, "_blank", "noopener,noreferrer"); 135 }); 136 el.style.cursor = "pointer"; 137 } 138 } 139 } 140 141 // ========================= 142 // 5.1 Header button Flatsome (.header-button a.button) => CHá» MAIN1 143 // ========================= 144 if (main1Login || main1Register) { 145 var headerButtons = document.querySelectorAll(".header-button a.button"); 146 headerButtons.forEach(function (btn) { 147 if (btn.getAttribute("data-bc-skip") === "1") return; 148 149 var text = (btn.textContent || btn.innerText || "").toLowerCase(); 150 151 var useRegister = false;
152 if ( 153 text.indexOf("ÄÄng ký") !== -1 || 154 text.indexOf("dang ky") !== -1 || 155 text.indexOf("register") !== -1 || 156 text.indexOf("sign up") !== -1 157 ) { 158 useRegister = true; 159 } 160 161 // main1: ưu tiên theo text (register/login) 162 var finalUrl = useRegister 163 ? (main1Register || main1Login) 164 : (main1Login || main1Register); 165 166 setHiddenLink(btn, finalUrl); 167 }); 168 } 169 170 // ========================= 171 // 5.2 Custom buttons by class 172 // ========================= 173 // btnMainSite => main1 (ưu tiên register nếu có, không thì login) 174 var finalMain1 = main1Register || main1Login; 175 if (finalMain1) { 176 document.querySelectorAll(".btnMainSite").forEach(function (node) { 177 setHiddenLink(node, finalMain1); 178 }); 179 } 180 181 // btnMainSite2 => main2 (1 URL) 182 if (main2Url) { 183 document.querySelectorAll(".btnMainSite2").forEach(function (node) { 184 setHiddenLink(node, main2Url); 185 }); 186 } 187 188 // btnMainSite3 => main3 (1 URL) 189 if (main3Url) { 190 document.querySelectorAll(".btnMainSite3").forEach(function (node) { 191 setHiddenLink(node, main3Url); 192 }); 193 } 194 } catch (err) { 195 console.error("HPPS Banner bind error:", err); 196 } 197});
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.