更多操作
小 (修正错误 & 添加注释 & 整理代码) |
小 (导入28个版本) |
||
(未显示同一用户的13个中间版本) | |||
第11行: | 第11行: | ||
end |
end |
||
-- 构建一个数据项 |
|||
function p.makeDataItem(label, data, bgcolor |
function p.makeDataItem(frame, args) -- args: label, data, bgcolor |
||
return frame:expandTemplate{ title = 'Infobox/item/data', args = |
return frame:expandTemplate{ title = 'Infobox/item/data', args = args } |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||
第24行: | 第20行: | ||
local frame = mw.getCurrentFrame() |
local frame = mw.getCurrentFrame() |
||
local parent = frame:getParent() |
local parent = frame:getParent() |
||
local itemsPerRow = |
local itemsPerRow = string.gsub(parent.args['row-items'] or '', '%s+', '') |
||
if itemsPerRow == |
if itemsPerRow == 'flex' then |
||
itemsPerRow = 0 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
error('"row-items" should be either a positive integer or "flex" or empty (= "flex")') |
|||
⚫ | |||
end |
end |
||
-- 将非空的未命名参数的编号存入 unnamed 表中 |
-- 将非空的未命名参数 (数据项) 的编号存入 unnamed 表中 |
||
local count = 0 |
local count = 0 |
||
local unnamed = {} |
local unnamed = {} |
||
for k, v in pairs(parent.args) do |
for k, v in pairs(parent.args) do |
||
if tonumber(k) ~= nil and v ~= nil and v ~= '' then |
if tonumber(k) ~= nil and v ~= nil and string.gsub(v, '%s+', '') ~= '' then |
||
unnamed[#unnamed + 1] = k |
|||
⚫ | |||
end |
end |
||
end |
end |
||
if #unnamed == 0 then return '' end |
|||
local result = '' |
local result = '' |
||
⚫ | |||
-- 构建项数满足 'row-items' 数量的那几行 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
for i = 1, #unnamed do |
|||
⚫ | |||
while (true) do |
|||
⚫ | |||
-- if i > majorPart then break end |
|||
data = parent.args[unnamed[i]], |
|||
bgcolor = p.getBackgroundColor(i, 65535), |
|||
}) |
|||
⚫ | |||
⚫ | |||
else |
|||
if i ~= 1 then |
|||
⚫ | |||
⚫ | |||
percentage = tostring(percentage) .. '%' |
|||
for i = 1, #unnamed do |
|||
⚫ | |||
label = parent.args['label' .. unnamed[i]], |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||
⚫ | |||
parent.args[unnamed[i]], p.getBackgroundColor(i, itemsPerRow)) |
|||
⚫ | |||
end |
end |
||
⚫ | |||
-- local remain = count - majorPart |
|||
⚫ | |||
-- widthPercent = string.format('%.2f', 100/(remain)) .. '%' |
|||
⚫ | |||
-- while (true) do |
|||
-- if i > count then break end |
|||
⚫ | |||
⚫ | |||
-- i = i + 1 |
|||
⚫ | |||
-- result = result .. '</div>' |
|||
⚫ | |||
return result |
return result |
2022年9月21日 (三) 23:44的最新版本
此模块的文档可以在模块:Infobox/item/multidata/doc创建
local p = {}
-- 获取每一格的背景颜色, 规则为:
-- 在奇数行: 深、浅交错; 在偶数行: 浅、深交错
function p.getBackgroundColor(i, perRow)
local isEvenColumn = ((math.floor((i-1)/perRow)%2)==0)
local delta = 0
if not isEvenColumn then delta = 1 end
if (((i-1)%perRow)+delta) % 2 == 1 then return nil end
return '#e5ded6'
end
-- 构建一个数据项
function p.makeDataItem(frame, args) -- args: label, data, bgcolor
return frame:expandTemplate{ title = 'Infobox/item/data', args = args }
end
-- 构建信息框中多行多列的数据项
function p.make()
local frame = mw.getCurrentFrame()
local parent = frame:getParent()
local itemsPerRow = string.gsub(parent.args['row-items'] or '', '%s+', '')
if itemsPerRow == 'flex' then
itemsPerRow = 0
else
itemsPerRow = tonumber(itemsPerRow)
if itemsPerRow == nil or itemsPerRow <= 0 then
error('"row-items" should be either a positive integer or "flex" or empty (= "flex")')
end
end
-- 将非空的未命名参数 (数据项) 的编号存入 unnamed 表中
local count = 0
local unnamed = {}
for k, v in pairs(parent.args) do
if tonumber(k) ~= nil and v ~= nil and string.gsub(v, '%s+', '') ~= '' then
unnamed[#unnamed + 1] = k
end
end
if #unnamed == 0 then return '' end
local result = ''
result = result .. '<div class="pi-item-wrap">'
if itemsPerRow == 0 then
-- flex
for i = 1, #unnamed do
result = result .. p.makeDataItem(frame, {
label = parent.args['label' .. unnamed[i]],
data = parent.args[unnamed[i]],
bgcolor = p.getBackgroundColor(i, 65535),
})
end
else
local percentage = math.floor(10000 / itemsPerRow) / 100
percentage = tostring(percentage) .. '%'
for i = 1, #unnamed do
result = result .. p.makeDataItem(frame, {
label = parent.args['label' .. unnamed[i]],
data = parent.args[unnamed[i]],
bgcolor = p.getBackgroundColor(i, 65535),
width = percentage,
})
end
end
result = result .. '</div>'
return result
end
return p