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

Module:CategoryTranscluder: Difference between revisions

From Teriock
Content deleted Content added
Created page with "local p = {} -- Function to retrieve and transclude pages in a given category function p.transcludeCategory(frame) -- Get the category name from the arguments local args = frame:getParent().args local categoryName = args[1] if not categoryName or categoryName == "" then return "Error: No category specified." end -- Initialize a buffer to hold the transcluded content local contentBuffer = {} -- Iterate through pages in the categ..."
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


-- Function to retrieve and transclude pages in a given category
-- Helper function to get all pages in a category
function p.transcludeCategory(frame)
local function getPagesInCategory(categoryName)
-- Remove "Category:" prefix if present
-- Get the category name from the arguments
categoryName = categoryName:gsub('^[Cc]ategory:', '')
local args = frame:getParent().args
local categoryName = args[1]
local pages = {}

if not categoryName or categoryName == "" then
local category = mw.site.categories[categoryName]
return "Error: No category specified."
end

-- Initialize a buffer to hold the transcluded content
local contentBuffer = {}

-- Iterate through pages in the category
local category = mw.site.getCategory(categoryName)
if not category then
if not category then
return "Error: Category not found."
return pages
end
end
-- Iterate through all pages in the category
for title in category:pages() do
table.insert(pages, title.prefixedText)
end
-- Sort pages alphabetically
table.sort(pages)
return pages
end


-- Main function to transclude all pages in a category
local count = 0
function p.transcludeCategory(frame)
for _, page in ipairs(category:members()) do
count = count + 1
local categoryName = frame.args[1]

if not categoryName then
-- Only transclude articles, not files or subcategories
return '<strong class="error">Error: Category name not provided</strong>'
if page.ns == 0 then
end
table.insert(contentBuffer, string.format("<includeonly>{{:%s}}</includeonly>", page.text))
local pages = getPagesInCategory(categoryName)
if #pages == 0 then
return string.format('<strong class="error">Error: No pages found in category "%s"</strong>', categoryName)
end
-- Build the output with transclusions
local output = {}
for _, pageName in ipairs(pages) do
-- Skip the category page itself
if not pageName:match('^[Cc]ategory:') then
table.insert(output, string.format('{{:%s}}', pageName))
end
end
end
-- Join all transclusions with newlines
return table.concat(output, '\n')
end


-- Function to get a simple list of pages without transclusion
-- Optional: Stop after a set limit to prevent excessive processing
function p.listPages(frame)
if count > 100 then
local categoryName = frame.args[1]
table.insert(contentBuffer, "<!-- Output truncated to the first 100 items. -->")
break
if not categoryName then
return '<strong class="error">Error: Category name not provided</strong>'
end
local pages = getPagesInCategory(categoryName)
if #pages == 0 then
return string.format('<strong class="error">Error: No pages found in category "%s"</strong>', categoryName)
end
-- Build the output as a bullet list
local output = {}
for _, pageName in ipairs(pages) do
if not pageName:match('^[Cc]ategory:') then
table.insert(output, string.format('* [[%s]]', pageName))
end
end
end
end

return table.concat(output, '\n')
-- Combine the transcluded content and return it
return table.concat(contentBuffer, "\n")
end
end



Latest revision as of 11:26, 14 January 2025

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

local p = {}

-- Helper function to get all pages in a category
local function getPagesInCategory(categoryName)
    -- Remove "Category:" prefix if present
    categoryName = categoryName:gsub('^[Cc]ategory:', '')
    
    local pages = {}
    local category = mw.site.categories[categoryName]
    
    if not category then
        return pages
    end
    
    -- Iterate through all pages in the category
    for title in category:pages() do
        table.insert(pages, title.prefixedText)
    end
    
    -- Sort pages alphabetically
    table.sort(pages)
    
    return pages
end

-- Main function to transclude all pages in a category
function p.transcludeCategory(frame)
    local categoryName = frame.args[1]
    
    if not categoryName then
        return '<strong class="error">Error: Category name not provided</strong>'
    end
    
    local pages = getPagesInCategory(categoryName)
    
    if #pages == 0 then
        return string.format('<strong class="error">Error: No pages found in category "%s"</strong>', categoryName)
    end
    
    -- Build the output with transclusions
    local output = {}
    for _, pageName in ipairs(pages) do
        -- Skip the category page itself
        if not pageName:match('^[Cc]ategory:') then
            table.insert(output, string.format('{{:%s}}', pageName))
        end
    end
    
    -- Join all transclusions with newlines
    return table.concat(output, '\n')
end

-- Function to get a simple list of pages without transclusion
function p.listPages(frame)
    local categoryName = frame.args[1]
    
    if not categoryName then
        return '<strong class="error">Error: Category name not provided</strong>'
    end
    
    local pages = getPagesInCategory(categoryName)
    
    if #pages == 0 then
        return string.format('<strong class="error">Error: No pages found in category "%s"</strong>', categoryName)
    end
    
    -- Build the output as a bullet list
    local output = {}
    for _, pageName in ipairs(pages) do
        if not pageName:match('^[Cc]ategory:') then
            table.insert(output, string.format('* [[%s]]', pageName))
        end
    end
    
    return table.concat(output, '\n')
end

return p