לדלג לתוכן

משתמש:שרדינגר/user-articles-list.js

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

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
// פונקציה להוספת רשימת הערכים שיצר המשתמש לדף
function addPages() {
    var username = mw.config.get('wgUserName');
    var apiUrl = 'https://he.wikipedia.org/w/api.php?action=query&list=usercontribs&ucuser=' + encodeURIComponent(username) + '&ucnamespace=0&uclimit=max&format=json&origin=*';

    $.getJSON(apiUrl, function(data) {
        var pages = data.query.usercontribs.filter(function(contrib) {
            return contrib.comment.includes('יצירת דף חדש') || contrib.parentid === 0;
        }).map(function(contrib) {
            return contrib.title;
        });

        if (pages.length > 0) {
            var uniquePages = [...new Set(pages)].sort(); // הסרת כפילויות ומיון לפי סדר הא-ב
            var listType = 'ערכים שיצרתי (' + uniquePages.length + ')';

            // בדיקה אם הערך נכתב במסגרת מיזם לטיפול דחוף
            var checkProjectPromises = uniquePages.map(function(page) {
                return checkIfProjectPage(page).then(function(isProjectPage) {
                    return { title: page, isProjectPage: isProjectPage };
                });
            });

            Promise.all(checkProjectPromises).then(function(results) {
                var newText = '<div id="user-script-list" style="background-color:#f0f8ff; border:2px solid #0f5132; padding:20px; text-align:right; margin-top:20px; border-radius: 10px;">' +
                    '<h2 style="color:#0f5132; margin-top:0;">' + listType + '</h2>' +
                    '<div style="column-count: 2; column-gap: 20px; list-style-type: none; padding: 0;">' +
                    '<ul style="list-style-type: none; padding: 0;">' +
                    results.map(function(result) {
                        var projectNote = result.isProjectPage ? ' (נכתב במסגרת [[תבנית: לטיפול דחוף|המיזם לטיפול דחוף]])' : '';
                        return '<li>🔹 [[' + result.title + ']]' + projectNote + '</li>';
                    }).join('') +
                    '</ul></div>' +
                    '<div style="margin-top: 20px; font-size: 12px; color: #555;">' +
                    'ℹ️ נוצר באופן אוטומטי על ידי [[משתמש:שרדינגר/user-articles-list.js|סקריפט לעדכון ערכים שכתבתי]]. להוספת הסקריפט לדף הסקריפטים האישי שלכם, הוסיפו <code>importScript(\'משתמש:שרדינגר/user-articles-list.js\');</code>. למידע נוסף, ראו [[ויקיפדיה:סקריפטים#סקריפטים_פרטיים]].' +
                    '</div></div>';

                // הוספת התבנית המעוצבת לתיבת העריכה בראש הדף או עדכון תבנית קיימת
                var textarea = $('#wpTextbox1');
                var currentText = textarea.val();
                var startTag = '<div id="user-script-list"';
                var endTag = '</div></div>';
                var startIndex = currentText.indexOf(startTag);
                var endIndex = currentText.indexOf(endTag, startIndex) + endTag.length;

                if (startIndex !== -1 && endIndex !== -1) {
                    // מחיקת התוכן הקיים והוספת החדש
                    textarea.val(currentText.slice(0, startIndex) + newText + currentText.slice(endIndex));
                } else {
                    // הוספת התוכן החדש
                    textarea.val(newText + '\n\n' + currentText);
                }

                // הודעה על המסך
                $('#editform').prepend('<div id="added-notification" style="color: green; font-weight: bold;">הערכים נוספו לתיבת העריכה בראש הדף. אנא בדוק את התוספות ושמור את השינויים אם תרצה.</div>');
            }).catch(function(error) {
                // הודעה על המסך במקרה של שגיאה
                $('#editform').prepend('<div id="added-notification" style="color: red; font-weight: bold;">אירעה שגיאה בעת ניסיון לעדכן את רשימת הערכים.</div>');
                console.error('אירעה שגיאה בעת ניסיון לעדכן את רשימת הערכים:', error);
            });
        } else {
            // הודעה על המסך
            $('#editform').prepend('<div id="added-notification" style="color: red; font-weight: bold;">לא נמצאו ערכים שיצרת.</div>');
        }
    }).fail(function() {
        // הודעה על המסך
        $('#editform').prepend('<div id="added-notification" style="color: red; font-weight: bold;">אירעה שגיאה בעת ניסיון לקבל את רשימת התרומות.</div>');
    });
}

// פונקציה לבדיקת אם הערך נכתב במסגרת המיזם לטיפול דחוף
function checkIfProjectPage(page) {
    return new Promise(function(resolve, reject) {
        var talkPageTitle = 'שיחה:' + page;
        var apiUrl = 'https://he.wikipedia.org/w/api.php?action=query&titles=' + encodeURIComponent(talkPageTitle) + '&prop=templates&format=json&origin=*';

        $.getJSON(apiUrl, function(data) {
            var pages = data.query.pages;
            var pageId = Object.keys(pages)[0];
            var templates = pages[pageId].templates || [];

            var isProjectPage = templates.some(function(template) {
                return template.title.includes('תבנית:מיזם לטיפול דחוף');
            });

            resolve(isProjectPage);
        }).fail(function() {
            reject(new Error('אירעה שגיאה בעת ניסיון לבדוק את דף השיחה של הערך ' + page));
        });
    });
}

// בדיקה אם המשתמש עורך דף במרחב המשתמש שלו
$(function() {
    var pageName = mw.config.get('wgPageName');
    var action = mw.config.get('wgAction');

    if (pageName.startsWith('משתמש:' + mw.config.get('wgUserName')) && action === 'edit') {
        // יצירת כפתור להוספת רשימת הערכים שיצרתי
        var buttonContainer = $('<div>', { id: 'buttonContainer' }).css({
            'margin-bottom': '15px',
            'display': 'inline-block' // להבטיח שהכפתור יוצג נכון
        });
        
        var createdButton = $('<button>')
            .text('הוספת רשימת ערכים שיצרתי')
            .css({
                'padding': '10px 15px',
                'background-color': '#0366d6',
                'color': 'white',
                'border': 'none',
                'border-radius': '5px',
                'cursor': 'pointer',
                'display': 'inline-block',
                'margin-right': '10px' // להבטיח רווח בין הכפתורים
            })
            .on('click', function(event) {
                event.preventDefault(); // מניעת ברירת המחדל של הכפתור
                addPages();
            });

        buttonContainer.append(createdButton);

        $('#wpTextbox1').before(buttonContainer);
    }
});