0

特に、出力にセクションヘッダーを作成できる Scribunto モジュールを作成しようとしています。

返された文字列にたとえば が含まれている場合、== Hello World ==結果のページにはセクションが正しく表示され、目次にもセクションが含まれます。ただし、セクションには editsection リンクがありません。

これはある程度理解できます。このセクションは実際にはページのソースには存在しません。しかし、セクションのコンテンツがどこから来ているのかへの編集リンクを配置できるようにしたいと思います. buildHeader関数の 2 つの異なるバージョンを試しました。

-- version 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

-- version 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 セクションを使用する必要がありますか?

4

2 に答える 2

0

私の実用的な解決策 (ただし、私の好みの解決策ではありません) は、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', 'Edit section: ' + title)
                        .attr('href', '/w/index.php?title=' + source + '&action=edit')
                        .text('edit');
    $editsection.append($open).append($link).append($close);
    return $editsection;
});
于 2016-07-12T19:17:24.213 に答える