ߘߕߊߓߐߞߛ:Databox
ߟߊ߲ߞߣߍߡߊߟߌ
local property_blacklist = {
'P360', --is a list of 'P4224', --category contains 'P935', -- Commons gallery 'P1472', -- Commons Creator page 'P1612', -- Commons Institution page 'P373', -- Commons category 'P3722', -- Commons maps category 'P1151', -- topic's main Wikimedia portal 'P1424', -- topic's main template 'P910', -- topic's main category 'P1200', -- bodies of water basin category 'P1792', -- category of associated people 'P1464', -- category for people born here 'P1465', -- category for people who died here 'P1791', -- category of people buried here 'P1740', -- category for films shot at this location 'P2033', -- Category for pictures taken with camera 'P2517', -- category for recipients of this award 'P4195', -- category for employees of the organization 'P1754', -- category related to list 'P301', -- category's main topic 'P971', -- category combines topics 'P3876', -- category for alumni of educational institution 'P1753', -- list related to category 'P3921', -- Wikidata SPARQL query equivalent 'P1204', -- Wikimedia portal's main topic 'P1423', -- template's main topic 'P1709', -- equivalent class 'P3950', -- narrower external class 'P2888', -- exact match 'P1382', -- coincident with 'P527', -- has part 'P2670', -- has parts of the class 'P3113', -- does not have part 'P2737', -- union of 'P2738', -- disjoint union of 'P2445', -- metasubclass of 'P1963', -- properties for this type 'P3176', -- uses property 'P1889', -- different from 'P460', -- said to be the same as 'P2959', -- permanent duplicated item 'P2860', -- cites 'P5125', -- wikimedia outline 'P5008', -- on focus list of Wikimedia project 'P2559', -- Wikidata usage instructions 'P1343', -- described by source 'P972', -- catalogu 'P1282', -- OSM tag or key 'P4839', -- Wolfram Language entity code 'P6104', -- Maintained by Wikiproject 'P5996' -- Category for films in this language
}
function valuesToKeys(array) local result = {} for _, v in pairs(array) do result[v] = true end return result end
local p = {}
function p.databox(frame)
local args = frame:getParent().args
local itemId = nil
if args.item then
itemId = args.item
end
local lang = mw.language.getContentLanguage()
local item = mw.wikibase.getEntity(itemId)
if item == nil then
mw.addWarning("Wikidata item not found")
return ""
end
local databoxRoot = mw.html.create('div')
:addClass('infobox')
:css({
float = 'right',
border = '1px solid #aaa',
['max-width'] = '300px',
padding = '0 0.4em',
margin = '0 0 0.4em 0.4em',
})
--Title
databoxRoot:tag('div')
:css({
['text-align'] = 'center',
['background-color'] = '#f5f5f5',
padding = '0.5em 0',
margin = '0.5em 0',
['font-size'] = '120%',
['font-weight'] = 'bold',
})
:wikitext(item:getLabel() or mw.title.getCurrentTitle().text)
--Image
local images = item:getBestStatements('P18')
if #images == 1 then
databoxRoot
:tag('div')
:wikitext('[[File:' .. images[1].mainsnak.datavalue.value .. '|frameless|300px]]')
end
--Table
local dataTable = databoxRoot
:tag('table')
:css({
['text-align'] = 'left',
['font-size'] = '90%',
['word-break'] = 'break-word',
['width'] = '100%',
['table-layout'] = 'fixed',
})
dataTable:tag('caption')
:css({
['background-color'] = '#f5f5f5',
['font-weight'] = 'bold',
['margin-top'] = '0.2em',
})
:wikitext(item:formatStatements('P31').value)
local properties = mw.wikibase.orderProperties(item:getProperties())
local property_blacklist_hash = valuesToKeys(property_blacklist)
property_blacklist_hash['P31'] = true --Special property
local edit_message = mw.message.new('vector-view-edit'):plain()
for _, property in pairs(properties) do
local datatype = item.claims[property][1].mainsnak.datatype
if datatype ~= 'commonsMedia' and datatype ~= 'external-id' and datatype ~= 'quantity' and not property_blacklist_hash[property] and #item:getBestStatements(property) <= 5 then
local propertyValue = item:formatStatements(property)
dataTable:tag('tr')
:tag('th')
:attr('scope', 'row')
:wikitext(lang:ucfirst(propertyValue.label)):done()
:tag('td')
:wikitext(frame:preprocess(propertyValue.value))
:wikitext('
')
end
end
--Map
local coordinates_statements = item:getBestStatements('P625')
if #coordinates_statements == 1 and coordinates_statements[1].mainsnak.datavalue and coordinates_statements[1].mainsnak.datavalue.value.globe == 'https://www.wikidata.org/wiki/Q2' then
--We build the call to mapframe
local latitude = coordinates_statements[1].mainsnak.datavalue.value.latitude
local longitude = coordinates_statements[1].mainsnak.datavalue.value.longitude
local geojson = {
type = 'Feature',
geometry = {
type = 'Point',
coordinates = { longitude, latitude }
},
properties = {
title = item:getLabel() or mw.title.getCurrentTitle().text,
['marker-symbol'] = 'marker',
['marker-color'] = '#224422',
}
}
databoxRoot:wikitext(frame:extensionTag('mapframe', mw.text.jsonEncode(geojson), {
height = 300,
width = 300,
frameless = 'frameless',
align = 'center',
latitude = latitude,
longitude = longitude,
zoom = zoom
}))
end
return tostring(databoxRoot)
end
return p