Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

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

local mArguments = require('Module:Arguments')
local p = {}

-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix.
local function getArgNums(prefix, args)
    local nums = {}
    for k, v in pairs(args) do
        local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
        if num then
            table.insert(nums, tonumber(num))
        end
    end
    table.sort(nums)
    return nums
end

-- Function to determine if a page is a category
local function isCategoryPage(pageName)
    local title = mw.title.new(pageName)
    return title and title.namespace == 14 -- Namespace 14 is "Category"
end

--Implements {{Navpills}} from the frame
function p.navpills(frame)
    mArguments = require('Module:Arguments')
    return p._navpills(mArguments.getArgs(frame, { trim = true, removeBlanks = false }))
end

function p._navpills(args)
    if not args then
        return 'Missing arguments'
    end

    local html = mw.html.create('div'):addClass('template-navpills'):attr('role', 'navigation')

    if args['cols'] then
        local num = tostring(args['cols'])
        html:addClass(string.format('template-navpills--col%s', num))
    end

    if args['rows'] then
        local num = tostring(args['rows'])
        html:addClass(string.format('template-navpills--row%s', num))
    end

    for i, _ in ipairs(getArgNums('page', args)) do
        if not args['page' .. i] then
            return
        end
        local num = tostring(i)
        local pageName = args['page' .. num]
        local text = args['text' .. num] or pageName
        local navpill = mw.html.create('div'):addClass('template-navpill')

        if args['image' .. i] then
            navpill:tag('div'):addClass('template-navpill-background')
                :wikitext(string.format('[[File:%s|x128px|link=]]', args['image' .. num]))
        end

        local linkTarget = pageName
        if isCategoryPage(pageName) then
            linkTarget = ':' .. pageName  -- Ensure "Category:" prefix
        end

        navpill:wikitext(string.format('[[%s|%s]]', linkTarget, text))
        html:node(navpill)
    end

    return mw.getCurrentFrame():extensionTag{
        name = 'templatestyles',
        args = { src = 'Module:Navpills/styles.css' }
    } .. tostring(html)
end

return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.