跳转到内容

MediaWiki:Gadget-edit0.js:修订间差异

勤求古训,博采众方
无编辑摘要
无编辑摘要
第7行: 第7行:
// **                                                                  **
// **                                                                  **
// **********************************************************************
// **********************************************************************
// Optimized for MediaWiki configuration where $wgLanguageCode = 'zh'
// 基于原始代码修改,仅保留中文(zh)、简体中文(zh-hans)和繁体中文(zh-hant)支持。
// and $wgDefaultLanguageVariant = 'zh-hans'.


// 仅在“查看”或“清除缓存”页面,并且是内容命名空间(非特殊页面)时执行
if ($.inArray(mw.config.get('wgAction'), ['view', 'purge']) !== -1 && mw.config.get('wgNamespaceNumber') >= 0) {
if ($.inArray(mw.config.get('wgAction'), ['view', 'purge']) !== -1 && mw.config.get('wgNamespaceNumber') >= 0) {
    // 当DOM加载完成后执行
     $(function edittop_hook() {
     $(function edittop_hook() {
         'use strict';
         // 定义不同语言对应的“编辑首段”文本
        var localtitles = {}; // 初始化一个空对象


         // 1. 语言标题配置
         // 为所有中文变体设置统一的简体文本
         // 键值对应 $wgVariants 的值
         localtitles.zh = localtitles['zh-hans'] = localtitles['zh-cn'] = localtitles['zh-sg'] = localtitles['zh-my'] = '编辑首段';
        var variantTitles = {
       
            'zh-hans': '编辑首段'// 简体中文
        // 为所有繁体中文变体设置统一的繁体文本
            'zh-hant': '編輯首段'   // 繁体中文
        localtitles['zh-hant'] = localtitles['zh-hk'] = localtitles['zh-mo'] = localtitles['zh-tw'] = '編輯首段';
        };
        var defaultTitle = '编辑首段'; // 最终回退


         // 2. 获取页面和用户配置
         // 找到页面的主要内容区域
         var wgPageName = mw.config.get('wgPageName');
         var our_content = $('#content, #mw_content').first();
         var userVariant = mw.config.get('wgUserVariant'); // 优先使用用户变体
       
        // 在内容区域中找到第一个非纯链接形式的编辑区块(<span class="mw-editsection">)
         var span1 = our_content.find('span.mw-editsection:not(.plainlinks)').first();
       
        // 如果没有找到这样的编辑区块(例如页面不可编辑),则直接退出函数
        if (!span1.length) return;
       
        // 克隆这个编辑区块
        var span0 = span1.clone();


         // 3. 查找必要的 DOM 元素
         // 将克隆出来的编辑区块添加到页面的主标题(h1)后面
        var $content = $('#content, #mw_content').first();
         $('#mw_header h1, #content h1').first().append(span0);
        var $firstEditSection = $content.find('span.mw-editsection:not(.plainlinks)').first();
         var $targetHeading = $('#mw_header h1, #content h1').first();
 
        // 4. 前置条件检查:如果找不到编辑区块或标题,则退出
        if (!$firstEditSection.length || !$targetHeading.length) {
            return;
        }
          
          
         // 5. 关键修复:防止重复添加
         // 对克隆区块内的所有链接(<a>标签)进行处理
         // 检查标题处是否已存在指向 section=0 的编辑链接
         span0.find('a').each(function(idx) {
        if ($targetHeading.find('span.mw-editsection a[href*="section=0"]').length > 0) {
            var a = $(this);
             return;
            var href = a.attr('href') || '';
        }
           
            // 设置链接的提示文字(title属性)。优先使用用户当前的语言变体,
            // 如果找不到(理论上不会发生),则回退到默认的'zh'对应的文本。
            var userLang = mw.config.get('wgUserLanguage');
             a.attr('title', localtitles[userLang] || localtitles.zh);


        // 6. 克隆并添加编辑区块
             // 修改链接的目标地址(href属性)
        var $clonedEditSection = $firstEditSection.clone();
             if (!/&(ve|)section=T/.test(href)) { // 如果链接不是指向嵌入内容的
        $targetHeading.append($clonedEditSection);
                 // 将链接中的section参数改为0(代表首段),并添加编辑摘要
 
                a.attr('href', href.replace(/&(ve|)section=\d+/, '&$1section=0&summary=/*%20top%20*/%20'));
        // 7. 确定并设置正确的标题文本
             } else if (/&vesection=/.test(href)) { // 如果是指向嵌入内容且使用VE编辑器
        var editTitle = variantTitles[userVariant] || defaultTitle;
                // 构建一个新的、指向当前页面首段的VE编辑链接
        $clonedEditSection.find('a').text(editTitle).attr('title', editTitle);
                 a.attr('href', mw.util.getUrl(mw.config.get('wgPageName')) + '?veaction=edit&vesection=0&summary=/*%20top%20*/%20');
 
             } else { // 如果是指向嵌入内容但使用传统编辑器
        // 8. 修改链接地址
                 // 构建一个新的、指向当前页面首段的传统编辑链接
        $clonedEditSection.find('a').each(function() {
                a.attr('href', mw.util.getUrl(mw.config.get('wgPageName')) + '?action=edit&section=0&summary=/*%20top%20*/%20');
            var $link = $(this);
             var originalHref = $link.attr('href') || '';
            var newHref;
            var summary = '/* top */ ';
 
             if (!/&(ve|)section=T/.test(originalHref)) { // 非嵌入页面
                 newHref = originalHref.replace(/&(ve|)section=\d+/, `&$1section=0&summary=${encodeURIComponent(summary)}`);
             } else if (/&vesection=/.test(originalHref)) { // 嵌入页面,VE编辑器
                 newHref = mw.util.getUrl(wgPageName, {
                    veaction: 'edit',
                    vesection: 0,
                    summary: summary
                });
             } else { // 嵌入页面,传统编辑器
                 newHref = mw.util.getUrl(wgPageName, {
                    action: 'edit',
                    section: 0,
                    summary: summary
                });
             }
             }
            $link.attr('href', newHref);
         });
         });
     });
     });
}
}

2025年11月12日 (三) 12:37的版本

// [[en:MediaWiki:Gadget-edittop.js]]

// **********************************************************************
// **                 ***WARNING GLOBAL GADGET FILE***                 **
// **             changes to this file affect many users.             **
// **           please discuss on the talk page before editing         **
// **                                                                  **
// **********************************************************************
// 基于原始代码修改,仅保留中文(zh)、简体中文(zh-hans)和繁体中文(zh-hant)支持。

// 仅在“查看”或“清除缓存”页面,并且是内容命名空间(非特殊页面)时执行
if ($.inArray(mw.config.get('wgAction'), ['view', 'purge']) !== -1 && mw.config.get('wgNamespaceNumber') >= 0) {
    // 当DOM加载完成后执行
    $(function edittop_hook() {
        // 定义不同语言对应的“编辑首段”文本
        var localtitles = {}; // 初始化一个空对象

        // 为所有中文变体设置统一的简体文本
        localtitles.zh = localtitles['zh-hans'] = localtitles['zh-cn'] = localtitles['zh-sg'] = localtitles['zh-my'] = '编辑首段';
        
        // 为所有繁体中文变体设置统一的繁体文本
        localtitles['zh-hant'] = localtitles['zh-hk'] = localtitles['zh-mo'] = localtitles['zh-tw'] = '編輯首段';

        // 找到页面的主要内容区域
        var our_content = $('#content, #mw_content').first();
        
        // 在内容区域中找到第一个非纯链接形式的编辑区块(<span class="mw-editsection">)
        var span1 = our_content.find('span.mw-editsection:not(.plainlinks)').first();
        
        // 如果没有找到这样的编辑区块(例如页面不可编辑),则直接退出函数
        if (!span1.length) return;
        
        // 克隆这个编辑区块
        var span0 = span1.clone();

        // 将克隆出来的编辑区块添加到页面的主标题(h1)后面
        $('#mw_header h1, #content h1').first().append(span0);
        
        // 对克隆区块内的所有链接(<a>标签)进行处理
        span0.find('a').each(function(idx) {
            var a = $(this);
            var href = a.attr('href') || '';
            
            // 设置链接的提示文字(title属性)。优先使用用户当前的语言变体,
            // 如果找不到(理论上不会发生),则回退到默认的'zh'对应的文本。
            var userLang = mw.config.get('wgUserLanguage');
            a.attr('title', localtitles[userLang] || localtitles.zh);

            // 修改链接的目标地址(href属性)
            if (!/&(ve|)section=T/.test(href)) { // 如果链接不是指向嵌入内容的
                // 将链接中的section参数改为0(代表首段),并添加编辑摘要
                a.attr('href', href.replace(/&(ve|)section=\d+/, '&$1section=0&summary=/*%20top%20*/%20'));
            } else if (/&vesection=/.test(href)) { // 如果是指向嵌入内容且使用VE编辑器
                // 构建一个新的、指向当前页面首段的VE编辑链接
                a.attr('href', mw.util.getUrl(mw.config.get('wgPageName')) + '?veaction=edit&vesection=0&summary=/*%20top%20*/%20');
            } else { // 如果是指向嵌入内容但使用传统编辑器
                // 构建一个新的、指向当前页面首段的传统编辑链接
                a.attr('href', mw.util.getUrl(mw.config.get('wgPageName')) + '?action=edit&section=0&summary=/*%20top%20*/%20');
            }
        });
    });
}