Модуль:TNTFallback

    Матеріал з Релігія в огні

    Документацію для цього модуля можна створити у Модуль:TNTFallback/документація

    --------------------------------------------------------------------------------
    -- This module implements a wrapper for [[Module:TNT]] that allows returning
    -- a fallback message; used by {{Documentation}}.
    --
    -- @module TNTFallback
    -- @alias  p
    -- @author [[User:ExE Boss]]
    -- @require [[Module:No globals]]
    -- @require [[Module:TNT]]
    --------------------------------------------------------------------------------
    
    require("strict");
    local TNT = require("Module:TNT");
    
    local p = {};
    
    --------------------------------------------------------------------------------
    -- Based on [[Module:TNT]]'s `msg` function,
    -- but takes an optional `fallback` parameter.
    --------------------------------------------------------------------------------
    function p.msg(frame)
    	local dataset, key;
    	local params = { n = 0 };
    	local lang = nil;
    	local fallback = nil;
    
    	for k, v in pairs(frame.args) do
    		if (k == 1) then
    			dataset = v;
    		elseif (k == 2) then
    			key = v;
    		elseif (type(k) == "number" and k > 2) then
    			local i = k - 2;
    			params[i] = v;
    			params.n = math.max(params.n, i);
    		elseif ((k == "lang") and (v ~= "_")) then
    			lang = v;
    		elseif ((k == "fallback") and (v ~= "")) then
    			fallback = v;
    		end
    	end
    
    	local result;
    	if (lang) then
    		result = TNT.formatInLanguage(lang, dataset, key, unpack(params, 1, params.n));
    	else
    		result = TNT.format(dataset, key, unpack(params, 1, params.n));
    	end
    
    	if (fallback and (
    		-- not translated
    		(result and result == TNT.formatInLanguage("en", dataset, key, unpack(params, 1, params.n)))
    		-- no message
    		or (not result)
    	)) then
    		if (not lang) then
    			if (frame:callParserFunction("int:lang") ~= "en") then
    				return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain();
    			end
    		elseif (lang ~= "en") then
    			return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain();
    		end
    	end
    
    	return result;
    end
    
    return p;