https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Hatnote&feed=atom&action=history
Модуль:Hatnote - История изменений
2024-03-28T21:14:25Z
История изменений этой страницы в вики
MediaWiki 1.39.6
https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Hatnote&diff=123364&oldid=prev
Karaby: 1 версия импортирована
2021-12-24T09:31:54Z
<p>1 версия импортирована</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<tr class="diff-title" lang="ru">
<td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">← Предыдущая версия</td>
<td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">Версия от 09:31, 24 декабря 2021</td>
</tr><tr><td colspan="2" class="diff-notice" lang="ru"><div class="mw-diff-empty">(нет различий)</div>
</td></tr></table>
Karaby
https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Hatnote&diff=72659&oldid=prev
Karaby: Новая страница: «local get_args = require('Module:Arguments').getArgs local mError local yesno = function (v) return require('Module:Yesno')(v, true) end local p, tr = {}, {} loc…»
2021-06-21T07:35:14Z
<p>Новая страница: «local get_args = require('Module:Arguments').getArgs local mError local yesno = function (v) return require('Module:Yesno')(v, true) end local p, tr = {}, {} loc…»</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<tr class="diff-title" lang="ru">
<td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">← Предыдущая версия</td>
<td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">Версия от 07:35, 21 июня 2021</td>
</tr><tr><td colspan="2" class="diff-notice" lang="ru"><div class="mw-diff-empty">(нет различий)</div>
</td></tr></table>
Karaby
https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Hatnote&diff=123363&oldid=prev
bukvica>Grain of sand: по запросу на СО от Lockal
2021-05-23T00:33:16Z
<p>по <a href="/w/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F:Hatnote&action=edit&redlink=1" class="new" title="Обсуждение модуля:Hatnote (страница не существует)">запросу на СО</a> от <a href="/w/index.php?title=U:Lockal&action=edit&redlink=1" class="new" title="U:Lockal (страница не существует)">Lockal</a></p>
<p><b>Новая страница</b></p><div>local get_args = require('Module:Arguments').getArgs<br />
local mError<br />
local yesno = function (v) return require('Module:Yesno')(v, true) end<br />
<br />
local p, tr = {}, {}<br />
local current_title = mw.title.getCurrentTitle()<br />
local tracking_categories = {<br />
no_prefix = 'Википедия:Страницы с модулем Hatnote без указания префикса',<br />
no_links = 'Википедия:Страницы с модулем Hatnote без ссылок',<br />
red_link = 'Википедия:Страницы с модулем Hatnote с красной ссылкой',<br />
bad_format = 'Википедия:Страницы с модулем Hatnote с некорректно заполненными параметрами',<br />
unparsable_link = 'Википедия:Страницы с модулем Hatnote с нечитаемой ссылкой',<br />
formatted = 'Википедия:Страницы с модулем Hatnote с готовым форматированием',<br />
}<br />
<br />
local function index(t1, t2)<br />
return setmetatable(t1, {__index = t2})<br />
end<br />
<br />
local function concat(e1, e2) <br />
return tostring(e1) .. tostring(e2)<br />
end<br />
<br />
function tr.define_categories(tracked_cases)<br />
local categories = setmetatable({}, {<br />
__tostring = function (self) return table.concat(self) end, <br />
__concat = concat<br />
})<br />
<br />
function categories:add(element, nocat)<br />
if not nocat then<br />
local cat_name<br />
if tracked_cases and tracked_cases[element] then<br />
cat_name = tracked_cases[element]<br />
else<br />
cat_name = element<br />
end<br />
table.insert(self, string.format('[[Категория:%s]]', cat_name))<br />
end<br />
end<br />
<br />
return categories<br />
end<br />
<br />
function tr.error(msg, categories, preview_only)<br />
local current_frame = mw.getCurrentFrame()<br />
local parent_frame = current_frame:getParent()<br />
local res_frame_title = parent_frame and parent_frame:getTitle() ~= current_title.prefixedText and<br />
parent_frame:getTitle() or<br />
current_frame:getTitle()<br />
if not preview_only or current_frame:preprocess('{{REVISIONID}}') == '' then<br />
mError = require('Module:Error')<br />
return mError.error{<br />
tag = 'div',<br />
string.format('Ошибка в [[%s]]: %s.' <br />
.. (preview_only and '<br><small>Это сообщение показывается только во время предпросмотра.</small>' or ''), res_frame_title, msg)<br />
} .. categories<br />
else <br />
return categories<br />
end<br />
end<br />
<br />
function p.parse_link(frame)<br />
local args = get_args(frame)<br />
local link = args[1]:gsub('\n', '')<br />
local label<br />
<br />
link = mw.text.trim(link:match('^%[%[([^%]]+)%]%]$') or link)<br />
if link:sub(1, 1) == '/' then<br />
label = link<br />
link = current_title.prefixedText .. link<br />
end<br />
link = link:match(':?(.+)')<br />
if link:match('|') then<br />
link, label = link:match('^([^%|]+)%|(.+)$')<br />
end<br />
<br />
if not mw.title.new(link) then<br />
return nil, nil<br />
end<br />
<br />
return link, label<br />
end<br />
<br />
function p.format_link(frame)<br />
-- {{ссылка на раздел}}<br />
local args = get_args(frame)<br />
local link, section, label = args[1], args[2], args[3]<br />
<br />
if not link then<br />
link = current_title.prefixedText<br />
if section then<br />
link = '#' .. section<br />
label = label or '§&nbsp;' .. section<br />
end<br />
else<br />
local parsed_link, parsed_label = p.parse_link{link}<br />
if parsed_link then<br />
link = parsed_link<br />
else<br />
return link<br />
end<br />
if section and not link:match('#') then<br />
link = link .. '#' .. section<br />
if parsed_label then<br />
parsed_label = parsed_label .. '#' .. section<br />
end<br />
end<br />
<br />
label = (label or parsed_label or link):gsub('^([^#]-)#(.+)$', '%1 §&nbsp;%2')<br />
end<br />
<br />
if label and label ~= link then<br />
return string.format('[[:%s|%s]]', link, label)<br />
else<br />
return string.format('[[:%s]]', link)<br />
end<br />
end<br />
<br />
function p.remove_precision(frame)<br />
-- {{без уточнения}}<br />
local args = get_args(frame)<br />
local title = args[1]<br />
<br />
return title:match('^(.+)%s+%b()$') or title<br />
end<br />
<br />
function p.is_disambig(frame)<br />
local args = get_args(frame)<br />
local title = args[1]<br />
local page = mw.title.new(title)<br />
<br />
if not page or not page.exists or mw.title.equals(page, current_title) then<br />
return false<br />
end<br />
<br />
local page_content = page:getContent()<br />
local mw_list_content = mw.title.new('MediaWiki:Disambiguationspage'):getContent()<br />
local lang = mw.language.getContentLanguage()<br />
for template in mw.ustring.gmatch(mw_list_content, '%*%s?%[%[Шаблон:([^%]]+)') do<br />
if page_content:match('{{' .. template) or page_content:match('{{' .. lang:lcfirst(template)) then <br />
return true<br />
end<br />
end<br />
return false<br />
end<br />
<br />
function p.list(frame)<br />
local args = get_args(frame, {trim = false})<br />
local list_sep = args.list_sep or args['разделитель списка'] or ', '<br />
local last_list_sep = yesno(args.natural_join) ~= false and ' и ' or list_sep<br />
local links_ns = args.links_ns or args['ПИ ссылок']<br />
local bold_links = yesno(args.bold_links or args['ссылки болдом'])<br />
<br />
local res_list = {}<br />
local tracked = {<br />
red_link = false,<br />
bad_format = false,<br />
formatted = false,<br />
unparsable_link = false<br />
}<br />
<br />
local i = 1<br />
while args[i] do<br />
local link = args[i]<br />
local label = args['l' .. i]<br />
<br />
local element = ''<br />
if link:match('<span') then -- TODO: переписать<br />
tracked.formatted = true<br />
element = link -- for {{не переведено}}<br />
else<br />
local bad_format = (link:match('|') or link:match('[%[%]]')) ~= nil<br />
local parsed_link, parsed_label = p.parse_link{link}<br />
<br />
if parsed_link then<br />
tracked.bad_format = tracked.bad_format or bad_format<br />
if links_ns then<br />
parsed_label = parsed_label or parsed_link<br />
parsed_link = mw.site.namespaces[links_ns].name .. ':' .. parsed_link<br />
end<br />
<br />
local title = mw.title.new(parsed_link)<br />
tracked.red_link = tracked.red_link or not (title.isExternal or title.exists)<br />
element = p.format_link{parsed_link, nil, label or parsed_label}<br />
else<br />
tracked.unparsable_link = true<br />
element = link<br />
end<br />
end<br />
<br />
if bold_links then<br />
element = string.format('<b>%s</b>', element)<br />
end<br />
<br />
table.insert(res_list, element)<br />
i = i + 1<br />
end<br />
<br />
return setmetatable(res_list, {<br />
__index = tracked,<br />
__tostring = function (self) return mw.text.listToText(self, list_sep, last_list_sep) end,<br />
__concat = concat,<br />
__pairs = function (self) return pairs(tracked) end<br />
})<br />
end<br />
<br />
function p.hatnote(frame)<br />
local args = get_args(frame)<br />
local text = args[1]<br />
local id = args.id<br />
local extraclasses = args.extraclasses<br />
local hide_disambig = yesno(args.hide_disambig)<br />
<br />
local res = mw.html.create('div')<br />
:attr('id', id)<br />
:addClass('hatnote')<br />
:addClass('navigation-not-searchable')<br />
:addClass(extraclasses)<br />
:wikitext(text)<br />
<br />
if hide_disambig then<br />
res:addClass('dabhide')<br />
end<br />
<br />
return res<br />
end<br />
<br />
function p.main(frame, _tracking_categories)<br />
local args = get_args(frame, {trim = false})<br />
<br />
local prefix = args.prefix or args['префикс']<br />
local prefix_plural = args.prefix_plural or args['префикс мн. ч.']<br />
local sep = args.sep or args['разделитель'] or ' '<br />
local dot = yesno(args.dot or args['точка']) and '.' or ''<br />
local nocat = yesno(args.nocat)<br />
local preview_error = yesno(args.preview_error)<br />
local empty_list_message = args.empty_list_message or 'Не указано ни одной страницы'<br />
<br />
categories = tr.define_categories(index(_tracking_categories or {}, tracking_categories))<br />
<br />
if not prefix then<br />
categories:add('no_prefix', nocat)<br />
return tr.error('Не указан префикс', categories)<br />
end<br />
if not args[1] then<br />
categories:add('no_links', nocat)<br />
return tr.error(empty_list_message, categories, preview_error)<br />
end<br />
<br />
if args[2] and prefix_plural then<br />
prefix = prefix_plural<br />
end<br />
<br />
local list = p.list(args)<br />
<br />
for k, v in pairs(list) do<br />
if type(v) == 'boolean' and v then<br />
categories:add(k, nocat)<br />
end<br />
end<br />
<br />
return p.hatnote(index({prefix .. sep .. list .. dot}, args)) .. categories<br />
end<br />
<br />
return index(p, tr)</div>
bukvica>Grain of sand