לדלג לתוכן

משתמש:איסתרק/גיבוי עריכות.js

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

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
/*
*הסקריפט המקורי הוצע כאן בדף משתמש:איסתרק/גיבוי עריכות.js
*קוד ראשוני לא תקין נלקח מצ'אטבוט רובי הבוט 
*כעת נכתב מחדש עם שיפורים משמעותיים
*/

mw.loader.using(["mw.util", "mw.storage"]).then(() => {
  const revisionid = mw.config.get("wgCurRevisionId");
  const section = mw.util.getParamValue("section");
  function debounce(func, wait) {
    let timeout;

    return function executedFunction() {
      const later = () => {
        clearTimeout(timeout);
        func();
      };

      clearTimeout(timeout);
      timeout = setTimeout(later, wait);
    };
  }

  function saveText() {
    const text = $("#wpTextbox1").val();
    const info = {
      revisionid,
      section,
    };
    mw.storage.setObject(
      `unsavedText ${mw.config.get("wgPageName")}`,
      JSON.stringify({ text, info })
    );
  }

  function getStoredText() {
    const storedText = mw.storage.getObject(
      `unsavedText ${mw.config.get("wgPageName")}`
    );
    if (!storedText) return;
    const { text, info } = JSON.parse(storedText);
    const sameSection = section === info.section;
    if (info.revisionid === revisionid && sameSection) {
      if (confirm("קיים לדף זה טקסט שלא שמרת\nתרצה לשחזרו?")) {
        mw.storage.remove(`unsavedText ${mw.config.get("wgPageName")}`);
        $("#wpTextbox1").val(text);
      } else {
        mw.storage.remove(`unsavedText ${mw.config.get("wgPageName")}`);
      }
    } else if (
      info.revisionid !== mw.config.get("wgCurRevisionId") &&
      sameSection
    ) {
      if (
        confirm(
          "קיים לדף זה טקסט שלא שמרת, אולם הדף נערך מאז.\nתרצה לשחזר את הטקסט תוך הקפדה על שמירת העריכות החדשות?"
        )
      ) {
        mw.storage.remove(`unsavedText ${mw.config.get("wgPageName")}`);
        $("#wpTextbox1").val(text);
      } else {
        mw.storage.remove(`unsavedText ${mw.config.get("wgPageName")}`);
      }
    }
  }
  if ($.inArray(mw.config.get("wgAction"), ["edit", "submit"]) + 1) {
    getStoredText();
    $("#wpTextbox1").on("input", debounce(saveText, 5000));
  }
});