使用Scribunto创建带有编辑链接的章节

我正在尝试创建一个Scribunto模块,其中包括创建输出中的章节标题。

如果返回的字符串包含“== Hello World ==”之类的内容,则生成的页面会正确显示该节,并且在TOC中包括该节。但是,该节没有编辑节链接。

在某种程度上,这是可以理解的;该节实际上并不存在于页面的来源中。但是,我希望能够将编辑链接放在章节内容来自的位置。我尝试了两个不同版本的“buildHeader”函数:

-- 版本1:
function p.buildHeader(level, title, page)
    local open = '<span class="mw-editsection-bracket">[</span>'
    local close = '<span class="mw-editsection-bracket">]</span>'
    local link = '<a href="/w/index.php?title='..p.urlsafe(page)..'&action=edit" title="Edit section: '..title..'">edit</a>'
    local edit = '<span class="mw-editsection">'..open..link..close..'</span>'
    local text = '<span id="'..p.urlsafe(title)..'" class="mw-headline">'..title..'</span>'
    return '<h'..level..'>'..title..edit..'</h'..level..'>'
end

-- 版本2:
function p.buildHeader(level, title, page)
    local result = mw.html.create('h'..level)
    result:tag('span')
            :attr({id=p.urlsafe(title), class='mw-headline'})
            :wikitext(title)
            :done()
        :tag('span')
            :attr('class', 'mw-editsection'):tag('span')
                :attr('class', 'mw-editsection-bracket')
                :wikitext('[')
                :done()
            :tag('a')
                :attr({href='/w/index.php?title='..p.urlsafe(page)..'&action=edit', title='Edit section: '..title})
                :wikitext('edit')
                :done()
            :tag('span')
                :attr('class', 'mw-editsection-bracket')
                :wikitext(']')
                :allDone()

    return tostring(result)
end

在两种情况下,锚标记的HTML被转义了(例如,<span class="mw-editsection">...&lt;a href="..." title="..."&gt;edit&lt;/a&gt;</span>),并且整个mw-editsection跨度包括在TOC文本中。

我是否有任何方法可以在其中获取我的任意编辑链接,还是必须使用无编辑节的Scribunto节?

点赞
用户386178
用户386178

我的工作解决方案(但不是我首选的解决方案)是使用JavaScript插入链接。buildHeader函数变成了:

function p.buildHeader(level, title, page)
    local result = mw.html.create('h'..level)
    result:attr('data-source', page):wikitext(title)
    return tostring(result)
end

然后,在MediaWiki:Common.js中添加:

$('h1[data-source],h2[data-source],h3[data-source],h4[data-source],h5[data-source],h6[data-source]').append(function() {
    var source = $(this).data('source'),
        title = $(this).text(),
        $editsection = $('<span>').attr('class', 'mw-editsection'),
        $open = $('<span>').attr('class', 'mw-editsection-bracket').text('['),
        $close = $('<span>').attr('class', 'mw-editsection-bracket').text(']'),
        $link = $('<a>').attr('title', '编辑章节:' + title)
                        .attr('href', '/w/index.php?title=' + source + '&action=edit')
                        .text('编辑');
    $editsection.append($open).append($link).append($close);
    return $editsection;
});
2016-07-12 19:17:24