در حال ویرایش پودمان:Message box

هشدار: شما وارد نشده‌اید. نشانی آی‌پی شما برای عموم قابل مشاهده خواهد بود اگر هر تغییری ایجاد کنید. اگر وارد شوید یا یک حساب کاربری بسازید، ویرایش‌هایتان به نام کاربری‌تان نسبت داده خواهد شد، همراه با مزایای دیگر.

این ویرایش را می‌توان خنثی کرد. لطفاً تفاوت زیر را بررسی کنید تا تأیید کنید که این چیزی است که می‌خواهید انجام دهید، سپس تغییرات زیر را ذخیره کنید تا خنثی‌سازی ویرایش را به پایان ببرید.

نسخهٔ فعلی متن شما
خط ۱: خط ۱:
-- برای فارسی‌سازی بهتر، بعضی قسمت‌های این پودمان تغییر یافته‌است که در همان‌جا اشاره شده‌است. لطفاً هنگام به‌روزرسانی به‌دقت پودمان را تغییر دهید.
-- 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}}.


-- Load necessary modules.
-- Load necessary modules.
require('strict')
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')
local lang = mw.language.getContentLanguage()


-- Get a language object for formatDate and ucfirst.
-- Get a language object for formatDate and ucfirst.
خط ۱۳: خط ۱۴:
-- 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 args.demospace and args.demospace ~= '' then
if ns == 0 then
-- implement demospace parameter of mbox
local demospace = mw.ustring.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif mw.ustring.find( demospace, 'بحث' ) 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 = mw.ustring.format('[[رده:%s|%s]]', cat, sort)
cat = string.format('[[رده:%s|%s]]', cat, sort)
else
else
cat = mw.ustring.format('[[رده:%s]]', cat)
cat = string.format('[[رده:%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-' .. mw.ustring.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(
خط ۲۱۵: خط ۱۹۶:
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}}.
خط ۲۶۹: خط ۲۵۰:
end
end
if talkTitle and talkTitle.exists then
if talkTitle and talkTitle.exists then
                local talkText
local talkText = 'گفتگوی مربوطه ممکن است در'
                if self.isSmall then
if talkArgIsTalkPage then
                    local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk)
talkText = string.format(
                    talkText = mw.ustring.format('([[%s|بحث]])', talkLink)
'%s [[%s|%s]] %s.',
                else
talkText,
                    talkText = 'گفتگوی مربوطه ممکن است در'
talk,
                    if talkArgIsTalkPage then
talkTitle.prefixedText,
                        talkText = mw.ustring.format(
'یافت شود'
                            '%s [[%s|%s]] %s',
)
                            talkText,
else
                            talk,
talkText = string.format(
                            talkTitle.prefixedText,
'%s [[%s#%s|صفحهٔ بحث]] %s.',
'یافت شود'
talkText,
                        )
talkTitle.prefixedText,
                    else
talk,
                        talkText = mw.ustring.format(
'یافت شود'
                            '%s [[%s#%s|صفحهٔ بحث]] %s.',
)
                            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('F Y') -- استفاده از تاریخ میلادی مرسوم است و نه تاریخ شمسی
date = lang:formatDate('xiF xiY')
end
end
if date then
if date then
self.date = mw.ustring.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
self.date = string.format(" <small>''(%s)''</small>", date)
end
end
self.info = args.info
self.info = args.info
خط ۳۴۲: خط ۳۱۷:
and (cfg.imageSmallSize or '30x30px')
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
or '40x40px'
self.imageLeft = mw.ustring.format('[[پرونده:%s|%s|link=|alt=]]', self.typeImage
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
or 'Imbox notice.png', imageSize)
end
end
خط ۳۵۲: خط ۳۲۷:
self.imageRight = imageRight
self.imageRight = imageRight
end
end
-- set templatestyles
self.base_templatestyles = cfg.templatestyles
self.templatestyles = args.templatestyles
end
end


خط ۳۸۳: خط ۳۵۴:
allCat = type(allCat) == 'string' and allCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
if mainCat and date and date ~= '' then
local catTitle = mw.ustring.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('رده:' .. catTitle)
خط ۴۶۱: خط ۴۳۲:


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 require('Module:Category handler')._main{
return categoryHandler{
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 {}),
خط ۴۸۵: خط ۴۵۰:
root:tag('b')
root:tag('b')
:addClass('error')
:addClass('error')
:wikitext(mw.ustring.format(
:wikitext(string.format(
'الگوی <code>%s[[الگو:%s|%s]]%s</code> اشتباه جانشین شده‌است.',
'الگوی <code>%s[[الگو:%s|%s]]%s</code> اشتباه جانشین شده‌است.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
end


خط ۵۲۸: خط ۴۷۹:
-- image width to 52px. If any images in a div are wider than that,
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
end
imageLeftCell:wikitext(self.imageLeft or nil)
imageLeftCell:wikitext(self.imageLeft or nil)
خط ۵۳۸: خط ۴۸۹:
row:tag('td')
row:tag('td')
:addClass('mbox-empty-cell')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
end


خط ۵۴۶: خط ۴۹۸:
-- 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 textCellDiv = textCell:tag('div')
local textCellSpan = textCell:tag('span')
textCellDiv
textCellSpan
:addClass('mbox-text-span')
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
textCellSpan: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
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
textCellSpan:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
if self.info and not self.isSmall then
textCellDiv
textCellSpan
:tag('span')
:tag('span')
:addClass('hide-when-compact')
:addClass('hide-when-compact')
خط ۵۶۴: خط ۵۱۶:
end
end
if self.removalNotice then
if self.removalNotice then
textCellDiv:tag('span')
textCellSpan:tag('small')
:addClass('hide-when-compact')
:addClass('hide-when-compact')
:tag('i')
:tag('i')
:wikitext(mw.ustring.format(" (%s)", self.removalNotice))
:wikitext(string.format(" (%s)", self.removalNotice))
end
end
else
else
خط ۵۸۲: خط ۵۳۴:
-- If we are using a div, redefine imageRightCell so that the image
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
end
imageRightCell
imageRightCell
خط ۶۰۱: خط ۵۵۳:
if self.invalidTypeError then
if self.invalidTypeError then
root:tag('div')
root:tag('div')
:addClass('mbox-invalid-type')
:css('text-align', 'center')
:wikitext(mw.ustring.format(
:wikitext(string.format(
'این جعبه پیام از پارامتر نامعتبر «type=%s» استفاده می‌کند و نیازمند اصلاح است.',
'این جعبه پیام از پارامتر نامعتبر «type=%s» استفاده می‌کند و نیازمند اصلاح است.',
self.type or ''
self.type or ''
))
))
end
end
-- Add categories.
-- Add categories.
root:wikitext(self:renderCategories() or nil)
root:wikitext(self:renderCategories() or nil)
لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در ویکی حج منتشرشده تحت Creative Commons Attribution-NonCommercial-ShareAlike در نظر گرفته‌می‌شوند (برای جزئیات بیش‌تر ویکی حج:حق تکثیر را ببینید). اگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش و توزیع شوند؛ بنابراین، آنها را اینجا ارائه نکنید.
شما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید (برای جزئیات بیش‌تر ویکی حج:حق تکثیر را ببینید). کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!
لغو راهنمای ویرایش‌کردن (در پنجرهٔ تازه باز می‌شود)

الگوی به‌کاررفته در این صفحه: