پودمان:Message box: تفاوت میان نسخه‌ها

۹۹۳ بایت اضافه‌شده ،  ‏۳ اوت ۲۰۲۰
show link to talk discussion when used in small format, per request
(نمایش تاریخ به شمسی جای میلادی)
 
(show link to talk discussion when used in small format, per request)
خط ۱: خط ۱:
-- برای فارسی‌سازی بهتر، بعضی قسمت‌های این پودمان تغییر یافته‌است که در همان‌جا اشاره شده‌است. لطفاً هنگام به‌روزرسانی به‌دقت پودمان را تغییر دهید.
-- This is a meta-module for producing message box templates, including
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
خط ۶: خط ۵:
require('Module:No globals')
require('Module:No globals')
local getArgs
local getArgs
local categoryHandler = require('Module:Category handler')._main
local yesno = require('Module:Yesno')
local yesno = require('Module:Yesno')


خط ۱۴: خط ۱۲:
-- Define constants
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
خط ۷۶: خط ۷۵:
local ns = obj.title.namespace
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
-- boxType is "mbox" or invalid input
if ns == 0 then
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
else
-- default to ombox
obj.cfg = cfg.ombox
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.cfg = cfg.ambox -- main namespace
elseif ns == 6 then
elseif ns == 6 then
خط ۱۱۰: خط ۱۲۲:
obj.categories = {}
obj.categories = {}
obj.classes = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false


return setmetatable(obj, MessageBox)
return setmetatable(obj, MessageBox)
خط ۱۱۹: خط ۱۳۳:
end
end
if sort then
if sort then
cat = string.format('[[رده:%s|%s]]', cat, sort)
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
else
cat = string.format('[[رده:%s]]', cat)
cat = string.format('[[Category:%s]]', cat)
end
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
table.insert(self.categories[ns], cat)
خط ۱۵۹: خط ۱۷۴:
-- Add attributes, classes and styles.
-- Add attributes, classes and styles.
self.id = args.id
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
self:addClass('plainlinks')
خط ۱۸۴: خط ۲۰۳:
and cfg.templateCategoryRequireName
and cfg.templateCategoryRequireName
then
then
self.name = args.name
if self.name then
if self.name then
local templateName = mw.ustring.match(
local templateName = mw.ustring.match(
self.name,
self.name,
'^([tT][eE][mM][pP][lL][aA][tT][eE]|الگو)[%s_]*:[%s_]*(.*)$'
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
) or self.name
templateName = 'الگو:' .. templateName
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
self.templateTitle = getTitleObject(templateName)
end
end
خط ۱۹۶: خط ۲۱۴:
and mw.title.equals(self.title, self.templateTitle)
and mw.title.equals(self.title, self.templateTitle)
end
end
 
-- Process data for collapsible text fields. At the moment these are only
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
-- used in {{ambox}}.
خط ۲۰۶: خط ۲۲۴:
local sect
local sect
if args.sect == '' then
if args.sect == '' then
sect = 'این ' .. (cfg.sectionDefault or 'صفحه')
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
elseif type(args.sect) == 'string' then
sect = 'این ' .. args.sect
sect = 'This ' .. args.sect
end
end
local issue = args.issue
local issue = args.issue
خط ۲۵۰: خط ۲۶۸:
end
end
if talkTitle and talkTitle.exists then
if talkTitle and talkTitle.exists then
local talkText = 'گفتگوی مربوطه ممکن است در'
                local talkText
if talkArgIsTalkPage then
                if self.isSmall then
talkText = string.format(
                    local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk)
'%s [[%s|%s]] %s.',
                    talkText = string.format('([[%s|talk]])', talkLink)
talkText,
                else
talk,
                    talkText = 'Relevant discussion may be found on'
talkTitle.prefixedText,
                    if talkArgIsTalkPage then
'یافت شود'
                        talkText = string.format(
)
                            '%s [[%s|%s]].',
else
                            talkText,
talkText = string.format(
                            talk,
'%s [[%s#%s|صفحهٔ بحث]] %s.',
                            talkTitle.prefixedText
talkText,
                        )
talkTitle.prefixedText,
                    else
talk,
                        talkText = string.format(
'یافت شود'
                            '%s the [[%s#%s|talk page]].',
)
                            talkText,
end
                            talkTitle.prefixedText,
                            talk
                        )
                    end
                end
self.talk = talkText
self.talk = talkText
end
end
خط ۲۷۸: خط ۳۰۰:
date = args.date
date = args.date
elseif args.date == '' and self.isTemplatePage then
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('xiF xiY')
date = lang:formatDate('F Y')
end
end
if date then
if date then
self.date = string.format(" <small>''(%s)''</small>", date)
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
end
self.info = args.info
self.info = args.info
خط ۳۴۶: خط ۳۶۸:
local date = args.date
local date = args.date
date = type(date) == 'string' and date
date = type(date) == 'string' and date
local preposition = 'از'
local preposition = 'from'
for _, num in ipairs(nums) do
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
local mainCat = args['cat' .. tostring(num)]
خط ۳۵۶: خط ۳۷۸:
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
self:addCat(0, catTitle)
catTitle = getTitleObject('رده:' .. catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
if not catTitle or not catTitle.exists then
self:addCat(0, 'مقاله‌های دارای پارامتر تاریخ نادرست در الگو')
self:addCat(0, 'Articles with invalid date parameter in template')
end
end
elseif mainCat and (not date or date == '') then
elseif mainCat and (not date or date == '') then
خط ۴۰۴: خط ۴۲۶:
if self.categoryNums and #self.categoryNums > 0 then
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateCat = templateErrorCategory
templateSort = 'ر'
templateSort = 'C'
end
end
end
end
خط ۴۱۵: خط ۴۳۷:
if self.invalidTypeError then
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'پارامتر نیازمند اصلاح الگوی پیامی ویکی‌پدیا', allSort)
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
end
end
if self.isSubstituted then
if self.isSubstituted then
self:addCat('all', 'صفحه‌های همراه با الگوی نادرست جانشین‌شده')
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
end
end
خط ۴۳۲: خط ۴۵۴:


function MessageBox:renderCategories()
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
-- [[Module:Category handler]].
return categoryHandler{
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
template = table.concat(self.categories[10] or {}),
خط ۴۵۱: خط ۴۷۹:
:addClass('error')
:addClass('error')
:wikitext(string.format(
:wikitext(string.format(
'الگوی <code>%s[[الگو:%s|%s]]%s</code> اشتباه جانشین شده‌است.',
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
))
خط ۴۹۸: خط ۵۲۶:
-- collapsible. At the moment, only ambox uses this.
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
textCell:cssText(self.textstyle or nil)
local textCellSpan = textCell:tag('span')
local textCellDiv = textCell:tag('div')
textCellSpan
textCellDiv
:addClass('mbox-text-span')
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
if (self.talk or self.fix) then
textCellSpan:tag('span')
textCellDiv:tag('span')
:addClass('hide-when-compact')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
end
textCellSpan:wikitext(self.date and (' ' .. self.date) or nil)
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
if self.info and not self.isSmall then
textCellSpan
textCellDiv
:tag('span')
:tag('span')
:addClass('hide-when-compact')
:addClass('hide-when-compact')
خط ۵۱۶: خط ۵۴۴:
end
end
if self.removalNotice then
if self.removalNotice then
textCellSpan:tag('small')
textCellDiv:tag('small')
:addClass('hide-when-compact')
:addClass('hide-when-compact')
:tag('i')
:tag('i')
خط ۵۵۵: خط ۵۸۳:
:css('text-align', 'center')
:css('text-align', 'center')
:wikitext(string.format(
:wikitext(string.format(
'این جعبه پیام از پارامتر نامعتبر «type=%s» استفاده می‌کند و نیازمند اصلاح است.',
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
self.type or ''
))
))
end
end
-- Add categories.
-- Add categories.
root:wikitext(self:renderCategories() or nil)
root:wikitext(self:renderCategories() or nil)
کاربر ناشناس