Предупреждение-слишком краткая статья
- 1 year ago
- 0
- 0
Модуль
основан на более неиспользуемом шаблоне
{{
Надстрочное предупреждение
}}
и предназначен для вывода на страницах
надстрочных шаблонов-предупреждений
(например, подозрительный текст
[
некая претензия
]
), таких как
{{
нет АИ
}}
,
{{
уточнить
}}
или
{{
неопределённость
}}
. Единственный обязательный параметр —
text
.
Часть шаблонов также могут оборачивать предшествующий предупреждению текст в теги
<span>
(например,
непонятный текст
[
некая претензия
]
), а также учитывать дату установки. В шаблонах с заполнением даты рекомендуется использовать модуль
Unsubst
(см.
), чтобы при подстановке шаблона в него автоматически добавлялась текущая дата, например:
{{subst:
нет АИ
}}
→
{{
нет АИ
|
11
|
01
|
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
cat
N
cat-date
N
nocat
|
Параметры для задания категорий. Параметр
cat
— для категории, не зависящей от наличия или отсутствия даты в шаблоне. Для параметров
cat
N
статья с попадает в категорию только в случае выполнения условия, заданного в параметре
cat-date
N
с соответствующим индексом (от 1 до 3), содержимое которого может состоять из оператора (знака сравнения) и числа (по умолчанию —
>= 0
; например:
cat-date2 >= 100
будет означать, что начиная с 100 дня после момента установки статья будет попадать в категорию «cat2»). Ссылка на категорию задается с квадратными скобками, либо соответствующим шаблоном. Категоризация работает только в основном пространстве имен. Параметр
nocat
подавляет категоризацию.
|
noprint
|
Не отображать предупреждение в печатной версии (следует указывать для большинства малозначительных проблем с шаблонами, не касающихся источников и т. д.). |
#
), то ссылка ведет в соответствующий раздел на странице обсуждения. В противном случае — на раздел другой страницы. Ссылка задается без квадратных скобок. Например:
{{
нет АИ
|
11
|
01
|
2024
|
комм=бла-бла-бла
}}
→
[
источник?
]
{{
нет АИ
|
11
|
01
|
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' ).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( '[' ) -- [
: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