Module:CountryData

--	Source script:	https://it.wikivoyage.org/wiki/Modulo:CountryData	Maintainer:		Andyrom75 local fw = require( 'Module:FastWikidata' ) local getArgs = require('Module:Arguments').getArgs

local debugMode = '' local cents = {	-- known cents symbols ['ALL'] = 'q', ['AUD'] = 'c', ['BTN'] = 'Ch.', ['CAD'] = '¢', ['CZK'] = 'h', ['EGP'] = 'pt.', ['EUR'] = 'c', ['GBP'] = 'p', ['HRK'] = 'lp', ['MXN'] = '¢', ['NZD'] = 'c', ['PLN'] = 'gr', ['TOP'] = '¢', ['USD'] = '¢', ['XOF'] = 'c', ['ZAR'] = 'c' }

local function _is_defined(s) if s and s ~= '' then return s end return nil end

local function _getAdministrativeEntity( entity ) local id = nil local i, w	if entity then -- located in the administrative territorial entity -- IMPORTANT NOTE: evaulate a recursive function to find the exact territorial entity (maybe with a deep limit) w = fw.getBestStatements( entity, 'P131' ) if #w > 0 then for i = 1, #w, 1 do				if w[ i ].mainsnak.snaktype == 'value' then id = w[ i ].mainsnak.datavalue.value.id				end end end end return id end

local function _getCountryEntity( entity ) local id = nil local i, w	if entity then w = fw.getValues( entity, 'P17', nil ) -- country if #w > 0 then for i = 1, #w, 1 do				id = w[ i ].id			end end end return id end

function _getEntityData( currentEntity ) local entityData = { id = '', iso_3166 = '', cc = '', lc = '', currency = '', currency_symbol = '' }	-- getting data from country entity if currentEntity then entityData.cc = fw.getValue( currentEntity, 'P474' ) -- country calling code local currencyEntity = fw.getId( currentEntity, 'P38' ) -- currency id		if not _is_defined(entityData.cc) or not _is_defined(currencyEntity) then return entityData end if currencyEntity ~= '' then entityData.currency = fw.getValue( currencyEntity, 'P498' ):upper -- ISO 4217 entityData.currency_symbol = fw.getValuesWithLanguages( currencyEntity, 'P5061' ) -- entityData.currency_symbol = entityData.currency_symbol['mul'] end entityData.iso_3166 = fw.getValue( currentEntity, 'P297' ):upper --three-letter country identifier else return entityData end entityData.id = currentEntity return entityData end

function _getCountryData( entity ) local entityData = {} entityData = _getEntityData(entity) --current or requested EntityData if entityData.id == '' then entityData = _getEntityData(_getAdministrativeEntity(entity)) --administrativeEntityData if entityData.id == '' then entityData = _getEntityData(_getCountryEntity(entity)) --countryEntityData end end entityData.lc = fw.getValue( entity, 'P473' ) -- local dialing code return entityData end

local p = {} function p._countryData2HTML( entity ) if entity == nil then --check externally requested entity entity = mw.wikibase.getEntityIdForCurrentPage --current entity if entity == nil then return nil end end mw.log('entity: ' .. entity) local countryData = _getCountryData( entity ) local currency = countryData.currency if( countryData.currency_symbol ) then if( currency and #currency>0 ) then currency = currency .. ', '		end currency = currency .. countryData.currency_symbol end if( cents[countryData.currency] ) then if( currency and #currency>0 ) then currency = currency .. ', '		end currency = currency .. cents[countryData.currency] end return (debugMode == "YES" and "&lt;" or "<") .. 'span class="countryData" data-country-calling-code="'.. countryData.cc ..'" data-local-dialing-code="'.. countryData.lc ..'" data-currency="'.. currency ..'" style="display:none;"> ' end

function p.countryData2HTML( frame ) local args = getArgs(frame) local entity = args[1] debugMode = args['debug'] return p._countryData2HTML(entity) end return p