לדלג לתוכן

משתמש:מוטי בוט/st.js

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

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
const isMobileWiew =
  document.getElementsByClassName("minerva-header").length > 0;
const isCategoryMatched =
  mw.config.get("wgCategories") &&
  mw.config.get("wgCategories").indexOf("המכלול: ערכים שנוצרו במכלול") === -1 &&
  mw.config.get("wgCategories").indexOf("המכלול: ערכים שתורגמו במכלול") === -1;

if (
  (isMobileWiew || isCategoryMatched) &&
  mw.config.get("wgNamespaceNumber") % 2 === 0 &&
  mw.config.get("wgPageName") !== "עמוד_ראשי" &&
  mw.config.get("wgAction") === "view" &&
  location.href.indexOf("&diff") === -1
) {
  mw.loader.using(["mediawiki.api"]).then(function () {
    var steps = 0;
    var PageName = mw.config
      .get("wgPageName")
      .replace(/^רבי\_/, "")
      .replace(/^הרב\_/, "")
      .replace(/_/g, " ")
      .replace(/ה\"קדוש(ה|ים)?\"/g, "הקדוש$1")
      .replace(/אישיות_מהתנ\"ך/g, "דמות מקראית")
      .replace(/א\-ל/g, "אל");
    var to;
    $against = $("<a>")
      .text("נסה שוב ")
      .click(function () {
        $("#meseg").remove();
        $(this).remove();
        getTheSize();
      });
    function getTheSize(steps) {
      if (window.PageName != undefined) PageName = window.PageName;
      if (steps > 10) return;
      var wikisize;
      var michsize;
      var girsa;
      var idPage;
      var message;
      var wparams = {
        action: "query",
        format: "json",
        list: "logevents",
        leprop: "ids|title|type|user|timestamp|comment|details",
        letype: "move",
        letitle: decodeURIComponent(PageName),
        lelimit: 1,
        prop: "info|revisions|langlinks|pageprops",
        titles: decodeURIComponent(PageName),
        indexpageids: true,
        redirects: 1,
        rvlimit: 1,
        rvprop: "size|ids",
        llprop: "langname|url",
        utf8: 1,
        lllang: "en",
        ppprop: "disambiguation",
      };
      var apiEndpoint = "https://import.hamichlol.org.il";
      var request = $.ajax({
        url: apiEndpoint,
        data: wparams,
        dataType: "json",
      })
        .done(function (result) {
          if (result && result.query) {
            console.table(result);
            if (result.query.pageids[0] == "-1") {
              var move = result.query.logevents;
              if (move[0]) {
                to = move[0].params.target_title;
                if (to.indexOf(":") != -1) {
                  var spaceName = to.split(":")[0];
                  spaceName = "הערך הועבר בוויקיפדיה למרחב " + spaceName;
                }
                var evs = to;
                var pageTo = "[[" + to + "]]";
                var linkToSend =
                  "/w/api.php?action=parse&format=json&title=עמוד ראשי&text=" +
                  encodeURIComponent(pageTo) +
                  "&utf8=1";
                fetch(linkToSend)
                  .then((response) => response.json())
                  .then(function (result) {
                    pageTo = result.parse.text["*"];
                    pageTo = pageTo.split("<p>")[1].split("</p>")[0];

                    var span = $(
                      '<span dir="rtl">&nbsp;הועבר אל:&nbsp;' +
                        pageTo +
                        "</span>"
                    );

                    $("#bodyContent").prepend(span);
                    if (spaceName) {
                      requestDelete(spaceName);
                    } else {
                      $("#bodyContent")
                        .prepend(
                          $("<button>")
                            .text("העברה")
                            .click(function () {
                              movePage(evs);
                            })
                        )
                        .prepend(
                          $("<button>")
                            .text("הפניה")
                            .click(function () {
                              updateRed(evs);
                            })
                        );
                    }
                  });
                wparams.letype = "delete";
                $.ajax({
                  url: apiEndpoint,
                  data: wparams,
                  dataType: "json",
                }).done(function (result) {
                  if (result && result.query) {
                    var deleted = result.query.logevents;
                    if (deleted[0]) {
                      var commentF = result.query.logevents[0].comment;
                      if (commentF.indexOf("התוכן היה") != -1) {
                        var comment = commentF.split("התוכן היה")[0];
                      } else {
                        comment = commentF;
                      }
                      message =
                        '<span id= "meseg">הדף נמחק בוויקיפדיה. סיבת המחיקה היא: </span>';

                      $("#bodyContent").prepend(message, comment);
                      var reason = "הערך נמחק בוויקיפדיה העברית";
                      if (!spaceName) requestDelete(reason);
                    } else {
                      message = '<span id= "meseg">לא נמצא דף בשם זה.</span>';
                      $("#bodyContent").prepend(message, $against);
                    }
                  }
                });
              } else {
                wparams.letype = "delete";
                $.ajax({
                  url: apiEndpoint,
                  data: wparams,
                  dataType: "json",
                }).done(function (result) {
                  if (result && result.query) {
                    var deleted = result.query.logevents;
                    if (deleted[0]) {
                      var linkToSend =
                        "/w/api.php?action=parse&format=json&title=עמוד ראשי&text=" +
                        encodeURIComponent(result.query.logevents[0].comment) +
                        "&utf8=1";
                      fetch(linkToSend)
                        .then((response) => response.json())
                        .then(function (result) {
                          var commentF = result.parse.text["*"];
                          if (commentF.indexOf("התוכן היה") != -1) {
                            var comment = commentF.split("התוכן היה")[0];
                          } else {
                            comment = commentF;
                          }
                          message =
                            '<span id= "meseg">הדף נמחק בוויקיפדיה. סיבת המחיקה היא: </span>';

                          $("#bodyContent").prepend(message, comment);
                          var reason = "הערך נמחק בוויקיפדיה העברית";
                          requestDelete(reason);
                        });
                    } else {
                      message = '<span id= "meseg">לא נמצא דף בשם זה.</span>';
                      $("#bodyContent").prepend(message, $against);
                    }
                  }
                });
              }
            } else {
              if (result.query.redirects) {
                to = result.query.redirects[0].to;
                var evs = to;
                var pageTo = "[[" + to + "]]";
                var linkToSend =
                  "/w/api.php?action=parse&format=json&title=עמוד ראשי&text=" +
                  encodeURIComponent(pageTo) +
                  "&utf8=1";
                fetch(linkToSend)
                  .then((response) => response.json())
                  .then(function (result) {
                    pageTo = result.parse.text["*"];
                    pageTo = pageTo.split("<p>")[1].split("</p>")[0];
                    var span = $("#bodyContent").prepend(
                      $(
                        '<span dir="rtl">&nbsp;הפניה אל:&nbsp;' +
                          pageTo +
                          "</span>"
                      )
                    );
                    $("#bodyContent")
                      .prepend(span)
                      .prepend(
                        $("<button>")
                          .text("העברה")
                          .click(function () {
                            movePage(evs);
                          })
                      )
                      .prepend(
                        $("<button>")
                          .text("הפניה")
                          .click(function () {
                            updateRed(evs);
                          })
                      );
                  });
              } else if (
                result.query.pages[result.query.pageids[0]].pageprops
              ) {
                message = '<span id= "meseg">ויקיפדיה: דף פירושונים.</span>';
                $("#bodyContent").prepend(message);
              } else {
                wikisize =
                  result.query.pages[result.query.pageids[0]].revisions[0].size;
                var langLinks =
                  result.query.pages[result.query.pageids[0]].langlinks;
                if (langLinks) {
                  var langname = langLinks[0].langname;
                  var url = langLinks[0].url;
                  var nav = $(
                    '<div class="vector-menu-content">' +
                      '<ul class="vector-menu-content-list"><li class="interlanguage-link interwiki-en"><a href=' +
                      url +
                      ' title="אנגלית" lang="en" hreflang="en" class="interlanguage-link-target" target= "blank" >אנגלית</a></li></ul>'
                  );
                  $("#p-lang").append(nav);
                }
                var Localpagename = mw.config.get("wgPageName");
                mparams = {
                  action: "query",
                  format: "json",
                  prop: "info|revisions",
                  titles: decodeURIComponent(Localpagename),
                  indexpageids: true,
                  rvlimit: 1,
                  rvprop: "size|ids",
                };
                $.ajax({
                  url: "/w/api.php",
                  data: mparams,
                  dataType: "json",
                }).done(function (result) {
                  if (result && result.query) {
                    michsize =
                      result.query.pages[result.query.pageids[0]].revisions[0]
                        .size;

                    var a = wikisize;
                    var b = michsize;
                    var diffsize = a - b;
                    var el;
                    var item = "<div>";
                    if (diffsize > 0) {
                      el = diffsize > 399 ? "strong" : "span";
                      item +=
                        '<div class="mw-rtrc-meta">ויקיפדיה:<' +
                        el +
                        ' class="mw-plusminus mw-plusminus-neg">(+' +
                        diffsize.toLocaleString() +
                        ")</" +
                        el +
                        "></div>";
                    } else if (diffsize === 0) {
                      item +=
                        '<div class="mw-rtrc-meta"><span class="mw-plusminus mw-plusminus-null">ויקיפדיה:(0)</span></div>';
                    } else {
                      el = diffsize < -399 ? "strong" : "span";
                      item +=
                        '<div class="mw-rtrc-meta">ויקיפדיה:<' +
                        el +
                        ' class="mw-plusminus mw-plusminus-pos"> (' +
                        diffsize.toLocaleString() +
                        ")</" +
                        el +
                        "></div>";
                    }
                    var corname = mw.config
                      .get("wgPageName")
                      .trim()
                      .replace(/_/g, " ");
                    PageName = PageName.trim().replace(/_/g, " ");
                    if (corname != PageName) {
                      item += " (" + PageName + ")";
                    }

                    item += "</div>";
                    var message;

                    isMobileWiew
                      ? $(".tagline").append(item)
                      : $(".mw-indicators").append(
                          $("<div>", {
                            class: "mw-indicator",
                            html: item,
                          })
                        );
                  }
                });
              }
            }
          }
        })
        .fail(function (e) {
          steps++;
          getTheSize(steps);
          console.log(e);
        });
    }
    setTimeout(function () {
      getTheSize();
    }, 1000);
    function updateRed(to) {
      var page = mw.config.get("wgPageName");

      var textpage = "#הפניה[[" + to + "]]";

      if (confirm("התוכן החדש יהיה: " + textpage)) {
        $.post(
          mw.util.wikiScript("api"),
          {
            action: "edit",
            format: "json",
            bot: true,
            title: page,
            text: textpage,
            token: mw.user.tokens.get("csrfToken"),
          },
          function (data, status) {
            if (data && data.edit) {
              mw.notify("\nStatus: " + status);
              location.reload();
            }
            if (data && data.error && data.error.code === "badtoken") {
              mw.notify("אירעה שגיאה");
              location.reload();
            }
          }
        );
      }
    }
    function letGetText(to) {
      fetch(
        "/w/api.php?action=parse&format=json&page=" +
          encodeURIComponent(to) +
          "&prop=wikitext&utf8=1"
      )
        .then((response) => response.json())
        .then(function (response) {
          //console.log(response)
          let data = response.parse.wikitext["*"];
          var Template = /(\{\{מיון ויקיפדיה\|דף=)(.*)(\|גרסה=)(\d*)/;
          let selectName = Template.exec(data);
          console.log(selectName);
          if (selectName != null) {
            if (selectName[2] != null) {
              var m = selectName;
              var n = m[0].replace(m[2], to);
              var letNewText = data.replace(m[0], n);

              letChangeText(to, letNewText);
            } else {
              console.log("nothing happend");
              location.reload();
            }
          } else {
            console.log("nothing happend");
            location.reload();
          }
        });
    }
    function letChangeText(to, letNewText) {
      $.post(
        mw.util.wikiScript("api"),
        {
          action: "edit",
          format: "json",
          title: to,
          text: letNewText,
          summary: "מיון ויקיפדיה",
          minor: 1,
          bot: 1,
          nocreate: 1,
          token: mw.user.tokens.get("csrfToken"),
          utf8: 1,
        },
        function (data) {
          if (data && data.edit && data.edit["result"] == "Success") {
            mw.notify(
              "עריכת הדף: " +
                decodeURIComponent(data.edit["title"]) +
                " הסתיימה"
            );
            location.reload();
          } else {
            console.log(data);
          }
        }
      );
    }
    function requestDelete(reason, spaceName) {
      var txt = reason ? reason : spaceName;
      var page = mw.config.get("wgPageName").replace(/_/g, " ");
      if (
        mw.config.get("wgUserGroups").indexOf("sysop") === -1 &&
        mw.config.get("wgUserGroups").indexOf("bot") === -1
      ) {
        $("#bodyContent").prepend(
          $("<button>")
            .text("בקש מחיקה")
            .click(function () {
              var api = new mw.Api();
              api
                .postWithToken("edit", {
                  action: "edit",
                  format: "json",
                  pageid: "18228",
                  section: "1",
                  appendtext:
                    "\n\n*{{בקשת מחיקה|" +
                    page +
                    "|" +
                    txt +
                    "}}  " +
                    " ~~" +
                    "~~",
                  summary: "/* בקשות מחיקה */ [[" + page + "]]",
                })
                .done(function (data) {
                  if (data && data.edit) {
                    mw.notify("בקשתך נשמרה בדף הבקשות ממפעילים");
                  }
                })
                .catch(function (error) {
                  alert(error);
                });
            })
        );
      } else {
        var href =
          "/w/index.php?title=" +
          decodeURIComponent(page) +
          "&action=delete&wpReason=" +
          txt;
        var $a = $("<a>");
        $a.attr("href", href).text("מחיקת הדף");
        $("#bodyContent").prepend($a);
      }
    }
    function movePage(to) {
      to = to.replace(/_/g, " ");

      var oldname = mw.config.get("wgPageName");
      var reason = "השוואה לוויקיפדיה העברית";
      var api = new mw.Api();
      api
        .postWithToken("move", {
          action: "move",
          format: "json",
          from: oldname,
          to: decodeURIComponent(to),
          reason: reason,
          movetalk: 1,
        })
        .done(function (data) {
          if (data && data.move) {
            mw.notify(
              "הדף: " +
                data.move["from"] +
                "\nהועבר בהצלחה לשם: " +
                data.move["to"]
            );

            letGetText(data.move["to"]);
          }
        })
        .catch(function (error) {
          if (error === "missingtitle") {
            alert("הדף לא קיים");
          }
          if (error === "articleexists" || error === "rediredctexists") {
            oldname = oldname.replace(/_/g, " ");
            var api = new mw.Api();
            if (
              mw.config.get("wgUserGroups").indexOf("sysop") !== -1 ||
              mw.config.get("wgUserGroups").indexOf("bot") !== -1
            ) {
              if (confirm("למחוק את " + to + " ?")) {
                api
                  .postWithToken("delete", {
                    action: "delete",
                    format: "json",
                    title: to,
                    reason: "מחיקה כדי לאפשר העברה מהשם [[" + oldname + "]]",
                  })
                  .done(function (data) {
                    if (data) {
                      mw.notify("הדף נמחק כעת. המתן להעברת הדף");
                      movePage(to);
                    }
                  });
              }
            } else {
              if (confirm("האם לבקש ממפעילים להעביר את הדף?")) {
                api
                  .postWithToken("edit", {
                    action: "edit",
                    format: "json",
                    pageid: "18228",
                    section: "6",
                    appendtext:
                      "\n*{{העברה|" +
                      oldname +
                      "|" +
                      to +
                      "}}  " +
                      reason +
                      " ~~" +
                      "~~",
                    summary:
                      "/* העברת דף */ [[" + oldname + "]] >> [[" + to + "]]",
                  })
                  .done(function (data) {
                    if (data && data.edit) {
                      mw.notify("בקשתך נשמרה בדף הבקשות ממפעילים");
                    }
                  });
              }
            }
          }
          if (error === "selfmove") {
            letGetText(to);
          } else {
            alert(error);
          }
        });
    }
  });
}