Module:Motifs: Difference between revisions

From The Seven Sages of Rome
No edit summary
No edit summary
 
Line 1: Line 1:
local p = {}
local p = {}
local function getParent(motif)
    local data = mw.smw.ask({
        '[[' .. motif .. ']]',
        '?Is Child Of',
        mainlabel = '-',
        limit = 1
    })
    local parent = ''
    if data and data[1] and data[1]['Is Child Of'] then
        parent = data[1]['Is Child Of']
        if type(parent) == 'table' then
            parent = parent[1]
        end
    end
    return parent or ''
end


function p.renderBadges(frame)
function p.renderBadges(frame)
Line 33: Line 13:


         if motif ~= '' then
         if motif ~= '' then
            local parent = getParent(motif)
             table.insert(motifs, motif)
 
             table.insert(motifs, {
                label = motif,
                parent = parent
            })
         end
         end
     end
     end


     table.sort(motifs, function(a, b)
     table.sort(motifs, function(a, b)
         local keyA = mw.ustring.lower(a.parent .. '|' .. a.label)
         return mw.ustring.lower(a) < mw.ustring.lower(b)
        local keyB = mw.ustring.lower(b.parent .. '|' .. b.label)
        return keyA < keyB
     end)
     end)


     local html = mw.html.create()
     local html = mw.html.create()


     for _, item in ipairs(motifs) do
     for _, motif in ipairs(motifs) do
         local badge = html
         html
             :tag('span')
             :tag('span')
             :addClass('badge badge-pill badge-motif mr-1')
             :addClass('badge badge-pill badge-motif mr-1')
             :attr(
             :wikitext(frame:preprocess(
                'title',
                '{{#formredlink:target=' .. motif .. '|form=Content}}'
                item.parent ~= '' and ('Child of: ' .. item.parent) or 'Top-level motif'
            ))
            )
 
        if item.parent ~= '' then
            badge:addClass('has-parent')
 
            badge
                :tag('span')
                :addClass('motif-parent')
                :wikitext(item.parent .. ' › ')
                :done()
        end
 
        badge:wikitext(frame:preprocess(
            '{{#formredlink:target=' .. item.label .. '|form=Content}}'
        ))
     end
     end



Latest revision as of 20:09, 24 April 2026

Documentation for this module may be created at Module:Motifs/doc

local p = {}

function p.renderBadges(frame)
    local raw = frame.args[1] or ''
    if raw == '' then
        return ''
    end

    local motifs = {}

    for motif in mw.text.gsplit(raw, ';', true) do
        motif = mw.text.trim(motif)

        if motif ~= '' then
            table.insert(motifs, motif)
        end
    end

    table.sort(motifs, function(a, b)
        return mw.ustring.lower(a) < mw.ustring.lower(b)
    end)

    local html = mw.html.create()

    for _, motif in ipairs(motifs) do
        html
            :tag('span')
            :addClass('badge badge-pill badge-motif mr-1')
            :wikitext(frame:preprocess(
                '{{#formredlink:target=' .. motif .. '|form=Content}}'
            ))
    end

    return tostring(html)
end

return p