PageSourceSearch

https://styledevents.co/wp-content/plugins/hpp-suite-seo2/assets/frontend/banner/js/banner.js?ver=1.2.0

js styledevents.co collected 2026-10-10 00:25:16 UTC 6,021 bytes, 197 lines download raw bytes

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.