לדלג לתוכן

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

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

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
"use strict";
mw.loader.using(["mediawiki.diff.styles", "mediawiki.api"]).then(function () {
  var span = $(
    '<table class="ambox ambox-content plainlinks noprint" align="center" style="border: 1px solid gray;border-radius:1em;background: #jjjj;clear: both;margin:auto;">' +
      "<tbody><tr>" +
      '<td style="text-align: center;" class="mbox-text"><div id="mySpan"><b></b></div>' +
      "</td></tr></tbody>" +
      "</table>"
  );
  const button = document.createElement("button");
  button.textContent = "בדוק גרסאות";
  const wikiRevision = [];
  function getPageEdits() {
    const page = mw.config.get("wgPageName");
    const point = "/w/api.php?";
    const data = {
      action: "query",
      format: "json",
      prop: "revisions",
      indexpageids: 1,
      titles: page,
      utf8: 1,
      rvlimit: "max",
    };

    $.ajax({
      url: point,
      data: data,
      dataType: "json",
    }).done(function (result) {
      if (result && result.query) {
        const revisions = result.query.pages[result.query.pageids[0]].revisions;
        calculateRevisions(revisions);
      }
    });
  }
  const impo = /(יבוא מוו?יקיפדיה העברית|גרסה אחת של הדף)/;
  const idkun = /עי?דכון מוו?יקיפדיה גי?רסה (\d+)/;
  const wikiRevIdFromHtml = document.getElementById("wikiRevid")?.innerText;
  function calculateRevisions(revisions) {
    for (const revision of revisions) {
      const { comment, user } = revision;
      const time = calculateTime(revision.timestamp);

      if (idkun.test(comment)) {
        const wikiRevid = comment.match(idkun)[1];
        const wikiIDToCall = isNaN(+wikiRevid)
          ? wikiRevIdFromHtml
          : isNaN(+wikiRevIdFromHtml)
          ? wikiRevid
          : +wikiRevid > +wikiRevIdFromHtml
          ? wikiRevid
          : wikiRevIdFromHtml;
        //console.log(wikiRevid);
        const msg = "עודכן  " + time + ' ע"י ' + user;
        $("#bodyContent").prepend(span);
        //$('.minerva__tab-container').append(span);
        $("#mySpan").append(msg);
        $("#mySpan").append(button);
        button.addEventListener("click", () => {
          button.remove();
          checkWiki(wikiIDToCall);
        });
        return;
      }
      if (impo.test(comment)) {
        const msg = "הייבוא היה  " + time + ' ע"י ' + user + " ולא עודכן.";
        $("#bodyContent").prepend(span);
        //$('.minerva__tab-container').append(span);
        $("#mySpan").append(msg);
        if (wikiRevIdFromHtml) {
          $("#mySpan").append(button);
          button.addEventListener("click", () => {
            button.remove();
            checkWiki(wikiRevIdFromHtml);
          });
        }
        return;
      }
    }
  }
  function checkWiki(wikiRevid, rvcontinue = "") {
    if (!wikiRevid || isNaN(+wikiRevid)) return;
    console.log(wikiRevid);
    const page =
      document.getElementById("wikiPageName")?.innerText ||
      mw.config.get("wgPageName");

    const data = {
      action: "query",
      format: "json",
      prop: "revisions",
      indexpageids: 1,
      continue: "||",
      titles: page,
      utf8: 1,
      rvprop: "ids|timestamp|comment|content|slotsize|size",
      rvendid: wikiRevid,
      rvdir: "older",
    };
    if (rvcontinue) {
      data["rvcontinue"] = rvcontinue;
    }
    const apiEndpoint = "/import/get_wik1i.php";
    $.ajax({
      url: apiEndpoint,
      data: data,
      dataType: "json",
    }).done(function (result) {
      if (!result?.query) {
        console.log("שגיאה בקבלת גרסאות מוויקיפדיה: " + result.error.code);
        return;
      }

      if (result.query.pages["-1"]) {
        $("#mySpan").append(
          " שגיאה בקבלת גרסאות מוויקיפדיה: הדף " + page + " לא נמצא "
        );
        return;
      }

      for (const revision of result.query.pages[result.query.pageids[0]]
        .revisions) {
        wikiRevision.push(revision);
      }

      if (result["continue"]) {
        checkWiki(wikiRevid, result["continue"].rvcontinue);
      } else {
        const lastIndex = wikiRevision.length - 1;

        let newRev =
          lastIndex > 0
            ? "\n" + " נערך בוויקיפדיה מאז  " + lastIndex + " פעמים."
            : " אין גרסאות חדשות.";

        const difflength =
          wikiRevision[0]["size"] - wikiRevision[lastIndex]["size"];

        if (wikiRevision.length > 1) {
          newRev += " (" + difflength + ")";
        }
        const firstrevid = wikiRevision[lastIndex]["revid"];
        if (
          mw.config.get("wgUserGroups").indexOf("wikiupdate") !== -1 &&
          mw.config.get("wgUserGroups").indexOf("aspaklaryaEditor") !== -1
        )
          diff(firstrevid);
        $("#mySpan").append(newRev);
      }
    });
  }
  function calculateTime(mytime) {
  const lastEdit = new Date(mytime);
  const now = new Date();
  const distanceInSeconds = Math.floor((now - lastEdit) / 1000);

  const oneMinute = 60;
  const oneHour = 3600;
  const oneDay = 86400;
  const oneMonth = 2592000; // Average month: 30 days
  const oneYear = 31536000; // Average year: 365 days

  if (distanceInSeconds < oneMinute) {
    return 'עכשיו';
  } else if (distanceInSeconds < oneHour) {
    const minutes = Math.floor(distanceInSeconds / oneMinute);
    return `לפני ${minutes} דקות`;
  } else if (distanceInSeconds < oneDay) {
    const hours = Math.floor(distanceInSeconds / oneHour);
    if (hours === 1) {
      return 'לפני שעה';
    }
    return `לפני ${hours} שעות`;
  } else if (distanceInSeconds < oneMonth) {
    const days = Math.floor(distanceInSeconds / oneDay);
    if (days === 1) {
      return 'אתמול';
    }
    return `לפני ${days} ימים`;
  } else if (distanceInSeconds < oneYear) {
    const months = Math.floor(distanceInSeconds / oneMonth);
    if (months === 1) {
      return 'לפני חודש';
    }
    return `לפני ${months} חודשים`;
  } else {
    const years = Math.floor(distanceInSeconds / oneYear);
    if (years === 1) {
      return 'לפני שנה';
    }
    return `לפני ${years} שנים`;
  }
}
  function diff(firstrevid) {
    const data = {
      action: "compare",
      format: "json",
      fromrev: firstrevid,
      torelative: "cur",
      utf8: 1,
      origin: "*",
    };
    const apiEndpoint = "https://import.hamichlol.org.il/";
    $.ajax({
      url: apiEndpoint,
      data: data,
      dataType: "json",
    }).done(function (result) {
      if (!result || !result.compare) return;
      console.log(result.compare);
      const diffString = result.compare["*"];
      const msg = "(אין הבדלים)";
      if (diffString === "") {
        $("#mySpan").append(msg);
        return;
      }
      const pageParse = '<table id = "difftable">' + diffString + "</table>";
      const but12 = $("<a>")
        .text("הצג הבדלים")
        .click(function () {
          const mydiv = document.getElementById("difftable");

          if (mydiv) {
            $(mydiv).toggle();
          } else {
            $("#mySpan").append(pageParse);
          }
        });
      $("#mySpan").append(" ", but12);
    });
  }
  if (
    mw.config.get("wgArticleId") > 0 &&
    mw.config.get("wgNamespaceNumber") === 0 &&
    mw.config.get("wgPageName") != "עמוד_ראשי" &&
    mw.config.get("wgAction") === "view" &&
    location.href.indexOf("&diff") == -1
  ) {
    getPageEdits();
  }
});