Module:Uses TNT

Module documentation
warning Warning:This page is shared between multiple wikis.
All changes to this page will be automatically copied to all wikis listed in the left side bar.
Please help translate this page.

Module Quality edit

Usage edit

{{#invoke:Uses TNT|function_name}}

--------------------------------------------------------------------------------
-- This module implements the {{Uses TNT}} template.
--
-- @module usesTNT
-- @alias  p
-- @author [[User:ExE Boss]]
-- @require [[Module:Uses TNT/config]]
-- @require [[Module:Arguments]]
-- @require [[Module:Func]]
-- @require [[Module:List]]
-- @require [[Module:Message box]]
-- @require [[Module:TNT]]
-- @require [[Module:TNTTools]]
-- @require [[Module:TableTools]]
-- @require [[Module:Yesno]]
--------------------------------------------------------------------------------

require("strict");
local checkType = require("libraryUtil").checkType;
local getArgs = require("Module:Arguments").getArgs;
local yesno = require("Module:Yesno");
local lists = require("Module:List");
local tableTools = require("Module:TableTools");
local messageBox = require("Module:Message box");
local TNTTabFull = require("Module:TNTTools").TNTTabFull;

local format = require("Module:Func")
	.bind(require("Module:TNT").format, "I18n/Uses TNT.tab");

local p = {};

local function getConfig()
	return mw.loadData("Module:Uses TNT/config");
end

function p.main(frame)
	local args = getArgs(frame, {
		wrappers = {
			"Template:Uses TNT",
		},
	});
	return p._main(args);
end

function p._main(args, cfg)
	checkType("_main", 1, args, "table");
	checkType("_main", 2, cfg, "table", true);
	cfg = cfg or getConfig();

	local tabFiles = tableTools.compressSparseArray(args);
	local box = p.renderBox(tabFiles, cfg, args);
	local trackingCategories = p.renderTrackingCategories(args, tabFiles, nil, cfg);
	return box .. trackingCategories;
end

function p.renderBox(tabFiles, cfg, args)
	checkType("renderBox", 1, tabFiles, "table");
	checkType("renderBox", 2, cfg, "table", true);
	checkType("renderBox", 3, args, "table", true);
	cfg = cfg or getConfig();

	local nsType = mw.title.getCurrentTitle():inNamespaces(828, 829) and 'module' or 'template';
	local boxArgs = {};

	if #tabFiles < 1 then
		if cfg["allow_wishes"] or yesno(args and args.wish) then
			boxArgs.text = format("wishtext-" .. nsType);
		else
			boxArgs.text = string.format('<strong class="error">%s</strong>', format("error-emptylist"));
		end
	else
		local tabFileLinks = {};
		for i, tabFile in ipairs(tabFiles) do
			local tabFileFull = TNTTabFull(tabFile);
			tabFileLinks[i] = string.format("[[:c:Data:%s|%s]]", tabFileFull, tabFileFull);
		end
		local tabFilesList = lists.makeList("bulleted", tabFileLinks);
		boxArgs.text = format("header-" .. nsType) .. "\n" .. tabFilesList;
	end

	boxArgs.type = "notice";
	boxArgs.small = true;
	boxArgs.image = cfg["logo_link"]
		and string.format("[[%s|%s]]", cfg["logo_link"], format("logo-alt"))
		or format("logo-alt");

	return messageBox.main("mbox", boxArgs);
end

function p.renderTrackingCategories(args, tabFiles, titleObj, cfg)
	checkType("renderTrackingCategories", 1, args, "table");
	checkType("renderTrackingCategories", 2, tabFiles, "table");
	checkType("renderTrackingCategories", 3, titleObj, "table", true);
	checkType("renderTrackingCategories", 4, cfg, "table", true);

	if yesno(args.nocat) then
		return '';
	end

	cfg = cfg or getConfig();

	local cats = {};

	-- Error category
	if #tabFiles < 1 and not (cfg["allow_wishes"] or yesno(args.wish)) and cfg["error_category"] then
		cats[#cats + 1] = cfg["error_category"];
	end

	-- [[Module:TNT]] category
	titleObj = titleObj or mw.title.getCurrentTitle();
	if (
		(titleObj.namespace == 10 or titleObj.namespace == 828)
		and not cfg["subpage_blacklist"][titleObj.subpageText]
	) then
		local category = args.category;
		if not category then
			if (cfg["allow_wishes"] or yesno(args.wish)) and #tabFiles < 1 then
				category = cfg["wish_category"];
			else
				category = cfg["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;