משתמש:איסתרק/פתיחת קישורים בזמן עריכה.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();
}