在MediaWiki网站上运行的自定义用户脚本,例如User:Username/common.js
或User:Username/vector.js
我想在用户编辑部分时添加一些功能。
但是为了获得正确的上下文,我需要知道他们按名称编辑哪个部分以及部分/子部分层次结构中的父部分。
我知道我可以解析网址以获取部分编号,但我找不到直接的方法从该编号转到部分名称或部分结构中的位置。我知道有一些变量可以通过JavaScript以各种方式访问,名称以wg
开头,但到目前为止,我无法找到任何相关的变量。
明显的黑客攻击是通过AJAX加载相关页面,如果有TOC则解析TOC,否则解析页面布局。这看起来很昂贵,如果有部分使用<h3>X</h3>
代码而非===X===
样式的wikitext,则可能甚至不那么容易。
当前的MediWiki JavaScript界面中有什么东西我找不到?
(用例是英文维基词典,与维基百科不同,相同的部分名称可以多次发生,例如&#34;名词&#34;同时在&#34;英语&#34;和#34;意大利&# 34;等。)
答案 0 :(得分:2)
您可以使用Parsing API获取当前页面的各个部分。 prop=sections
是您想要的。然后是循环结果并得到你想要的东西。
table页面的示例输出:
{
"parse": {
"title": "table",
"sections": [
{
"toclevel": 1,
"level": "2",
"line": "English",
"number": "1",
"index": "1",
"fromtitle": "table",
"byteoffset": 21,
"anchor": "English"
},
{
"toclevel": 2,
"level": "3",
"line": "Etymology",
"number": "1.1",
"index": "2",
"fromtitle": "table",
"byteoffset": 223,
"anchor": "Etymology"
},
// ...
]
}
}
以下内容应该为您提供一个包含相关部分的数组(反之:当前部分为sections[0]
,父母为sections[1]
等等(如果有)
$(document).ready(function(){
// Whitelist allowable Namespaces here
if( mw.config.get('wgNamespaceNumber') !== 0 ) return;
if( ['edit','submit'].indexOf(mw.config.get('wgAction')) > -1 ) {
var sectionId = $("#editform input[name=wpSection]").val();
if( !sectionId || isNaN(sectionId) || sectionId == "0" ) return;
mw.loader.using( 'mediawiki.api', function () {
( new mw.Api() ).get( {
action: 'parse',
page: mw.config.get('wgPageName'),
prop: 'sections',
} ).done( function ( data ) {
var sections = [];
// Might want to check for errors here first
var allSections = data.parse.sections;
for( var i = 0, l = allSections.length; i < l; ++i) {
var thisSection = allSections[i];
if( thisSection.index == sectionId ) {
sections.push(thisSection);
// Loop back for the parents
var toclevel = thisSection.toclevel;
while( toclevel > 1 && i > 0 ) {
--i;
var possibleParent = allSections[i];
if( possibleParent.toclevel < toclevel ) {
sections.push(possibleParent);
toclevel = possibleParent.toclevel;
}
}
break;
}
}
// Use sections here
console.log(sections);
} );
} );
}
});
未在维基词典上进行测试,但在1.24本地维基上运行。
编辑:如评论中所述,如果页面包含带有部分的模板,则索引不匹配,因此最好手动查找具有正确索引的部分。