local p={}
function p.getTab(frame)
local s=""
local object=frame.args.object
if object then
if string.sub(object,-4)~=".tab"then
object=object..".tab"
end
local lang=frame.args.lang
local t=lang and mw.ext.data.get(object,lang)or mw.ext.data.get(object)
if t and type(t)==type({})then
local info=string.lower(frame.args.info or"")
local fields=string.lower(frame.args.fields or"")
if info~="" then
if info=="license"then
s=t.license and t.license[fields] or""
elseif info=="description"then
s=t.description or""
elseif info=="sources"then
s=t.sources or""
end
elseif fields~="" and t.schema and t.schema.fields then
if fields=="type"then
s="{| class=\"wikitable\"\n|-\n"
for i,v in ipairs(t.schema.fields)do
s=s.."! "..v.type.."\n"
end
s=s.."|}"
elseif({["name"]=t,["title"]=t})[fields]then
local index=tonumber(frame.args.index)
local tName=mw.text.split(
frame.args.fieldnames or""," ",true
)
local tField={}
for i,s in ipairs(tName)do
for i,t in ipairs(t.schema.fields)do
if t.name==s then
tField[#tField+1]=i
break
end
end
end
if #tField<1 then
for i,t in ipairs(t.schema.fields)do
tField[i]=i
end
end
s="{| class=\"wikitable\"\n|-\n"
for i,v in ipairs(tField)do
s=s.."! "..t.schema.fields[v][fields].."\n"
end
if t.data then
for i,v in ipairs(t.data)do
if(not index)or index==i then
s=s.."|-\n"
for i,n in ipairs(tField)do
s=s.."| "..v[n].."\n"
end
end
end
end
s=s.."|}"
end
end
end
end
return s
end
function p.testData(frame)
local s=""
local object=frame.args.object
local lang=frame.args.lang
local t=object and(lang and mw.ext.data.get(object,lang)or mw.ext.data.get(object))
for i,v in ipairs(frame.args)do
if type(t)~=type({})then
break
end
t=t[v]or t[tonumber(v)]
end
if type(t)==type({})then
for i,v in pairs(t)do
s=s.."* "..tostring(i)..": "..tostring(v).."\n"
end
elseif type(t)==type("")then
s=string.format("%q",t)
else
s=tostring(t)
end
return s
end
function p.testMwExt(frame)
local s=""
local t=mw.ext
for i,v in ipairs(frame.args)do
if type(t)~=type({})then
break
end
t=t[v]or t[tonumber(v)]
end
if type(t)==type({})then
for i,v in pairs(t)do
s=s.."* "..tostring(i)..": "..tostring(v).."\n"
end
elseif type(t)==type("")then
s=string.format("%q",t)
else
s=tostring(t)
end
return s
end
return p