ߘߕߊߓߐߞߛ: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