Lompat ke isi

Modul:daftar

Dari Wikikato

Dokumentasi untuk modul ini dapat dibuat di Modul:daftar/doc

local p = {}
local linksModule = require("Modul:pranala")
local langModule   = require("Modul:bahasa")

-- Separator helper
local function renderSeparator()
    return '<span class="content-list-separator"> • </span>'
end

-- Render one item (linked version)
local function renderLinked(part, langcode, subpagename, idx, noitalic)
    if part == subpagename then
        return string.format(
            '<span class="content-list-item"><span class="content-list-current">%s</span></span>',
            mw.text.encode(part)
        )
    end

    local entryArgs = {
        [1] = langcode,
        [2] = part,
        notext = "1",
        idx = idx,
    }
    if noitalic then
        entryArgs.noitalic = "1"
    end

    return string.format(
        '<span class="content-list-item">%s</span>',
        linksModule.mention({ args = entryArgs })
    )
end

-- Render one item (plain version)
local function renderPlainItem(part, subpagename)
    if part == subpagename then
        return string.format(
            '<span class="content-list-item"><span class="content-list-current">%s</span></span>',
            part
        )
    end

    return string.format('<span class="content-list-item">%s</span>', part)
end

-- Linked version
function p.render(frame)
    local args = frame.args
    local langArg = mw.text.trim(args[1] or "")
    local langcode = langModule.getLangCode({ args = { langArg } })
    if not langcode or langcode == "" then
        return ""
    end

    local subpagename = mw.title.getCurrentTitle().subpageText
    local noitalic = args.noitalic and args.noitalic ~= ""

    local items = {}
    local i = 2
    while args[i] do
        local part = mw.text.trim(args[i] or "")
        if part ~= "" then
            table.insert(items, renderLinked(part, langcode, subpagename, i - 1, noitalic))
        end
        i = i + 1
    end

    if #items == 0 then
        return ""
    end

    return string.format(
		'<span class="content-list">%s</span>',
		table.concat(items, renderSeparator())
	)
end

-- Plain version
function p.renderPlain(frame)
    local args = frame.args
    if not args[1] or args[1] == "" then
        return ""
    end

    local subpagename = mw.title.getCurrentTitle().subpageText
    local items = {}

    local i = 1
    while args[i] do
        local part = mw.text.trim(args[i] or "")
        if part ~= "" then
            table.insert(items, renderPlainItem(part, subpagename))
        end
        i = i + 1
    end

    if #items == 0 then
        return ""
    end

    return string.format(
		'<span class="content-list">%s</span>',
		table.concat(items, renderSeparator())
	)
end

return p