Этот модуль зависит от следующих других модулей: |
Реализует {{New content}}.
Вышеприведенная документация извлекается из Модуль:New content/doc.
Редакторы могут экспериментировать в sandbox этого модуля и в testcases страницах.
Подстраницы этого модуля.
Редакторы могут экспериментировать в sandbox этого модуля и в testcases страницах.
Подстраницы этого модуля.
local getArgs = require('Module:Arguments').getArgs
local util = require('Module:Util')
local messageBox = require('Module:Message box')
local cargo = mw.ext.cargo
local gFrame
local m = {}
local p = {}
----------------------------------------------------------------------------
-- Message box pseudo-class
----------------------------------------------------------------------------
function m:new(version, released, part, space, talk)
self.version = version
self.released = released or false
self.part = part
self.space = space
self.talk = talk
local text = mw.html.create()
:node(self:getMainBlurb())
:node(self:getEditBlurb())
:node(self:getTalkBlurb())
local mbox = messageBox.main('mbox', {
type = 'content',
image = self:getImage(),
text = tostring(text),
})
local cats = self:getCategories()
local html = mw.html.create()
:wikitext(mbox)
:wikitext(cats)
return tostring(html)
end
function m:getMainBlurb()
local node = mw.html.create()
local text
if self.released then -- Newly released content
if self.part then
if self.part == 'section' then
text = string.format('В этом разделе описывается новое обновление Path of Exile, выпущенное в [[версия %s]].', self.version)
else
text = string.format('Части этой статьи, связанные с %s, описывают новое обновление Path of Exile, выпущенное в [[версия %s]].', self.part, self.version)
end
else
text = string.format('В этой статье описывается новое обновление Path of Exile, выпущенное в [[версия %s]].', self.version)
end
else -- Upcoming content
if self.part then
if self.part == 'section' then
text = string.format('В этом разделе описывается новое обновление Path of Exile, предстоящее в [[версия %s]].', self.version)
else
text = string.format('Части этой статьи, связанные с %s, описывают новое обновление Path of Exile, предстоящее в [[версия %s]].', self.part, self.version)
end
else
text = string.format('В этой статье описывается новое обновление Path of Exile, предстоящее в [[версия %s]].', self.version)
end
end
node
:tag('b')
:node(text)
:done()
:wikitext(' ')
:wikitext('Информация может отсутствовать или быть неверной.')
:tag('br')
:done()
:newline()
return node
end
function m:getEditBlurb()
local node = mw.html.create()
local title = mw.title.getCurrentTitle()
local link = string.format('[%s %s]', title:fullUrl{action = 'edit'}, 'расширьте эту статью')
node
:wikitext(string.format('Пожалуйста, %s, чтобы она содержала полную и точную информацию.', link))
:wikitext(' ')
return node
end
function m:getTalkBlurb()
local node = mw.html.create()
local title = mw.title.getCurrentTitle()
if title.canTalk and title.talkPageTitle.exists then
local text, link
local url = title.talkPageTitle:fullUrl()
if self.talk then
text = 'Это более подробно обсуждается на %s.'
link = string.format('[%s#%s %s]', url, self.talk, 'странице обсуждения')
else
text = 'Соответствующее обсуждение можно найти на %s.'
link = string.format('[%s %s]', url, 'странице обсуждения')
end
node
:wikitext(string.format(text, link))
:wikitext(' ')
end
return node
end
function m:getImage()
local image
if self.released then
image = '[[File:Albino Rhoa Feather inventory icon.png|48px|alt=|link=]]'
else
image = '[[File:Divination card inventory icon.png|48px|alt=|link=]]'
end
return image
end
function m:getCategories()
local cat
if self.released then
cat = util.misc.add_category('Недавно выпущенное обновление')
else
cat = util.misc.add_category('Предстоящее обновление')
end
return cat
end
----------------------------------------------------------------------------
-- main() - Implements Template:New content
----------------------------------------------------------------------------
function p.main(frame)
local args = getArgs(frame, {
parentFirst = true
})
gFrame = frame
return p._main(args)
end
function p._main(args)
local frame = util.misc.get_frame(gFrame)
args = args or {}
args.version = args.version or args[1]
if type(args.version) ~= 'string' then -- Version is required
error(string.format('Аргумент "%s" является обязательным', 'version'))
end
args.part = args.part or args[2]
args.space = args.space or frame:expandTemplate{title = 'SUBJECTSPACE formatted'}
local now = os.date('!%F %T') -- Current UTC timestamp in Y-m-d H:i:s format
local version = cargo.query( -- Query specified version with release date before current date
'versions',
'_pageName',
{
where = string.format('version = "%s" AND release_date < "%s"', util.cast.version(args.version, {return_type = 'string'}), now),
limit = 1,
groupBy = '_pageID',
}
)
return m:new(args.version, #version > 0, args.part, args.space, args.talk)
end
return p