مَوادَس کُن گٔژھِو

Module:CategoryList

وِکیٖپیٖڈیا پؠٹھٕ، اَکھ آزاد اِنسایکلوپیٖڈیا

"یَمہٕ ماڈیوٗلُک دَستاویز ییٚہِ Module:CategoryList/دَستاویز جاے بَناونہٕ"

-- Module:CategoryList
-- Fetches pages from a category using the MediaWiki API (works even if catTitle:members is disabled)

local p = {}

local function fetchCategoryMembers(categoryName, namespace)
    local apiUrl = mw.uri.fullUrl('Special:ApiHelp', {
        action = 'query',
        list = 'categorymembers',
        cmtitle = 'Category:' .. categoryName,
        cmlimit = '500',
        cmnamespace = namespace or '',
        format = 'json'
    })

    local http = require('mw.http')
    local res = http.fetch(apiUrl)

    if not res or res.status ~= 200 then
        return nil, 'API request failed'
    end

    local data = mw.text.jsonDecode(res.body)
    if not data or not data.query or not data.query.categorymembers then
        return nil, 'Invalid API response'
    end

    return data.query.categorymembers
end

function p.main(frame)
    local categoryName = frame.args[1]
    local namespace = frame.args.namespace or frame.args[2]

    if not categoryName or categoryName:match('^%s*$') then
        return '<strong class="error">Error: No category specified. Usage: {{#invoke:CategoryList|main|CategoryName}}</strong>'
    end

    local members, err = fetchCategoryMembers(categoryName, namespace)
    if not members then
        return '<strong class="error">' .. err .. '</strong>'
    end

    if #members == 0 then
        return 'This category is currently empty.'
    end

    local listItems = {}
    for _, page in ipairs(members) do
        table.insert(listItems, '* [[' .. page.title .. ']]')
    end

    return table.concat(listItems, '\n')
end

return p