16,874
个编辑
LLWiki正在建设中,欢迎加入我们!
小 |
(// 使用Wikiplus小工具快速编辑) |
||
(未显示同一用户的9个中间版本) | |||
// 由ResourceLoader直接调用,不可使用ES6语法
/**
* @
* 2. 高亮显示页
* @Source: [https://codemirror.net/addon/runmode/runmode.js]▼
* @
*/
"use strict";
/*global CodeMirror*/
▲// 1. 下载需要的CodeMirror模式
/**
* @Function: 根据内容模型下载需要的CodeMirror模式
* @Param {String} alias, 内容模型名称或别名
* @Return {Promise} 表示下载是否成功的Promise对象
*/
const promise = {javascript: null, css: null, lua: null, wiki: null},
aliases = { js: 'javascript', javascript: 'javascript', json: 'javascript', css: 'css',
lua: 'lua', scribunto: 'lua', wikitext: 'wiki', mediawiki: 'wiki', wiki: 'wiki'
};
CodeMirror.download = function(alias) {
const name = aliases[ alias.toLowerCase() ];
if (!(name in promise)) {
console.error( '无法识别的CodeMirror模式' );
throw null;
}▼
if (!promise[ name ]) {
if (name == 'wiki') {
promise[ name ] = mw.config.get( 'extCodeMirrorConfig' ) ? Promise.resolve() : // 兼容CodeMirror扩展
mw.loader.using('ext.CodeMirror.data');
$.get({ dataType: 'json', cache: true,▼
);▼
} else {
promise[ name ] =
? mw.loader.using('ext.CodeMirror.lib.mode.' + name)
url: '//cdn.jsdelivr.net/npm/codemirror@5.35.0/mode/' + name + '/' + name + '.min.js'▼
▲ url: '//cdn.jsdelivr.net/npm/codemirror@5.35.0/mode/' + name + '/' + name + '.min.js'
▲ });
}
}
};
/**
* @Function: 高亮页内Wikitext代码
const render = function(obj) {▼
▲ * @Source: [https://codemirror.net/addon/runmode/runmode.js]
* @EditedBy: [[User:Bhsd]]
* @Param {jQuery} $pre, 写有Wikitext代码的jQuery对象
*/
const mode = CodeMirror.getMode({mwConfig: mw.config.get( 'extCodeMirrorConfig' )}, 'mediawiki'),
$target = $(
lines = CodeMirror.splitLines( $target.text().trim() ),
state = mode.startState(),
);
}
$('<span>', { text: stream.current()
return !ele.startsWith( 'line-' );
}).map(function(ele) { return 'cm-' + ele; }).join( ' ' ) }).appendTo( $line );
stream.start = stream.pos;
}
return $line[0];
});
$target.addClass( '
if ($target.hasClass( 'linenums' )) { // 添加行号
const start = $target.data( 'start' ) || 1;
html: content.map(function(ele, i) { return $('<li>', {html: ele, id: 'L' + (i + start)}); })
}).css('padding-left', (content.length + start - 1).toString().length + 2.5 + 'ch').appendTo( $target );
} else { $target.
}
CodeMirror.runmode = function($pre) {▼
CodeMirror.download( 'wiki' ).then(function() { $pre.toArray().forEach( render ); });
▲CodeMirror.runmode = function(pre) {
▲ }
};
//</nowiki>
|