User:Kurgenera/block.js
外观
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
// 在看到特定用户时弹出提醒
$(function() {
if (!window.mw) {
console.error("MediaWiki environment not detected.");
return;
}
// 这样就能确保脚本在所有讨论页、站务页、用户页和特殊页运行。
var currentNamespace = mw.config.get('wgNamespaceNumber');
// 排除:0=条目, 6=文件, 8=系统界面, 10=模板, 12=帮助, 14=分类
// 排除所有扩展名空间,只专注于站务、讨论、用户和特殊页。
const EXCLUDED_NAMESPACES = [
-2, 0, 6, 12, 14, 100, 126, 710, 828, 1728, 2600
];
if (EXCLUDED_NAMESPACES.includes(currentNamespace)) {
return;
}
// *****************************************************************
// 阻止脚本在用户自己的页面运行
var pageName = mw.config.get('wgPageName');
var userName = mw.config.get('wgUserName');
// 定义需要排除的前缀:例如 "User:YourUsername" 和 "User_talk:YourUsername"
var userPagePrefix = 'User:' + userName;
var talkPagePrefix = 'User_talk:' + userName;
// 检查当前页面是否是用户页或其子页面(startsWith 检查所有子页面)
// *****************************************************************
// **********************************************
// 1. 在此数组中填入您希望看到提醒的用户名列表 (请用英文双引号包裹,用逗号分隔)
// 示例: ["管理员示例", "用户B的测试账号"]
var targetUsers = ["Example"]; //暂时没有
// **********************************************
// **********************************************
// 2. 替换成您想要的提醒信息
var reminderTitle = "!!! 立即停止并保持冷静 !!!";
var reminderMessage = "注意!页面内容包含您不想看到的用户,请保持冷静";
// **********************************************
// 脚本核心逻辑,检查页面内容
var pageContent = document.body.innerHTML;
var found = false;
/*
for (var i = 0; i < targetUsers.length; i++) {
// 检查页面 HTML 中是否包含目标用户名。这会捕获页面上的链接和文本。
if (pageContent.includes(targetUsers[i])) {
found = true;
break;
}
}
*/
for (var i = 0; i < targetUsers.length; i++) {
var userToCheck = targetUsers[i];
// 增加对用户链接和裸用户名的双重检查
if (pageContent.includes(userToCheck) || pageContent.includes('User:' + userToCheck)) {
found = true;
console.log("Found target user on page:", userToCheck);
break;
}
}
if (found) {
if (pageName.startsWith(userPagePrefix) || pageName.startsWith(talkPagePrefix)) {
mw.notify("在个人用户页或讨论页已禁用block.js", {
title: "页面内容包含您不想看到的用户",
type: 'warn',
tag: 'user-anger-reminder',
autoHide: true // 设置为 false 保持通知显示,直到手动关闭
});
console.log("用户提醒:在个人用户页或讨论页禁用。");
return; // 立即退出脚本,不再执行后续的用户检测和弹窗逻辑
}
// 使用浏览器弹窗提醒 alert(reminderMessage);
mw.notify(reminderMessage, {
title: reminderTitle,
type: 'error',
tag: 'user-anger-reminder',
autoHide: false // 设置为 false 保持通知显示,直到手动关闭
});
var modalCSS =
// 遮罩层:固定位置,覆盖整个视口,半透明黑色,Z-index极高
'#user-anger-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.85); z-index: 99999; }' +
// 弹窗本身:居中,白色背景,红色边框,更高的Z-index
'#user-anger-modal { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: #fff; padding: 25px; border: 5px solid red; border-radius: 8px; z-index: 100000; width: 450px; max-width: 90%; text-align: center; box-shadow: 0 0 20px rgba(255,0,0,0.5); }' +
'#user-anger-modal h2 { color: red; margin-top: 0; font-size: 1.8em; }' +
'#user-anger-modal p { font-size: 1.1em; margin-bottom: 20px; }' +
'#user-anger-modal button { padding: 10px 15px; margin: 5px; cursor: pointer; border: none; border-radius: 4px; font-weight: bold; }' +
'#user-anger-modal .btn-continue { background-color: #4CAF50; color: white; }' +
'#user-anger-modal .btn-leave { background-color: #f44336; color: white; }';
mw.util.addCSS(modalCSS);
// 2. 创建模态弹窗和遮罩层 HTML 结构
var $overlay = $('<div>').attr('id', 'user-anger-overlay');
var $modal = $('<div>').attr('id', 'user-anger-modal');
$modal.append($('<h2>').text(reminderTitle));
$modal.append($('<p>').html(reminderMessage));
// 创建按钮
var $continueBtn = $('<button>')
.addClass('btn-continue')
.text('我已冷静,继续操作')
.on('click', function() {
$overlay.remove(); // 移除整个遮罩层和弹窗,恢复页面互动
$modal.remove();
});
var $leaveBtn = $('<button>')
.addClass('btn-leave')
.text('离开此页 (推荐)')
.on('click', function() {
// 将用户导向到维基百科首页
var mainPageUrl = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace('$1', 'Main Page');
window.location.href = mainPageUrl;
});
$modal.append($continueBtn, $leaveBtn);
// 3. 将弹窗和遮罩层添加到页面主体
$('body').append($overlay, $modal);
/*
// 关键:加载 jQuery UI Dialog 模块
mw.loader.using('jquery.ui.dialog', function() {
var $dialog = $('<div>').html('<p style="font-size: 1.1em; color: red; text-align: center;">' + reminderMessage + '</p>').attr('title', reminderTitle);
$dialog.dialog({
modal: true,
width: 550,
closeOnEscape: false,
draggable: false,
resizable: false,
buttons: {
"我已冷静,继续操作": function() {
$(this).dialog("close");
},
"离开此页 (推荐)": function() {
var mainPageUrl = mw.config.get('wgServer') + mw.config.get('wgArticlePath').replace('$1', 'Main Page');
window.location.href = mainPageUrl;
}
}
});
}).fail(function() {
// Log if the dependency failed to load
console.error("Failed to load jQuery UI Dialog dependency.");
// 提供备用方案:如果模态弹窗失败,退回到简单的 alert
alert(reminderTitle + "\n\n" + reminderMessage + "\n\n(无法加载高级弹窗)");
});
*/
}
});