לדלג לתוכן

משתמש:איסתרק/פתיחת קישורים בזמן עריכה.js

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

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

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

function Open_links_while_editing() {

  document.querySelector("#wpTextbox1").addEventListener('keydown', finLinkAndOpenIt = (event) => { //מאזין אירועים של לחיצה על קונטרול+רווח
    if (event.ctrlKey && event.code === 'Space') {
      const selectedText = window.getSelection().toString();
      NodeList.prototype.thelastItem = function() { // פונקציה שמחלצת את האלמנט האחרון במערך אלמנטים של Queryselector
        return this[this.length - 1];
      }

      api = new mw.Api(); // api להמרת קוד ויקי להטמ"ל
      api.get({
        "action": "flow-parsoid-utils",
        "format": "json",
        "from": "wikitext",
        "to": "html",
        "content": selectedText,
        "title": mw.config.get("wgPageName"),
        "utf8": 1
      }).done(finLinkAndOpenIt = json => {
        let PseudoElement = $("<div><div>"); // יצירת פאסודו־אלמנט הטמ"ל של ההטמ"ל שהתקבל
        PseudoElement.html(json["flow-parsoid-utils"].content);
        PseudoElement = PseudoElement[0];
        console.log(PseudoElement)
        /*חילוץ האלמנט האחרון בַפאסודו־אלמנט המכיל קישור. הקישור נתפס לפי סדר עדיפות מסוים,
        למשל: אם יש קישור חיצוני הוא יועדף לבחירה על פני קישור פנימי*/
        const linkElement =
          PseudoElement.querySelectorAll('[rel="mw:ExtLink"]').thelastItem() ||
          PseudoElement.querySelectorAll('[rel="mw:ExtLink/Inetrwiki"]').thelastItem() ||
          PseudoElement.querySelectorAll('[rel="mw:WikiLink/Interwiki"]').thelastItem() ||
          PseudoElement.querySelectorAll(".mw-file-description").thelastItem() ||
          PseudoElement.querySelectorAll('[rel="mw:WikiLink"]').thelastItem() ||
          PseudoElement.querySelectorAll('[rel="mw:PageProp/Category"]').thelastItem();
        console.log(linkElement);
        /* חילוץ שם דף במכלול או יו.אר.אל. מלא מתוך אלמנט הקישור*/
        const link = linkElement.rel && (linkElement.rel === "mw:WikiLink" ||
        	linkElement.rel === "mw:PageProp/Category") ? JSON.parse(linkElement.getAttribute("data-parsoid"))?.sa.href ||
        	linkElement.href : linkElement.getAttribute("href").replace("./", "");

        console.log(link);
        if (link.startsWith("http")) // בדיקת סוג הקישור (פנימי או חיצוני) ופתיחתו בהתאם
          open(link);
        else open("//www.hamichlol.org.il/" + link)
      }).catch(err => console.log(err))
    }
  });
}

if (mw.config.values["wgAction"] === "edit" || mw.config.values["wgAction"] === 'submit') { // הפעלת הפונקציה רק במצב עריכה בקוד מקור
  Open_links_while_editing();
}