Модуль:Не перекладено і не існує

{{i}} Документація модуля[створити]
-- Модуль покликаний замінити Модуль:Не перекладено в тих випадках коли нема
-- звідки перекладати

local p = {}

-- Щоб порожні використання параметрів вважались нілевими. Нілеві значення, на
-- відміну від порожніх рядків, дають булеву хибу для умовних операторів.
-- Кращий спосіб робити цю валідацію вітається.
local function init(vari)
	if vari == "" then
		return nil
	else
		return vari;
	end
end

-- Головна функція
function p.main(frame)
	-- Витягуємо параметри батьківського шаблону
	local parent = frame:getParent();
	local args = parent.args;
	
	-- Перетягування батьківських параметрів у змінні
	local needed = init(args["треба"]) or init(args[1]);
	local text = init(args["текст"]) or init(args[2]);
	
	-- Створюємо таблицю поточної сторінки щоб перевірити її пн, щоб разом з 
	-- параметром nocat вирішити чи треба її категоризувати
	local currentTitle = mw.title.getCurrentTitle();
	-- Назва поточної сторінки. Використовуватиметься для ключів сортування
	local currentTitleText = currentTitle.text;
	
	-- Витягуємо параметр nocat та перевіряємо простір назв поточної сторінки
	-- не порожнє значення nocat та нульовий простір назв означають що сторінку
	-- можна категоризувати
	local nocat = init(args["nocat"]);
	if currentTitle.namespace ~= 0 then nocat = 1; end
	
	-- Головна змінна побудови рядка виводу
	local wrt = "";
	-- Таблиця назви яка "треба"
	local neededTitle = mw.title.new( needed, "" );
	
	-- Булева змінна, яка показує чи існує стаття, яка "треба"
	local neededExists = neededTitle.exists;
	
	-- Створюмо внутрішнє посилання на статтю, що "треба"
	local linkToNeeded = "";
	linkToNeeded = linkToNeeded .. "[[";
	linkToNeeded = linkToNeeded .. needed;
	if text then
		linkToNeeded = linkToNeeded .. "|" .. text;
	end
	linkToNeeded = linkToNeeded .. "]]";
	
	-- Не залежно від того чи стаття, що "треба" існує ми робимо на неї
	-- посилання. Що змінюється — лише колір — і це за нас обробляє рушій
	wrt = wrt .. linkToNeeded;

	
	if neededExists then
		-- Дії, що здійснюється якщо стаття, яка "треба" існує
		local alert = mw.html.create("span");
		alert:addClass("noprint visible-to-contributors");
		alert:attr("title","Шаблон «не перекладено» не замінено");
		alert:css({["color"]="red"});
		alert:wikitext("●");
		wrt = wrt .. tostring(alert);
		if not nocat then
			-- Дії, які здійснюються якщо цю сторінку можна категоризувати
			wrt = wrt .. "[[Категорія:Вікіпедія:Статті з неактуальним шаблоном Не перекладено|" .. currentTitleText .. "]]"
		end
	end
	return wrt;
end


return p;