Модуль:Надстрочное предупреждение

Из Википедии, бесплатной энциклопедии

Документация

Модуль «Надстрочное предупреждение» основан на более неиспользуемом шаблоне {{Надстрочное предупреждение}} и предназначен для вывода на страницах надстрочных шаблонов-предупреждений (например, подозрительный текст[некая претензия]), таких как {{нет АИ}}, {{уточнить}} или {{неопределённость}}. Единственный обязательный параметр — text.

Часть шаблонов также могут оборачивать предшествующий предупреждению текст в теги <span> (например, непонятный текст[некая претензия]), а также учитывать дату установки. В шаблонах с заполнением даты рекомендуется использовать модуль Unsubst (см. ниже), чтобы при подстановке шаблона в него автоматически добавлялась текущая дата, например:
{{subst:нет АИ}}{{нет АИ|3|05|2024}}.

Все шаблоны на основе модуля поддерживают подстановку вида {{subst:когда}}{{когда}} для отсутствия в статьях ошибочного кода из шаблонов.

При неправильном заполнении даты шаблоны, написанные на базе этого модуля, добавляют категорию [[Категория:Википедия:Надстрочные предупреждения с некорректно заданной датой]] (46).

Использование

Параметры шаблона
Параметр Описание
day
month
year
errorcat
Параметры для указания даты установки шаблона. Дата указывается только цифрами. В параметре errorcat можно задать категорию, в которую будут помещаться статьи с неправильно заданной датой.

Если вы видите предупреждение «Ошибка: некорректно задана дата установки», то, скорее всего, вы не указали дату простановки шаблона, для этого замените {{название шаблона|параметры}} на {{subst:название шаблона|параметры}}.

span-text Параметр span-text задает текст, выделяемый шаблоном. По умолчанию выделяется таким образом[источник?], однако стили текста можно изменить на любой желаемый при помощи параметра templatestyles, загружающего стили для определённого шаблона (для работы необходимо добавить параметр name с названием шаблона}}). Предназначен для шаблонов, подобных {{нет АИ 2}}.
comment
comment-default
Комментарий к шаблону для указания сути претензии к тексту. В параметре comment-default желательно задать текст комментария по умолчанию с возможностью указания причины при каждой установке шаблона, иначе в качестве оного будет выводиться ссылка, заданная в параметре link. Также вместе с комментарием выводится дата установки шаблона (если она задана).

Рекомендуется использовать в локальных шаблонах также более краткие названия параметра — c и комм (вот так: {{{comment|{{{c|{{{комм|}}}}}}}}}) для удобства быстрого набора с клавиатуры.

text Текст надстрочного предупреждения (например: источник?[источник?]). Единственный обязательный параметр, при отсутствии которого выводится ошибка «Ошибка: не задан параметр text».
link Название страницы с соответствующим руководством к действию в случае обнаружения шаблона (например, Википедия:Ссылки на источники[источник?]). Ссылка задается без квадратных скобок.
talk Ссылка на раздел страницы, где ведется обсуждение текста, к которому поставлено предупреждение. В локальных шаблонах следует задавать два названия для параметра: обс и talk (вот так: {{{talk|{{{обс|}}}}}}).
anchor Якорь на предупреждение для возможности создать ссылку из обсуждения. В локальных шаблонах параметру рекомендуется задать два названия: anchor и якорь (вот так: {{{anchor|{{{якорь|}}}}}}.
cat
catN
cat-dateN
nocat
Параметры для задания категорий. Параметр cat — для категории, не зависящей от наличия или отсутствия даты в шаблоне. Для параметров catN статья с попадает в категорию только в случае выполнения условия, заданного в параметре cat-dateN с соответствующим индексом (от 1 до 3), содержимое которого может состоять из оператора (знака сравнения) и числа (по умолчанию — >= 0; например: cat-date2 >= 100 будет означать, что начиная с 100 дня после момента установки статья будет попадать в категорию «cat2»). Ссылка на категорию задается с квадратными скобками, либо соответствующим шаблоном. Категоризация работает только в основном пространстве имен. Параметр nocat подавляет категоризацию.
noprint Не отображать предупреждение в печатной версии (следует указывать для большинства малозначительных проблем с шаблонами, не касающихся источников и т. д.).

Локальные параметры

  • обс (talk) — ссылка на раздел страницы, где ведется обсуждение текста, к которому поставлено предупреждение (на странице обсуждения или форуме). Если необходимо сослаться на раздел на странице обсуждения, достаточно указать только названия раздела, то бишь если в ссылке отсутствует или находится в начале символ решетки (#), то ссылка ведет в соответствующий раздел на странице обсуждения. В противном случае — на раздел другой страницы. Ссылка задается без квадратных скобок. Например:
    • {{нет АИ|3|05|2024|обс=Предложения}}[источник? (обс.)]
    • {{нет АИ|3|05|2024|обс=Википедия:Форум/Архив/Вниманию участников/2016/01#Спам или не спам?}}[источник? (обс.)]
  • комм (c, comment) — комментарий к шаблону для указания сути претензии к тексту; задаётся с целью её конкретизации. Если комментарий задан в статье, то текст предупреждения подчеркивается пунктиром. Например:
  • якорь (anchor) — якорь на предупреждение для возможности создать ссылку из обсуждения. Принцип работы аналогичен шаблону {{якорь2}}. Например:
    • на шаблон с кодом {{нет АИ|3|05|2024|якорь=Пример}} в графе «link» раздела «Использование» ведет ссылка [[Шаблон:Надстрочное предупреждение#Пример|ссылка]]ссылка.

Заготовка для копирования

Для шаблонов с указанием даты установки

С выделением предшествующего текста и обязательным заполнением даты:

{{safesubst:<noinclude/>#invoke:Надстрочное предупреждение|main|2={{safesubst:<noinclude/>CURRENTDAY}} |3={{safesubst:<noinclude/>CURRENTMONTH}} |4={{safesubst:<noinclude/>CURRENTYEAR}}   | day = {{{2}}}   | month = {{{3}}}   | year = {{{4}}}   | span-text = {{{1|}}}   | text =    | link =    | talk = {{{talk|{{{обс|}}}}}}   | comment = {{{comment|{{{c|{{{комм|}}}}}}}}}   | comment-default =    | anchor = {{{anchor|{{{якорь|}}}}}}   | cat1 =    | cat-date1 =    | cat2 =   | cat-date2 =    | cat3 =    | cat-date3 =    | errorcat =   | nocat = {{{nocat|}}} }} 

Без выделения предшествующего текста и обязательного заполнения даты:

{{safesubst:<noinclude/>#invoke:Надстрочное предупреждение|main|1={{safesubst:<noinclude/>CURRENTDAY}} |2={{safesubst:<noinclude/>CURRENTMONTH}} |3={{safesubst:<noinclude/>CURRENTYEAR}}   | day = {{{1|}}}   | month = {{{2|}}}   | year = {{{3|}}}   | text =    | link =    | talk = {{{talk|{{{обс|}}}}}}   | comment = {{{comment|{{{c|{{{комм|}}}}}}}}}   | comment-default =    | anchor = {{{anchor|{{{якорь|}}}}}}   | cat1 =    | cat-date1 =    | cat2 =   | cat-date2 =    | cat3 =    | cat-date3 =    | nocat = {{{nocat|}}}   | errorcat = }} 

Для шаблонов без указания даты установки

{{safesubst:<noinclude/>#invoke:Надстрочное предупреждение|main   | span-text = {{{1|}}}   | text =    | link =    | comment = {{{comment|{{{c|{{{комм|}}}}}}}}}   | comment-default =    | anchor = {{{anchor|{{{якорь|}}}}}}   | cat =    | nocat = {{{nocat|}}} }} 

Пример использования

Для шаблона {{нет АИ 2}}:

{{safesubst:<noinclude/>#invoke:Надстрочное предупреждение|main|2={{safesubst:<noinclude/>CURRENTDAY}} |3={{safesubst:<noinclude/>CURRENTMONTH}} |4={{safesubst:<noinclude/>CURRENTYEAR}}   | day = {{{2}}}   | month = {{{3}}}   | year = {{{4}}}   | span-text = {{{1|}}}   | text = {{#ifexpr: {{Прошло дней|{{{2}}}|{{{3}}}|{{{4}}}}} <= 14              | источник?              | источник не указан {{Прошло дней|{{{2}}}|{{{3}}}|{{{4}}}}}&nbsp;{{plural:{{Прошло дней|{{{2}}}|{{{3}}}|{{{4}}}}}|день|дня|дней}}            }}   | link = Википедия:Ссылки на источники   | talk = {{{talk|{{{обс|}}}}}}   | comment = {{{comment|{{{c|{{{комм|}}}}}}}}}   | comment-default = не указан источник на утверждение   | anchor = {{{anchor|{{{якорь|}}}}}}   | cat1 = [[Категория:Википедия:Нет источников с {{#time:xg Y|{{{4}}}-{{{3}}}-{{{2}}}}}]]   | cat2 = {{Нет источника (сортировка по типу)}}   | cat-date3 = > 14   | cat3 = [[Категория:Википедия:Статьи с утверждениями без источников более 14 дней]]   | nocat = {{{nocat|}}}   | errorcat = [[Категория:Википедия:Страницы с ошибками параметров в шаблоне Нет АИ]] }} 
require( 'strict' ) local p = {}  local docPage = 'Module:Надстрочное предупреждение' local templateStylesPage = 'Module:Надстрочное предупреждение/styles.css' local defaultClass = 'ts-fix' local defaultErrorCat = '[[Категория:Википедия:Надстрочные предупреждения с некорректно заданной датой]]'  local mwLang = mw.getContentLanguage() local getArgs = require( 'Module:Arguments' ).getArgs  local function isEmpty( val ) 	return val == nil or val == '' end  -- Комбинация стандартного класса и кастомного local function getHtmlClass( class, val ) 	if isEmpty( class ) then 		return string.format( '%s-%s', defaultClass, val ) 	end 	return string.format( '%s-%s %s-%s', defaultClass, val, class, val ) end  -- Игнорирование некорректно указанных дат с помощью стандартных методов local function getValidDate( year, month, day ) 	if isEmpty( year ) or isEmpty( month ) or isEmpty( day ) then 		return nil 	end 	local dateString = year .. '-' .. month .. '-' .. day 	 	local success, result = pcall( mwLang.formatDate, mwLang, 'U', dateString ) 	if success then 		if tonumber( result ) then 			return '@' .. result 		end 	end 	 	return nil end  -- Форматирование выделяемого шаблоном текста local function getSpanText( text, class ) 	local tag = mw.html.create( 'span' ) 		:addClass( getHtmlClass( class, 'text' ) ) 		-- TODO: WMF pls fix [[phab:T162379]] / https://phabricator.wikimedia.org/T162379 		:attr( 'style', '-webkit-box-decoration-break: clone' ) 		:wikitext( text ) 	 	return tostring( tag ) end  -- Форматирование комментария как в шаблоне local function getComment( comment, link, date ) 	if isEmpty( comment ) and isEmpty( date ) then 		return nil 	end 	 	-- «Википедия:Нейтральная точка зрения (2 мая 2015)» 	if isEmpty( comment ) and not isEmpty( date ) then 		comment = link 	end 	 	if isEmpty( comment ) then 		return nil 	end 	 	local delink = require( 'Module:Delink' )._delink 	comment = delink( { comment } ) 	 	if not isEmpty( date ) then 		comment = comment .. mwLang:formatDate( ' (j xg Y)', date ) 	end 	 	return comment end  -- Форматирование ссылки как в шаблоне local function getLink( link, text, comment, hasCustomComment ) 	local html = mw.html.create( 'i' ) 	if not isEmpty( comment ) then 		local span = mw.html.create( 'span' ) 			:attr( 'title', comment ) 			:wikitext( text ) 		 		if hasCustomComment then 			if isEmpty( link ) then 				html:addClass( defaultClass .. '-comment' ) 			else 				html:addClass( defaultClass .. '-commented' ) 			end 		end 	 		text = tostring( span ) 	end 	 	if isEmpty( link ) then 		html:wikitext( text ) 	else 		html:wikitext( string.format( '[[%s|%s]]', link, text ) ) 	end 	return tostring( html ) end  -- Форматирование ссылки на обсуждение как в шаблоне local function getTalkLink( page, noprint ) 	if not page then return '' end 	 	-- Страница обсуждения для текущей статьи в случае отсутствия якоря 	local anchorSymbol = mw.ustring.find( page, '#' ) 	if isEmpty( anchorSymbol ) or anchorSymbol == 1 then 		page = mw.title.getCurrentTitle().talkPageTitle.fullText .. '#' .. mw.text.trim( page, '#' ) 	end 	 	local result = string.format( ' [[%s|(обс.)]]', page ) 	if isEmpty( noprint ) or not noprint then 		local html = mw.html.create( 'span' ) 			:addClass( 'noprint' ) 			:wikitext( result ) 		 		result = tostring( html ) 	end 	 	return result end  -- Простановка категорий local function getCategory( category, config, date ) 	if isEmpty( category ) then 		return '' 	end 	 	if config == false then 		return category 	end 	 	if isEmpty( date ) then 		return '' 	end 	 	config = ' ' .. ( config or '>= 0' ) 	local mDate = require( 'Module:Date' )._Date 	local today = mwLang:formatDate( 'Y-m-d H:i:s' ) 	local input = mwLang:formatDate( 'Y-m-d H:i:s', date ) 	local diff = ( mDate( today ) - mDate( input ) ) 	 	local success, result = pcall( mw.ext.ParserFunctions.expr, diff .. config ) 	if success and result == '1' then 		return category 	end 	 	return '' end  local function getError( comment, anchor ) 	local html = mw.html.create( 'strong' ) 		:addClass( defaultClass .. '-error error noprint' ) 		:wikitext( string.format( '[[%s#%s|Ошибка:]] %s', docPage, anchor, comment ) ) 	 	return tostring( html ) end  -- Поддержка подстановки без Unsubst function p.subst( frame ) 	local args = getArgs( frame, { 		parentOnly = true, 	} ) 	local mArgs = getArgs( frame, { 		removeBlanks = true, 	} ) 	local mTemplateInvocation = require( 'Module:Template invocation' ) 	local name = mTemplateInvocation.name( frame:getParent():getTitle() ) 	 	-- Передать все нумерованные параметры из вызова модуля 	for key, val in pairs( mArgs ) do 		if key == tonumber( key ) then 			args[ key ] = val 		end 	end 	 	-- Чаще всего перенос из других разделов, в случае проблем напишите на СО 	args['date'] = nil 	 	return mTemplateInvocation.invocation( name, args ) end  -- -- Модуль на замену шаблону «Надстрочное предупреждение» -- function p.main( frame ) 	local args = getArgs( frame ) 	local date = getValidDate( args.year, args.month, args.day ) 	local hasDate = not isEmpty( args.day ) or not isEmpty( args.month ) or not isEmpty( args.year ) 	local isMainNamespace = mw.title.getCurrentTitle().namespace == 0 	local result = '' 	 	-- Поддержка TemplateStyles 	local class = nil 	if not isEmpty( args.name ) then 		class = 'ts-' .. args.name 	end 	 	result = result .. frame:extensionTag{ 		name = 'templatestyles', args = { src = templateStylesPage } 	} 	if not isEmpty( args.name ) and not isEmpty( args.templatestyles ) then 		result = result .. frame:extensionTag{ 			name = 'templatestyles', args = { src = args.templatestyles } 		} 	end 	 	-- Поддержка подстановки 	if mw.isSubsting() then 		return p.subst( frame ) 	end 	 	-- Вывод надстрочного предупреждения 	local tag = mw.html.create( 'sup' ) 		:addClass( getHtmlClass( class, 'template' ) ) 	 	if not isEmpty( args.noprint ) then 		tag:addClass( 'noprint' ) 	end 	 	-- Вывод ошибки о параметре text 	if isEmpty( args.text ) then 		result = result .. getError( 'не задан параметр <code>text</code>', 'Использование' ) 		tag:wikitext( result ) 		 		return tostring( tag ) 	end 	 	-- Поддержка параметра {{{span-text|}}} 	if not isEmpty( args[ 'span-text' ] ) then 		result = result .. getSpanText( args[ 'span-text' ], class ) 	end 	 	-- Вывод надстрочного предупреждения 	local comment = getComment( args.comment or args[ 'comment-default' ], args.link, date ) 	tag 		:wikitext( '&#91;' ) -- [ 		:wikitext( getLink( args.link, args.text, comment, not isEmpty( args.comment ) ) ) 		:wikitext( getTalkLink( args.talk, args.noprint ) ) 		:wikitext( '&#93;' ) -- ] 		 	-- Проверка для категории страниц с некорректным указанием даты 	local errorcat = args.errorcat or defaultErrorCat 	if hasDate and isEmpty( date ) then 		result = result .. getError( 'некорректно задана дата установки (исправьте через подстановку шаблона)', 'Дата установки' ) 		 		if isMainNamespace then 			result = result .. errorcat 		end 	else 		result = result .. tostring( tag ) 	end 	 	-- Поддержка параметра {{{anchor|}}} 	if not isEmpty( args.anchor ) then 		local anchor = require( 'Module:Якорь' ).main; 		result = anchor{ visible = true, text = result, args.anchor } 	end 	 	-- Установка категорий 	if isEmpty( args.nocat ) and isMainNamespace then 		result = result .. getCategory( args.cat, false ) 		 		if hasDate then 			result = result .. getCategory( args[ 'cat1' ], args[ 'cat-date1' ], date ) 			result = result .. getCategory( args[ 'cat2' ], args[ 'cat-date2' ], date ) 			result = result .. getCategory( args[ 'cat3' ], args[ 'cat-date3' ], date ) 		end 	end 	 	return result end  return p