Модуль:Надстрочное предупреждение
Модуль «Надстрочное предупреждение» основан на более неиспользуемом шаблоне {{Надстрочное предупреждение}} и предназначен для вывода на страницах надстрочных шаблонов-предупреждений (например, подозрительный текст[некая претензия]), таких как {{нет АИ}}, {{уточнить}} или {{неопределённость}}. Единственный обязательный параметр — text
.
Часть шаблонов также могут оборачивать предшествующий предупреждению текст в теги <span>
(например, непонятный текст[некая претензия]), а также учитывать дату установки. В шаблонах с заполнением даты рекомендуется использовать модуль Unsubst (см. ниже), чтобы при подстановке шаблона в него автоматически добавлялась текущая дата, например:
{{subst:нет АИ}}
→ {{нет АИ|19|06|2024}}
.
Все шаблоны на основе модуля поддерживают подстановку вида {{subst:когда}}
→ {{когда}}
для отсутствия в статьях ошибочного кода из шаблонов.
При неправильном заполнении даты шаблоны, написанные на базе этого модуля, добавляют категорию [[Категория:Википедия:Надстрочные предупреждения с некорректно заданной датой]] (46).
Использование
Параметр | Описание |
---|---|
day month year errorcat | Параметры для указания даты установки шаблона. Дата указывается только цифрами. В параметре errorcat можно задать категорию, в которую будут помещаться статьи с неправильно заданной датой.Если вы видите предупреждение «Ошибка: некорректно задана дата установки», то, скорее всего, вы не указали дату простановки шаблона, для этого замените |
span-text | Параметр span-text задает текст, выделяемый шаблоном. По умолчанию выделяется таким образом[источник?], однако стили текста можно изменить на любой желаемый при помощи параметра templatestyles , загружающего стили для определённого шаблона (для работы необходимо добавить параметр name с названием шаблона}}). Предназначен для шаблонов, подобных {{нет АИ 2}}. |
comment comment-default | Комментарий к шаблону для указания сути претензии к тексту. В параметре comment-default желательно задать текст комментария по умолчанию с возможностью указания причины при каждой установке шаблона, иначе в качестве оного будет выводиться ссылка, заданная в параметре link . Также вместе с комментарием выводится дата установки шаблона (если она задана).Рекомендуется использовать в локальных шаблонах также более краткие названия параметра — |
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) — ссылка на раздел страницы, где ведется обсуждение текста, к которому поставлено предупреждение (на странице обсуждения или форуме). Если необходимо сослаться на раздел на странице обсуждения, достаточно указать только названия раздела, то бишь если в ссылке отсутствует или находится в начале символ решетки (
#
), то ссылка ведет в соответствующий раздел на странице обсуждения. В противном случае — на раздел другой страницы. Ссылка задается без квадратных скобок. Например: - комм (c, comment) — комментарий к шаблону для указания сути претензии к тексту; задаётся с целью её конкретизации. Если комментарий задан в статье, то текст предупреждения подчеркивается пунктиром. Например:
{{нет АИ|19|06|2024|комм=бла-бла-бла}}
→ [источник?]
- якорь (anchor) — якорь на предупреждение для возможности создать ссылку из обсуждения. Принцип работы аналогичен шаблону {{якорь2}}. Например:
- на шаблон с кодом
{{нет АИ|19|06|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}}}}} {{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' ).getArgslocal function isEmpty( val )return val == nil or val == ''end-- Комбинация стандартного класса и кастомногоlocal function getHtmlClass( class, val )if isEmpty( class ) thenreturn string.format( '%s-%s', defaultClass, val )endreturn 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 ) thenreturn nilendlocal dateString = year .. '-' .. month .. '-' .. daylocal success, result = pcall( mwLang.formatDate, mwLang, 'U', dateString )if success thenif tonumber( result ) thenreturn '@' .. resultendendreturn nilend-- Форматирование выделяемого шаблоном текста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 ) thenreturn nilend-- «Википедия:Нейтральная точка зрения (2 мая 2015)»if isEmpty( comment ) and not isEmpty( date ) thencomment = linkendif isEmpty( comment ) thenreturn nilendlocal delink = require( 'Module:Delink' )._delinkcomment = delink( { comment } )if not isEmpty( date ) thencomment = comment .. mwLang:formatDate( ' (j xg Y)', date )endreturn commentend-- Форматирование ссылки как в шаблонеlocal function getLink( link, text, comment, hasCustomComment )local html = mw.html.create( 'i' )if not isEmpty( comment ) thenlocal span = mw.html.create( 'span' ):attr( 'title', comment ):wikitext( text )if hasCustomComment thenif isEmpty( link ) thenhtml:addClass( defaultClass .. '-comment' )elsehtml:addClass( defaultClass .. '-commented' )endendtext = tostring( span )endif isEmpty( link ) thenhtml:wikitext( text )elsehtml:wikitext( string.format( '[[%s|%s]]', link, text ) )endreturn 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 thenpage = mw.title.getCurrentTitle().talkPageTitle.fullText .. '#' .. mw.text.trim( page, '#' )endlocal result = string.format( ' [[%s|(обс.)]]', page )if isEmpty( noprint ) or not noprint thenlocal html = mw.html.create( 'span' ):addClass( 'noprint' ):wikitext( result )result = tostring( html )endreturn resultend-- Простановка категорийlocal function getCategory( category, config, date )if isEmpty( category ) thenreturn ''endif config == false thenreturn categoryendif isEmpty( date ) thenreturn ''endconfig = ' ' .. ( config or '>= 0' )local mDate = require( 'Module:Date' )._Datelocal 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' thenreturn categoryendreturn ''endlocal 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-- Поддержка подстановки без Unsubstfunction 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 ) doif key == tonumber( key ) thenargs[ key ] = valendend-- Чаще всего перенос из других разделов, в случае проблем напишите на СОargs['date'] = nilreturn 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 == 0local result = ''-- Поддержка TemplateStyleslocal class = nilif not isEmpty( args.name ) thenclass = 'ts-' .. args.nameendresult = result .. frame:extensionTag{name = 'templatestyles', args = { src = templateStylesPage }}if not isEmpty( args.name ) and not isEmpty( args.templatestyles ) thenresult = result .. frame:extensionTag{name = 'templatestyles', args = { src = args.templatestyles }}end-- Поддержка подстановкиif mw.isSubsting() thenreturn p.subst( frame )end-- Вывод надстрочного предупрежденияlocal tag = mw.html.create( 'sup' ):addClass( getHtmlClass( class, 'template' ) )if not isEmpty( args.noprint ) thentag:addClass( 'noprint' )end-- Вывод ошибки о параметре textif isEmpty( args.text ) thenresult = result .. getError( 'не задан параметр <code>text</code>', 'Использование' )tag:wikitext( result )return tostring( tag )end-- Поддержка параметра {{{span-text|}}}if not isEmpty( args[ 'span-text' ] ) thenresult = result .. getSpanText( args[ 'span-text' ], class )end-- Вывод надстрочного предупрежденияlocal comment = getComment( args.comment or args[ 'comment-default' ], args.link, date )tag:wikitext( '[' ) -- [:wikitext( getLink( args.link, args.text, comment, not isEmpty( args.comment ) ) ):wikitext( getTalkLink( args.talk, args.noprint ) ):wikitext( ']' ) -- ]-- Проверка для категории страниц с некорректным указанием датыlocal errorcat = args.errorcat or defaultErrorCatif hasDate and isEmpty( date ) thenresult = result .. getError( 'некорректно задана дата установки (исправьте через подстановку шаблона)', 'Дата установки' )if isMainNamespace thenresult = result .. errorcatendelseresult = result .. tostring( tag )end-- Поддержка параметра {{{anchor|}}}if not isEmpty( args.anchor ) thenlocal anchor = require( 'Module:Якорь' ).main;result = anchor{ visible = true, text = result, args.anchor }end-- Установка категорийif isEmpty( args.nocat ) and isMainNamespace thenresult = result .. getCategory( args.cat, false )if hasDate thenresult = 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 )endendreturn resultendreturn p