Module:Lua banner
Jump to navigation
Jump to search
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>