در حال ویرایش پودمان: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.
local lang = mw.language.getContentLanguage()
local lang = mw.language.getContentLanguage()
-- Define constants
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('', cat, sort)
else
else
cat = mw.ustring.format('[[رده:%s]]', cat)
cat = string.format('', 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
if cfg.allowId then
self.name = args.name
self.id = args.id
if self.name then
self:addClass('box-' .. mw.ustring.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
end
self:addClass(
cfg.usePlainlinksParam and yesno(args.plainlinks or true) and 'plainlinks'
)
for _, class in ipairs(cfg.classes or {}) do
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
self:addClass(class)
خط ۲۰۴: خط ۱۸۳:
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]].',
                else
talkText,
                    talkText = 'گفتگوی مربوطه ممکن است در'
talk,
                    if talkArgIsTalkPage then
talkTitle.prefixedText
                        talkText = mw.ustring.format(
)
                            '%s [[%s|%s]] %s',
else
                            talkText,
talkText = string.format(
                            talk,
'%s [[%s#%s|صفحهٔ بحث]].',
                            talkTitle.prefixedText,
talkText,
'یافت شود'
talkTitle.prefixedText,
                        )
talk
                    else
)
                        talkText = mw.ustring.format(
end
                            '%s [[%s#%s|صفحهٔ بحث]] %s.',
                            talkText,
                            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('F Y')
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
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
end


خط ۳۴۲: خط ۳۱۱:
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


خط ۳۸۰: خط ۳۴۵:
or args['category' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
--mainCat = type(mainCat) == 'string' and mainCat
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', mainCat)
self:addCat(0, catTitle)
--self:addCat(0, catTitle)
catTitle = getTitleObject('رده:' .. catTitle)
-- catTitle = getTitleObject('رده:' .. catTitle)
if not catTitle or not catTitle.exists then
--if not catTitle or not catTitle.exists then
self:addCat(0, 'مقاله‌های دارای پارامتر تاریخ نادرست در الگو')
--self:addCat(0, 'مقاله‌های دارای پارامتر تاریخ نادرست در الگو')
end
--end
elseif mainCat and (not date or date == '') then
--elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
--self:addCat(0, mainCat)
end
--end
if allCat then
if allCat then
self:addCat(0, allCat)
self:addCat(0, allCat)
خط ۴۳۳: خط ۳۹۸:
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
خط ۴۶۱: خط ۴۲۶:


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 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 not self.isSmall then
textCellDiv
textCellSpan
:tag('span')
:tag('span')
:addClass('hide-when-compact')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(mw.ustring.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» استفاده می‌کند و نیازمند اصلاح است.',
'این جعبه پیام از پارامتر «نوع=%s» نامعتبر استفاده می‌کند و نیازمند اصلاح است.',
self.type or ''
self.type or ''
))
))
خط ۶۲۸: خط ۵۶۸:


function p.main(boxType, args, cfgTables)
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData('Module:Message box/configuration'))
box:setParameters()
box:setParameters()
box:setCategories()
box:setCategories()
لطفاً توجه داشته‌باشید که همهٔ مشارکت‌ها در ویکی حج منتشرشده تحت Creative Commons Attribution-NonCommercial-ShareAlike در نظر گرفته‌می‌شوند (برای جزئیات بیش‌تر ویکی حج:حق تکثیر را ببینید). اگر نمی‌خواهید نوشته‌هایتان بی‌رحمانه ویرایش و توزیع شوند؛ بنابراین، آنها را اینجا ارائه نکنید.
شما همچنین به ما تعهد می‌کنید که خودتان این را نوشته‌اید یا آن را از یک منبع با مالکیت عمومی یا مشابه آزاد آن برداشته‌اید (برای جزئیات بیش‌تر ویکی حج:حق تکثیر را ببینید). کارهای دارای حق تکثیر را بدون اجازه ارائه نکنید!
لغو راهنمای ویرایش‌کردن (در پنجرهٔ تازه باز می‌شود)

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