Module:Lua banner: Difference between revisions
From Workers & Resources: Soviet Republic Official Wiki
(Fix `wish` parameter) |
m (1 revision imported) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
-- This module implements the {{ | -- <pre> | ||
-------------------------------------------------------------------------------- | |||
-- This module implements the {{T|Lua}} template. | |||
-- | |||
-- @module LuaBanner | |||
-- @alias p | |||
-- @release stable | |||
-- @author [[User:ExE Boss]]m | |||
-- @require [[Global Lua Modules/Arguments|Module:Arguments]] | |||
-- @require [[Global Lua Modules/Config|Module:Config]] | |||
-- @require [[Global Lua Modules/I18n|Module:I18n]] | |||
-- @require [[Global Lua Modules/List|Module:List]] | |||
-- @require [[Global Lua Modules/Message box|Module:Message box]] | |||
-- @require [[Global Lua Modules/TableTools|Module:TableTools]] | |||
-- @require [[Global Lua Modules/Yesno|Module:Yesno]] | |||
-- @require [[Module:Lua banner/config]] | |||
-- @require [[Module:Lua banner/i18n]] | |||
-- @attribution [[mw:Module:Lua banner|Module:Lua banner]] (MediaWiki) | |||
-- @attribution [[wikipedia:Module:Lua banner|Module:Lua banner]] (Wikipedia) | |||
-- @see [[mw:Module:Lua banner|Original module on MediaWiki]] | |||
-- @see [[wikipedia:Module:Lua banner|Similar module on Wikipedia]] | |||
-- @see [[Template:Lua]] | |||
-------------------------------------------------------------------------------- | |||
local | local libraryUtil = require("libraryUtil"); | ||
local | local checkType = libraryUtil.checkType; | ||
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg; | |||
local | |||
local | local getArgs = require("Dev:Arguments").getArgs; | ||
local list = require("Dev:List"); | |||
local messageBox = require("Dev:Message box"); | |||
local tableTools = require("Dev:TableTools"); | |||
local yesno = require("Dev:Yesno"); | |||
local function | local cfg = require("Dev:Config").loadConfig("Lua banner"); | ||
return | local i18n = require("Dev:I18n").loadMessages("Lua banner"); | ||
local function noEmptyString(value) | |||
if (type(value) ~= "string" or string ~= "") then | |||
return value; | |||
end | |||
end | |||
local p = {}; | |||
--[[ | |||
-- @function p.main | |||
-- @param {table|Frame} args | |||
-- @param[opt] args.nocat | |||
-- @param[opt] {string} args.category | |||
-- @param[opt] {Title} title | |||
-- @return {string} | |||
--]] | |||
function p.main(frame, ...) | |||
return p._main(getArgs(frame), ...); | |||
end | end | ||
function p._main(args, title) | |||
checkType('main', 1, args, 'table'); | |||
checkType('main', 2, title, 'table', true); | |||
title = title or mw.title.getCurrentTitle(); | |||
local modules = tableTools.compressSparseArray(args); | |||
local box = p.renderBox(modules, title); | |||
local trackingCategories = p.renderTrackingCategories(args, modules, title); | |||
return box .. trackingCategories; | |||
end | end | ||
function p. | --[[ | ||
-- @function p.renderBox | |||
-- @private | |||
-- @param {table} modules | |||
-- @param[opt] {Title} title | |||
-- @return {string} | |||
--]] | |||
function p.renderBox(modules, title) | |||
checkType('renderBox', 1, modules, 'table'); | |||
checkType('renderBox', 2, title, 'table', true); | |||
title = title or mw.title.getCurrentTitle(); | |||
if (title.subpageText == "doc") then | |||
title = title.basePageTitle; | |||
end | end | ||
local boxArgs = {}; | |||
local luaLink = i18n:msg("lua_link"); | |||
local | |||
local | |||
if (#modules < 1) then | |||
if ( | |||
if #modules < 1 then | cfg:getValue("allow_wishes") == true | ||
cfg | and title.contentModel ~= "Scribunto" | ||
) then | |||
boxArgs.text = | boxArgs.text = i18n:msg("wishtext"); | ||
else | else | ||
boxArgs.text = | boxArgs.text = tostring( | ||
mw.html.create("strong") | |||
:addClass("error") | |||
:wikitext(i18n:msg("error")) | |||
); | |||
end | end | ||
else | else | ||
local moduleLinks = {} | local moduleLinks = {}; | ||
for i, module in ipairs(modules) do | for i, module in ipairs(modules) do | ||
moduleLinks[i] = string.format( | moduleLinks[i] = string.format("[[:Module:%s]]", module); | ||
end | end | ||
local moduleList = | |||
boxArgs.text = | local moduleList = list.makeList("bulleted", moduleLinks); | ||
local header; | |||
if title.contentModel == "Scribunto" then | |||
header = "header-module"; | |||
elseif (title.namespace == 2) then | |||
header = "header-user"; | |||
else | |||
header = "header"; | |||
end | |||
boxArgs.text = i18n:msg(header, luaLink) .. "\n" .. moduleList; | |||
end | end | ||
boxArgs.type = | |||
boxArgs.small = true | boxArgs.type = "notice"; | ||
boxArgs.small = true; | |||
boxArgs.image = string.format( | boxArgs.image = string.format( | ||
"[[File:Lua_logo.svg|30px|alt=%s|link=%s]]", | |||
i18n:msg("logo_alt"), | |||
luaLink | |||
); | |||
return | boxArgs.class = 'msgbox'; | ||
return messageBox.main("mbox", boxArgs); | |||
end | end | ||
function p.renderTrackingCategories(args, modules, | --[[ | ||
-- @function p.renderTrackingCategories | |||
-- @private | |||
-- @param {table} args | |||
-- @param {table} modules | |||
-- @param[opt] {Title} title | |||
-- @return {string} | |||
--]] | |||
function p.renderTrackingCategories(args, modules, title) | |||
checkType('renderTrackingCategories', 1, args, 'table'); | |||
checkType('renderTrackingCategories', 2, modules, 'table'); | |||
checkType('renderTrackingCategories', 3, title, 'table', true); | |||
title = title or mw.title.getCurrentTitle(); | |||
local category = args.category; | |||
checkTypeForNamedArg('renderTrackingCategories', 'category', category, 'string', true); | |||
if yesno(args.nocat) then | if yesno(args.nocat) then | ||
return '' | return ''; | ||
end | end | ||
local allowWishes = cfg:getValue("allow_wishes"); | |||
local cats = {}; | |||
local cats = {} | |||
-- Error category | -- Error category | ||
if #modules < 1 and not ( | local errorCategory = noEmptyString(cfg:getValue("error_category")); | ||
cats[#cats + 1] = | if ( | ||
#modules < 1 | |||
and errorCategory | |||
and ( | |||
not allowWishes | |||
or (title.subpageText == "doc" and title.basePageTitle or title).contentModel == "Scribunto" | |||
) | |||
) then | |||
cats[#cats + 1] = errorCategory; | |||
end | end | ||
-- Lua templates category | -- Lua templates category | ||
local subpageBlacklist = cfg:getValue("subpage_blacklist"); | |||
if | if (title.namespace == 10 and not subpageBlacklist[title.subpageText]) then | ||
if (not category) then | |||
local moduleCategories = cfg:getValue("module_categories"); | |||
local pagename = modules[1] and mw.title.new(modules[1]); | |||
if not category then | category = pagename and moduleCategories[pagename.text]; | ||
local pagename = modules[1] and mw.title.new(modules[1]) | |||
category = pagename and | if (not category) then | ||
if not category then | category = noEmptyString( | ||
cfg:getValue( | |||
(allowWishes and #modules < 1) | |||
and "wish_category" | |||
or "default_category" | |||
) | |||
); | |||
end | end | ||
end | end | ||
if category then | |||
cats[#cats + 1] = category | if (category) then | ||
cats[#cats + 1] = category; | |||
end | end | ||
end | end | ||
for i, cat in ipairs(cats) do | for i, cat in ipairs(cats) do | ||
cats[i] = string.format('[[Category:%s]]', cat) | cats[i] = string.format('[[Category:%s]]', cat); | ||
end | end | ||
return table.concat(cats) | |||
return table.concat(cats); | |||
end | end | ||
return p | return p; | ||
-- </pre> |
Latest revision as of 18:31, 14 June 2024
Documentation for this module may be created at Module:Lua banner/doc
-- <pre> -------------------------------------------------------------------------------- -- This module implements the {{T|Lua}} template. -- -- @module LuaBanner -- @alias p -- @release stable -- @author [[User:ExE Boss]]m -- @require [[Global Lua Modules/Arguments|Module:Arguments]] -- @require [[Global Lua Modules/Config|Module:Config]] -- @require [[Global Lua Modules/I18n|Module:I18n]] -- @require [[Global Lua Modules/List|Module:List]] -- @require [[Global Lua Modules/Message box|Module:Message box]] -- @require [[Global Lua Modules/TableTools|Module:TableTools]] -- @require [[Global Lua Modules/Yesno|Module:Yesno]] -- @require [[Module:Lua banner/config]] -- @require [[Module:Lua banner/i18n]] -- @attribution [[mw:Module:Lua banner|Module:Lua banner]] (MediaWiki) -- @attribution [[wikipedia:Module:Lua banner|Module:Lua banner]] (Wikipedia) -- @see [[mw:Module:Lua banner|Original module on MediaWiki]] -- @see [[wikipedia:Module:Lua banner|Similar module on Wikipedia]] -- @see [[Template:Lua]] -------------------------------------------------------------------------------- local libraryUtil = require("libraryUtil"); local checkType = libraryUtil.checkType; local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg; local getArgs = require("Dev:Arguments").getArgs; local list = require("Dev:List"); local messageBox = require("Dev:Message box"); local tableTools = require("Dev:TableTools"); local yesno = require("Dev:Yesno"); local cfg = require("Dev:Config").loadConfig("Lua banner"); local i18n = require("Dev:I18n").loadMessages("Lua banner"); local function noEmptyString(value) if (type(value) ~= "string" or string ~= "") then return value; end end local p = {}; --[[ -- @function p.main -- @param {table|Frame} args -- @param[opt] args.nocat -- @param[opt] {string} args.category -- @param[opt] {Title} title -- @return {string} --]] function p.main(frame, ...) return p._main(getArgs(frame), ...); end function p._main(args, title) checkType('main', 1, args, 'table'); checkType('main', 2, title, 'table', true); title = title or mw.title.getCurrentTitle(); local modules = tableTools.compressSparseArray(args); local box = p.renderBox(modules, title); local trackingCategories = p.renderTrackingCategories(args, modules, title); return box .. trackingCategories; end --[[ -- @function p.renderBox -- @private -- @param {table} modules -- @param[opt] {Title} title -- @return {string} --]] function p.renderBox(modules, title) checkType('renderBox', 1, modules, 'table'); checkType('renderBox', 2, title, 'table', true); title = title or mw.title.getCurrentTitle(); if (title.subpageText == "doc") then title = title.basePageTitle; end local boxArgs = {}; local luaLink = i18n:msg("lua_link"); if (#modules < 1) then if ( cfg:getValue("allow_wishes") == true and title.contentModel ~= "Scribunto" ) then boxArgs.text = i18n:msg("wishtext"); else boxArgs.text = tostring( mw.html.create("strong") :addClass("error") :wikitext(i18n:msg("error")) ); end else local moduleLinks = {}; for i, module in ipairs(modules) do moduleLinks[i] = string.format("[[:Module:%s]]", module); end local moduleList = list.makeList("bulleted", moduleLinks); local header; if title.contentModel == "Scribunto" then header = "header-module"; elseif (title.namespace == 2) then header = "header-user"; else header = "header"; end boxArgs.text = i18n:msg(header, luaLink) .. "\n" .. moduleList; end boxArgs.type = "notice"; boxArgs.small = true; boxArgs.image = string.format( "[[File:Lua_logo.svg|30px|alt=%s|link=%s]]", i18n:msg("logo_alt"), luaLink ); boxArgs.class = 'msgbox'; return messageBox.main("mbox", boxArgs); end --[[ -- @function p.renderTrackingCategories -- @private -- @param {table} args -- @param {table} modules -- @param[opt] {Title} title -- @return {string} --]] function p.renderTrackingCategories(args, modules, title) checkType('renderTrackingCategories', 1, args, 'table'); checkType('renderTrackingCategories', 2, modules, 'table'); checkType('renderTrackingCategories', 3, title, 'table', true); title = title or mw.title.getCurrentTitle(); local category = args.category; checkTypeForNamedArg('renderTrackingCategories', 'category', category, 'string', true); if yesno(args.nocat) then return ''; end local allowWishes = cfg:getValue("allow_wishes"); local cats = {}; -- Error category local errorCategory = noEmptyString(cfg:getValue("error_category")); if ( #modules < 1 and errorCategory and ( not allowWishes or (title.subpageText == "doc" and title.basePageTitle or title).contentModel == "Scribunto" ) ) then cats[#cats + 1] = errorCategory; end -- Lua templates category local subpageBlacklist = cfg:getValue("subpage_blacklist"); if (title.namespace == 10 and not subpageBlacklist[title.subpageText]) then if (not category) then local moduleCategories = cfg:getValue("module_categories"); local pagename = modules[1] and mw.title.new(modules[1]); category = pagename and moduleCategories[pagename.text]; if (not category) then category = noEmptyString( cfg:getValue( (allowWishes and #modules < 1) and "wish_category" or "default_category" ) ); end end if (category) then cats[#cats + 1] = category; end end for i, cat in ipairs(cats) do cats[i] = string.format('[[Category:%s]]', cat); end return table.concat(cats); end return p; -- </pre>