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

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

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

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

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

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

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

Параметры шаблона
Параметр Описание
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) — ссылка на раздел страницы, где ведется обсуждение текста, к которому поставлено предупреждение (на странице обсуждения или форуме). Если необходимо сослаться на раздел на странице обсуждения, достаточно указать только названия раздела, то бишь если в ссылке отсутствует или находится в начале символ решетки (#), то ссылка ведет в соответствующий раздел на странице обсуждения. В противном случае — на раздел другой страницы. Ссылка задается без квадратных скобок. Например:
    • {{нет АИ|20|10|2024|обс=Предложения}}[источник? (обс.)]
    • {{нет АИ|20|10|2024|обс=Википедия:Форум/Архив/Вниманию участников/2016/01#Спам или не спам?}}[источник? (обс.)]
  • комм (c, comment) — комментарий к шаблону для указания сути претензии к тексту; задаётся с целью её конкретизации. Если комментарий задан в статье, то текст предупреждения подчеркивается пунктиром. Например:
  • якорь (anchor) — якорь на предупреждение для возможности создать ссылку из обсуждения. Принцип работы аналогичен шаблону {{якорь2}}. Например:
    • на шаблон с кодом {{нет АИ|20|10|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
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy