Module:Sandbox/Marsupium/Object

.mw-parser-output .documentation,.mw-parser-output .documentation-metadata{border:1px solid var(--border-color-base,#a2a9b1);background-color:#ecfcf4;color:inhe…

Module:Sandbox/Marsupium/Object
local p = {}

local wd = require('Module:Wd')
local wikidata = require('Module:Wikidata')
-- local wikidataIB = require('Module:WikidataIB')
local coordinates = require('Module:Coordinates')
-- local mapframe = require('Module:Mapframe')

local function findLabel(qid)
	local langs = {'en', 'de', 'mul', 'fr'}
	local label
	local i = 0
	while not label and i <= #langs do
		i = i + 1
		label = mw.wikibase.getLabelByLang(qid, langs[i])
	end
	return label
end

function p.object(frame)
	local args = frame:getParent().args
	local qid = mw.text.trim(frame.args[1]) or 'Q4115189'
	
	-- name
	local sitelink = mw.wikibase.getSitelink(qid)
	local label = findLabel(qid) or qid
	local linkedLabel = sitelink and ('[[' .. sitelink .. '|' .. label .. ']]') or label
	local nativeLabel = wd._properties( {'multilanguage', qid, 'P1705'} )
	nativeLabel = (nativeLabel and nativeLabel ~= '' and mw.ustring.format('/<small>%s</small>', nativeLabel)) or ''
	local name = linkedLabel .. nativeLabel .. ' [[File:Wikidata-logo.svg|12px|Wikidata|link=//www.wikidata.org/wiki/'
	.. qid .. ']][[File:Wikidata-Reasonator_small_logo.svg|12px|Reasonator|link=//tools.wmflabs.org/reasonator/test/?q='
	.. qid .. ']]'
	
	-- time
	local demolished = false
	local timesList = {}
	local demolitionDate = wd._properties({qid, 'P576'})
	demolitionDate = demolitionDate ~= '' and ('demolished: ' .. demolitionDate) or nil
	local inception = wikidata.claim({args={'P571', id=qid}})
	timesList[#timesList+1] = inception
	local startTime = wikidata.claim({args={'P580', id=qid}})
	local endTime = wikidata.claim({args={'P582', id=qid}})
	local timespan = (startTime or endTime) and ((startTime or '') .. '-' .. (endTime or ''))
	timesList[#timesList+1] = timespan
	-- significant event
	local significantEvent = wd._properties( {'qualifiers', 'qualifiers', 'qualifiers', qid, 'P793', 'P580', 'P582', 'P585'} )
	timesList[#timesList+1] = (significantEvent and significantEvent ~= '' and significantEvent) or nil
	local conservationStatus = wd._properties({'raw', qid, 'P5816'})
	local architecturalStyle = wikidata.claim({args={'P149', id=qid, list=', ', parameter='link'}})
	timesList[#timesList+1] = (architecturalStyle and mw.ustring.format('<small>%s</small>', architecturalStyle)) 
	if demolitionDate or (conservationStatus == 'Q56556915') then
		demolished = true
		timesList[#timesList+1] = demolitionDate
		timesList[#timesList+1] = 'demolished or destroyed'
	end
	local timesAndStyles = table.concat(timesList, '; ')
	
	-- creators
	local creatorList = {}
	-- architect
	creatorList[#creatorList+1] = wikidata.claim({args={'P84', id=qid, list=', ', parameter='link'}}) or nil
	-- architect sortkey
	local architectSort = ''
	local bestArchStmts = mw.wikibase.getBestStatements(qid, 'P84')
	if bestArchStmts[1] and bestArchStmts[1].mainsnak.datavalue then
		-- no "datavalue" for unknown value
		local bestArchID = bestArchStmts[1].mainsnak.datavalue.value.id
		local bestFamilyNameStmts = mw.wikibase.getBestStatements(bestArchID, 'P734')
		if bestFamilyNameStmts[1] and bestFamilyNameStmts[1].mainsnak.datavalue then
			local bestFamilyNameID = bestFamilyNameStmts[1].mainsnak.datavalue.value.id
			local i = 0
			while not label and i <= #langs do
				i = i + 1
				label = mw.wikibase.getLabelByLang(qid, langs[i])
			end

			local architectSortValue = findLabel(bestFamilyNameID)
			architectSort = architectSortValue and mw.ustring.format('data-sort-value="%s"|', architectSortValue) or ''
		end
	end
	creatorList[#creatorList+1] = wikidata.claim({args={'P170', id=qid, list=', ', parameter='link'}}) or nil
	local creators = table.concat(creatorList, '; ')
	
	-- image
	local image = wikidata.claim({args={'P18', id=qid}})
	local img = image and mw.ustring.format('[[File:%s|50x50px]]', image) or ''
	local catName = wikidata.claim({args={'P373', id=qid}})
	local cat = catName and mw.ustring.format('[[File:Commons-logo.svg|x16px|alt=|link=//commons.wikimedia.org/wiki/Category:%s|Commons]]', mw.uri.encode(catName, 'WIKI')) or ''
	local img = img .. cat
	
	-- location
	local coordStatements = mw.wikibase.getBestStatements(qid, 'P625')
	local coordError = false
	if not coordStatements or #coordStatements == 0 then
		coordError = true
	end
	local hasNoValue = not coordError and (coordStatements[1].mainsnak and (coordStatements[1].mainsnak.snaktype == 'novalue' or coordStatements[1].mainsnak.snaktype == 'somevalue') )
	if hasNoValue then
		coordError = true
	end
	local map
	local wdCoords = not coordError and coordStatements[1]['mainsnak']['datavalue']['value']
	if wdCoords then
		local lat, long = tonumber(wdCoords['latitude']), tonumber(wdCoords['longitude'])
		local description = image and mw.ustring.format('[[File:%s|100x100px]]', image) or '' -- TODO: implement maybe more
		local maplinkTemplate = [=[<maplink text="map" zoom=15 >
	[
	{
	  "type": "Feature",
	  "geometry": { "type": "Point", "coordinates": [%s, %s] },
	  "properties": {
	    "title": "%s",
		"description": "%s",
	    "marker-symbol": "-number"
	  }
	},
	{
		"type": "ExternalData",
		"service": "geoshape",
		"ids": "%s",
	},
	]</maplink>]=]
		local mf = mw.ustring.format(maplinkTemplate, long, lat, linkedLabel, description, qid)
		map = frame:preprocess(mf)
	end
--	local coordTemplate = coordinates._coord({qid=qid, name=label})
--	coordTemplate = (not coordError and coordTemplate and mw.ustring.format('<small>%s</small>', coordTemplate)) or nil
	
	local coordArgs = {}
	local math_mod = require("Module:Math")
	local entity = mw.wikibase.getEntityObject(qid)
	if entity
		and entity.claims
		and entity.claims.P625
		and entity.claims.P625[1].mainsnak.snaktype == 'value'
	then
		local precision = entity.claims.P625[1].mainsnak.datavalue.value.precision
		coordArgs[1] = entity.claims.P625[1].mainsnak.datavalue.value.latitude
		coordArgs[2] = entity.claims.P625[1].mainsnak.datavalue.value.longitude
		if precision then
			precision = -math_mod._round(math.log(precision)/math.log(10),0)
			coordArgs[1] = math_mod._round(coordArgs[1],precision)
			coordArgs[2] = math_mod._round(coordArgs[2],precision)
		end
	end
	local coordTemplate2 = not coordError and mw.ustring.format('{{coord|%s|%s|type:landmark|name=%s}}', coordArgs[1], coordArgs[2], label)
	coordTemplate2 = coordTemplate2 and frame:preprocess(coordTemplate2)
	coordTemplate2 = (coordTemplate2 and mw.ustring.format('<small>%s</small>', coordTemplate2)) or nil
	
	local locList = {}
	locList[#locList+1] = map
--	locList[#locList+1] = coordTemplate
	locList[#locList+1] = coordTemplate2
	locList[#locList+1] = wikidata.claim({args={'P276', id=qid, list=', ', parameter='link'}})
	locList[#locList+1] = wikidata.claim({args={'P131', id=qid, list=', ', parameter='link'}})
	locList[#locList+1] = wikidata.claim({args={'P969', id=qid, list=', ', parameter='link'}})
	-- "located on street" (P669) with "street number" (P670) qualifier
	local street = wd._properties( {'qualifiers', qid, 'P669', 'P670'} )
	locList[#locList+1] = (street and street ~= '' and street) or nil
	local address = wd._properties( {'multilanguage', qid, 'P6375'} )
	locList[#locList+1] = (address and address ~= '' and mw.ustring.format('<small>%s</small>', address)) or nil
	locList[#locList+1] = args.hours
	local fee = wd._properties( {'qualifiers', qid, 'P2555', 'P6001'} )
	locList[#locList+1] = (fee and fee ~= '' and 'fee: ' .. fee) or nil
	local opening = wd._properties( {['format']="''%q <small>(%p)</small>[%s][%r]''",
		['sep%q']='-', 'qualifiers', 'qualifiers', 'qualifiers', qid, 'P3025', 'P8626', 'P8627', 'P1264'} )
	locList[#locList+1] = ((type(opening) == 'string') and (opening ~= '') and 'open: ' .. opening) or nil
	local location = table.concat(locList, '; ')
	local osmRelation = wikidata.claim({args={'P402', id=qid}})
	location = osmRelation and location .. mw.ustring.format(
		' [[File:Openstreetmap logo.svg|12px|OpenStreetMap|link=https://www.openstreetmap.org/relation/%s]]', osmRelation) or location
	local osmWay = wikidata.claim({args={'P10689', id=qid}})
	location = osmWay and location .. mw.ustring.format(
		' [[File:Openstreetmap logo.svg|12px|OpenStreetMap|link=https://www.openstreetmap.org/way/%s]]', osmWay) or location
	local osmNode = wikidata.claim({args={'P11693', id=qid}})
	location = osmNode and location .. mw.ustring.format(
		' [[File:Openstreetmap logo.svg|12px|OpenStreetMap|link=https://www.openstreetmap.org/node/%s]]', osmNode) or location
	
	-- literature
	local litList = {}
	litList[#litList+1] = args.lit
--	local describedBySourceIB = wikidataIB._getValue({'P1343', parameterset=1, qid=qid, qual='P304'})
--	litList[#litList+1] = describedBySourceIB
	local describedBySource2 = wd._properties( {'linked', 'qualifiers', qid, 'P1343', 'P304'} )
	litList[#litList+1] = describedBySource2
	-- TODO: use [[Module:Cite Q]] for the books
	local archnetID = wikidata.claim({args={'P7323', id=qid}})
	litList[#litList+1] = archnetID and mw.ustring.format('[https://archnet.org/sites/%s Archnet]', archnetID)
	local structuraeID = wikidata.claim({args={'P454', id=qid}})
	litList[#litList+1] = structuraeID and mw.ustring.format('[https://structurae.net/structures/%s Structurae]', structuraeID)
	local emporisID = wikidata.claim({args={'P455', id=qid}})
	litList[#litList+1] = emporisID and mw.ustring.format('[https://www.emporis.com/buildings/%s Emporis]', emporisID)
	local berlinDID = wikidata.claim({args={'P2424', id=qid}})
	litList[#litList+1] = berlinDID and mw.ustring.format('[https://denkmaldatenbank.berlin.de/daobj.php?obj_dok_nr=%s Berlin D]', berlinDID)
	local bildindexID = wikidata.claim({args={'P2092', id=qid}})
	litList[#litList+1] = bildindexID and mw.ustring.format('[https://www.bildindex.de/document/obj%s Bildindex]', bildindexID)
	local archinformID = wikidata.claim({args={'P5383', id=qid}})
	litList[#litList+1] = archinformID and mw.ustring.format('[https://www.archinform.net/projekte/%s.htm archINFORM]', archinformID)
	local memoriademadridID = wikidata.claim({args={'P7372', id=qid}})
	litList[#litList+1] = memoriademadridID and mw.ustring.format('[http://www.memoriademadrid.es/buscador.php?accion=VerFicha&id=%s memoriademadrid]', memoriademadridID)
	local misasorgID = wikidata.claim({args={'P7054', id=qid}})
	litList[#litList+1] = misasorgID and mw.ustring.format('[https://misas.org/p/%s misas.org]', misasorgID)
	local coamID = wikidata.claim({args={'P2917', id=qid}})
	litList[#litList+1] = coamID and mw.ustring.format('[https://guia-arquitectura-madrid.coam.org/#inm.%s COAM]', coamID)
	local mwnfURL = wikidata.claim({args={'P7375', id=qid}})
	litList[#litList+1] = mwnfURL and mw.ustring.format('[%s MWNF]', mwnfURL)
	local lit = '\n* ' .. table.concat(litList, '\n* ')
	
	local demolishedStyle = demolished and ('style="background: pink;"') or ''
	
	local tablerow = mw.ustring.format('\n|-%s\n| %s \n| %s \n|%s %s \n| %s \n| %s \n| %s',
		demolishedStyle, name, timesAndStyles, architectSort, creators, location, lit, img)
	return tablerow
end

return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.