MediaWiki:Gadget-RCSidebar.js
Not: Yayımladıktan sonra değişiklikleri görmeniz için tarayıcınızın önbelleğini temizlemeniz gerekebilir.
- Firefox / Safari: Shift tuşuna basılıyken Yeniden Yükle'ye tıklayın ya da Ctrl-F5 ya da Ctrl-R tıklayın (Mac için ⌘-R)
- Google Chrome: Ctrl-Shift-R'ye basın. (Mac için ⌘-Shift-R)
- Edge: Ctrl basılıyken Yenile'ye tıklayın ya da Ctrl-F5'e basın.
const {cdxIconImage} = require('./icons.json');
const {timeSince} = require('ext.gadget.Util');
const api = new mw.Api();
const RECENT_CHANGES_MAX = 5;
const RECENT_CHANGES_NS = 0;
const RECENT_CHANGES_TYPES = ['new', 'edit'];
const RECENT_CHANGES_PROPS = ['title', 'ids', 'user', 'userid', 'timestamp'];
Promise.all([
api.get({
action: 'query',
list: 'recentchanges',
rcprop: RECENT_CHANGES_PROPS,
// In case of duplicates, we fetch 10 times more entries than we display
rclimit: RECENT_CHANGES_MAX * 10,
rcshow: '!bot',
rctype: RECENT_CHANGES_TYPES,
rcnamespace: RECENT_CHANGES_NS,
}),
api.get({
action: 'query',
generator: 'recentchanges',
grcnamespace: RECENT_CHANGES_NS,
grclimit: RECENT_CHANGES_MAX * 10,
grcshow: '!bot',
prop: 'pageimages|info',
inprop: 'displaytitle',
}),
]).then(([recentChanges, recentChangesPageProps]) => {
const seenPages = new Set();
const recentChangeItems = [];
for (const recentChange of recentChanges.query.recentchanges) {
if (seenPages.size >= RECENT_CHANGES_MAX) {
break;
}
if (seenPages.has(recentChange.pageid)) {
continue;
}
seenPages.add(recentChange.pageid);
const pageProps = recentChangesPageProps.query.pages[recentChange.pageid];
const thumbnail = pageProps && pageProps.thumbnail ?
$('<span>', {
class: 'cdx-thumbnail__image',
css: {
backgroundImage: `url("${pageProps.thumbnail.source}")`,
},
}) :
$('<span>', {
class: 'cdx-thumbnail__placeholder',
html: $('<span>', {
class: 'cdx-icon cdx-icon--medium cdx-thumbnail__placeholder__icon--vue',
// <nowiki>
html: $(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))
.attr({
width: 20,
height: 20,
viewBox: '0 0 20 20',
'aria-hidden': true,
})
.html(cdxIconImage),
// </nowiki>
})
});
const userLink = mw.Title.makeTitle(2, recentChange.user).getUrl();
const pageLink = mw.util.getUrl(recentChange.title);
recentChangeItems.push($('<li>', {
class: 'mw-list-item rc-sidebar-item',
html: [
$('<span>', {
class: 'cdx-thumbnail rc-sidebar-item-thumbnail',
html: thumbnail,
}),
$('<span>', {
class: 'rc-sidebar-item-body',
html: [
$('<a>', {
class: 'rc-sidebar-item-title',
href: pageLink,
html: $('<span>', {
class: 'rc-sidebar-item-title-text',
text: pageProps ?
pageProps.displaytitle
.replace(/<[^>]*>?/gm, ''):
recentChange.title,
}),
}),
$('<span>' , {
class: 'rc-sidebar-item-description',
html: [
$('<a>', {
class: 'rc-sidebar-item-description-link',
href: `${pageLink}?diff=${recentChange.revid}&ref=rcsidebar`,
text: timeSince(recentChange.timestamp),
}),
'•',
$('<a>', {
class: 'rc-sidebar-item-description-link',
href: userLink,
text: recentChange.user,
}),
],
}),
],
}),
],
}));
}
$('.vector-sticky-pinned-container').append($('<div>', {
class: 'vector-menu',
html: [
$('<div>', {
class: 'vector-menu-heading',
html: $('<a>', {
href: mw.util.getUrl('Special:RecentChanges'),
text: mw.msg('recentchanges'),
}),
}),
$('<div>', {
class: 'vector-menu-content',
html: $('<ul>', {
class: 'vector-menu-content-list',
html: recentChangeItems,
}),
}),
],
}));
}).catch(err => console.error('Failed to fetch RC data for RCSidebar:', err));