More actions
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 = {} |
||
-- |
-- Helper function to get all pages in a category |
||
function |
local function getPagesInCategory(categoryName) |
||
-- Remove "Category:" prefix if present |
|||
⚫ | |||
categoryName = categoryName:gsub('^[Cc]ategory:', '') |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
local category = mw.site.categories[categoryName] |
|||
return "Error: No category specified." |
|||
⚫ | |||
-- Initialize a buffer to hold the transcluded content |
|||
local contentBuffer = {} |
|||
⚫ | |||
⚫ | |||
if not category then |
if not category then |
||
return |
return pages |
||
end |
end |
||
⚫ | |||
⚫ | |||
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] |
|||
⚫ | |||
-- Only transclude articles, not files or subcategories |
|||
return '<strong class="error">Error: Category name not provided</strong>' |
|||
⚫ | |||
end |
|||
⚫ | |||
⚫ | |||
⚫ | |||
return string.format('<strong class="error">Error: No pages found in category "%s"</strong>', categoryName) |
|||
end |
|||
-- Build the output with transclusions |
|||
⚫ | |||
for _, pageName in ipairs(pages) do |
|||
⚫ | |||
if not pageName:match('^[Cc]ategory:') then |
|||
⚫ | |||
end |
end |
||
end |
|||
-- Join all transclusions with newlines |
|||
⚫ | |||
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) |
|||
⚫ | |||
⚫ | |||
table.insert(contentBuffer, "<!-- Output truncated to the first 100 items. -->") |
|||
if not categoryName then |
|||
return '<strong class="error">Error: Category name not provided</strong>' |
|||
end |
|||
local pages = getPagesInCategory(categoryName) |
|||
⚫ | |||
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 |
|||
⚫ | |||
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