Mòdul:Wikidata language

La documentació d'ús d'aquest mòdul es pot crear a Mòdul:Wikidata language/ús

local p = {}

-- dependencies:
---- 'Module:llengua/taula' -- table with local code languages
local Mwd = require('Module:Wikidata') -- fetch Wikidata

-- fetch data
local function getData(qid)
	local lang = mw.language.getContentLanguage().code
	if qid == nil or qid == '' then
		qid = Mwd.claim{property='P301', formatting='raw', shownovalue='false', editicon='false'}
		if qid == nil then
			return
		end
	end
	local data = {}
	local entity = mw.wikibase.getEntity(qid)
	data.label = Mwd.getLabel{qid, {linked=no}}
	if not string.find(data.label, qid) then -- first letter lowercase in local language
		data.label = mw.ustring.gsub(data.label, "^%u", mw.ustring.lower)
	end
	data.aliases = {}
	local aliases = entity.aliases[lang]
	for i, t in ipairs(aliases or {}) do
		data.aliases[#data.aliases + 1] = t.value
	end
	data.description = entity:getDescription()
		.. " [[File:Arbcom ru editing.svg|10px|baseline|modifica a Wikidata|link="
		.. "https://www.wikidata.org/wiki/Special:SetLabelDescriptionAliases/" .. qid .. "/" .. lang .. "]]"
	data.endonym = Mwd.claim{item=qid, property='P1705', list='false', editicon='false'}
	data.family = Mwd.getParentValues{item=qid, property='P279', uptovalueid='Q20162172 Q783816 Q25268 Q169921 Q33838 Q33705 Q276314 Q51739 Q34113 Q7524744 Q19682167', rowformat='$1', cascade='true', sorting='-1', editicon='false'}
	data.code = {}
	data.code.iso6391 = Mwd.claim{item=qid, property='P218', list='false', shownovalue='false', editicon='false'}
	data.code.iso6392 = Mwd.claim{item=qid, property='P219', list='false', shownovalue='false', editicon='false'}
	data.code.iso6393 = Mwd.claim{item=qid, property='P220', list='false', shownovalue='false', editicon='false'}
	data.code.wikimedia = Mwd.claim{item=qid, property='P424', list='false', editicon='false'}
	if next(data.code) == nil then -- no code, search the local one
		local lang_table = mw.loadData("Module:llengua/taula")
		for c, t in pairs(lang_table) do
			if t.nom == data.label then
				data.code.wiktionary = c
				break
			end
		end
	end
	data.map = Mwd.claim{item=qid, property='P1846 or P242', formatting='[[File:$1|center|200x200px]]', list=1, editicon='false'}
	data.projects = {}
	data.projects.wikidata = qid
	data.projects.wikipedia = entity:getSitelink(lang .. 'wiki')
	if data.code.wikimedia then
		-- A Wikimedia project exists if its Main page is linked at d:Q5296
		local main_page = mw.wikibase.getEntity('Q5296')
		if main_page.sitelinks[data.code.wikimedia .. 'wiktionary'] then
    		data.projects.wiktionary = data.code.wikimedia
    	end
    end
	return data
end

-- main function
function p.show(frame)
	local data = getData(frame.args[1])
	
	local lang = '<span style="font-weight: bold;">' .. data.label .. '</span>'
	if #data.aliases > 0 then
		lang = lang .. '<br /><span style="font-size: smaller;">(' .. table.concat(data.aliases, ", ") ..  ')</span>'
	end
	if data.description then
		lang = lang .. '<br />' .. data.description
	end
	if data.endonym then
		local nym = string.match(data.endonym, '>(.+)<')
		if not nym then nym = data.endonym end
		local wikt_code = data.code.wiktionary or data.code.iso6391 or data.code.iso6393 or data.code.wikimedia
		lang = lang .. '<br />Autoglotònim: '
		lang = lang .. frame:expandTemplate{title = 'm', args = {wikt_code or 'und', '', nym}}
	end
	
	local codes = ''
	if data.code.wikimedia == data.code.iso6391 or data.code.wikimedia == data.code.iso6393 then
		data.code.wikimedia = nil
	end
	if data.code.iso6391 then
		codes = '[https://id.loc.gov/vocabulary/iso639-1/' .. data.code.iso6391 .. ' <code>' .. data.code.iso6391 .. '</code>] <span style="font-size: 80%;">(ISO 639-1)</span>'
		if data.code.iso6393 or data.code.wikimedia then
			codes = codes .. ', '
		end
	end
	if data.code.iso6393 then
		codes = codes .. '[https://iso639-3.sil.org/code/' .. data.code.iso6393 .. ' <code>' .. data.code.iso6393 .. '</code>] <span style="font-size: 80%;">(ISO 639-3)</span>'
		if data.code.wikimedia then
			codes = codes .. ', '
		end
	elseif data.code.iso6392 then
		codes = codes .. '[https://iso639-3.sil.org/code/' .. data.code.iso6392 .. ' <code>' .. data.code.iso6392 .. '</code>] <span style="font-size: 80%;">(ISO 639-2)</span>'
		if data.code.wikimedia then
			codes = codes .. ', '
		end
	end
	if data.code.wikimedia then
		codes = codes .. '[https://robin.toolforge.org/?tool=codelookup&code=' .. data.code.wikimedia .. ' <code>' .. data.code.wikimedia .. '</code>] <span style="font-size: 80%;">(Wikimedia)</span>'
	end
	if data.code.wiktionary then
		codes = codes .. '<code>' .. data.code.wiktionary .. '</code> <span style="font-size: 80%;">(Viccionari)</span>'
	end
	
	local projects = '[[d:Special:EntityPage/' .. data.projects.wikidata .. '|element Wikidata]]'
	if data.projects.wikipedia then
		projects = projects .. ', [[w:' .. data.projects.wikipedia .. '|article Viquipèdia]]'
	end
	if data.projects.wiktionary then
		projects = projects .. ', [[:' .. data.projects.wiktionary .. ':|versió Wiktionary]]'
	end
			
	local html_table = mw.html.create('table')
	html_table
		:addClass('wikitable')
		:newline()
		:tag('tr')
			:newline()
			:tag('th')
				:css('text-align', 'left;')
				:wikitext('Llengua')
				:done()
			:newline()
			:tag('td')
				:wikitext(lang)
				:done()
			:newline()
			:tag(data.map and 'td' or 'span')
				:attr('rowspan', '4')
				:wikitext(data.map or '')
				:done()
			:done()
	html_table
		:newline()
		:tag('tr')
			:newline()
			:tag('th')
				:css('text-align', 'left;')
				:wikitext('Codi')
				:done()
			:newline()
			:tag('td')
				:wikitext(codes)
				:done()
			:done()
	html_table
		:newline()
		:tag('tr')
			:newline()
			:tag('th')
				:css('text-align', 'left;')
				:wikitext('Família')
				:done()
			:newline()
			:tag('td')
				:css('padding-left', '1em;')
				:wikitext(data.family)
				:done()
			:done()
	html_table
		:newline()
		:tag('tr')
			:newline()
			:tag('th')
				:css('text-align', 'left;')
				:wikitext('Projectes')
				:done()
			:newline()
			:tag('td')
				:wikitext(projects)
				:done()
			:done()
		:done()
	
	return html_table
end

-- on debug console use: =p.debug{'Qid'} with your Qid
function p.debug(param)
	local data = getData(param[1])
	return mw.dumpObject(data)
end

return p