Jump to content
Toggle menu
  • 8 articles
  • 75 files
  • 7 users
  • 37.8K edits
Neodyland Wiki
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 Neodyland Wiki
Add `#ignoredParams` parameter
Only use `#ignoredParams` for parent frame arguments
Line 66: Line 66:
local args = {};
local args = {};
mergeArgs(frame:getParent().args, args, ignoredParams);
mergeArgs(frame:getParent().args, args, ignoredParams);
mergeArgs(frame.args, args, ignoredParams);
mergeArgs(frame.args, args);


if (not title.exists) then
if (not title.exists) then

Revision as of 02:15, 4 August 2021

Module documentation[ create · purge ]
This documentation is transcluded from Module:Transclude/doc.
-- <nowiki>
--------------------------------------------------------------------------------
-- Module that allows transcluding a template with all parent arguments.
-- Useful in `/i18n` template subpages that delegate to a `/layout` subpage.
--
-- @module transclude
-- @author [[User:ExE Boss]]
-- @require [[Module:No globals]]
--------------------------------------------------------------------------------

require('Module:No globals')
local checkType = require('libraryUtil').checkType;

local INVALID_TITLES = {
	["."]	= true,
	[".."]	= true,
};

--------------------------------------------------------------------------------
-- Helper function that merges argument tables.
--
-- @function mergeArgs
-- @param {table} inArgs
-- @param {table} outArgs
--------------------------------------------------------------------------------
local function mergeArgs(inArgs, outArgs, ignoredParams)
	checkType("mergeArgs", 1, inArgs, "table");
	checkType("mergeArgs", 2, outArgs, "table");

	for name, value in pairs(inArgs) do
		if not (ignoredParams and ignoredParams[name]) then
			outArgs[name] = value;
		end
	end

	return outArgs;
end

local mt = {};

function mt.__index(_, name)
	if (
		type(name) ~= "string"
		or INVALID_TITLES[name]
		or mw.ustring.find(name, "#", nil, true)
	) then
		return nil;
	end

	local title = mw.title.new(name, "Template")
	if (not title) then
		return nil;
	end

	return function (frame)
		checkType('transclude["' .. name .. '"]', 1, frame, "table");

		local ignoredParams;
		if (frame.args["#ignoredParams"]) then
			ignoredParams = {}
            for m in mw.text.gsplit(frame.args["#ignoredParams"], '|', true) do
                ignoredParams[mw.text.trim(m)] = true
            end
		end

		local args = {};
		mergeArgs(frame:getParent().args, args, ignoredParams);
		mergeArgs(frame.args, args);

		if (not title.exists) then
			return "[[:" .. title.fullText .. "]]";
		end

		return frame:expandTemplate{
			title = title,
			args = args,
		};
	end
end

return setmetatable({}, mt);
Cookies help us deliver our services. By using our services, you agree to our use of cookies.