<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wikimeat.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AHatnote</id>
	<title>Модуль:Hatnote - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wikimeat.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AHatnote"/>
	<link rel="alternate" type="text/html" href="https://wikimeat.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Hatnote&amp;action=history"/>
	<updated>2026-10-10T05:26:23Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wikimeat.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Hatnote&amp;diff=226913&amp;oldid=prev</id>
		<title>Tim1mike в 23:04, 25 ноября 2021</title>
		<link rel="alternate" type="text/html" href="https://wikimeat.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Hatnote&amp;diff=226913&amp;oldid=prev"/>
		<updated>2021-11-25T23:04:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wikimeat.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Hatnote&amp;amp;diff=226913&amp;amp;oldid=6549&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Tim1mike</name></author>
	</entry>
	<entry>
		<id>https://wikimeat.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Hatnote&amp;diff=6549&amp;oldid=prev</id>
		<title>Tim1mike: Новая страница: «local get_args = require(&#039;Module:Arguments&#039;).getArgs local mError = require(&#039;Module:Error&#039;) local yesno = function (v) return require(&#039;Module:Yesno&#039;)(v, true) end...»</title>
		<link rel="alternate" type="text/html" href="https://wikimeat.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Hatnote&amp;diff=6549&amp;oldid=prev"/>
		<updated>2020-11-01T16:26:00Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «local get_args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs local mError = require(&amp;#039;Module:Error&amp;#039;) local yesno = function (v) return require(&amp;#039;Module:Yesno&amp;#039;)(v, true) end...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local get_args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local mError = require(&amp;#039;Module:Error&amp;#039;)&lt;br /&gt;
local yesno = function (v) return require(&amp;#039;Module:Yesno&amp;#039;)(v, true) end&lt;br /&gt;
&lt;br /&gt;
local p, tr = {}, {}&lt;br /&gt;
local current_title = mw.title.getCurrentTitle()&lt;br /&gt;
local tracking_categories = {&lt;br /&gt;
	no_prefix = &amp;#039;Википедия:Страницы с модулем Hatnote без указания префикса&amp;#039;,&lt;br /&gt;
	no_links = &amp;#039;Википедия:Страницы с модулем Hatnote без ссылок&amp;#039;,&lt;br /&gt;
	red_link = &amp;#039;Википедия:Страницы с модулем Hatnote с красной ссылкой&amp;#039;,&lt;br /&gt;
	bad_format = &amp;#039;Википедия:Страницы с модулем Hatnote с некорректно заполненными параметрами&amp;#039;,&lt;br /&gt;
	formatted = &amp;#039;Википедия:Страницы с модулем Hatnote с готовым форматированиеми&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function index(t1, t2)&lt;br /&gt;
	return setmetatable(t1, {__index = t2})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function concat(e1, e2) &lt;br /&gt;
	return tostring(e1) .. tostring(e2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function tr.make_categories(tracking_categories)&lt;br /&gt;
	local categories = setmetatable({}, {&lt;br /&gt;
		__tostring = function (self) return table.concat(self) end, &lt;br /&gt;
		__concat = concat&lt;br /&gt;
	})&lt;br /&gt;
	&lt;br /&gt;
	function categories:add(type, nocat)&lt;br /&gt;
		if not nocat then&lt;br /&gt;
			table.insert(self, string.format(&amp;#039;[[Категория:%s]]&amp;#039;, tracking_categories[type]))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return categories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function tr.error(msg, categories, preview_only)&lt;br /&gt;
	local current_frame = mw.getCurrentFrame()&lt;br /&gt;
	local parent_frame = current_frame:getParent()&lt;br /&gt;
	local res_frame_title = parent_frame and parent_frame:getTitle() ~= current_title.prefixedText and&lt;br /&gt;
		parent_frame:getTitle() or&lt;br /&gt;
		current_frame:getTitle()&lt;br /&gt;
	if not preview_only or current_frame:preprocess(&amp;#039;{{REVISIONID}}&amp;#039;) == &amp;#039;&amp;#039; then&lt;br /&gt;
		return mError.error{string.format(&amp;#039;Ошибка в [[%s]]: %s&amp;#039;, res_frame_title, msg)} .. categories&lt;br /&gt;
	else &lt;br /&gt;
		return categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parse_link(link, label)&lt;br /&gt;
	link = link:gsub(&amp;#039;\n&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	link = link:match(&amp;#039;%[%[:?([^%]]+)%]%]&amp;#039;) or link:match(&amp;#039;:?(.+)&amp;#039;)&lt;br /&gt;
	if link:match(&amp;#039;|&amp;#039;) then&lt;br /&gt;
		link, label = link:match(&amp;#039;^([^%|]+)%|(.+)$&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return link, label&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.format_link(frame)&lt;br /&gt;
	-- {{ссылка на раздел}}&lt;br /&gt;
	local args = get_args(frame)&lt;br /&gt;
	local link, section, label = args[1], args[2], args[3]&lt;br /&gt;
	&lt;br /&gt;
	if not link then&lt;br /&gt;
		link = current_title.text&lt;br /&gt;
		if section then&lt;br /&gt;
			link = &amp;#039;#&amp;#039; .. section&lt;br /&gt;
			label = label or &amp;#039;§&amp;amp;nbsp;&amp;#039; .. section&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		link, label = parse_link(link, label)&lt;br /&gt;
		if section and not link:match(&amp;#039;#&amp;#039;) then&lt;br /&gt;
			link = link .. &amp;#039;#&amp;#039; .. section&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		label = (label or link):gsub(&amp;#039;^([^#]-)#(.+)$&amp;#039;, &amp;#039;%1 §&amp;amp;nbsp;%2&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return string.format(&amp;#039;[[:%s|%s]]&amp;#039;, link, label or link)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.remove_precision(frame)&lt;br /&gt;
	-- {{без уточнения}}&lt;br /&gt;
	local args = get_args(frame)&lt;br /&gt;
	local title = args[1]&lt;br /&gt;
	&lt;br /&gt;
	return title:match(&amp;#039;^(.+)%s+%b()$&amp;#039;) or title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.is_disambig(frame)&lt;br /&gt;
	local args = get_args(frame)&lt;br /&gt;
	local title = args[1]&lt;br /&gt;
	local page = mw.title.new(title)&lt;br /&gt;
	&lt;br /&gt;
	if not page.exists or mw.title.equals(page, current_title) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page_content = page:getContent()&lt;br /&gt;
	local mw_list_content = mw.title.new(&amp;#039;MediaWiki:Disambiguationspage&amp;#039;):getContent()&lt;br /&gt;
	local lang = mw.language.getContentLanguage()&lt;br /&gt;
	for template in mw.ustring.gmatch(mw_list_content, &amp;#039;%*%s?%[%[Шаблон:([^%]]+)&amp;#039;) do&lt;br /&gt;
		if page_content:match(&amp;#039;{{&amp;#039; .. template) or page_content:match(&amp;#039;{{&amp;#039; .. lang:lcfirst(template)) then &lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.list(frame)&lt;br /&gt;
	local args = get_args(frame, {trim = false})&lt;br /&gt;
	local list_sep = args.list_sep or args[&amp;#039;разделитель списка&amp;#039;] or &amp;#039;, &amp;#039;&lt;br /&gt;
	local last_list_sep = yesno(args.natural_join) ~= false and &amp;#039; и &amp;#039; or list_sep&lt;br /&gt;
	local links_ns = args.links_ns or args[&amp;#039;ПИ ссылок&amp;#039;]&lt;br /&gt;
	local bold_links = yesno(args.bold_links or args[&amp;#039;ссылки болдом&amp;#039;])&lt;br /&gt;
&lt;br /&gt;
	local res_list = {}&lt;br /&gt;
	local tracked = {&lt;br /&gt;
		red_link = false,&lt;br /&gt;
		bad_format = false,&lt;br /&gt;
		formatted = false,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while args[i] do&lt;br /&gt;
		local link = args[i]&lt;br /&gt;
		local label = args[&amp;#039;l&amp;#039; .. i]&lt;br /&gt;
		&lt;br /&gt;
		local element = &amp;#039;&amp;#039;&lt;br /&gt;
		if link:match(&amp;#039;&amp;lt;span&amp;#039;) then -- TODO: переписать&lt;br /&gt;
			tracked.formatted = true&lt;br /&gt;
			element = link -- for {{не переведено}}&lt;br /&gt;
		else&lt;br /&gt;
			tracked.bad_format = tracked.bad_format or link:match(&amp;#039;|&amp;#039;) or link:match(&amp;#039;[%[%]]&amp;#039;)&lt;br /&gt;
			link, label = parse_link(link, label)&lt;br /&gt;
			&lt;br /&gt;
			if links_ns then&lt;br /&gt;
				label = label or link&lt;br /&gt;
				link = mw.site.namespaces[links_ns].name .. &amp;#039;:&amp;#039; .. link&lt;br /&gt;
			end&lt;br /&gt;
			tracked.red_link = tracked.red_link or not mw.title.new(link).exists&lt;br /&gt;
			&lt;br /&gt;
			element = p.format_link{link, nil, label}&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if bold_links then&lt;br /&gt;
			element = string.format(&amp;#039;&amp;lt;b&amp;gt;%s&amp;lt;/b&amp;gt;&amp;#039;, element)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(res_list, element)&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local res = mw.text.listToText(res_list, list_sep, last_list_sep)&lt;br /&gt;
	&lt;br /&gt;
	return setmetatable({res}, {&lt;br /&gt;
		__index = tracked,&lt;br /&gt;
		__tostring = function (self) return self[1] end,&lt;br /&gt;
		__concat = concat&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.hatnote(frame)&lt;br /&gt;
	local args = get_args(frame)&lt;br /&gt;
	local text = args[1]&lt;br /&gt;
	local extraclasses = args.extraclasses&lt;br /&gt;
	local hide_disambig = yesno(args.hide_disambig)&lt;br /&gt;
	&lt;br /&gt;
	local res = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;hatnote&amp;#039;)&lt;br /&gt;
		:addClass(extraclasses)&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
	&lt;br /&gt;
	if hide_disambig then&lt;br /&gt;
		res:addClass(&amp;#039;dabhide&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, _tracking_categories)&lt;br /&gt;
	local args = get_args(frame, {trim = false})&lt;br /&gt;
	&lt;br /&gt;
	local prefix = args.prefix or args[&amp;#039;префикс&amp;#039;]&lt;br /&gt;
	local prefix_plural = args.prefix_plural or args[&amp;#039;префикс мн. ч.&amp;#039;]&lt;br /&gt;
	local sep = args.sep or args[&amp;#039;разделитель&amp;#039;] or &amp;#039; &amp;#039;&lt;br /&gt;
	local dot = yesno(args.dot or args[&amp;#039;точка&amp;#039;]) and &amp;#039;.&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
	local nocat = yesno(args.nocat)&lt;br /&gt;
	local preview_error = yesno(args.preview_error)&lt;br /&gt;
	&lt;br /&gt;
	categories = tr.make_categories(index(_tracking_categories or {}, tracking_categories))&lt;br /&gt;
&lt;br /&gt;
	if not prefix then&lt;br /&gt;
		categories:add(&amp;#039;no_prefix&amp;#039;, nocat)&lt;br /&gt;
		return tr.error(&amp;#039;Не указан префикс&amp;#039;, categories)&lt;br /&gt;
	end&lt;br /&gt;
	if not args[1] then&lt;br /&gt;
		categories:add(&amp;#039;no_links&amp;#039;, nocat)&lt;br /&gt;
		return tr.error(&amp;#039;Не указано ни одной страницы&amp;#039;, categories, preview_error)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[2] and prefix_plural then&lt;br /&gt;
		prefix = prefix_plural&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local list = p.list(args)&lt;br /&gt;
	if list.red_link then&lt;br /&gt;
		categories:add(&amp;#039;red_link&amp;#039;, nocat)&lt;br /&gt;
	end&lt;br /&gt;
	if list.bad_format then&lt;br /&gt;
		categories:add(&amp;#039;bad_format&amp;#039;, nocat)&lt;br /&gt;
	end&lt;br /&gt;
	if list.formatted then&lt;br /&gt;
		categories:add(&amp;#039;formatted&amp;#039;, nocat)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p.hatnote(index({prefix .. sep .. list .. dot}, args)) .. categories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return index(p, tr)&lt;/div&gt;</summary>
		<author><name>Tim1mike</name></author>
	</entry>
</feed>