Module:WikiProjectBanner
Jump to navigation
Jump to search
This module is rated as pre-alpha. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure. |
This module is intended to be a replacement for {{WPBannerMeta}}.
Usage
Place the following on the template page:
{{safesubst:<includeonly/>#invoke:WikiProjectBanner|render_banner}}<noinclude> {{#invoke:WikiProjectBanner|render_docs}}
After saving (or while previewing) the page, follow the link in the documentation box to configure it. Consider adding a pointer to the banner's configuration module inside an HTML-style comment: <!-- see [[Module:WikiProjectBanner/config/BANNER_NAME]] for banner configuration -->
Technical details
This module uses the following pages:
- Module:WikiProjectBanner/config
- Module:WikiProjectBanner/shared
- Module:WikiProjectBanner/AssessmentRow
- Module:WikiProjectBanner/Banner
- Module:WikiProjectBanner/Context
- Module:WikiProjectBanner/Documentation
- Module:WikiProjectBanner/Grade
- Module:WikiProjectBanner/Note
- Module:WikiProjectBanner/Row
- Module:WikiProjectBanner/TaskForce
All subpages of this module:
-------------------------------------------------------------------------------
-- WikiProjectBanner --
-- --
-- This module produces templates used by WikiProjects to track pages that --
-- are within their scope. --
-------------------------------------------------------------------------------
-- Load necessary modules.
require('Module:No globals')
local Banner = require('Module:WikiProjectBanner/Banner')
local p = {}
function p._main(bannerName, args, cfg)
-- Entry point from Lua.
cfg = cfg or mw.loadData('Module:WikiProjectBanner/config')
-- Set a metatable allowing us to track unused arguments.
local unusedArgs, argsProxy = {}, {}
for k, v in pairs(args) do
unusedArgs[k] = true
end
setmetatable(argsProxy, {
__index = function (t, key)
unusedArgs[key] = nil
local val = args[key]
t[key] = val
return val
end,
__pairs = function (t)
for key, val in pairs(args) do
unusedArgs[key] = nil
t[key] = val
end
return next, t
end,
__ipairs = function (t)
for i, val in ipairs(args) do
unusedArgs[i] = nil
t[i] = val
end
return function (t, i)
i = i + 1
local val = t[i]
if val then
return i, val
end
end, t, 0
end
})
local success, bannerObj = pcall(Banner.new, bannerName, argsProxy, cfg)
if not success then
return string.format(
'<strong class="error">Error: %s</strong>',
bannerObj -- This is the error message.
)
end
local ret = tostring(bannerObj)
if next(unusedArgs) then
ret = ret .. '[[Category:WikiProject banners with unused arguments]]'
end
return ret
end
function p.main(frame)
-- Entry point from wikitext.
-- Get the banner name.
local parent = frame:getParent()
local bannerName, isTemplate = parent:getTitle():gsub('^Template:', '')
bannerName = bannerName:gsub('/sandbox$', '')
isTemplate = isTemplate > 0
-- Get the arguments.
local args = {}
for k, v in pairs(parent.args) do
v = v:match('^%s*(.-)%s*$') -- Trim whitespace.
if v ~= '' then
args[k] = v
end
end
-- Subst check.
-- This must be done before any errors can be produced, otherwise the red
-- "script error" text will be substituted instead of the template code.
if mw.isSubsting() then
local ret = {}
ret[#ret + 1] = bannerName
for k, v in pairs(args) do
ret[#ret + 1] = k .. '=' .. v
end
return '{{' .. table.concat(ret, '|') .. '}}'
end
-- Check we are being invoked from a template.
if not isTemplate then
error('this module must be invoked from within a template')
end
return p._main(bannerName, args)
end
return p