Jump to content

Module:Dimensions

Ón Vicipéid, an chiclipéid shaor.

Documentation for this module may be created atModule:Dimensions/doc

-- version 20200311 from master @cawiki

localp={}

localclaim=require('Module:Wikidades').claim

functionp.main(frame)
localargs=frame.argsorframe-- via invoke or require
localpargs=frame.argsandframe:getParent().argsor{}
localid=args.itemorpargs.item
ifid==nilorid==''then
id=mw.wikibase.getEntityIdForCurrentPage()
end
localunit=args.unitorpargs.unit;ifunit==""thenunit=nilend
localblacklist={}
forqidinmw.text.gsplit(args.blacklistor"","/",true)do
blacklist[qid]=true
end
locallang=args.langorpargs.lang

-- Fetch all data and fill a table
localdata={}
locallabels={}

localfunctionfillData(prop,dimension)
localfetch=claim{
item=id,lang=lang,editicon='false',
formatting='table',separator='<and>',
property=prop,colformat0='unitcode',convert0=unit,
qualifier='P518 OR P1013',colformat1='raw',
qualifier2='P518 OR P1013',colformat2='label',
rowformat='$0$1',rowsubformat1='($1=$2)'
}
iffetchthen
forpinmw.text.gsplit(prop,' OR ',true)do
if#mw.wikibase.getAllStatements(id,p)>0then
labels[dimension]=mw.wikibase.getLabel(p)orid
break
end
end
fordiminmw.text.gsplit(fetch,'<and>',true)do
ifstring.match(dim,'[%a]+')then-- units constraint
data[#data+1]={}
data[#data].dimension=dimension
localgroup=mw.ustring.match(dim,'%b()')
ifgroupthen
group_parts=mw.text.split(mw.ustring.sub(group,2,-2),'=',true)
data[#data].group=group_parts[2]
ifblacklist[group_parts[1]]then
blacklist[group_parts[2]]=true
end
end
data[#data].amount=string.match(dim,'[^%a]+')
data[#data].unit=string.match(dim,'[%a]+')
end
end
end
end

-- diameter
fillData('P2386','diameter')
-- height and alike
fillData('P2048','height')
fillData('P2262','draft')
fillData('P2793','clearance')
-- width or beam
fillData('P2049 OR P2261','width')
-- length or depth and alike
fillData('P2043 OR P5524','length')
fillData('P2787','span')
fillData('P2610','thickness')

-- group by qualifier
localdimensions={}
localglobal_unit
fori,vinipairs(data)do
localindex=v.groupor1
ifblacklist[index]==nilthen
ifdimensions[index]==nilthen
dimensions[index]={}
end
table.insert(dimensions[index],{["dimension"]=v.dimension,["amount"]=v.amount,["unit"]=v.unit})
-- global unit
ifi==1then
global_unit=v.unit
elseifglobal_unitandglobal_unit~=v.unitthen
global_unit=nil
end
end
end

-- format output
localicons={
["diameter"]="[[File:Durchschnittszeichen.png|10px|link=|",
["height"]="[[File:Chess uat45.svg|15px|link=|",
["draft"]="[[File:Breezeicons-actions-22-draw-halfcircle4.svg|15px|link=|",
["clearance"]="[[File:Breezeicons-actions-22-format-align-vertical-top.svg|15px|link=|",
["width"]="[[File:Chess lrt45.svg|15px|link=|",
["length"]="[[File:Chess urt45.svg|15px|link=|",
["span"]="[[File:Breezeicons-actions-22-draw-halfcircle3.svg|15px|link=|",
["thickness"]="[[File:Breezeicons-actions-22-format-align-vertical-center.svg|15px|link=|",
}
localdim_sort={["diameter"]=1,["height"]=2,["draft"]=3,["clearance"]=4,["width"]=5,["length"]=6,["span"]=7,["thickness"]=8}
localout={}
forq,tinpairs(dimensions)do
iftype(q)=="string"then
table.insert(out,q..":")
end
table.sort(t,function(a,b)returndim_sort[a.dimension]<dim_sort[b.dimension]end)
fori,vinipairs(t)do
localsuffix="("..icons[v.dimension]..labels[v.dimension].."]])"
ifi==#tornotglobal_unitthen
suffix=suffix..""..v.unit
end
ifi<#tthen
suffix=suffix.."×"
end
table.insert(out,'<span style= "white-space:nowrap;" >'..v.amount..suffix..'</span>')
end
table.insert(out,"<br />")
end

returntable.concat(out,"")
end

returnp