跳转到内容

User:Kurgenera/block.js

维基百科,自由的百科全书
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ 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(无法加载高级弹窗)");
        });
        */
    }
});