模块:Infobox/item/multidata:修订间差异

来自Cookie☆Wiki
无编辑摘要
(修正 multidata 无法折叠)
第44行: 第44行:
local result = ''
local result = ''


result = result .. '<div class="pi-item-wrap">'
if true then

result = result .. '<div style="display: flex; flex-wrap: wrap; align-items: baseline">'
local i = 1
while true do
if i > count then break end
result = result .. p.makeDataItem(frame, parent.args['label' .. unnamed[i]],
parent.args[unnamed[i]], p.getBackgroundColor(i, 65535))
i = i + 1
end
result = result .. '</div>'

return result
end

-- 把所有数据项拼起来
-- local widthPercent = string.format('%.2f', 100/itemsPerRow) .. '%'
local majorPart = math.floor(count / itemsPerRow) * itemsPerRow
local i = 1
local i = 1
while (true) do
while true do
-- if i > majorPart then break end
if i > count then break end
if i > count then
result = result .. '</div>'
break
elseif i % itemsPerRow == 1 then
if i ~= 1 then
result = result .. '</div>'
end
result = result .. '<div style="display: flex">'
end
result = result .. p.makeDataItem(frame, parent.args['label' .. unnamed[i]],
result = result .. p.makeDataItem(frame, parent.args['label' .. unnamed[i]],
parent.args[unnamed[i]], p.getBackgroundColor(i, itemsPerRow))
parent.args[unnamed[i]], p.getBackgroundColor(i, 65535))
i = i + 1
i = i + 1
end
end
result = result .. '</div>'


return result
return result

2019年4月15日 (一) 02:46的版本

可在模块: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, label, data, bgcolor)
    return frame:expandTemplate{ title = 'Infobox/item/data', args = {
        label = label,
        data = data,
        -- width = widthPercent,
        bgcolor = bgcolor
    } }
end

-- 构建信息框中多行多列的数据项
function p.make()
    local frame = mw.getCurrentFrame()
    local parent = frame:getParent()
    local itemsPerRow = tonumber(parent.args['row-items'])
    if itemsPerRow == nil then
        error('"row-items" is not a number')
    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
            table.insert(unnamed, k)
            count = count + 1
        end
    end

    if count == 0 then return '' end

    local result = ''

    result = result .. '<div class="pi-item-wrap">'
    local i = 1
    while true do
        if i > count then break end
        result = result .. p.makeDataItem(frame, parent.args['label' .. unnamed[i]], 
        parent.args[unnamed[i]], p.getBackgroundColor(i, 65535))
        i = i + 1
    end
    result = result .. '</div>'

    return result
end

return p