Sari la conținut

Modul:StandardWikidataIntro

De la Wikipedia, enciclopedia liberă

local p = {}
local Wikidata = require ('Modul:Wikidata')           --- used for wikidata access and wikidata claim formatting
local StringUtils = require ('Modul:StringUtils')     --- used for capitalization of phrases 
local TableTools = require ('Modul:TableTools')       --- used for array manipulation
local join = require ('Modul:Separated entries').main --- used for conjunction-join
local getArgs = require ('Modul:Arguments').getArgs   --- used for argument manipulation


local function createPhraseForChapter(chapter, q)
	if not chapter['props'] then return nil end
	
	local sentences = {}
	for _,eachProp in ipairs(chapter['props']) do
		local propValueClaims = Wikidata.findBestClaimsForProperty(q, eachProp)
		if propValueClaims then
			local propValues = {}
			local qualifiersValues = {}
			for _,eachPropValueClaim in ipairs(propValueClaims) do
				if eachPropValueClaim.type == 'statement' and eachPropValueClaim.mainsnak and eachPropValueClaim.mainsnak.snaktype == 'value' then
					local commaSeparatedStatementParts = {}

					if eachPropValueClaim.qualifiers and chapter['qualifiers'] and chapter['qualifiers'][eachProp] then for _,eachSupportedQual in ipairs(chapter['qualifiers'][eachProp]) do
						if eachPropValueClaim.qualifiers[eachSupportedQual] then
							mw.logObject(eachSupportedQual, '[StandardWikidataIntro] checking supported qual')

							local qualValues = {}
							for __,eachQualifierValueInstance in ipairs(eachPropValueClaim.qualifiers[eachSupportedQual]) do
								if eachQualifierValueInstance.snaktype == 'value' then
									table.insert(qualValues, Wikidata.printSnak(eachQualifierValueInstance))
								end
							end
							
							if #qualValues > 0 then
								local substedQualifierSentencePart = mw.ustring.gsub(chapter['qualifiers']['intro_props'] and chapter['qualifiers']['intro_props'][eachSupportedQual] or '$1', '$1', table.concat(qualValues, ', '))
								table.insert(commaSeparatedStatementParts, substedQualifierSentencePart)
							end
						end
					end end
					local qualifierSummary = nil
					if #commaSeparatedStatementParts > 0 then
						qualifierSummary = mw.ustring.gsub(chapter['qualifiers']['intro'] or '$1', '$1', table.concat(commaSeparatedStatementParts, ', '))
					end
					table.insert(propValues, Wikidata.printSnak(eachPropValueClaim.mainsnak))
					table.insert(qualifiersValues, qualifierSummary)
				end
			end
			if #propValues > 0 then
				local mainPropStatement
				if chapter['intro_props'] and chapter['unique_value_prop'][eachProp] then
					mainPropStatement = mw.ustring.gsub(chapter['intro_props'] and chapter['intro_props'][eachProp] or '$1', '$1', propValues[1])
					table.insert(sentences, table.concat(TableTools.compressSparseArray({mainPropStatement, qualifiersValues[1]}), ', '))
				else
					local propQualifierPairs = {}
					for idx = 1,#propValues do
						local thisPropQualifierPair = propValues[idx]
						if qualifiersValues[idx] then
							thisPropQualifierPair = thisPropQualifierPair .. ', ' .. qualifiersValues[idx]
						end
						table.insert(propQualifierPairs, thisPropQualifierPair)
					end
					propQualifierPairs.separator = ', '
					propQualifierPairs.conjunction = ' și '
					mainPropStatement = mw.ustring.gsub(chapter['intro_props'] and chapter['intro_props'][eachProp] or '$1', '$1', join(propQualifierPairs))
					table.insert(sentences, mainPropStatement)
				end
			end
		end
	end
	
	if #sentences > 0 then
		if #sentences > 2 then
			sentences.separator = '; '
			sentences.conjunction = '; și '
		else
			sentences.separator = ', '
		end
		return mw.ustring.gsub(chapter['intro'] or '$1', '$1', join(sentences))
	end
	return nil
end

local function display(frame)
	local args = getArgs(frame)
	local q = args['q'] or mw.wikibase.getEntityIdForCurrentPage()
	local entityType = args['enttype'] or 'settlement'
	local propDescriptions = mw.loadData('Modul:StandardWikidataIntro/' .. entityType .. 'Data').propDescriptions
	local outphrases = {}

	for _,eachChapter in pairs(propDescriptions) do
		local crtPhrase = createPhraseForChapter(eachChapter, q)
		if crtPhrase then
			table.insert(outphrases, crtPhrase)
		end
	end

	local capitalizedOutphrases = {}
	for _,eachoutphrase in ipairs(outphrases) do
		table.insert(capitalizedOutphrases, StringUtils._capitalize({eachoutphrase}))
	end
	return StringUtils._appendToString({StringUtils._emptyToNil({table.concat(capitalizedOutphrases, '. ')}), '.'})
end

p.display = display
return p