İçeriğe atla

MediaWiki:Gadget-RCSidebar.js

Deltarune Wiki sitesinden

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),
								}),
								'&bull;',
								$('<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));
Konu ekle