MediaWiki CharInsert extension是一个扩展,可以在Wiki页面上使用<charinsert></charinsert>
标记。这些标签提供了一个JavaScript弹出窗口,允许将wikitext的设置片段插入到文章中。它还创建了一个名为MediaWiki:Edittools
的Wiki页面,用户可以在其中在charinsert标签中添加一些wikitext,只需单击一下即可将其插入Wiki页面。我很难清楚地解释这个,所以我将使用下面的截图来帮助我解释它。
这是WYSIWIG维基文本编辑器,显示了edittools工具箱。如果您单击任何按钮(例如,<nowiki></nowiki>
一个),它将插入您单击的按钮中显示的wikitext到上面显示的WYSIWIG编辑器中。
现在问题的原因是我希望能够修改CharInsert扩展,以便可以插入与用于JavaScript(JS)按钮的显示标题的wikitext不同的wiki文本。我认为可以这样做的一种方法是添加一个属性,比如“内容”。我提到这个是因为它有助于我解释我的意思,比如说Edittools页面包含一行:
<charinsert content = "{{Information%0A|Description=%0A|Source=%0A|Date=%0A|License=%0A|Author=%0A}}">{{Information}}</charinsert>
然后,虽然只有{{Information}}
出现在edittools工具箱中,{{Information%0A|Description=%0A|Source=%0A|Date=%0A|License=%0A|Author=%0A}}
将是此按钮插入WYSIWIG编辑器的内容。
有谁知道如何修改CharInsert扩展以使其能够执行此操作?请记住,我对PHP知之甚少,所以请不要给我一些程序员话语,这对有经验的PHP程序员有帮助,但对像我这样的新手没用。所以请给我一些简单的说明,确切地说要添加哪些(即,你告诉我哪个)PHP脚本文件。
我在MediaWiki.org的Extension_Talk:CharInsert页面上提出了这个问题,该问题将我发送到了Phabricator上的this问题,我尝试了提供的补丁中提到的技术,但它没有用(参见charinsert谈话页面的细节,这是前一段时间,所以我不记得他们在手边),可能是因为这个补丁有多大(现在约5年)。我几个月后在这里问这个问题,因为我还没有收到有用的答复。
如果相关我正在使用MediaWiki 1.25.1。
答案 0 :(得分:3)
老实说,仔细观察CharInsert extension及其source code后,我建议不要使用它。这很麻烦,而且没有任何事情可以通过JavaScript轻松完成。
所以,这是我的建议:
// Turn <span class="mw-charinsert">foo</span> into a link that inserts "foo"
// into the edit box:
$( function () {
$('span.mw-charinsert').wrap( '<a href="#">' ).click( function () {
var text = this.title || this.textContent;
var parts = text.split( '+' );
if ( text === '+' ) parts = [ text ];
var front = decodeURIComponent( parts[0] || '' );
var back = decodeURIComponent( parts[1] || '' );
insertTags( front, back, '' );
return false;
} );
} );
这应该是一个替代品;只需转换:
<charinsert>foo</charinsert>
<charinsert>bar</charinsert>
成:
<span class="mw-charinsert">foo</span>
<span class="mw-charinsert">bar</span>
请注意,与CharInsert扩展不同,上面的JS代码不支持一个标记中的多个以空格分隔的链接。也就是说,
<span class="mw-charinsert">foo bar</span>
创建一个插入foo bar
的链接,而不是两个插入foo
和bar
的链接(但请参阅下面有关折叠空白的说明!)。您仍然希望在<nowiki>
标记内包含任何包含wiki标记的文本,以防止其解析。
例如,要创建一个读取foo
但插入bar
的链接,请使用以下标记:
<span class="mw-charinsert" title="bar">foo</span>
请注意,与CharInsert扩展一样,您可以在插入的文本中使用+
符号来标记光标(以及任何选定文本)的放置位置。
注意:似乎MediaWiki(或者更可能是HTML Tidy)在标题和文本中折叠连续的空格。我添加了一个对已插入文本进行网址解码的kluge,以便您可以使用%20
表示文字空格,使用%0A
表示换行符,使用%2B
加号表示。这意味着您还需要使用%
替换任何文字%25
符号。
Ps。以上代码 与EditTools gadget不兼容,或者更具体地说,是makeButtons()
函数尝试转换标准CharInsert链接到按钮。这是一个将<span class="mw-charinsert">
元素直接转换为按钮, 与小工具兼容的变体:
// Turn <span class="mw-charinsert">foo</span> into a button that inserts "foo"
// into the edit box:
$( function () {
$( 'span.mw-charinsert' ).wrap( function () {
var text = this.title || this.textContent;
var parts = text.split( '+' );
if ( text === '+' ) parts = [ text ];
var front = decodeURIComponent( parts[0] || '' );
var back = decodeURIComponent( parts[1] || '' );
return $( '<button>' ).click( function () {
insertTags( front, back, '' );
return false;
} );
} );
} );