משתמש:שרדינגר/stat.js
מראה
הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.
- פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
- גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
- אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
// טעינת מודולים פנימיים של ויקיפדיה ל-jQuery UI
mw.loader.load('jquery.ui');
// פונקציה שמחזירה את התאריך של היום בפורמט 'YYYY-MM-DD'
function getCurrentDate() {
const today = new Date();
const year = today.getFullYear();
const month = String(today.getMonth() + 1).padStart(2, '0');
const day = String(today.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
// פונקציה לחיפוש משתמשים שכתבו ערכים חדשים בתאריך מסוים
function fetchNewArticleAuthors(date) {
const startDate = `${date}T00:00:00Z`;
const endDate = `${date}T23:59:59Z`;
const apiUrl = `https://he.wikipedia.org/w/api.php?action=query&list=recentchanges&rcstart=${startDate}&rcend=${endDate}&rctype=new&rcshow=!redirect&rcnamespace=0&rcprop=title|userid|user|timestamp&rclimit=500&format=json&origin=*`;
console.log(`מבצע שאילתה ל-API עם URL: ${apiUrl}`);
$.getJSON(apiUrl, function(data) {
console.log('נתונים שהתקבלו מה-API:', data);
if (!data || !data.query || !data.query.recentchanges) {
console.error('שגיאה: הנתונים שהתקבלו מה-API לא תקינים.');
$('#new-authors').html('<p>שגיאה: לא ניתן לקבל נתונים מה-API.</p>');
return;
}
const recentChanges = data.query.recentchanges;
if (recentChanges.length === 0) {
$('#new-authors').html('<p>לא נמצאו ערכים חדשים בתאריך זה.</p>');
return;
}
console.log(`נמצאו ${recentChanges.length} ערכים חדשים.`);
// מערך לשמירת המשימות של בדיקת המשתמשים
const userCheckTasks = [];
recentChanges.forEach(function(change) {
userCheckTasks.push(checkUserEditCount(change.user, change.title));
});
// ביצוע כל הבדיקות במקביל
Promise.all(userCheckTasks).then(function(results) {
const filteredResults = results.filter(result => result !== null);
console.log(`נמצאו ${filteredResults.length} משתמשים חדשים.`);
displayResults(filteredResults);
});
}).fail(function(jqXHR, textStatus, errorThrown) {
console.error('שגיאה בביצוע הבקשה ל-API:', textStatus, errorThrown);
$('#new-authors').html('<p>אירעה שגיאה בזמן ביצוע הבקשה ל-API.</p>');
});
}
// פונקציה לבדיקת מספר העריכות של משתמש
function checkUserEditCount(username, articleTitle) {
return new Promise((resolve, reject) => {
const userApiUrl = `https://he.wikipedia.org/w/api.php?action=query&list=users&ususers=${encodeURIComponent(username)}&usprop=editcount|registration&format=json&origin=*`;
$.getJSON(userApiUrl, function(userData) {
console.log(`נתוני משתמש עבור ${username}:`, userData);
if (userData.query && userData.query.users && userData.query.users[0]) {
const user = userData.query.users[0];
if (user.editcount <= 5) { // נשאיר את הקריטריון על 5 עריכות או פחות
resolve({ username, articleTitle, editCount: user.editcount });
} else {
resolve(null);
}
} else {
console.log(`לא נמצאו נתונים עבור המשתמש ${username}`);
resolve(null);
}
}).fail(function(jqXHR, textStatus, errorThrown) {
console.error(`שגיאה בבדיקת המשתמש ${username}:`, textStatus, errorThrown);
resolve(null);
});
});
}
// פונקציה להצגת התוצאות
function displayResults(results) {
$('#new-authors').empty();
if (results.length === 0) {
$('#new-authors').append('<p>לא נמצאו משתמשים חדשים שכתבו ערכים חדשים ביום זה.</p>');
return;
}
results.forEach(function(result) {
const articleLink = `https://he.wikipedia.org/wiki/${encodeURIComponent(result.articleTitle)}`;
const messageButton = $('<button>').text('שלח הודעת ברכה').click(function() {
sendCongratulatoryMessage(result.username, result.articleTitle);
});
$('#new-authors').append(
$('<div>').html(`משתמש: ${result.username} (${result.editCount} עריכות) <br> ערך: <a href="${articleLink}" target="_blank">${result.articleTitle}</a>`).append(messageButton)
);
});
}
// פונקציה לשליחת הודעה אוטומטית למשתמש
function sendCongratulatoryMessage(username, articleTitle) {
const message = `== ברכות ==\n\nברכות, ${username}, על היוזמה שלך לכתיבת ערכך הראשון '''[[${articleTitle}]]'''.\nאני מאחל לך (ולוויקיפדיה) שתמשיך לכתוב עוד ערכים טובים רבים!`;
$.post(mw.util.wikiScript('api'), {
action: 'edit',
title: `שיחת_משתמש:${username}`,
section: 'new',
summary: 'ברכה על הערך הראשון',
text: message,
token: mw.user.tokens.get('csrfToken')
}).done(function() {
alert('הודעה נשלחה בהצלחה ל-' + username);
}).fail(function() {
alert('שליחת ההודעה נכשלה.');
});
}
// הוספת בורר תאריך וכפתור להפעלת החיפוש
$(document).ready(function() {
var container = $('#content').length ? $('#content') : $('body');
container.append('<div id="author-search-container" style="margin-top: 20px; padding: 10px; background-color: #f9f9f9; border: 1px solid #ddd;">');
$('#author-search-container').append('<h3>חיפוש כותבים חדשים לפי תאריך</h3>');
$('#author-search-container').append('<input type="text" id="date-picker" placeholder="בחר תאריך" style="margin-right: 10px;" />');
$('#author-search-container').append('<button id="fetch-authors-button">הצג כותבים חדשים</button>');
$('#author-search-container').append('<div id="new-authors" style="margin-top: 20px;"></div>');
$('#date-picker').datepicker({
dateFormat: 'yy-mm-dd',
defaultDate: getCurrentDate()
});
$('#fetch-authors-button').click(function() {
const selectedDate = $('#date-picker').val() || getCurrentDate();
fetchNewArticleAuthors(selectedDate);
});
});