Logo Voyage

Module:CountryData Voyage Tips and guide

You can check the original Wikivoyage article Here

    Documentation for this module may be created at Module:CountryData/doc

    --[[
    	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;"></span>'
    end
    
    function p.countryData2HTML( frame )
    	local args = getArgs(frame)
    	local entity = args[1]
    	debugMode = args['debug']
    	return p._countryData2HTML(entity)
    end
    return p
    


    Discover



    Powered by GetYourGuide