Модуль:Надстрочное предупреждение
Модуль «Надстрочное предупреждение» основан на более неиспользуемом шаблоне {{Надстрочное предупреждение}} и предназначен для вывода на страницах надстрочных шаблонов-предупреждений (например, подозрительный текст[некая претензия]), таких как {{нет АИ}}, {{уточнить}} или {{неопределённость}}. Единственный обязательный параметр — <syntaxhighlight lang="text" class="" id="" style="" inline="1">text</syntaxhighlight>.
Часть шаблонов также могут оборачивать предшествующий предупреждению текст в теги <span>
(например, непонятный текст[некая претензия]), а также учитывать дату установки. В шаблонах с заполнением даты рекомендуется использовать модуль Unsubst (см. ниже), чтобы при подстановке шаблона в него автоматически добавлялась текущая дата, например:
{{subst:нет АИ}}
→ {{нет АИ|20|09|2024}}
.
Все шаблоны на основе модуля поддерживают подстановку вида {{subst:когда}}
→ {{когда}}
для отсутствия в статьях ошибочного кода из шаблонов.
При неправильном заполнении даты шаблоны, написанные на базе этого модуля, добавляют категорию [[Категория:Википедия:Надстрочные предупреждения с некорректно заданной датой]] (0).
ИспользованиеПравить
Параметр | Описание |
---|---|
<syntaxhighlight lang="text" class="" id="" style="" inline="1">day</syntaxhighlight> <syntaxhighlight lang="text" class="" id="" style="" inline="1">month</syntaxhighlight> <syntaxhighlight lang="text" class="" id="" style="" inline="1">year</syntaxhighlight> <syntaxhighlight lang="text" class="" id="" style="" inline="1">errorcat</syntaxhighlight> |
Параметры для указания даты установки шаблона. Дата указывается только цифрами. В параметре <syntaxhighlight lang="text" class="" id="" style="" inline="1">errorcat</syntaxhighlight> можно задать категорию, в которую будут помещаться статьи с неправильно заданной датой.
Если вы видите предупреждение «Ошибка: некорректно задана дата установки», то, скорее всего, вы не указали дату простановки шаблона, для этого замените |
<syntaxhighlight lang="text" class="" id="" style="" inline="1">span-text</syntaxhighlight> | Параметр <syntaxhighlight lang="text" class="" id="" style="" inline="1">span-text</syntaxhighlight> задает текст, выделяемый шаблоном. По умолчанию выделяется таким образом[источник?], однако стили текста можно изменить на любой желаемый при помощи параметра <syntaxhighlight lang="text" class="" id="" style="" inline="1">templatestyles</syntaxhighlight>, загружающего стили для определённого шаблона (для работы необходимо добавить параметр <syntaxhighlight lang="text" class="" id="" style="" inline="1">name</syntaxhighlight> с названием шаблона}}). Предназначен для шаблонов, подобных {{нет АИ 2}}. |
<syntaxhighlight lang="text" class="" id="" style="" inline="1">comment</syntaxhighlight> <syntaxhighlight lang="text" class="" id="" style="" inline="1">comment-default</syntaxhighlight> |
Комментарий к шаблону для указания сути претензии к тексту. В параметре <syntaxhighlight lang="text" class="" id="" style="" inline="1">comment-default</syntaxhighlight> желательно задать текст комментария по умолчанию с возможностью указания причины при каждой установке шаблона, иначе в качестве оного будет выводиться ссылка, заданная в параметре <syntaxhighlight lang="text" class="" id="" style="" inline="1">link</syntaxhighlight>. Также вместе с комментарием выводится дата установки шаблона (если она задана).
Рекомендуется использовать в локальных шаблонах также более краткие названия параметра — <syntaxhighlight lang="text" class="" id="" style="" inline="1">c</syntaxhighlight> и <syntaxhighlight lang="text" class="" id="" style="" inline="1">комм</syntaxhighlight> (вот так: <syntaxhighlight lang="text" class="" id="" style="" inline="1">{{{comment|{{{c|{{{комм|}}}}}}}}}</syntaxhighlight>) для удобства быстрого набора с клавиатуры. |
<syntaxhighlight lang="text" class="" id="" style="" inline="1">text</syntaxhighlight> | Текст надстрочного предупреждения (например: <syntaxhighlight lang="text" class="" id="" style="" inline="1">источник?</syntaxhighlight> → [источник?]). Единственный обязательный параметр, при отсутствии которого выводится ошибка «Ошибка: не задан параметр text ».
|
<syntaxhighlight lang="text" class="" id="" style="" inline="1">link</syntaxhighlight> | Название страницы с соответствующим руководством к действию в случае обнаружения шаблона (например, <syntaxhighlight lang="text" class="" id="" style="" inline="1">Википедия:Ссылки на источники</syntaxhighlight> → [источник?]). Ссылка задается без квадратных скобок. |
<syntaxhighlight lang="text" class="" id="" style="" inline="1">talk</syntaxhighlight> | Ссылка на раздел страницы, где ведется обсуждение текста, к которому поставлено предупреждение. В локальных шаблонах следует задавать два названия для параметра: <syntaxhighlight lang="text" class="" id="" style="" inline="1">обс</syntaxhighlight> и <syntaxhighlight lang="text" class="" id="" style="" inline="1">talk</syntaxhighlight> (вот так: <syntaxhighlight lang="text" class="" id="" style="" inline="1">{{{talk|{{{обс|}}}}}}</syntaxhighlight>). |
<syntaxhighlight lang="text" class="" id="" style="" inline="1">anchor</syntaxhighlight> | Якорь на предупреждение для возможности создать ссылку из обсуждения. В локальных шаблонах параметру рекомендуется задать два названия: <syntaxhighlight lang="text" class="" id="" style="" inline="1">anchor</syntaxhighlight> и <syntaxhighlight lang="text" class="" id="" style="" inline="1">якорь</syntaxhighlight> (вот так: <syntaxhighlight lang="text" class="" id="" style="" inline="1">{{{anchor|{{{якорь|}}}}}}</syntaxhighlight>. |
<syntaxhighlight lang="text" class="" id="" style="" inline="1">cat</syntaxhighlight>catN cat-dateN <syntaxhighlight lang="text" class="" id="" style="" inline="1">nocat</syntaxhighlight> |
Параметры для задания категорий. Параметр <syntaxhighlight lang="text" class="" id="" style="" inline="1">cat</syntaxhighlight> — для категории, не зависящей от наличия или отсутствия даты в шаблоне. Для параметров catN статья с попадает в категорию только в случае выполнения условия, заданного в параметре cat-dateN с соответствующим индексом (от 1 до 3), содержимое которого может состоять из оператора (знака сравнения) и числа (по умолчанию — >= 0 ; например: cat-date2 >= 100 будет означать, что начиная с 100 дня после момента установки статья будет попадать в категорию «cat2»). Ссылка на категорию задается с квадратными скобками, либо соответствующим шаблоном. Категоризация работает только в основном пространстве имен. Параметр <syntaxhighlight lang="text" class="" id="" style="" inline="1">nocat</syntaxhighlight> подавляет категоризацию.
|
<syntaxhighlight lang="text" class="" id="" style="" inline="1">noprint</syntaxhighlight> | Не отображать предупреждение в печатной версии (следует указывать для большинства малозначительных проблем с шаблонами, не касающихся источников и т. д.). |
Локальные параметрыПравить
- обс (talk) — ссылка на раздел страницы, где ведется обсуждение текста, к которому поставлено предупреждение (на странице обсуждения или форуме). Если необходимо сослаться на раздел на странице обсуждения, достаточно указать только названия раздела, то бишь если в ссылке отсутствует или находится в начале символ решетки (<syntaxhighlight lang="text" class="" id="" style="" inline="1">#</syntaxhighlight>), то ссылка ведет в соответствующий раздел на странице обсуждения. В противном случае — на раздел другой страницы. Ссылка задается без квадратных скобок. Например:
- комм (c, comment) — комментарий к шаблону для указания сути претензии к тексту; задаётся с целью её конкретизации. Если комментарий задан в статье, то текст предупреждения подчеркивается пунктиром. Например:
{{нет АИ|20|09|2024|комм=бла-бла-бла}}
→ [источник?]
- якорь (anchor) — якорь на предупреждение для возможности создать ссылку из обсуждения. Принцип работы аналогичен шаблону {{якорь2}}. Например:
- на шаблон с кодом
{{нет АИ|20|09|2024|якорь=Пример}}
в графе «link» раздела «Использование» ведет ссылка <syntaxhighlight lang="text" class="" id="" style="" inline="1">[[Шаблон:Надстрочное предупреждение#Пример|ссылка]]</syntaxhighlight> → ссылка.
- на шаблон с кодом
Заготовка для копированияПравить
Для шаблонов с указанием даты установкиПравить
С выделением предшествующего текста и обязательным заполнением даты:
<syntaxhighlight lang="wikitext">Ошибка: не задан параметр text
</syntaxhighlight>
Без выделения предшествующего текста и обязательного заполнения даты:
<syntaxhighlight lang="wikitext">Ошибка: не задан параметр text
</syntaxhighlight>
Для шаблонов без указания даты установкиПравить
<syntaxhighlight lang="wikitext">Ошибка: не задан параметр text
</syntaxhighlight>
Пример использованияПравить
Для шаблона {{нет АИ 2}}: <syntaxhighlight lang="wikitext">Ошибка: некорректно задана дата установки</syntaxhighlight>
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 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( '[' ) -- [ :wikitext( getLink( args.link, args.text, comment, not isEmpty( args.comment ) ) ) :wikitext( getTalkLink( args.talk, args.noprint ) ) :wikitext( ']' ) -- ] -- Проверка для категории страниц с некорректным указанием даты 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