-- بخشهایی از این پودمان برای سازگاری با فرایندهای ویکیپدیای فارسی دستخوش تغییرات عمده شدهاند. لطفاً در زمان بهروزرسانی دقت کنید
local yesno = require('Module:Yesno')
local mMessageBox = require('Module:Message box')
local TEMPLATE_PAGE = 'الگو:پیشینه حذف'
-------------------------------------------------------------------------------
-- Helper functions
-------------------------------------------------------------------------------
local function exists(page)
local success, exists = pcall(function ()
local title = mw.title.new(page)
return title.exists
end)
return success and exists
end
local function getAfdPage(page)
if page and mw.title.new(page) then
return 'ویکیپدیا:نظرخواهی برای حذف/' .. page
else
return nil
end
end
--[[
در ویکیپدیای فارسی نیازی نیست
local function getVfdPage(page)
if page and mw.title.new(page) then
if mw.title.new(page).rootPageTitle.fullText == 'Wikipedia:Votes for deletion' then
return page
else
return 'Wikipedia:Votes for deletion/' .. page
end
else return nil
end
end ]]--
local function makeWikilink(page, display)
display = display or 'بحث'
if page then
return mw.ustring.format('[[%s|%s]]', page, display)
else
return display -- probably a bad title
end
end
local function makeUrlLink(page, display)
display = display or 'بحث'
return mw.ustring.format('[%s %s]', page, display)
end
local function pageTypeName(title)
local display = mw.ustring.lower(title.subjectNsText)
local pageTypes = {
[''] = 'مقاله',
['کاربر'] = 'صفحهٔ کاربری',
['ویکیپدیا'] = 'صفحهٔ پروژه',
['مدیاویکی'] = 'صفحهٔ رابط کاربری',
['راهنما'] = 'صفحهٔ راهنما'
}
if pageTypes[display] then display = pageTypes[display] end
return display
end
local function cleanupTitle(title)
if not title then return title end
title = mw.uri.decode(title, 'PATH')
title = mw.ustring.gsub(title, '|.*', '')
title = mw.ustring.gsub(title, '[%[%]{}]', '')
return title
end
-------------------------------------------------------------------------------
-- OldAfdMulti class
-------------------------------------------------------------------------------
local OldAfdMulti = {}
OldAfdMulti.__index = OldAfdMulti
function OldAfdMulti.new(args)
local self = setmetatable({}, OldAfdMulti)
self.currentTitle = mw.title.getCurrentTitle()
-- Preprocess the row args for easier looping.
self.rowData = {}
for k, v in pairs(args) do
if type(k) == 'string' then
local prefix, num = mw.ustring.match(k, '^(.-)(%d[%d]?)$')
if prefix and num then
num = mw.getContentLanguage():parseFormattedNumber(num)
if prefix == 'result' or
prefix == 'نتیجه' or
prefix == 'date' or
prefix == 'تاریخ' or
prefix == 'page' or
prefix == 'صفحه' or
prefix == 'link' or
prefix == 'پیوند' or
prefix == 'caption' or
prefix == 'توضیح' or
prefix == 'votepage' or
prefix == 'نظرخواهی' or
prefix == 'merge' or
prefix == 'ادغام'
then
self.rowData[num] = self.rowData[num] or {}
self.rowData[num][prefix] = v
if v and v ~= '' and prefix=='merge' or prefix=='ادغام' then
self.isMerge = true
end
end
end
end
end
-- Set aliases for parameters ending in "1".
if self.rowData[1] then
self.rowData[1].result = self.rowData[1].result or args.result or args['نتیجه']
self.rowData[1].date = self.rowData[1].date or args.date or args['تاریخ']
self.rowData[1].page = self.rowData[1].page or args.page or args['صفحه']
self.rowData[1].votepage = self.rowData[1].votepage or args.votepage or args['نظرخواهی']
self.rowData[1].link = self.rowData[1].link or args.link or args['پیوند']
self.rowData[1].caption = self.rowData[1].caption or args.caption or args['توضیح']
self.rowData[1].merge = self.rowData[1].merge or args.merge or args['ادغام']
elseif args.result or
args['نتیجه'] or
args.date or
args['تاریخ'] or
args.page or
args['صفحه'] or
args.votepage or
args['نظرخواهی'] or
args.link or
args['پیوند'] or
args.caption or
args['توضیح'] or
args.merge or
args['ادغام']
then
self.rowData[1] = {
result = args.result or args['نتیجه'],
date = args.date or args['تاریخ'],
page = args.page or args['صفحه'],
votepage = args.votepage or args['نظرخواهی'],
link = args.link or args['پیوند'],
caption = args.caption or args['توضیح'],
merge = args.merge or args['ادغام']
}
end
-- Remove any gaps in the array we made.
local function compressSparseArray(t)
local ret, nums = {}, {}
for num, data in pairs(t) do
nums[#nums + 1] = num
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[i] = t[num]
end
return ret
end
self.rowData = compressSparseArray(self.rowData)
-- Set aliases that apply to all of the data tables.
for i, data in ipairs(self.rowData) do
data.page = data.page or data.votepage
data.page = cleanupTitle(data.page)
data.votepage = nil
end
-- Set collapsedness
self.collapse = tonumber(args.collapse or args['جمعشده'])
if not self.collapse then
self.collapse = yesno(args.collapse or args['جمعشده'])
end
-- Set other properties
self.isNumbered = yesno(args.numbered or args['شمارهدار'])
self.isSmall = yesno(args.small or args['کوچک'])
self.pageType = args.type or args['نوع'] or pageTypeName(self.currentTitle)
if (args.merge or args['ادغام']) and (args.merge or args['ادغام']) ~= '' then
self.isMerge = true
end
return self
end
function OldAfdMulti:renderResult(result)
return result or "'''بماند'''"
end
function OldAfdMulti:renderDate(date)
if date then
return date
else
self.hasMissingDate = true
return mw.ustring.format(
'<sup>%s[[%s|تاریخ ناموجود]]%s</sup>',
mw.text.nowiki('['),
TEMPLATE_PAGE,
mw.text.nowiki(']')
)
end
end
function OldAfdMulti:renderPageText(linkFunc, page, caption)
return mw.ustring.format('، %s را ببینید.', linkFunc(page, caption))
end
function OldAfdMulti:renderRow(result, date, link, merge)
local result = self:renderResult(result)
local date = self:renderDate(date)
local mergeText = ''
if merge and merge ~= '' then
mergeText = mw.ustring.format('ادغام با [[:%s]]: ', merge)
end
if link then
return mw.ustring.format('%s%s، %s، %s را ببینید.', mergeText, result, date, link)
else
return mw.ustring.format('%s%s، %s', mergeText, result, date)
end
end
function OldAfdMulti:renderFirstRow(data)
local link
if data.link or data['پیوند'] then
link = makeUrlLink(data.link or data['پیوند'], data.caption or data['توضیح'])
else
local page = data.page or data['صفحه'] or self.currentTitle.text
link = makeWikilink(getAfdPage(page), data.caption or data['توضیح'])
end
return self:renderRow(data.result or data['نتیجه'], data.date or data['تاریخ'], link, data.merge or data['ادغام'])
end
function OldAfdMulti:renderSubsequentRow(data)
local link
if data.page or data['صفحه'] then
link = makeWikilink(getAfdPage(data.page or data['صفحه']), data.caption or data['توضیح'])
elseif data.link or data['پیوند'] then
link = makeUrlLink(data.link or data['پیوند'], data.caption or data['توضیح'])
end
return self:renderRow(data.result or data['نتیجه'], data.date or data['تاریخ'], link, data.merge or data['ادغام'])
end
function OldAfdMulti:renderRows()
local root = mw.html.create()
local nRows = #self.rowData
local i = nRows
local nCollapsedRows
if type(self.collapse) == 'number' then
nCollapsedRows = self.collapse
elseif self.collapse then
nCollapsedRows = nRows
else
nCollapsedRows = 0
end
local hasNormalRows = nRows - nCollapsedRows > 0
local function makeList(isCollapsed, header)
local tableRoot = root:tag('table')
tableRoot
:addClass(isCollapsed and 'collapsible collapsed' or nil)
:css('width', '100%')
:css('background-color', '#f8eaba')
if header then
tableRoot
:tag('tr')
:tag('th')
:wikitext(header)
end
return tableRoot
:tag('tr')
:tag('td')
:tag(self.isNumbered and 'ol' or 'ul')
end
local function renderRow(html, method, data)
html
:tag('li')
:attr('value', self.isNumbered and i or nil)
:wikitext(self[method](self, data))
end
-- Render normal rows
if hasNormalRows then
local normalList = makeList(false)
while i > 1 and i > nCollapsedRows do
renderRow(normalList, 'renderSubsequentRow', self.rowData[i])
i = i - 1
end
if i == 1 and i > nCollapsedRows then
renderRow(normalList, 'renderFirstRow', self.rowData[i])
i = i - 1
end
end
-- Render collapsed rows
if nCollapsedRows > 0 then
local header
if hasNormalRows then
header = 'نظرخواهیهای قدیمیتر برای حذف:'
elseif nRows > 1 then
header = 'نظرخواهیها برای حذف:'
else
header = 'نظرخواهی برای حذف:'
end
local collapsedList = makeList(true, header)
while i > 1 do
renderRow(collapsedList, 'renderSubsequentRow', self.rowData[i])
i = i - 1
end
renderRow(collapsedList, 'renderFirstRow', self.rowData[i])
end
return tostring(root)
end
function OldAfdMulti:renderFirstRowOnly()
local data = self.rowData[1] or {}
local caption = data.caption or data['توضیح'] or 'بحث'
local link
if data.link or data['پیوند'] then
link = makeUrlLink(data.link or data['پیوند'], caption)
else
local page = data.page or data['صفحه'] or self.currentTitle.text
if exists(getAfdPage(page)) then
link = makeWikilink(getAfdPage(page), caption)
--[[ not needed in fawiki
elseif exists(getVfdPage(page)) then
link = makeWikilink(getVfdPage(page), caption) ]]--
else
link = caption -- Make this an error?
end
end
local result = self:renderResult(data.result or data['نتیجه'] or "'''بماند'''")
local resultText
if self.rowData[1].date then
resultText = mw.ustring.format(
"نتیجهٔ %s که در تاریخ %s جمعبندی شد چنین بود: '''%s'''",
link,
self.rowData[1].date,
result
)
else
resultText = mw.ustring.format(
"نتیجهٔ %s چنین بود: '''%s'''",
link,
result
)
end
return resultText
end
function OldAfdMulti:renderBannerText()
local nRows = #self.rowData
local ret = {}
if self.isMerge then
if nRows < 1 or not self.rowData[1].date then
ret[#ret + 1] = mw.ustring.format(
'این %s در گذشته برای [[ویکیپدیا:سیاست حذف#ادغام|ادغام]] با %s در نظر گرفته شدهبود.',
self.pageType,
self.rowData[1].merge
)
elseif nRows == 1 and self.rowData[1].date then
ret[#ret + 1] = mw.ustring.format(
'این %s در %s برای [[ویکیپدیا:سیاست حذف#ادغام|ادغام]] با [[:%s]] در نظر گرفته شدهبود.',
self.pageType,
self.rowData[1].date,
self.rowData[1].merge
)
else
ret[#ret + 1] = mw.ustring.format(
'این %s درگذشته برای [[ویکیپدیا:سیاست حذف|حذف]] نامزد شده یا برای [[ویکیپدیا:سیاست حذف#ادغام|ادغام]] در نظر گرفته شدهبود.',
self.pageType
)
end
else
if nRows < 1 or not self.rowData[1].date then
ret[#ret + 1] = mw.ustring.format(
'این %s در گذشته برای [[ویکیپدیا:سیاست حذف|حذف]] نامزد شدهبود.',
self.pageType
)
elseif nRows == 1 and self.rowData[1].date then
ret[#ret + 1] = mw.ustring.format(
'این %s برای [[ویکیپدیا:سیاست حذف|حذف]] نامزد شدهبود.',
self.pageType
)
else
ret[#ret + 1] = mw.ustring.format(
'این %s برای [[ویکیپدیا:سیاست حذف|حذف]] نامزد شدهبود.',
self.pageType
)
end
end
if nRows > 1 then
ret[#ret + 1] = ' '
if self.isSmall then
ret[#ret + 1] = 'اگر قصد نامزد کردن مجدد را دارید، بحثهای پیشین را بازبینی کنید:'
else
ret[#ret + 1] = 'اگر قصد دارید نامزدی جدیدی ایجاد کنید، لطفاً بحثهای پیشین را بازبینی کنید:'
end
ret[#ret + 1] = '\n'
ret[#ret + 1] = self:renderRows()
else
ret[#ret + 1] = ' '
ret[#ret + 1] = self:renderFirstRowOnly()
end
return table.concat(ret)
end
function OldAfdMulti:renderBanner()
return mMessageBox.main('tmbox', {
small = self.isSmall,
type = 'notice',
image = '[[پرونده:Clipboard.svg|35px|نظرخواهی برای حذف]]',
smallimage = 'none',
text = self:renderBannerText()
})
end
function OldAfdMulti:renderTrackingCategories()
local ret = {}
if self.hasMissingDate and self.currentTitle.isTalkPage then
ret[#ret + 1] = '[[رده:الگوهای پیشینه حذف دارای خطا]]'
end
return table.concat(ret)
end
function OldAfdMulti:__tostring()
return self:renderBanner() .. self:renderTrackingCategories()
end
-------------------------------------------------------------------------------
-- Exports
-------------------------------------------------------------------------------
local p = {}
function p._main(args)
local afd = OldAfdMulti.new(args)
return tostring(afd)
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = TEMPLATE_PAGE
})
return p._main(args)
end
return p