ব্যবহারকারী:মোহাম্মদ মারুফ/linkchecker.js

উইকিপিডিয়া, মুক্ত বিশ্বকোষ থেকে

লক্ষ্য করুন: প্রকাশ করার পর, পরিবর্তনগুলো দেখতে আপনাকে আপনার ব্রাউজারের ক্যাশে পরিষ্কার করার প্রয়োজন হতে পারে।

  • ফায়ারফক্স / সাফারি: পুনরায় লোড-এ ক্লিক করার সময় শিফট টিপে ধরে রাখুন, অথবা হয় Ctrl-F5 বা Ctrl-R টিপুন (ম্যাকে ⌘-R টিপুন)
  • গুগল ক্রোম: Ctrl-Shift-R (ম্যাকে ⌘-Shift-R) টিপুন
  • ইন্টারনেট এক্সপ্লোরার / এজ: Ctrl ধরে রাখা অবস্থায় Refresh-এ ক্লিক করুন, অথবা Ctrl-F5 টিপুন
  • অপেরা: Ctrl-F5 টিপুন।
(function () {
  /*
   ****************************************
   *** ব্যবহারকারী:মোহাম্মদ মারুফ/linkchecker.js: linkchecker module
   ****************************************
   * Mode of invocation:     check selected links has desired status
   * Active on:              all namespace
   * Config directives in:   ব্যবহারকারী:মোহাম্মদ মারুফ/linkchecker.js
   * creator:                মোহাম্মদ মারুফ
   * created on:             12 January, 2023
   */
  var sidebarObj = {
    vector: "mw-panel",
    monobook: "globalWrapper",
    timeless: "personal-inner",
    "vector-2022": "mw-panel",
  };
  //load css
  mw.loader.load(
    "https://bn.wikipedia.org/w/index.php?title=ব্যবহারকারী:মোহাম্মদ%20মারুফ/linkchecker.css&action=raw&ctype=text/css",
    "text/css"
  );
  const api = new mw.Api();
  function selection() {
    var ranges = {},
      a;
    var falseTag,
      sel = window.getSelection();
    for (var i = 0; i < sel.rangeCount; i++) {
      falseTag = document.createElement("div");
      falseTag.style.display = "none";
      falseTag.appendChild(sel.getRangeAt(i).cloneContents());
      for (var j = 0; j < falseTag.getElementsByTagName("a").length; j++) {
        a = falseTag.getElementsByTagName("a")[j];
        a.classList.add("selected");
        ranges[a.title] = a.href;
      }
    }
    return ranges;
  }
  //user language
  var lang = mw.config.get("wgPageContentLanguage");
  var linkchecker = document.createElement("div");
  linkchecker.id = "p-linkchecker";
  linkchecker.className = "linkchecker";
  linkchecker.innerHTML =
    '<div class="pBody"> <ul> <li><a href="javascript:void(0)" id="linkchecker">Linkchecker</a></li><li style="margin: 10px 0 0 0;"> <input class="linkchecker-input" type="radio" id="link" name="link" value="true" checked/> <label for="link">True</label> </li><li style="margin: 0 0 10px 0;"> <input class="linkchecker-input" type="radio" id="link" name="link" value="false"/> <label for="link">False</label> </li><li style="margin-left: 0;"> <label for="langcode">lang code</label> <input type="text" id="langcode" name="langcode" value="bn" maxlength="6"/> </li></ul> </div>';

  //add linkchecker to sidebar
  document
    .getElementById(sidebarObj[mw.config.get("skin")])
    .appendChild(linkchecker);
  var langLinkElem = document.getElementById("langcode");
  langLinkElem.onkeyup = function () {
    localStorage.setItem(btoa(lang + "-langlink-langcode"), langLinkElem.value);
  };
  langLinkElem.value =
    localStorage.getItem(btoa(lang + "-langlink-langcode")) || "bn";

  document.getElementById("linkchecker").onclick = function () {
    var linkcheckerInputs =
      document.getElementsByClassName("linkchecker-input");
    var langLink = langLinkElem.value;
    var linkcheckerValue;
    for (var linkcheckerInput of linkcheckerInputs) {
      if (linkcheckerInput.checked) {
        linkcheckerValue = linkcheckerInput.value ?? "true";
      }
    }
    var ranges = selection(); // get selected object
    for (var item in ranges) {
      Res(ranges[item], linkcheckerValue, langLink);
    }
  };

  async function Res(url, langcheck, langcode = "bn") {
    //get query of that page
    pagename = decodeURI(url).split("/wiki/")[1];
    var params = {
      action: "parse",
      format: "json",
      page: pagename,
      prop: "langlinks",
      formatversion: "2",
    };
    var data = await api.get(params);
    var langlink = "";
    for (var i = 0; i < data.parse.langlinks.length; i++) {
      if (data.parse.langlinks[i].lang == langcode) {
        langlink = data.parse.langlinks[i].url;
        break;
      }
    }
    if (langcheck == "true") {
      if (langlink) {
        window.open(langlink, "_blank");
      }
    } else if (langcheck == "false") {
      if (!langlink) {
        window.open(url, "_blank");
      }
    } else {
      //do nothing
    }
  }
})();