לדלג לתוכן

משתמש:בוט גאון הירדן/category.js

מתוך המכלול, האנציקלופדיה היהודית

לתשומת ליבך: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
$(async () => {
  async function isProtectedOrDeleted(pageName) {
    try {
      const res = await fetch(
        "/w/api.php?action=query&prop=info|revisions&titles=" +
          pageName +
          "&indexpageids= true&rvlimit=1&rvprop=size|ids&list=logevents&inprop=protection&letype=delete&letitle=" +
          pageName +
          "&format=json"
      );
      const json = await res.json();
      if (
        json.query?.logevents?.[0] ||
        json.query.pageids[0] !== "-1" ||
        json.query?.pages["-1"]?.protection?.[0]
      ) {
        return true;
      }
      return false;
    } catch (error) {
      console.log(error);
      return true;
    }
  }
  function importCategory(title, text) {
    //שמירה
    if (confirm("תוכן הקטגוריה בויקיפדיה הוא:\n " + text + "\nלייבא?")) {
      $.post(
        mw.util.wikiScript("api"),
        {
          action: "edit",
          format: "json",
          bot: 1,
          title,
          text,
          watchlist: "unwatch",
          token: mw.user.tokens.get("csrfToken"),
          summary: "ייבוא מוויקיפדיה העברית, ראה רשימת התורמים",
          tags: "wikiimport"
        },
        function (data, status) {
          mw.notify("\nStatus: " + status);
        }
      ).done(function () {
        if (mw.config.get("wgNamespaceNumber") === 14) location.reload();
      });
    } else {
      //ללא ייבוא
      alert("הייבוא לא יתבצע");
    }
  }
  if (
    mw.config.get("wgNamespaceNumber") === 14 &&
    location.href.indexOf("redlink=1") > -1
  ) {
    const pagename = mw.config.get("wgPageName");
    if (await isProtectedOrDeleted(pagename)) return;
    const apiEndpoint =
      "https://import.hamichlol.org.il/?action=parse&page=" +
      encodeURIComponent(pagename) +
      "&format=json&prop=wikitext|revid&origin=*";

    /**
     * Send the request to get the text
     */
    fetch(apiEndpoint)
      .then((response) => response.json())
      .then(function (result) {
        if (result && result.parse) {
          if (!result.parse.wikitext["*"]) return;
          importCategory(result.parse.title, result.parse.wikitext["*"]);
        }
      })
      .catch((error) =>
        mw.notify("אירעה שגיאה בשאיבת התוכן. תיאור השגיאה הוא: " + error)
      );
  }

  if (
    ((mw.config.get("wgPageName") !== "עמוד_ראשי" &&
      mw.config.get("wgNamespaceNumber") === 0) ||
      mw.config.get("wgNamespaceNumber") === 14) &&
    mw.config.get("wgAction") === "view"
  ) {
    document
      .querySelectorAll("#mw-normal-catlinks > ul > li > a.new")
      .forEach(async (el) => {
        const nameCat = el.innerText;
        if (await isProtectedOrDeleted(`קטגוריה:${nameCat}`)) return;
        console.log(nameCat);
        const pointb = "https://import.hamichlol.org.il/?";
        const dataWi = {
          action: "parse",
          page: "קטגוריה:" + nameCat,
          format: "json",
          prop: "wikitext",
          utf8: "1",
          origin: "*",
        };
        $.ajax({
          url: pointb,
          data: dataWi,
          dataType: "json",
        })
          .done((result) => {
            if (result && result.parse) {
              const textpage = result.parse.wikitext["*"];
              if (!textpage) return;
              importCategory(result.parse.title, textpage);
            }
          })
          .fail(function (request, exception) {
            // Our error logic here
            var msg = "";
            if (request.status === 0) {
              msg = "Not connect.\n Verify Network.";
            } else if (request.status == 404) {
              msg = "Requested page not found. [404]";
            } else if (request.status == 418) {
              msg = "הייבוא או העדכון נחסם על ידי ספק הרשת";
            } else if (request.status == 500) {
              msg = "Internal Server Error [500].";
            } else if (exception === "parsererror") {
              msg = "Requested JSON parse failed.";
            } else if (exception === "timeout") {
              msg = "Time out error.";
            } else if (exception === "abort") {
              msg = "Ajax request aborted.";
            } else {
              msg = "Uncaught Error.\n" + request.responseText;
            }
            mw.notify(msg);
          });
      });
  }
});