16,874
个编辑
LLWiki正在建设中,欢迎加入我们!
标签:撤销 |
|||
(未显示同一用户的11个中间版本) | |||
/**
* @Function: 高亮JavaScript、CSS、HTML和Lua,按行号跳转,并添加行号和指示色块
* @Dependencies: ext.gadget.
* @Source: [[moegirl:mediawiki:gadget-code-prettify.js]]和[[moegirl:user:机智的小鱼君/gadget/Highlight.js]]
* @EditedBy: [[User:Bhsd]]
*/
"use strict";
/*global wgULS, hljs */
mw.gadgets.codePrettify = $.extend( mw.storage.getObject( 'gadget-codePrettify' ), mw.gadgets.codePrettify );
const acceptLangs = {js: "javascript", javascript: "javascript", json: "json", css: "css", html: "xml",
scribunto: "lua", lua: "lua"},
contentModel = mw.config.get( "wgPageContentModel" ).toLowerCase()
wrap = mw.gadgets.codePrettify.wrap || [];
mw.messages.set( wgULS({'gadget-cp-label': '代码高亮显示', 'gadget-cp-wrap': '自动换行', 'gadget-cp-on': '开启'},
{'gadget-cp-label': '代碼高亮顯示', 'gadget-cp-wrap': '自動換行', 'gadget-cp-on': '開啟'}) );
mw.settingsDialog.addTab({name: 'codePrettify', label: 'gadget-cp-label', items: [
{key: 'wrap', type: 'CheckboxMultiselect', label: 'gadget-cp-wrap',
config: {options: [{data: 'on', label: mw.msg( 'gadget-cp-on' )}]}
], help: '代码高亮显示'});
mw.hook( 'wikipage.content' ).add(function($content) {
if ($block.length === 0) { return; }
console.log('Hook: wikipage.content, 开始执行语法高亮');
const path = '//
(window.hljs ? Promise.resolve() : mw.loader.getScript( path )).then(function() { // 不重复下载脚本
$block.each(function() { hljs.highlightBlock( this ); }).addClass( 'highlighted' ).filter( '.linenums' )
.html(function() { // 添加行号。这里不使用<table>排版,而是使用<ol>
const $this = $(this)
start = $this.data( 'start' ) || 1;
$this.children( ':contains(\n)' ).replaceWith(function() { // 先处理跨行元素
const $self = $(this);
var lines = $this.html().replace(/\n$/, '').split('\n');
if (mw.config.get( 'wgNamespaceNumber' ) == 274) { lines = lines.slice(1, -1); } // 扔掉首尾的Wikitext注释
return $('<ol>', {
html: lines.
}).css('padding-left', (lines.length + start - 1).toString().length + 2.5 + 'ch');
▲ });
}).filter( '.mw-code' ).toggleClass('scroll', wrap.length === 0);
mw.hook( 'code.prettify' ).fire( $block );
const $cssblock = $block.filter( '.css' ); // 对CSS代码添加指示色块▼
// 2. 手动跳转
target = document.getElementById( fragment || null ); // 用户输入内容,禁止使用$()▼
if (/^L\d+$/.test( fragment ) && target) { target.scrollIntoView({ behavior: 'smooth' }); }▼
// 3. 对CSS代码添加指示色块
if ($cssblock.length === 0) { return; }
const $color = $('<span>', {class: 'hljs-color'});
opacity: color[8] });
});
▲ // 手动跳转
▲ const fragment = decodeURIComponent( location.hash.slice(1) ),
▲ target = document.getElementById( fragment ); // 用户输入内容,禁止使用$()
▲ if (/^L\d+$/.test( fragment ) && target) { target.scrollIntoView({ behavior: 'smooth' }); }
}, function(reason) { mw.apiFailure(reason, 'highlight.js'); });
});
|