跳转到内容

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

勤求古训,博采众方
无编辑摘要
无编辑摘要
第7行: 第7行:
// **                                                                  **
// **                                                                  **
// **********************************************************************
// **********************************************************************
// Simplified and optimized version for Chinese (zh) locales.
// Optimized for MediaWiki configuration where $wgLanguageCode = 'zh'
// and $wgDefaultLanguageVariant = 'zh-hans'.


(function() {
if ($.inArray(mw.config.get('wgAction'), ['view', 'purge']) !== -1 && mw.config.get('wgNamespaceNumber') >= 0) {
    'use strict';
    $(function edittop_hook() {
        'use strict';


    // 确保 mediawiki.util 和 jquery 模块加载完成后再执行
        // 1. 语言标题配置
    mw.loader.using(['mediawiki.util', 'jquery']).then(function() {
         // 键值对应 $wgVariants 的值
         // 一次性获取所有需要的配置变量
         var variantTitles = {
         const config = mw.config.get([
             'zh-hans': '编辑首段',   // 简体中文
             'wgAction',
             'zh-hant': '編輯首段'   // 繁体中文
            'wgNamespaceNumber',
        };
             'wgUserLanguage',
         var defaultTitle = '编辑首段'; // 最终回退
            'wgPageName'
         ]);


         // 仅在查看或清除缓存页面,且为内容命名空间时运行
         // 2. 获取页面和用户配置
         if (!['view', 'purge'].includes(config.wgAction) || config.wgNamespaceNumber < 0) {
         var wgPageName = mw.config.get('wgPageName');
        var userVariant = mw.config.get('wgUserVariant'); // 优先使用用户变体
 
        // 3. 查找必要的 DOM 元素
        var $content = $('#content, #mw_content').first();
        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. 关键修复:防止重复添加
        // 检查标题处是否已存在指向 section=0 的编辑链接
        if ($targetHeading.find('span.mw-editsection a[href*="section=0"]').length > 0) {
             return;
             return;
         }
         }


         // 定义常量
         // 6. 克隆并添加编辑区块
         const EDIT_SUMMARY = '/* top */ ';
         var $clonedEditSection = $firstEditSection.clone();
         const TITLES = {
         $targetHeading.append($clonedEditSection);
            'zh': '编辑首段',
            'zh-hans': '编辑首段',
            'zh-hant': '編輯首段'
        };


         // DOM 加载完成后执行
         // 7. 确定并设置正确的标题文本
         $(function() {
         var editTitle = variantTitles[userVariant] || defaultTitle;
            const userLang = config.wgUserLanguage;
        $clonedEditSection.find('a').text(editTitle).attr('title', editTitle);
            // 根据用户语言获取对应的编辑链接文本
            const editTitle = TITLES[userLang] || '编辑首段';


            // 获取内容区域和第一个编辑区块
        // 8. 修改链接地址
            const $content = $('#content, #mw_content').first();
        $clonedEditSection.find('a').each(function() {
             const $firstEditSection = $content.find('span.mw-editsection:not(.plainlinks):first');
            var $link = $(this);
             var originalHref = $link.attr('href') || '';
            var newHref;
            var summary = '/* top */ ';


             // 如果找不到编辑区块,则停止执行
             if (!/&(ve|)section=T/.test(originalHref)) { // 非嵌入页面
             if (!$firstEditSection.length) {
                newHref = originalHref.replace(/&(ve|)section=\d+/, `&$1section=0&summary=${encodeURIComponent(summary)}`);
                 return;
             } 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);
            const $clonedEditSection = $firstEditSection.clone();
            $('#mw_header h1, #content h1').first().append($clonedEditSection);
 
            // 修改复制出的编辑链接的文本和 href 属性
            $clonedEditSection.find('a').text(editTitle).each(function() {
                const $link = $(this);
                const originalHref = $link.attr('href') || '';
                let newHref;
 
                if (!/&(ve|)section=T/.test(originalHref)) {
                    // 非嵌入页面:替换 section 参数
                    newHref = originalHref.replace(
                        /&(ve|)section=\d+/,
                        `&$1section=0&summary=${encodeURIComponent(EDIT_SUMMARY)}`
                    );
                } else if (/&vesection=/.test(originalHref)) {
                    // 嵌入页面,使用VE编辑器:构建新URL
                    newHref = mw.util.getUrl(config.wgPageName, {
                        veaction: 'edit',
                        vesection: 0,
                        summary: EDIT_SUMMARY
                    });
                } else {
                    // 嵌入页面,使用传统编辑器:构建新URL
                    newHref = mw.util.getUrl(config.wgPageName, {
                        action: 'edit',
                        section: 0,
                        summary: EDIT_SUMMARY
                    });
                }
 
                $link.attr('href', newHref);
            });
         });
         });
     });
     });
})();
}

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

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

// **********************************************************************
// **                 ***WARNING GLOBAL GADGET FILE***                 **
// **             changes to this file affect many users.             **
// **           please discuss on the talk page before editing         **
// **                                                                  **
// **********************************************************************
// Optimized for MediaWiki configuration where $wgLanguageCode = 'zh'
// and $wgDefaultLanguageVariant = 'zh-hans'.

if ($.inArray(mw.config.get('wgAction'), ['view', 'purge']) !== -1 && mw.config.get('wgNamespaceNumber') >= 0) {
    $(function edittop_hook() {
        'use strict';

        // 1. 语言标题配置
        // 键值对应 $wgVariants 的值
        var variantTitles = {
            'zh-hans': '编辑首段',   // 简体中文
            'zh-hant': '編輯首段'    // 繁体中文
        };
        var defaultTitle = '编辑首段'; // 最终回退

        // 2. 获取页面和用户配置
        var wgPageName = mw.config.get('wgPageName');
        var userVariant = mw.config.get('wgUserVariant'); // 优先使用用户变体

        // 3. 查找必要的 DOM 元素
        var $content = $('#content, #mw_content').first();
        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. 关键修复:防止重复添加
        // 检查标题处是否已存在指向 section=0 的编辑链接
        if ($targetHeading.find('span.mw-editsection a[href*="section=0"]').length > 0) {
            return;
        }

        // 6. 克隆并添加编辑区块
        var $clonedEditSection = $firstEditSection.clone();
        $targetHeading.append($clonedEditSection);

        // 7. 确定并设置正确的标题文本
        var editTitle = variantTitles[userVariant] || defaultTitle;
        $clonedEditSection.find('a').text(editTitle).attr('title', editTitle);

        // 8. 修改链接地址
        $clonedEditSection.find('a').each(function() {
            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);
        });
    });
}