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

Module:Transclude: Difference between revisions

From Teriock
Content deleted Content added
No edit summary
No edit summary
Line 8: Line 8:
-- Main function to transclude pages
-- Main function to transclude pages
function p.transclude(frame)
function p.transclude(frame)
-- Get the raw input
-- Get the raw input and preprocess it first
local input = frame.args[1] or ''
local input = frame:preprocess(frame.args[1] or '')
-- Remove <DynamicPageList> tags if present
input = input:gsub('<DynamicPageList>.*</DynamicPageList>', function(dpl)
-- Extract just the results, removing the DPL configuration
return frame:preprocess(dpl)
end)
local output = {}
local output = {}
-- Split by whitespace (both spaces and newlines)
-- Split the input into lines
for page in input:gmatch('%S+') do
for line in input:gmatch('[^\r\n]+') do
page = trim(page)
line = trim(line)
if page ~= '' then
if line ~= '' then
-- Only add the transclusion brackets if they're not already present
table.insert(output, string.format('{{%s}}', page))
if not line:match('^{{.*}}$') then
line = string.format('{{%s}}', line)
end
table.insert(output, line)
end
end
end
end

Revision as of 11:46, 14 January 2025

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

local p = {}

-- Helper function to trim whitespace from a string
local function trim(s)
    return s:match('^%s*(.-)%s*$')
end

-- Main function to transclude pages
function p.transclude(frame)
    -- Get the raw input and preprocess it first
    local input = frame:preprocess(frame.args[1] or '')
    local output = {}
    
    -- Split the input into lines
    for line in input:gmatch('[^\r\n]+') do
        line = trim(line)
        if line ~= '' then
            -- Only add the transclusion brackets if they're not already present
            if not line:match('^{{.*}}$') then
                line = string.format('{{%s}}', line)
            end
            table.insert(output, line)
        end
    end
    
    -- Join all transclusions with newlines
    return table.concat(output, '\n')
end

-- Function to handle direct template calls
function p.transcludeFromTemplate(frame)
    local parent = frame:getParent()
    return p.transclude(parent)
end

return p