وحدة:Icon/table
المظهر
تقوم هذه الوحدة بإنشاء قالب حالة اختبار باستخدام البيانات المجمعة من وحدة:Icon/data ووحدة:Icon/data/ملعب. الغرض منه هو أن يتم عرضه في قالب:Icon/testcases وصفحات التوثيق ذات الصلة.
الاستخدام
[عدل]{{#invoke:icon/table|main}}
ينتج
[عدل]
-- Create a table of icons to display on the template test case page
require('strict')
local p = {}
local m_iconData = mw.loadData("Module:Icon/data")
local m_iconSandboxData = mw.loadData("Module:Icon/data")
local function mergeTables(...)
local ret = {}
for _, t in ipairs{...} do
for k, v in pairs(t) do
ret[k] = v
end
end
return ret
end
local function reconstituteAliases(iconDataCollection)
local ret = {}
for code, iconData in pairs(iconDataCollection) do
local outputData = ret[iconData.canonicalCode] or {
aliases = {},
image = iconData.image,
tooltip = iconData.tooltip,
link = iconData.link,
}
if code ~= iconData.canonicalCode then
table.insert(outputData.aliases, code)
end
ret[iconData.canonicalCode] = outputData
end
return ret
end
local function makeTableData(iconDataCollection)
local ret = {}
for code, iconData in pairs(reconstituteAliases(iconDataCollection)) do
if code ~= '_DEFAULT' then
table.insert(ret, {code = code, description = iconData.tooltip, aliases = iconData.aliases})
end
end
table.sort(
ret,
function(t1, t2)
return t1.code < t2.code
end
)
for _, t in ipairs(ret) do
table.sort(t.aliases)
end
return ret
end
function p.testcases(frame)
local tableData = makeTableData(mergeTables(m_iconData, m_iconSandboxData))
local ret = {
'{| class="wikitable sortable"',
'! Code',
'! [[قالب:أيقونة|قالب]]',
'! [[قالب:أيقونة/ملعب|ملعب]]',
'! Description',
}
local function addRow(code, description)
table.insert(ret, '|-')
table.insert(ret, '| <code>' .. mw.text.nowiki('{{أيقونة|' .. code .. '}}') .. '</code>')
table.insert(ret, '| style="text-align: center" | ' .. frame:expandTemplate{title = 'أيقونة', args = {code}})
table.insert(ret, '| style="text-align: center" | ' .. frame:expandTemplate{title = 'أيقونة/ملعب', args = {code}})
table.insert(ret, '| ' .. description)
end
for _, rowData in ipairs(tableData) do
addRow(rowData.code, rowData.description)
for _, alias in ipairs(rowData.aliases) do
addRow(alias, rowData.description)
end
end
table.insert(ret, '|}')
return table.concat(ret, '\n')
end
function p.main(frame)
local tableData = makeTableData(m_iconData)
local ret = {
'{| class="wikitable sortable"',
'! أيقونة',
'! وصف',
'! كود',
'! رمز بديل'
}
for _, rowData in ipairs(tableData) do
table.insert(ret, '|-')
table.insert(ret, '| style="text-align: center" | ' .. frame:expandTemplate{title = 'أيقونة', args = {rowData.code}})
table.insert(ret, '| ' .. rowData.description)
table.insert(ret, '| <code>' .. mw.text.nowiki('{{أيقونة|' .. rowData.code .. '}}') .. '</code>')
local aliasText = {}
for _, alias in ipairs(rowData.aliases) do
table.insert(aliasText, '<code>' .. alias .. '</code>')
end
table.insert(ret, '| ' .. table.concat(aliasText, ', '))
end
table.insert(ret, '|}')
return table.concat(ret, '\n')
end
return p