Mô đun:CurrentCandidateList
![]() | Mô-đun này là loại cần được khóa. Nó là một mô-đun nhìn thấy rõ được sử dụng bởi một số lượng lớn các trang, hoặc là các thay thế rất thường xuyên. Bởi vì phá hoại hoặc lỗi sai khi sửa sẽ ảnh hưởng đến nhiều trang và thậm chí chỉnh sửa tầm thường có thể gây ra tải đáng kể cho các máy chủ, nó được khóa bảo vệ hạn chế sửa đổi. |
![]() | Mô đun Lua này được sử dụng trong thông báo hệ thống. Thay đổi đến nó có thể dẫn đến thay đổi ngay lập tức giao diện người dùng Wikipedia. Để tránh gây lỗi trên quy mô lớn, tất cả thay đổi cần được thử nghiệm ở trang con /sandbox, /testcases của mô đun, hoặc ở chỗ thử mô đun. Các thay đổi đã được thử nghiệm có thể thêm vào mô đun bằng một sửa đổi duy nhất. Xin hãy thảo luận các thay đổi tại trang thảo luận trước khi áp dụng sửa đổi. |
Cách sử dụng
Dùng để tự động tạo danh sách các biểu quyết bài viết tốt, bài viết chọn lọc, biểu quyết xóa bài...
{{#invoke:CurrentCandidateList|group|(các tham số chỉ danh sách cần thêm)}}
- Dùng để tạo tự động danh sách biểu quyết, với các tham số chỉ thứ tự như sau:
- FA = "Wikipedia:Ứng cử viên bài viết chọn lọc",
- FL = "Wikipedia:Ứng cử viên danh sách chọn lọc",
- FT = "Wikipedia:Ứng cử viên chủ điểm chọn lọc",
- GA = "Wikipedia:Ứng cử viên bài viết tốt",
- GT = "Wikipedia:Ứng cử viên chủ điểm tốt",
- FAR = "Wikipedia:Đề nghị rút sao bài viết chọn lọc",
- FLR = "Wikipedia:Đề nghị rút sao danh sách chọn lọc",
- FAR2 = "Wikipedia:Đề nghị giáng sao bài viết chọn lọc",
- GAR = "Wikipedia:Đề nghị rút sao bài viết tốt",
- AfD = "Wikipedia:Biểu quyết xoá bài",
- MfD = "Wikipedia:Biểu quyết xóa trang (khác)",
- AfUD = "Wikipedia:Biểu quyết phục hồi trang",
- RfE = "Wikipedia:Biểu quyết chọn điều phối viên",
- RfA = "Wikipedia:Biểu quyết chọn bảo quản viên",
- RfB = "Wikipedia:Biểu quyết chọn hành chính viên",
- RfCU = "Wikipedia:Biểu quyết chọn kiểm định viên",
- RfDE = "Wikipedia:Biểu quyết bất tín nhiệm điều phối viên",
- RfDA = "Wikipedia:Biểu quyết bất tín nhiệm bảo quản viên",
- RfDB = "Wikipedia:Biểu quyết bất tín nhiệm hành chính viên",
- RfDCU = "Wikipedia:Biểu quyết bất tín nhiệm kiểm định viên",
- BTN = "Wikipedia:Biểu quyết bất tín nhiệm nhiều vị trí".
local p = {}
local titles = {
FA = "Wikipedia:Ứng cử viên bài viết chọn lọc",
FL = "Wikipedia:Ứng cử viên danh sách chọn lọc",
FT = "Wikipedia:Ứng cử viên chủ điểm chọn lọc",
GA = "Wikipedia:Ứng cử viên bài viết tốt",
GT = "Wikipedia:Ứng cử viên chủ điểm tốt",
FAR = "Wikipedia:Đề nghị rút sao bài viết chọn lọc",
FLR = "Wikipedia:Đề nghị rút sao danh sách chọn lọc",
FAR2 = "Wikipedia:Đề nghị giáng sao bài viết chọn lọc",
GAR = "Wikipedia:Đề nghị rút sao bài viết tốt",
AfD = "Wikipedia:Biểu quyết xoá bài",
MfD = "Wikipedia:Biểu quyết xóa trang (khác)",
AfUD = "Wikipedia:Biểu quyết phục hồi trang",
RfE = "Wikipedia:Biểu quyết chọn điều phối viên",
RfA = "Wikipedia:Biểu quyết chọn bảo quản viên",
RfB = "Wikipedia:Biểu quyết chọn hành chính viên",
RfCU = "Wikipedia:Biểu quyết chọn kiểm định viên",
RfDE = "Wikipedia:Biểu quyết bất tín nhiệm điều phối viên",
RfDA = "Wikipedia:Biểu quyết bất tín nhiệm bảo quản viên",
RfDB = "Wikipedia:Biểu quyết bất tín nhiệm hành chính viên",
RfDCU = "Wikipedia:Biểu quyết bất tín nhiệm kiểm định viên",
BTN = "Wikipedia:Biểu quyết bất tín nhiệm nhiều vị trí",
}
local alts = {
FA = "Bài viết chọn lọc",
FL = "Danh sách chọn lọc",
FT = "Chủ điểm chọn lọc",
GA = "Bài viết tốt",
GT = "Chủ điểm tốt",
FAR = "Rút sao",
FLR = "Rút sao danh sách chọn lọc",
FAR2 = "Giáng sao",
GAR = "Rút sao",
AfD = "Xóa bài",
MfD = "Xóa trang thuộc không gian tên khác",
AfUD = "Phục hồi bài",
RfE = "Chọn điều phối viên",
RfA = "Chọn bảo quản viên",
RfB = "Chọn hành chính viên",
RfCU = "Chọn kiểm định viên",
RfDE = "Bất tín nhiệm điều phối viên",
RfDA = "Bất tín nhiệm bảo quản viên",
RfDB = "Bất tín nhiệm hành chính viên",
RfDCU = "Bất tín nhiệm kiểm định viên",
BTN = "Bất tín nhiệm nhiều vị trí",
}
-- @type table
function p.list(title)
local content = mw.title.new(title):getContent()
local list = {}
for token in string.gmatch(content, "{{/(.-)}}") do
if token ~= "Quy trình" and token ~= "Gợi ý" then
table.insert(list, token)
end
end
if #list > 10 then
local tempList = {}
local listShuffled = FYShuffle(list)
for i = 1, 10, 1 do
table.insert(tempList, listShuffled[i])
end
list = tempList
end
return list
end
-- @type string
function p.num(frame)
local title = titles[frame.args[1]]
return p._num(title)
end
-- @type string
function p._num(title)
return #p.list(title)
end
-- @type string
function p.str(frame)
local title = titles[frame.args[1]]
local sep = " • "
return p._str(title, sep)
end
-- @type string
function p._str(title, sep)
local str = {}
for _, candidate in ipairs(p.list(title)) do
table.insert(str, anchor(title, candidate))
end
return table.concat(str, sep)
end
-- @type string
function p.group(frame)
local pages = frame.args
local sep = " • "
return p._group(pages, sep)
end
-- @type string
function p._group(pages, sep)
local group = {}
for _, page in ipairs(pages) do
local title = titles[page]
local alt = alts[page]
local list = p.list(title)
if (#list ~= 0) then
table.insert(group, prefix(title, alt) .. p._str(title, sep))
end
end
return table.concat(group, sep)
end
-- @type string
function anchor(title, candidate)
return "[[" .. title .. "/" .. candidate .. "|" .. candidate .. "]]"
end
-- @type string
function prefix(title, alt)
return "'''[[" .. title .. "|" .. alt .. "]]''': "
end
-- Source: https://stackoverflow.com/questions/35572435/how-do-you-do-the-fisher-yates-shuffle-in-lua
function FYShuffle(tInput)
math.randomseed(os.time())
local tReturn = {}
for i = #tInput, 1, -1 do
local j = math.random(i)
tInput[i], tInput[j] = tInput[j], tInput[i]
table.insert(tReturn, tInput[i])
end
return tReturn
end
return p