Modul:Benutzer:Count Count/Wikidata helper

Die Dokumentation für dieses Modul kann unter Modul:Benutzer:Count Count/Wikidata helper/Doku erstellt werden

p = {}

--[[

This modules include help functionality for Wikidata that are not primarily used in articles directly or in templates, but rather talk and project pages.

]]

function tablesize(T)
   local n = 0
   for _ in pairs(T) do n = n + 1 end
   return n
end

--[[
  wdmatrix, creates a table with links to articles for given wikidata items on given languages
  and the number of languages that has link to the items
  parameters
  ==========
  objects: (mandatory) a comma separated list of qids 
  langs: (mandatory) a comma separated list of language codes
  
  example
  =======
  {{#invoke:Wikidatahelper|wdmatrix|objects=Q210723,Q187140,Q2100893,Q18451251,Q4876106,Q4876107,Q16839444,Q386215|langs=en,es,de,sv}} 
]]

function p.wdmatrix(frame)
	local langs = frame.args['langs'] 
	local langstable = {}
	if langs then langstable = mw.text.split(langs,',') end
	local nlangs = tablesize(langstable)

	local objs = frame.args['objects']
	local objstable = {}
	if objs then objstable = mw.text.split(objs,',') end
	local nobjs = tablesize(objstable)

	local sitelinks = {}
	local res = '{| class="wikitable"\n|-\n'
	res = res .. '!colspan=2| !!colspan=' .. nlangs+1 .. '|Languages\n|-\n!Wikidata items||Label||#'
	for j = 1,nlangs do res = res .. '!!' .. langstable[j] .. 'wiki' end
	for i = 1,nobjs do
		local entity = mw.wikibase.getEntity(objstable[i]);
		if entity then
           	local n = 0
           	if entity.sitelinks then n = tablesize(entity.sitelinks) end
      		res = res .. '\n|-\n'

			res = res .. '| [[:d:' .. objstable[i] .. ']] || ' .. (entity:getLabel() or '-') .. ' || align="right" |' .. n
      		for j = 1,nlangs do
       			local link = '-'
       			if entity.sitelinks then
       				for _, q in pairs(entity.sitelinks) do
	  				 	if q.site == langstable[j]..'wiki' then
	  				 		link = '[[:' .. langstable[j] .. ':' .. entity:getSitelink(q.site) .. '|' .. entity:getSitelink(q.site) .. ']]'
	  					 end
	  				end
	  			end
	  			res = res .. '||' .. link
			end 
	  	end
	end
	res = res .. '\n|}'
	return res
end

return p