打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

OTTOWiki:Gadget-CodeMirror6.js:修订间差异

来自OTTOWiki
OctoberSama
OctoberSama留言 | 贡献 (OctoberSama移动页面OTTOWiki:MediaWiki:Gadget-CodeMirror6.jsOTTOWiki:Gadget-CodeMirror6.js,不留重定向:​快速重命名 → OTTOWiki:Gadget-CodeMirror6.js
OctoberSama
OctoberSama留言 | 贡献 (OctoberSama将页面OTTOWiki:Gadget-CodeMirror6.js的内容模型从“wikitext”更改为“JavaScript”)
(没有差异)

2025年7月5日 (六) 20:01的版本

if (mw.config.get('wgAction') === 'edit' || mw.config.get('wgAction') === 'submit') {
    mw.loader.load('https://cdn.jsdelivr.net/npm/@bhsd/codemirror-mediawiki/mediawiki.css', 'text/css');
    (async function() {
        await mw.loader.using('mediawiki.Title');
        if (!window.CodeMirror6) {
            await import('https://cdn.jsdelivr.net/npm/@bhsd/codemirror-mediawiki/dist/wiki.min.js');
        }
        const textarea = document.getElementById('wpTextbox1');
        if (textarea) {
            const page = new mw.Title(mw.config.get('wgPageName'));
            const getPageMode = (page) => {
                const { namespace, title } = page;
                const ext = page.getExtension()?.toLowerCase();
                const isSubject = namespace % 2 === 0;
                if (ext === 'css' && isSubject) {
                    return [2, 8, 2300].includes(namespace) ? 'css' : 'sanitized-css';
                } else if (ext === 'js' && isSubject) {
                    return 'javascript';
                } else if (ext === 'json' && isSubject) {
                    return 'json';
                } else if (namespace === 828 && !title.endsWith('/doc')) {
                    return 'lua';
                } else if (namespace === 274 && !title.endsWith('/doc')) {
                    return 'html';
                }
                return 'mediawiki';
            };
            const mode = getPageMode(page);
            const cm = await CodeMirror6.fromTextArea(textarea, mode, page.getNamespaceId());
            if (mode === 'mediawiki') {
                try {
                    const config = mw.config.get('extCodeMirrorConfig');
                    if (config?.urlProtocols.includes('\\:')) {
                        config.urlProtocols = config.urlProtocols.replace(/\\:/g, ':');
                        cm.setLanguage('mediawiki', config);
                    }
                } catch (error) {
                    console.error('Failed to load or apply mwConfig:', error.message, error.stack);
                }
            }
        }
    })();
}