MediaWiki:Common.js

来自開源之海
Johnson留言 | 贡献2026年4月26日 (日) 01:42的版本 (创建页面,内容为“这里的任何JavaScript将为所有用户在每次页面加载时加载。:​ 核心修復:1.43 Source 模式全能補全監聽器:​ mw.hook('ve.activationComplete').add(function() { var surface = ve.init.target.getSurface(); if (surface && surface.getMode() === 'source') { // 定義觸發符號與對應指令的映射關係 var completionMap = { '[[': 'link', // 連結補全 '{{': 'te…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
/* 核心修復:1.43 Source 模式全能補全監聽器 */
mw.hook('ve.activationComplete').add(function() {
    var surface = ve.init.target.getSurface();
    if (surface && surface.getMode() === 'source') {
        
        // 定義觸發符號與對應指令的映射關係
        var completionMap = {
            '[[': 'link',          // 連結補全
            '{{': 'template',      // 模板補全
            '[[F': 'media',        // 媒體/文件 (適配 [[File: 或 [[文件:)
            '[[f': 'media'
        };

        surface.getView().$element.on('keyup', function(e) {
            // 僅監聽關鍵的觸發鍵:[ 和 {
            if (['[', '{'].includes(e.key) || [219, 221].includes(e.keyCode)) {
                var surfaceModel = surface.getModel();
                var range = surfaceModel.getSelection().getRange();
                var doc = surfaceModel.getDocument();
                
                // 獲取光標前的字符(取 3 位以兼容 [[F 這種情況)
                var context = doc.data.getText(new ve.Range(range.end - 3, range.end));
                
                // 遍歷映射表進行匹配
                for (var key in completionMap) {
                    if (context.endsWith(key)) {
                        console.log("偵測到觸發符:" + key + ",執行指令:" + completionMap[key]);
                        surface.executeCommand(completionMap[key]);
                        break; 
                    }
                }
            }
        });
    }
});