Изменения
Перейти к навигации
Перейти к поиску
Строка 1:
Строка 1:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Строка 14:
Строка 35:
− +
− local timestamp = year .. '-' .. month .. '-' .. day +
+
+
− +
Строка 40:
Строка 63:
− +
Строка 48:
Строка 71:
− return string.format( ' ([[%s|обс.]]', page ) +
+
+
+
+
+
+
+
+
− +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Строка 63:
Строка 126:
− +
− +
− +
+
+
Строка 72:
Строка 137:
− +
− +
− return '<strong class="error noprint">[[Модуль:Надстрочное предупреждение#Использование|Ошибка]]: не задан параметр <code>text</code></strong>' +
+
+
+
+
+
+
+
+
+
+
+
Строка 83:
Строка 159:
− +
− if args.day or args.month or args.year then+
− comment = comment .. ' (' .. getDate( args.day, args.month, args.year ) .. ')'
− end
− -- Вывод надстрочного предупреждения
− local tag = mw.html.create( 'sup' )
− :addClass( 'noprint' )
− :attr( 'style', 'white-space:nowrap' )
− +
− +
+
+
+
+
+
+
+
+
+
+
Строка 108:
Строка 188:
− +
− +
− return result +
+
+
Модуль:Надстрочное предупреждение (посмотреть исходный код)
Версия от 03:35, 16 мая 2023
, 2 года назадвроде бы вышел на финишную прямую
require( 'strict' );
require( 'strict' );
local p = {}
local p = {}
local mwLang = mw.getContentLanguage()
local function isEmpty( val )
return val == nil or val == ''
end
-- Игнорирование некорректно указанных дат с помощью стандартных методов
local function getValidDate( day, month, year )
local dateString = year .. '-' .. month .. '-' .. day
local success, result = pcall(mwLang.formatDate, mwLang, 'U', dateString)
if success then
result = tonumber( result )
if result then
return result
end
end
return nil
end
-- Форматирование выделяемого шаблоном текста
-- Форматирование выделяемого шаблоном текста
-- Форматирование даты как в шаблоне
-- Форматирование даты как в шаблоне
local function getDate( day, month, year )
local function getDate( date )
if isEmpty( date ) then
return nil
end
return mw.getContentLanguage():formatDate( 'j xg Y', timestamp )
return mwLang:formatDate( ' (j xg Y)', date )
end
end
-- Форматирование ссылки на обсуждение как в шаблоне
-- Форматирование ссылки на обсуждение как в шаблоне
local function getTalkLink( page )
local function getTalkLink( page, noprint )
if not page then return '' end
if not page then return '' end
end
end
local result = ' ([[%s|обс.]]'
if isEmpty( noprint ) or not noprint then
local html = mw.html.create( 'span' )
:addClass( 'noprint' )
:wikitext( result )
result = tostring( html )
end
return string.format( result, page )
end
end
-- TODO: Поддержка подстановки без Unsubst
-- Простановка категорий
local function getCategory( category, config, date )
if isEmpty( date ) then
return nil
end
if isEmpty( category ) then
return nil
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 nil
end
local function getError( comment, anchor )
local html = mw.html.create( 'strong' )
:addClass( 'error noprint' )
:wikitext( string.format( '[[Шаблон:Надстрочное предупреждение#%s|Ошибка:]] %s', anchor, comment ) )
return tostring( html )
end
-- Поддержка подстановки без Unsubst
function p.subst( frame )
function p.subst( frame )
local mTemplateInvocation = require( 'Module:Template invocation' )
local mTemplateInvocation = require( 'Module:Template invocation' )
--
--
function p.main( frame )
function p.main( frame )
local getArgs = require( 'Module:Arguments' ).getArgs;
local getArgs = require( 'Module:Arguments' ).getArgs
local args = getArgs( frame );
local args = getArgs( frame )
local result = '';
local date = getValidDate( args.day, args.month, args.year )
local isMainNamespace = mw.title.getCurrentTitle().namespace == 0
local result = ''
-- Поддержка подстановки
-- Поддержка подстановки
end
end
-- Вывод ошибки
-- Вывод надстрочного предупреждения
if not args.text then
local tag = mw.html.create( 'sup' )
:attr( 'style', 'white-space:nowrap' )
if not isEmpty( args.noprint ) then
tag:addClass( 'noprint' )
end
-- Вывод ошибки о параметре text
if isEmpty( args.text ) then
result = getError( 'не задан параметр <code>text</code>', 'Использование' )
tag:wikitext( result )
return tostring( tag )
end
end
-- Поддержка параметра {{{comment|}}}
-- Поддержка параметра {{{comment|}}}
local comment = args.comment or args[ 'comment-default' ]
local comment = args.comment or args[ 'comment-default' ] or args.link
comment = comment .. getDate( date )
tag
tag
:wikitext( '[' ) -- [
:wikitext( '[' ) -- [
:wikitext( getLink( args.link, args.text, comment ) )
:wikitext( getLink( args.link, args.text, comment ) )
:wikitext( getTalkLink( args.talk ) )
:wikitext( getTalkLink( args.talk, args.noprint ) )
:wikitext( ']' ) -- ]
:wikitext( ']' ) -- ]
result = result .. tostring( tag )
result = result .. tostring( tag )
-- TODO: проверка для [[Категория:Википедия:Надстрочные предупреждения с некорректно заданной датой]]
-- Проверка для [[Категория:Википедия:Надстрочные предупреждения с некорректно заданной датой]]
local errorcat = args.errorcat or '[[Категория:Википедия:Надстрочные предупреждения с некорректно заданной датой]]'
if not isEmpty( args.day ) or not isEmpty( args.month ) or not isEmpty( args.year ) then
if isEmpty( date ) then
result = getError( 'некорректно задана дата установки', 'Дата установки' )
if isMainNamespace then
result = result .. errorcat
end
end
end
-- Поддержка параметра {{{anchor|}}}
-- Поддержка параметра {{{anchor|}}}
end
end
-- TODO: Установка категорий
-- Установка категорий
if args.nocat or mw.title.getCurrentTitle().namespace ~= 0 then
if isEmpty( args.nocat ) and isMainNamespace then
result = result .. getCategory( args[ 'cat1' ], args[ 'cat1-date' ], date )
result = result .. getCategory( args[ 'cat2' ], args[ 'cat2-date' ], date )
result = result .. getCategory( args[ 'cat3' ], args[ 'cat3-date' ], date )
end
end