Mòdul:Dimensions
Documentació del mòdul [ mostra ] [ modifica el codi ] [ mostra l'historial ] [ refresca ]
A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
Mòdul de suport de la plantilla:Bloc dimensions per a obtenir les dades de dimensions d'un element de Wikidata. Té una única funció main que es pot usar directament ({{#invoke:Dimensions|main}}
) o des d'un altre mòdul (require("Mòdul:Dimensions).main
).
Opcions:
item
: un element de Wikidata Qxxx, per defecte serà l'element connectat a la pàgina actual. Es pot usar també com a paràmetre superior a nivell de plantilla.unit
: identificador Qid de la unitat a usar. Si és diferent a l'usat a Wikidata farà la conversió d'unitats. Alternativament,unit=default
(vegeu la documentació del paràmetre convert a Mòdul:Wikidades/ús#Paràmetres de formatació. Per defecte usarà les dades de Wikidata sense cap conversió.blacklist
: llista d'elements dels qualificadors a filtrar, separats per una barra inclinada (/).lang
: codi de llengua, per defecte la llengua local del wiki. Es pot usar també com a paràmetre superior a nivell de plantilla.
Dimensions tractades:
Agrupa diferents dimensions segons el qualificador usat en la propietat: S'aplica a (P518) o Criteri utilitzat (P1013)
Exemples:
- Basílica de Sant Pere del Vaticà (Q12512)
- 136,6 () × 150 () × 220 () m
- 136,6 () × 150 () × 220 () m
- Amb qualificadors: The girl and the calf (Q44952465)
- pedestal: 1,27 () × 1,2 () × 1,94 () m
obra escultòrica: 1 () × 0,85 () × 1,6 () m
- pedestal: 1,27 () × 1,2 () × 1,94 () m
- Moneda d'1 euro (Q684722)
- 23,25 () × 2,33 () mm
- 23,25 () × 2,33 () mm
- Pont dels màrtirs del 15 de juliol (Q4484)
- 169 () m × 541 () ft × 33,5 () m × 110 () ft × 1.560 () m × 5.118 () ft × 1.074 () m
- Amb unit=Q11573 (Metre (Q11573):
- 169 () × 164,9 () × 33,5 () × 34 () × 1.560 () × 1.560 () × 1.074 () m
- Amb unit=default:
- 169 () m × 16.490 () cm × 33,5 () m × 3.400 () cm × 1.560 () m × 156.000 () cm × 1.074 () m
- 169 () m × 541 () ft × 33,5 () m × 110 () ft × 1.560 () m × 5.118 () ft × 1.074 () m
Dependències:
-- version 20210322 from master @cawiki
local p = {}
local claim = require('Module:Wikidades').claim
function p.main(frame)
local args = frame.args or frame -- via invoke or require
local pargs = frame.args and frame:getParent().args or {}
local id = args.item or pargs.item
if id == nil or id == '' then
id = mw.wikibase.getEntityIdForCurrentPage()
end
local unit = args.unit or pargs.unit; if unit == "" then unit = nil end
local blacklist = {}
for qid in mw.text.gsplit(args.blacklist or "", "/", true) do
blacklist[qid] = true
end
local lang = args.lang or pargs.lang
-- Fetch all data and fill a table
local data = {}
local labels = {}
local function fillData(prop, dimension)
local fetch = 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)'
}
if fetch then
for p in mw.text.gsplit(prop, ' OR ', true) do
if #mw.wikibase.getAllStatements(id, p) > 0 then
labels[dimension] = mw.wikibase.getLabel(p) or id
break
end
end
for dim in mw.text.gsplit(fetch, '<and>', true) do
if mw.ustring.match(dim, '[%a]+') then -- units constraint
data[#data + 1] = {}
data[#data].dimension = dimension
local group = mw.ustring.match(dim, '%b()')
if group then
group_parts = mw.text.split(mw.ustring.sub(group, 2, -2), '=', true)
data[#data].group = group_parts[2]
if blacklist[group_parts[1]] then
blacklist[group_parts[2]] = true
end
end
data[#data].amount = mw.ustring.match(dim, '[^%a]+')
data[#data].unit = mw.ustring.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
local dimensions = {}
local global_unit
for i, v in ipairs(data) do
local index = v.group or 1
if blacklist[index] == nil then
if dimensions[index] == nil then
dimensions[index] = {}
end
table.insert(dimensions[index], {["dimension"]=v.dimension, ["amount"]=v.amount, ["unit"]=v.unit})
-- global unit
if i == 1 then
global_unit = v.unit
elseif global_unit and global_unit ~= v.unit then
global_unit = nil
end
end
end
-- format output
local icons = {
["diameter"] = "[[File:Durchschnittszeichen.png|10px|link=|class=skin-invert|",
["height"] = "[[File:Chess uat45.svg|15px|link=|class=skin-invert|",
["draft"] = "[[File:Breezeicons-actions-22-draw-halfcircle4.svg|15px|link=|class=skin-invert|",
["clearance"] = "[[File:Breezeicons-actions-22-format-align-vertical-top.svg|15px|link=|class=skin-invert|",
["width"] = "[[File:Chess lrt45.svg|15px|link=|class=skin-invert|",
["length"] = "[[File:Chess urt45.svg|15px|link=|class=skin-invert|",
["span"] = "[[File:Breezeicons-actions-22-draw-halfcircle3.svg|15px|link=|class=skin-invert|",
["thickness"] = "[[File:Breezeicons-actions-22-format-align-vertical-center.svg|15px|link=|class=skin-invert|",
}
local dim_sort = {["diameter"]=1, ["height"]=2, ["draft"]=3, ["clearance"]=4, ["width"]=5, ["length"]=6, ["span"]=7, ["thickness"]=8}
local out = {}
for q, t in pairs(dimensions) do
if type(q) == "string" then
table.insert(out, q .. ":")
end
table.sort(t, function(a, b) return dim_sort[a.dimension] < dim_sort[b.dimension] end)
for i, v in ipairs(t) do
local suffix = " (" .. icons[v.dimension] .. labels[v.dimension] .. "]])"
if i == #t or not global_unit then
suffix = suffix .. " " .. v.unit
end
if i < #t then
suffix = suffix .. " ×"
end
table.insert(out, '<span style="white-space:nowrap;">' .. v.amount .. suffix .. '</span>')
end
table.insert(out, "<br />")
end
return table.concat(out, " ")
end
return p