לדלג לתוכן

משתמש:מ. רובין/ניסוי.js – הבדלי גרסאות

מתוך חב"דפדיה, אנציקלופדיה חב"דית חופשית
מ. רובין (שיחה | תרומות)
יצירת דף עם התוכן "// ==UserScript== // @name בודק קישורים // @description מציג אזהרות על קישורים בעייתיים בעריכת קוד מקור (פירושונים, הפניות, ערכים חסרים) // @version 1.0 // @match https://chabadpedia.co.il/* // @grant none // ==/UserScript== (function () { if (!['edit', 'submit'].includes(mw.config.get('wgAction'))) return; const textbox = document.getElementById('wpTextb..."
 
מ. רובין (שיחה | תרומות)
אין תקציר עריכה
שורה 1: שורה 1:
// ==UserScript== // @name        בודק קישורים // @description  מציג אזהרות על קישורים בעייתיים בעריכת קוד מקור (פירושונים, הפניות, ערכים חסרים) // @version      1.0 // @match      https://chabadpedia.co.il/* // @grant        none // ==/UserScript==
<div dir="rtl" style="text-align: right;">
    <h2>יצירת ערך אישיות חדש</h2>
    <p>אנא מלא את הפרטים הבאים ליצירת טיוטה של ערך אישיות. שדות המסומנים בכוכבית (*) הם חובה.</p>


(function () { if (!['edit', 'submit'].includes(mw.config.get('wgAction'))) return; const textbox = document.getElementById('wpTextbox1'); if (!textbox) return;
    <table class="wikitable" style="width: 100%;">
        <tr>
            <td style="width: 20%;">* <b>שם מלא:</b></td>
            <td><input type="text" id="personName" style="width: 95%;" placeholder="לדוגמה: מנחם מנדל שניאורסון" /></td>
        </tr>
        <tr>
            <td>* <b>תאריך לידה (עברי):</b></td>
            <td><input type="text" id="dobHebrew" style="width: 95%;" placeholder="לדוגמה: י"א בניסן ה'תרס"ב" /></td>
        </tr>
        <tr>
            <td><b>תאריך לידה (לועזי):</b></td>
            <td><input type="text" id="dobGregorian" style="width: 95%;" placeholder="לדוגמה: 18 באפריל 1902" /></td>
        </tr>
        <tr>
            <td>* <b>תאריך פטירה (עברי) / תאריך פטירה (אם נפטר):</b></td>
            <td><input type="text" id="dodHebrew" style="width: 95%;" placeholder="לדוגמה: ג' בתמוז ה'תשנ"ד (אם נפטר)" /></td>
        </tr>
        <tr>
            <td><b>תאריך פטירה (לועזי) / תאריך פטירה (אם נפטר):</b></td>
            <td><input type="text" id="dodGregorian" style="width: 95%;" placeholder="לדוגמה: 12 ביוני 1994 (אם נפטר)" /></td>
        </tr>
        <tr>
            <td><b>עיסוק/תפקיד:</b></td>
            <td><input type="text" id="occupation" style="width: 95%;" placeholder="לדוגמה: הרבי מליובאוויטש, משפיע" /></td>
        </tr>
        <tr>
            <td><b>קשר לחב"ד:</b></td>
            <td><textarea id="chabadConnection" style="width: 95%; height: 80px;" placeholder="כיצד האישיות קשורה לחסידות חב"ד? (לדוגמה: הרבי השביעי, תלמיד הישיבה, שליח)"></textarea></td>
        </tr>
        <tr>
            <td><b>ביוגרפיה קצרה:</b></td>
            <td><textarea id="shortBio" style="width: 95%; height: 120px;" placeholder="כאן יבוא תקציר ביוגרפי עיקרי."></textarea></td>
        </tr>
        <tr>
            <td><b>אירועים בולטים:</b></td>
            <td><textarea id="keyEvents" style="width: 95%; height: 100px;" placeholder="נקודות ציון חשובות בחיי האישיות."></textarea></td>
        </tr>
        <tr>
            <td><b>קישורים חיצוניים (אתרים, מקורות):</b></td>
            <td><textarea id="externalLinks" style="width: 95%; height: 80px;" placeholder="כל קישור בשורה נפרדת"></textarea></td>
        </tr>
        <tr>
            <td><b>קטגוריות (לדוגמה: רבני חב"ד, אדמו"רים):</b></td>
            <td><input type="text" id="categories" style="width: 95%;" placeholder="הפרד קטגוריות בפסיק, לדוגמה: רבנים חב"ד, מנהיגי חב"ד" /></td>
        </tr>
    </table>
    <br />
    <button id="generateArticleButton" style="padding: 10px 20px; font-size: 16px;">צור טיוטת ערך</button>
    <hr />
    <h3>טיוטת הערך שנוצרה:</h3>
    <textarea id="generatedArticle" style="width: 100%; height: 400px; font-family: monospace;" readonly></textarea>
    <br />
    <button id="copyToClipboard" style="padding: 8px 15px; font-size: 14px;">העתק ללוח</button>
    <button id="openNewArticle" style="padding: 8px 15px; font-size: 14px;">פתח דף ערך חדש לעריכה</button>
</div>


const linkRegex = /)/g; const linkPositions = []; const linkCache = new Set(); let match;
<script>
(function() {
    // פונקציית עזר לניקוי קלט
    function escapeHtml(unsafe) {
        return unsafe
            .replace(/&/g, "&amp;")
            .replace(/</g, "&lt;")
            .replace(/>/g, "&gt;")
            .replace(/"/g, "&quot;")
            .replace(/'/g, "&#039;");
    }


while ((match = linkRegex.exec(textbox.value)) !== null) { const start = match.index; const end = start + match[0].length; const fullLink = match[1].trim(); const target = fullLink.split('#')[0].split('/')[0]; if (linkCache.has(target)) continue; linkCache.add(target); linkPositions.push({ start, end, full: match[0], target }); }
    document.getElementById('generateArticleButton').addEventListener('click', function() {
        var name = document.getElementById('personName').value.trim();
        var dobH = document.getElementById('dobHebrew').value.trim();
        var dobG = document.getElementById('dobGregorian').value.trim();
        var dodH = document.getElementById('dodHebrew').value.trim();
        var dodG = document.getElementById('dodGregorian').value.trim();
        var occupation = document.getElementById('occupation').value.trim();
        var chabadConnection = document.getElementById('chabadConnection').value.trim();
        var shortBio = document.getElementById('shortBio').value.trim();
        var keyEvents = document.getElementById('keyEvents').value.trim();
        var externalLinks = document.getElementById('externalLinks').value.trim();
        var categories = document.getElementById('categories').value.trim();


linkPositions.forEach(({ target }) => checkLink(target));
        // בדיקות תקינות בסיסיות
        if (!name || !dobH || !dodH) {
            alert('אנא מלא את השדות המחייבים: שם מלא, תאריך לידה (עברי) ותאריך פטירה (עברי) או תאריך פטירה (אם נפטר).');
            return;
        }


function checkLink(title) { const url = /w/api.php?action=query&format=json&titles=${encodeURIComponent(title)}&redirects=1&origin=*; fetch(url).then(r => r.json()).then(data => { const pages = data.query.pages; const pageId = Object.keys(pages)[0]; const page = pages[pageId]; const realTitle = page?.title || title;
        var articleContent = "\n";
        articleContent += "{{אישיות";


if (pageId === '-1') {
        // פרטי האישיות
    showPopup(title, '🔴 דף זה אינו קיים.', 'red');
        articleContent += "\n|שם = " + name;
  } else if (realTitle.includes('(פירושונים)')) {
        articleContent += "\n|תאריך לידה = " + dobH + (dobG ? " (" + dobG + ")" : "");
    fetchPiros(title);
        articleContent += "\n|תאריך פטירה = " + dodH + (dodG ? " (" + dodG + ")" : "");
  } else if (title !== realTitle) {
        if (occupation) {
    showPopup(title, `🔵 הפניה ל־[[${realTitle}]]`, 'lightblue', realTitle);
            articleContent += "\n|עיסוק = " + occupation;
  }
        }
});
        if (chabadConnection) {
            articleContent += "\n|קשר לחב\"ד = " + chabadConnection;
        }
        articleContent += "\n}}\n\n"; // סגירת תבנית אישיות


}
        // פתיח
        articleContent += "'''" + name + "'''";
        if (dobH) {
            articleContent += " (נולד ב" + dobH;
            if (dobG) {
                articleContent += " / " + dobG;
            }
            articleContent += ")";
        }
        if (dodH) {
            articleContent += " נפטר ב" + dodH;
            if (dodG) {
                articleContent += " / " + dodG;
            }
            articleContent += ") ";
        }
        articleContent += "היה" + (occupation ? " " + occupation : "") + " ש" + (chabadConnection ? chabadConnection : "") + ".\n\n";


function fetchPiros(title) { const url = /w/api.php?action=parse&format=json&page=${encodeURIComponent(title)}&origin=*; fetch(url).then(r => r.json()).then(data => { const html = data.parse.text['*']; const parser = new DOMParser(); const doc = parser.parseFromString(html, 'text/html'); const links = [...doc.querySelectorAll('ul li a')] .map(a => a.title) .filter(t => t && !t.includes('(פירושונים)'));
        // ביוגרפיה
        if (shortBio) {
            articleContent += "== ביוגרפיה ==\n" + shortBio + "\n\n";
        }


showPopup(title, '🟡 דף פירושונים: בחר פירוש מתאים:', 'gold', null, links);
        // אירועים בולטים
});
        if (keyEvents) {
            articleContent += "== אירועים בולטים בחייו ==\n" + keyEvents + "\n\n";
        }


}
        // קישורים חיצוניים
        if (externalLinks) {
            articleContent += "== קישורים חיצוניים ==\n";
            var linksArray = externalLinks.split('\n').filter(line => line.trim() !== '');
            linksArray.forEach(function(link) {
                articleContent += "* " + link + "\n";
            });
            articleContent += "\n";
        }


function showPopup(originalTitle, message, color, replaceTo = null, options = []) { const marker = document.createElement('span'); marker.textContent = '⧉'; marker.style.cursor = 'pointer'; marker.style.marginLeft = '4px'; marker.style.color = color;
        // קטגוריות
        if (categories) {
            var catsArray = categories.split(',').map(cat => cat.trim()).filter(cat => cat !== '');
            catsArray.forEach(function(cat) {
                articleContent += "[[קטגוריה:" + cat + "]]\n";
            });
        }


const popup = document.createElement('div');
        document.getElementById('generatedArticle').value = articleContent;
popup.style.position = 'absolute';
    });
popup.style.background = color;
popup.style.border = '1px solid black';
popup.style.padding = '6px';
popup.style.zIndex = 9999;
popup.style.maxWidth = '240px';
popup.style.fontSize = '90%';
popup.textContent = message;


if (replaceTo) {
    document.getElementById('copyToClipboard').addEventListener('click', function() {
  const btn = document.createElement('button');
        var generatedArticle = document.getElementById('generatedArticle');
  btn.textContent = 'החלף ליעד';
        generatedArticle.select();
  btn.onclick = () => {
        document.execCommand('copy');
    replaceAllLinks(originalTitle, replaceTo);
        alert('התוכן הועתק ללוח.');
    popup.remove();
    });
  };
  popup.appendChild(document.createElement('br'));
  popup.appendChild(btn);
}


if (options.length) {
     document.getElementById('openNewArticle').addEventListener('click', function() {
  options.slice(0, 5).forEach(opt => {
        var name = document.getElementById('personName').value.trim();
     const btn = document.createElement('button');
        if (name) {
    btn.textContent = 'בחר ב־' + opt;
            var articleContent = document.getElementById('generatedArticle').value;
    btn.style.display = 'block';
            // קידוד התוכן ל-URL כדי שיוכל להיות מועבר כפרמטר
    btn.style.marginTop = '4px';
            var encodedContent = encodeURIComponent(articleContent);
    btn.onclick = () => {
            // פתיחת חלון חדש עם טופס העריכה
      replaceAllLinks(originalTitle, opt);
            window.open('/wiki/' + name + '?action=edit&preload=Template:ריק&text=' + encodedContent, '_blank');
      popup.remove();
        } else {
    };
            alert('אנא הזן שם מלא לפני פתיחת דף חדש.');
    popup.appendChild(btn);
        }
  });
    });
}
})();
 
</script>
const skipBtn = document.createElement('button');
skipBtn.textContent = 'דלג';
skipBtn.style.marginTop = '4px';
skipBtn.onclick = () => popup.remove();
popup.appendChild(document.createElement('br'));
popup.appendChild(skipBtn);
 
marker.onclick = (e) => {
  popup.style.left = e.pageX + 'px';
  popup.style.top = e.pageY + 'px';
  document.body.appendChild(popup);
};
 
// הוספה ליד כל מופע
const lines = textbox.value.split('\n');
const newLines = lines.map(line =>
  line.replace(new RegExp(`(${escapeRegex(originalTitle)})([\|])`, 'g'),
    (m, p1, p2) => `[[${p1}${p2}<span class="link-marker" data-title="${originalTitle}"></span>`)
);
textbox.value = newLines.join('\n');
 
setTimeout(() => {
  const spans = document.querySelectorAll('.link-marker[data-title="' + originalTitle + '"]');
  spans.forEach(span => span.replaceWith(marker.cloneNode(true)));
}, 100);
 
}
 
function replaceAllLinks(from, to) { const re = new RegExp(${escapeRegex(from)}(\||), 'g'); textbox.value = textbox.value.replace(re, [[${to}$1); }
 
function escapeRegex(s) { return s.replace(/[.*+?^${}()|[/g, '\$&'); } })();

גרסה מ־15:49, 15 ביוני 2025

<div dir="rtl" style="text-align: right;">
    <h2>יצירת ערך אישיות חדש</h2>
    <p>אנא מלא את הפרטים הבאים ליצירת טיוטה של ערך אישיות. שדות המסומנים בכוכבית (*) הם חובה.</p>

    <table class="wikitable" style="width: 100%;">
        <tr>
            <td style="width: 20%;">* <b>שם מלא:</b></td>
            <td><input type="text" id="personName" style="width: 95%;" placeholder="לדוגמה: מנחם מנדל שניאורסון" /></td>
        </tr>
        <tr>
            <td>* <b>תאריך לידה (עברי):</b></td>
            <td><input type="text" id="dobHebrew" style="width: 95%;" placeholder="לדוגמה: י"א בניסן ה'תרס"ב" /></td>
        </tr>
        <tr>
            <td><b>תאריך לידה (לועזי):</b></td>
            <td><input type="text" id="dobGregorian" style="width: 95%;" placeholder="לדוגמה: 18 באפריל 1902" /></td>
        </tr>
        <tr>
            <td>* <b>תאריך פטירה (עברי) / תאריך פטירה (אם נפטר):</b></td>
            <td><input type="text" id="dodHebrew" style="width: 95%;" placeholder="לדוגמה: ג' בתמוז ה'תשנ"ד (אם נפטר)" /></td>
        </tr>
        <tr>
            <td><b>תאריך פטירה (לועזי) / תאריך פטירה (אם נפטר):</b></td>
            <td><input type="text" id="dodGregorian" style="width: 95%;" placeholder="לדוגמה: 12 ביוני 1994 (אם נפטר)" /></td>
        </tr>
        <tr>
            <td><b>עיסוק/תפקיד:</b></td>
            <td><input type="text" id="occupation" style="width: 95%;" placeholder="לדוגמה: הרבי מליובאוויטש, משפיע" /></td>
        </tr>
        <tr>
            <td><b>קשר לחב"ד:</b></td>
            <td><textarea id="chabadConnection" style="width: 95%; height: 80px;" placeholder="כיצד האישיות קשורה לחסידות חב"ד? (לדוגמה: הרבי השביעי, תלמיד הישיבה, שליח)"></textarea></td>
        </tr>
        <tr>
            <td><b>ביוגרפיה קצרה:</b></td>
            <td><textarea id="shortBio" style="width: 95%; height: 120px;" placeholder="כאן יבוא תקציר ביוגרפי עיקרי."></textarea></td>
        </tr>
        <tr>
            <td><b>אירועים בולטים:</b></td>
            <td><textarea id="keyEvents" style="width: 95%; height: 100px;" placeholder="נקודות ציון חשובות בחיי האישיות."></textarea></td>
        </tr>
        <tr>
            <td><b>קישורים חיצוניים (אתרים, מקורות):</b></td>
            <td><textarea id="externalLinks" style="width: 95%; height: 80px;" placeholder="כל קישור בשורה נפרדת"></textarea></td>
        </tr>
        <tr>
            <td><b>קטגוריות (לדוגמה: רבני חב"ד, אדמו"רים):</b></td>
            <td><input type="text" id="categories" style="width: 95%;" placeholder="הפרד קטגוריות בפסיק, לדוגמה: רבנים חב"ד, מנהיגי חב"ד" /></td>
        </tr>
    </table>
    <br />
    <button id="generateArticleButton" style="padding: 10px 20px; font-size: 16px;">צור טיוטת ערך</button>
    <hr />
    <h3>טיוטת הערך שנוצרה:</h3>
    <textarea id="generatedArticle" style="width: 100%; height: 400px; font-family: monospace;" readonly></textarea>
    <br />
    <button id="copyToClipboard" style="padding: 8px 15px; font-size: 14px;">העתק ללוח</button>
    <button id="openNewArticle" style="padding: 8px 15px; font-size: 14px;">פתח דף ערך חדש לעריכה</button>
</div>

<script>
(function() {
    // פונקציית עזר לניקוי קלט
    function escapeHtml(unsafe) {
        return unsafe
            .replace(/&/g, "&amp;")
            .replace(/</g, "&lt;")
            .replace(/>/g, "&gt;")
            .replace(/"/g, "&quot;")
            .replace(/'/g, "&#039;");
    }

    document.getElementById('generateArticleButton').addEventListener('click', function() {
        var name = document.getElementById('personName').value.trim();
        var dobH = document.getElementById('dobHebrew').value.trim();
        var dobG = document.getElementById('dobGregorian').value.trim();
        var dodH = document.getElementById('dodHebrew').value.trim();
        var dodG = document.getElementById('dodGregorian').value.trim();
        var occupation = document.getElementById('occupation').value.trim();
        var chabadConnection = document.getElementById('chabadConnection').value.trim();
        var shortBio = document.getElementById('shortBio').value.trim();
        var keyEvents = document.getElementById('keyEvents').value.trim();
        var externalLinks = document.getElementById('externalLinks').value.trim();
        var categories = document.getElementById('categories').value.trim();

        // בדיקות תקינות בסיסיות
        if (!name || !dobH || !dodH) {
            alert('אנא מלא את השדות המחייבים: שם מלא, תאריך לידה (עברי) ותאריך פטירה (עברי) או תאריך פטירה (אם נפטר).');
            return;
        }

        var articleContent = "\n";
        articleContent += "{{אישיות";

        // פרטי האישיות
        articleContent += "\n|שם = " + name;
        articleContent += "\n|תאריך לידה = " + dobH + (dobG ? " (" + dobG + ")" : "");
        articleContent += "\n|תאריך פטירה = " + dodH + (dodG ? " (" + dodG + ")" : "");
        if (occupation) {
            articleContent += "\n|עיסוק = " + occupation;
        }
        if (chabadConnection) {
            articleContent += "\n|קשר לחב\"ד = " + chabadConnection;
        }
        articleContent += "\n}}\n\n"; // סגירת תבנית אישיות

        // פתיח
        articleContent += "'''" + name + "'''";
        if (dobH) {
            articleContent += " (נולד ב" + dobH;
            if (dobG) {
                articleContent += " / " + dobG;
            }
            articleContent += ")";
        }
        if (dodH) {
            articleContent += " נפטר ב" + dodH;
            if (dodG) {
                articleContent += " / " + dodG;
            }
            articleContent += ") ";
        }
        articleContent += "היה" + (occupation ? " " + occupation : "") + " ש" + (chabadConnection ? chabadConnection : "") + ".\n\n";

        // ביוגרפיה
        if (shortBio) {
            articleContent += "== ביוגרפיה ==\n" + shortBio + "\n\n";
        }

        // אירועים בולטים
        if (keyEvents) {
            articleContent += "== אירועים בולטים בחייו ==\n" + keyEvents + "\n\n";
        }

        // קישורים חיצוניים
        if (externalLinks) {
            articleContent += "== קישורים חיצוניים ==\n";
            var linksArray = externalLinks.split('\n').filter(line => line.trim() !== '');
            linksArray.forEach(function(link) {
                articleContent += "* " + link + "\n";
            });
            articleContent += "\n";
        }

        // קטגוריות
        if (categories) {
            var catsArray = categories.split(',').map(cat => cat.trim()).filter(cat => cat !== '');
            catsArray.forEach(function(cat) {
                articleContent += "[[קטגוריה:" + cat + "]]\n";
            });
        }

        document.getElementById('generatedArticle').value = articleContent;
    });

    document.getElementById('copyToClipboard').addEventListener('click', function() {
        var generatedArticle = document.getElementById('generatedArticle');
        generatedArticle.select();
        document.execCommand('copy');
        alert('התוכן הועתק ללוח.');
    });

    document.getElementById('openNewArticle').addEventListener('click', function() {
        var name = document.getElementById('personName').value.trim();
        if (name) {
            var articleContent = document.getElementById('generatedArticle').value;
            // קידוד התוכן ל-URL כדי שיוכל להיות מועבר כפרמטר
            var encodedContent = encodeURIComponent(articleContent);
            // פתיחת חלון חדש עם טופס העריכה
            window.open('/wiki/' + name + '?action=edit&preload=Template:ריק&text=' + encodedContent, '_blank');
        } else {
            alert('אנא הזן שם מלא לפני פתיחת דף חדש.');
        }
    });
})();
</script>