OTTOWiki:Gadget-CodeMirror6.js:修订间差异
来自OTTOWiki
更多操作
![]() |
![]() 小 |
||
(没有差异)
|
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);
}
}
}
})();
}