Mô đun:Old XfD multi/sandbox
Đây là trang chỗ thử mô đun cho Mô đun:Old XfD multi (khác). |
local yesno = require('Module:Yesno')
local mMessageBox = require('Module:Message box')
local TEMPLATE_PAGE = 'Template:Đã biểu quyết giữ'
-------------------------------------------------------------------------------
-- 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
if mw.title.new(page).namespace ~= 0 then
return page
else
return 'Wikipedia:Biểu quyết xoá bài/' .. page
end
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 'discussion'
if page then
return string.format('[[%s|%s]]', page, display)
else
return display --probably a bad title
end
end
local function makeUrlLink(page, display)
display = display or 'discussion'
return string.format('[%s %s]', page, display)
end
local function pageTypeName(title)
local display = mw.ustring.lower(title.subjectNsText)
local pageTypes = {
[''] = 'Bài viết',
['thành viên'] = 'Trang thành viên',
['wikipedia'] = 'Trang dự án',
['mediawiki'] = 'Trang giao diện',
['trợ giúp'] = 'Trang trợ giúp'
}
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 = string.gsub(title, '|.*', '')
title = string.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 = k:match('^(.-)([1-9][0-9]*)$')
if prefix and num then
num = tonumber(num)
if prefix == 'result' or
prefix == 'date' or
prefix == 'page' or
prefix == 'link' or
prefix == 'caption' or
prefix == 'votepage' or
prefix == 'merge'
then
self.rowData[num] = self.rowData[num] or {}
self.rowData[num][prefix] = v
if v and v ~= '' and prefix=='merge' 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
self.rowData[1].date = self.rowData[1].date or args.date
self.rowData[1].page = self.rowData[1].page or args.page
self.rowData[1].votepage = self.rowData[1].votepage or args.votepage
self.rowData[1].link = self.rowData[1].link or args.link
self.rowData[1].caption = self.rowData[1].caption or args.caption
self.rowData[1].merge = self.rowData[1].merge or args.merge
elseif args.result or
args.date or
args.page or
args.votepage or
args.link or
args.caption or
args.merge
then
self.rowData[1] = {
result = args.result,
date = args.date,
page = args.page,
votepage = args.votepage,
link = args.link,
caption = args.caption,
merge = args.merge
}
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)
if not self.collapse then
self.collapse = yesno(args.collapse)
end
-- Set other properties
self.isNumbered = yesno(args.numbered)
self.isSmall = yesno(args.small)
self.pageType = args.type or pageTypeName(self.currentTitle)
if args.merge and args.merge ~= '' then
self.isMerge = true
end
return self
end
function OldAfdMulti:renderResult(result)
return result or "'''Giữ'''"
end
function OldAfdMulti:renderDate(date)
if date then
return date
else
self.hasMissingDate = true
return string.format(
'<sup>%s[[%s|thiếu ngày]]%s</sup>',
mw.text.nowiki('['),
TEMPLATE_PAGE,
mw.text.nowiki(']')
)
end
end
function OldAfdMulti:renderPageText(linkFunc, page, caption)
return string.format(', see %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 = string.format('Hợp nhất với [[:%s]]: ', merge)
end
if link then
return string.format('%s%s, %s, see %s.', mergeText, result, date, link)
else
return string.format('%s%s, %s', mergeText, result, date)
end
end
function OldAfdMulti:renderFirstRow(data)
local link
if data.link then
link = makeUrlLink(data.link, data.caption)
else
local page = data.page or self.currentTitle.text
link = makeWikilink(getAfdPage(page), data.caption)
end
return self:renderRow(data.result, data.date, link, data.merge)
end
function OldAfdMulti:renderSubsequentRow(data)
local link
if data.page then
link = makeWikilink(getAfdPage(data.page), data.caption)
elseif data.link then
link = makeUrlLink(data.link, data.caption)
end
return self:renderRow(data.result, data.date, link, data.merge)
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 = 'Các lần thảo luận xóa trước đây:'
elseif nRows > 1 then
header = 'Các lần thảo luận xóa:'
else
header = 'Thảo luận xóa:'
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 'thảo luận'
local link
if data.link then
link = makeUrlLink(data.link, caption)
else
local page = data.page or self.currentTitle.text
if exists(getAfdPage(page)) then
link = makeWikilink(getAfdPage(page), caption)
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 "'''giữ'''")
return string.format(
'Kết quả của %s này là %s.',
link, result
)
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] = string.format(
'%s này được cân nhắc [[Wikipedia:Quy định xóa trang#Hợp nhất|hợp nhất]] với %s.',
self.pageType,
self.rowData[1].merge
)
elseif nRows == 1 and self.rowData[1].date then
ret[#ret + 1] = string.format(
'%s này được cân nhắc [[Wikipedia:Quy định xóa trang#Hợp nhất|hợp nhất]] với [[:%s]] vào %s.',
self.pageType,
self.rowData[1].merge,
self.rowData[1].date
)
else
ret[#ret + 1] = string.format(
'%s này được cân nhắc để [[Wikipedia:Quy định xóa trang|xóa]] hoặc [[Wikipedia:Quy định xóa trang#Hợp nhất|hợp nhất]].',
self.pageType
)
end
else
if nRows < 1 or not self.rowData[1].date then
ret[#ret + 1] = string.format(
'%s này đã từng được đề cử [[Wikipedia:Quy định xóa trang|xóa]].',
self.pageType
)
elseif nRows == 1 and self.rowData[1].date then
ret[#ret + 1] = string.format(
'%s này đã từng được đề cử [[Wikipedia:Quy định xóa trang|xóa]] vào %s.',
self.pageType,
self.rowData[1].date
)
else
ret[#ret + 1] = string.format(
'%s này đã từng được đề cử [[Wikipedia:Quy định xóa trang|xóa]].',
self.pageType
)
end
end
if nRows > 1 then
ret[#ret + 1] = ' '
if self.isSmall then
ret[#ret + 1] = 'Xem lại các thảo luận trước đây trước khi cân nhắc đề cử lại:'
else
ret[#ret + 1] = 'Vui lòng xem lại các thảo luận trước đây nếu bạn muốn cân nhắc đề cử lại:'
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 = '[[File:Clipboard.svg|35px|Biểu quyết xóa bài]]',
smallimage = 'none',
text = self:renderBannerText()
})
end
function OldAfdMulti:renderTrackingCategories()
local ret = {}
if self.hasMissingDate and self.currentTitle.isTalkPage then
ret[#ret + 1] = '[[Thể loại:Bản mẫu biểu quyết xóa bài cũ có lỗi]]'
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
Wiki - Keonhacai copa chuyên cung cấp kiến thức thể thao, keonhacai tỷ lệ kèo, bóng đá, khoa học, kiến thức hằng ngày được chúng tôi cập nhật mỗi ngày mà bạn có thể tìm kiếm tại đây có nguồn bài viết: https://vi.wikipedia.org/wiki/M%C3%B4_%C4%91un:Old_XfD_multi/sandbox