Hoppa till innehållet

Modul:Wikidatahelper

Från Wikipedia

Dokumentation [visa] [redigera] [historik] [rensa sidcachen]


local p = {}

--[[

Den här modulen innehåller hjälpfunktioner för Wikidata som inte används i artiklar direkt eller via mallar utan på diskussions- och projektsidor.

]]

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

--[[
  wdmatrix, skriver ut en tabell med länkar till artiklar för angivna wikidataobjekt på angivna språk
            samt uppgift om hur många språk som har länkar till objekten
  parametrar
  ==========
  objects: (obligatorisk) en kommaseparerad lista med qid
  langs: (obligatorisk) en kommaseparerat lista med språkkoder
  
  exempel
  =======
  {{#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 .. '|Språkutgåvor\n|-\n!Wikidataobjekt||Etikett||#'
	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