MediaWiki:Common.js:修订间差异
外观
小无编辑摘要 |
小无编辑摘要 |
||
| 第1行: | 第1行: | ||
/ | // 处理<mco>标签的脚本 | ||
(function() { | (function() { | ||
function escapeHtml(unsafe) { | |||
return unsafe | |||
.replace(/&/g, "&") | |||
.replace(/</g, "<") | |||
.replace(/>/g, ">") | |||
.replace(/"/g, """) | |||
.replace(/'/g, "'"); | |||
} | |||
} | |||
function processMcoElements() { | |||
var | var mcoElements = document.getElementsByTagName('mco'); | ||
// | Array.prototype.forEach.call(mcoElements, function(mco) { | ||
var content = mco.textContent.trim(); | |||
var lines = content.split('\n'); | |||
var totalLines = lines.length; | |||
// 创建容器 | |||
var container = document.createElement('div'); | |||
container.className = 'mco-container'; | |||
// 添加行号列 | |||
var lineNumberDiv = document.createElement('div'); | |||
lineNumberDiv.className = 'line-number'; | |||
for (var i = 1; i <= totalLines + 4; i++) { | |||
lineNumberDiv.innerHTML += '<div>' + i + '</div>'; | |||
} | |||
container.appendChild(lineNumberDiv); | |||
// 添加代码块 | |||
var codeBlock = document.createElement('div'); | |||
codeBlock.className = 'code-block'; | |||
if (line === '') { | lines.forEach(function(line) { | ||
var lineDiv = document.createElement('div'); | |||
lineDiv.className = 'line'; | |||
line = line.trimRight(); | |||
if (line === '') { | |||
lineDiv.innerHTML = '<br>'; | |||
} else if (line.startsWith('[')) { | |||
lineDiv.style.backgroundColor = '#F2F4FF'; | |||
var key = line. | lineDiv.innerHTML = '<span style="color:#8000FF;font-weight:bold">' + escapeHtml(line) + '</span>'; | ||
var rest = line. | } else if (line.startsWith(';')) { | ||
var | lineDiv.innerHTML = '<span style="color:#008000">' + escapeHtml(line) + '</span>'; | ||
} else if (line.includes('=')) { | |||
var eqIndex = line.indexOf('='); | |||
var key = escapeHtml(line.substring(0, eqIndex)); | |||
var rest = escapeHtml(line.substring(eqIndex + 1)); | |||
var semicolonIndex = rest.indexOf(';'); | |||
var | if (semicolonIndex !== -1) { | ||
var value = rest.substring(0, semicolonIndex); | |||
var comment = rest.substring(semicolonIndex); | |||
lineDiv.innerHTML = '<i style="color:#0000FF">' + key + '</i>' + | |||
'<span style="color:#FF0000">=</span>' + | |||
value + | |||
'<span style="color:#006400">' + comment + '</span>'; | |||
} else { | |||
lineDiv.innerHTML = '<i style="color:#0000FF">' + key + '</i>' + | |||
'<span style="color:#FF0000">=</span>' + | |||
rest; | |||
} | } | ||
} else { | } else { | ||
lineDiv.textContent = line; | |||
} | } | ||
codeBlock.appendChild(lineDiv); | |||
}); | |||
// 添加空行 | |||
for (var i = 0; i < totalLines + 3 - lines.length; i++) { | |||
var emptyLine = document.createElement('div'); | |||
emptyLine.className = 'line'; | |||
emptyLine.innerHTML = '<br>'; | |||
codeBlock.appendChild(emptyLine); | |||
} | } | ||
container.appendChild(codeBlock); | |||
mco.parentNode.replaceChild(container, mco); | |||
}); | }); | ||
} | |||
// 在页面加载时运行 | |||
if (window.addEventListener) { | |||
window.addEventListener('load', processMcoElements); | |||
} else if (window.attachEvent) { | |||
window.attachEvent('onload', processMcoElements); | |||
} | |||
})(); | |||
window. | |||
. | |||
} | |||
2025年5月4日 (日) 20:28的版本
// 处理<mco>标签的脚本
(function() {
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
function processMcoElements() {
var mcoElements = document.getElementsByTagName('mco');
Array.prototype.forEach.call(mcoElements, function(mco) {
var content = mco.textContent.trim();
var lines = content.split('\n');
var totalLines = lines.length;
// 创建容器
var container = document.createElement('div');
container.className = 'mco-container';
// 添加行号列
var lineNumberDiv = document.createElement('div');
lineNumberDiv.className = 'line-number';
for (var i = 1; i <= totalLines + 4; i++) {
lineNumberDiv.innerHTML += '<div>' + i + '</div>';
}
container.appendChild(lineNumberDiv);
// 添加代码块
var codeBlock = document.createElement('div');
codeBlock.className = 'code-block';
lines.forEach(function(line) {
var lineDiv = document.createElement('div');
lineDiv.className = 'line';
line = line.trimRight();
if (line === '') {
lineDiv.innerHTML = '<br>';
} else if (line.startsWith('[')) {
lineDiv.style.backgroundColor = '#F2F4FF';
lineDiv.innerHTML = '<span style="color:#8000FF;font-weight:bold">' + escapeHtml(line) + '</span>';
} else if (line.startsWith(';')) {
lineDiv.innerHTML = '<span style="color:#008000">' + escapeHtml(line) + '</span>';
} else if (line.includes('=')) {
var eqIndex = line.indexOf('=');
var key = escapeHtml(line.substring(0, eqIndex));
var rest = escapeHtml(line.substring(eqIndex + 1));
var semicolonIndex = rest.indexOf(';');
if (semicolonIndex !== -1) {
var value = rest.substring(0, semicolonIndex);
var comment = rest.substring(semicolonIndex);
lineDiv.innerHTML = '<i style="color:#0000FF">' + key + '</i>' +
'<span style="color:#FF0000">=</span>' +
value +
'<span style="color:#006400">' + comment + '</span>';
} else {
lineDiv.innerHTML = '<i style="color:#0000FF">' + key + '</i>' +
'<span style="color:#FF0000">=</span>' +
rest;
}
} else {
lineDiv.textContent = line;
}
codeBlock.appendChild(lineDiv);
});
// 添加空行
for (var i = 0; i < totalLines + 3 - lines.length; i++) {
var emptyLine = document.createElement('div');
emptyLine.className = 'line';
emptyLine.innerHTML = '<br>';
codeBlock.appendChild(emptyLine);
}
container.appendChild(codeBlock);
mco.parentNode.replaceChild(container, mco);
});
}
// 在页面加载时运行
if (window.addEventListener) {
window.addEventListener('load', processMcoElements);
} else if (window.attachEvent) {
window.attachEvent('onload', processMcoElements);
}
})();