Jump to content

Module:Call wikitext: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Fix wrapper check
Don't use parent frame
Line 4: Line 4:
function p.main(frame)
function p.main(frame)
local parent = frame:getParent()
local parent = frame:getParent()
if parent and parent:getTitle():gsub('/sandbox$', '') == 'Template:Call wikitext' then
if parent and parent:getTitle():gsub('/sandbox$', '') == 'Template:Call wikitext' then
-- Treat the "Template:Call wikitext" frame as the current frame
-- Treat the "Template:Call wikitext" frame as the current frame
frame = parent
frame = parent
parent = frame:getParent()
end
end


Line 31: Line 29:
-- Create a new frame without "sourceCode"
-- Create a new frame without "sourceCode"
local newFrame = parent:newChild{
local newFrame = frame:newChild{
title = "Module:Example",
title = "Called wikitext",
args = newArgs
args = newArgs
}
}

Revision as of 20:58, 1 September 2024

require('strict')
local p = {}

function p.main(frame)
	local parent = frame:getParent()
	if parent and parent:getTitle():gsub('/sandbox$', '') == 'Template:Call wikitext' then
		-- Treat the "Template:Call wikitext" frame as the current frame
		frame = parent
	end

	local code = frame.args['sourceCode'] or error("sourceCode arg not provided")
	
	if code:match'nowiki' then -- undo nowiki sanitization
		code = mw.text.unstripNoWiki(code)
	else
		error("sourceCode arg is missing <nowiki>")
	end
	
	-- Unsanitize < and >
	code = code:gsub("&lt;", "<"):gsub("&gt;", ">")
	
	-- Remove sourceCode from the arguments
	local newArgs = {}
	for k, v in pairs(frame.args) do
		if k ~= 'sourceCode' then
			newArgs[k] = v
		end
	end
	
	-- Create a new frame without "sourceCode"
	local newFrame = frame:newChild{
		title = "Called wikitext",
		args = newArgs
	}

    return newFrame:preprocess(code)
end

return p