Module:unsubst
ការរចនា
Documentation for this module may be created at Module:unsubst/doc
-- Cannot unsubst if not currently being substed.
if not mw.isSubsting() then
local frame_title = mw.getCurrentFrame():getTitle()
-- If another module is calling this one, throw an error.
if frame_title ~= "Module:unsubst" then
error(("[[%s]] should not require [[Module:unsubst]] unless mw.isSubsting() returns true"):format(frame_title))
end
-- Otherwise, enable {{#invoke:unsubst|me|...}}.
local export = {}
local process_params = require("Module:parameters").process
function export.me(frame)
return process_params(frame.args, {
[""] = true
})[""]
end
return export
end
local m_pages = require("Module:pages")
local m_template_parser = require("Module:template parser")
local build_template = m_template_parser.buildTemplate
local concat = table.concat
local is_internal_title = m_pages.is_internal_title
local new_title = mw.title.new
local function get_title(frame)
local title = new_title(frame:getTitle())
return is_internal_title(title) and title or
-- This shouldn't happen.
error("frame returned an invalid title")
end
local function serialize(title, args)
return "{{" .. concat(build_template(title, args), "|") .. "}}"
end
local mt = {}
if m_pages.is_transcluded() then
local get_template_invocation_name = m_template_parser.getTemplateInvocationName
function mt:__index(entry_point)
return function(frame)
frame = frame:getParent()
return serialize(get_template_invocation_name(get_title(frame)), frame.args)
end
end
else
function mt:__index(entry_point)
return function(frame)
local title = get_title(frame)
return title.namespace == 828 and
(serialize(("safesubst:<noinclude/>#invoke:%s|%s"):format(title.text, entry_point), frame.args)) or
-- This shouldn't happen.
error(("[[Module:unsubst]] cannot work if the current frame is not in the %s namespace, because the #invoke magic word requires it"):format(mw.site.namespaces[828].canonicalName))
end
end
end
return setmetatable({}, mt)