HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/quadcode/frontend/src/js/components/lp/saas2/Lang.js
import { langArr } from "./LangArray";
import wlBrokerLangArray from "../wlBrokerLangArray";
import { affiliateBrokerLangArr } from "../affiliate_broker/affiliateBrokerLangArray";
import { whiteLabelBrokerageLangArray } from "../white_label_brokerage/whiteLabelBrokerageLangArray";
import { digitalCurrencyBrokerageLangArray } from "../digital-currency-brokerage/digitalCurrencyBrokerageLangArray";
import { affiliateLangArr } from "../affiliate/affiliateLangArray";
import { freeBrokerageLangArray } from "../free-brokerage/freeBrokerageLangArray.js";
import { clickOutside } from "../../../helpers/click-outside";

const changeLang = (allLang, lngItems, btnText) => {
  const wlBroker = document.getElementById("wl-broker");
  const aBroker = document.getElementById("affiliate-broker");
  const wlBrokerage = document.getElementById("white-label-brokerage");
  const dcBrokerage = document.getElementById("digital-currency-brokerage");
  const affiliate = document.getElementById("affiliate");
  const freeBrokerage = document.getElementById("free-brokerage");

  let url = new URL(window.location);
  let hash = url.hash;

  hash = hash.substr(1) || "en";

  if (!allLang.includes(hash)) {
    hash = "en";
  }
  localStorage.setItem("form__lang", hash);

  allLang.forEach((lang) => {
    document.body.classList.remove(`lang-${lang}`);
  });

  document.body.classList.add(`lang-${hash}`);

  lngItems.forEach((item) => item.classList.remove("active"));

  lngItems.forEach((item) => {
    if (item.dataset.lng === hash) {
      item.classList.add("active");
      btnText.innerHTML = item.innerHTML;
    }
  });

  let array = langArr;

  if (wlBroker) {
    array = wlBrokerLangArray;
  }
  if (aBroker) {
    array = affiliateBrokerLangArr;
  }
  if (wlBrokerage) {
    array = { ...affiliateBrokerLangArr, ...whiteLabelBrokerageLangArray };
  }
  if (dcBrokerage) {
    array = {
      ...affiliateBrokerLangArr,
      ...whiteLabelBrokerageLangArray,
      ...digitalCurrencyBrokerageLangArray,
    };
  }
  if (affiliate) {
    array = { ...affiliateBrokerLangArr, ...affiliateLangArr };
  }

  if (freeBrokerage) {
    array = freeBrokerageLangArray;
  }

  for (let key in array) {
    let elements = document.querySelectorAll(`[data-lang="lng-${key}"]`);
    elements.forEach((elem) => {
      if (elem) {
        const type = elem.dataset.langType;
        switch (type) {
          case "img":
            elem.src = array[key][hash] ? array[key][hash] : array[key]["en"];
            break;
          case "link":
            elem.href = array[elem.dataset.langLink][hash];
            elem.innerHTML = array[key][hash]
              ? array[key][hash]
              : array[key]["en"];
            break;
          case "input":
            elem.placeholder = array[key][hash]
              ? array[key][hash]
              : array[key]["en"];
            break;
          case "description":
            elem.content = array[key][hash]
              ? array[key][hash]
              : array[key]["en"];
            break;
          default:
            elem.innerHTML = array[key][hash]
              ? array[key][hash]
              : array[key]["en"];
            break;
        }
      }
    });
  }
};

export const Lang = () => {
  const wlBroker = document.getElementById("wl-broker");
  const affiliate = document.getElementById("affiliate");
  const affiliateTraffic = document.getElementById("affiliate-traffic");
  const affiliateBroker = document.getElementById("affiliate-broker");
  const wlBrokerage = document.getElementById("white-label-brokerage");
  const dcBrokerage = document.getElementById("digital-currency-brokerage");
  const freeBrokerage = document.getElementById("free-brokerage");

  let allLang = ["en", "es", "pt", "ko", "ja"];

  if (wlBroker) {
    allLang = ["en", "pt", "th"];
  }

  if (affiliateTraffic) {
    allLang = ["en", "es", "pt", "ko", "ja", "ru", "th"];
  }

  if (affiliate) {
    allLang = ["en", "es", "pt", "th"];
  }

  if (affiliateBroker || wlBrokerage || dcBrokerage) {
    allLang = ["en", "es", "pt", "th", "vi"];
  }

  if (freeBrokerage) {
    allLang = ["en", "pt", "es", "id"];
  }

  const changeLngs = document.querySelectorAll(".change-lng");

  const linkAllChangeLngs = (callback) => {
    changeLngs.forEach((item) => {
      const lngItems = item.querySelectorAll(".change-lng__item");
      const btnText = item.querySelector(".change-lng__btnText");
      callback(item, lngItems, btnText);
    });
  };

  if (!changeLngs || changeLngs.lenght === 0) return false;

  changeLngs.forEach((changeLng) => {
    const btn = changeLng.querySelector(".change-lng__btn");
    const btnText = changeLng.querySelector(".change-lng__btnText");
    const lngItems = changeLng.querySelectorAll(".change-lng__item");

    if (!btn) return false;

    btn.addEventListener("click", (event) => {
      event.stopPropagation();
      if (changeLng.classList.contains("active")) {
        changeLng.classList.remove("active");
      } else {
        changeLng.classList.add("active");
      }
    });
    document.addEventListener("click", (event) => {
      clickOutside(changeLng, (event) => {
        if (changeLng.classList.contains("active")) {
          changeLng.classList.remove("active");
        }
      });
    });
    document.addEventListener("scroll", () => {
      if (changeLng.classList.contains("active")) {
        changeLng.classList.remove("active");
      }
    });

    lngItems.forEach((item) => {
      item.addEventListener("click", () => {
        const usedLang = item.getAttribute("data-lng");

        linkAllChangeLngs((_, lngItems, btnText) => {
          lngItems.forEach((item) => item.classList.remove("active"));
          const item = Array.from(lngItems).find(
            (lngItem) => lngItem.attributes["data-lng"].nodeValue === usedLang
          );
          item?.classList.add("active");
          changeLng.classList.remove("active");

          btnText.innerHTML = item.t;
          if (usedLang === "en") {
            localStorage.setItem("form__lang", "en");
            location.href = window.location.pathname;
          } else {
            localStorage.setItem("form__lang", usedLang);
            location.href = window.location.pathname + "#" + usedLang;
          }
          changeLang(allLang, lngItems, btnText);
        });
      });
    });

    changeLang(allLang, lngItems, btnText);
  });
};