Module:Lua banner: Difference between revisions
From Workers & Resources: Soviet Republic Official Wiki
m (1 revision imported) |
m (1 revision imported) |
(No difference)
|
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>