Moduuli:Wikidata-lista/titlecol

Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Wikidata-lista/titlecol/ohje

local t={};

function t.titlecol(frame) 
	local id = frame.args.item or "";
	local parts = frame.args.parts or "";
	local entity =  mw.wikibase.getEntityObject(id);
	local targetproperties={"P361", "P669"}

	if not entity or not entity.claims then
		return nil
	end
	
	local ret = "";
	local title ="";
	local description ="";
	
	local label=mw.wikibase.getLabel(id)
	local sitelink=mw.wikibase.getSitelink(id)

	local extlabels={}
	local extwdlabels={}

	for n, property in pairs(targetproperties) do
		if (entity.claims[property]) then
			for p, claim in pairs(entity.claims[property]) do
				if claim["mainsnak"]["datatype"]=="wikibase-item" then
					tmp_id=claim["mainsnak"]["datavalue"]["value"]["id"];
					-- Already found
					extwdlabels[tmp_id]=1
					tmp_sitelink=mw.wikibase.getSitelink(tmp_id);
					if tmp_sitelink then
						if (sitelink==nil or (tmp_sitelink~=sitelink)) then
							extlabels[tmp_sitelink]=mw.wikibase.getLabel(tmp_id);
						end
					end
				end
			end
		end
	end

	local partlist=mw.text.split( parts, " ", true )
	for p, tmp_id in pairs(partlist) do
		if extwdlabels[tmp_id]==nil then
			tmp_sitelink=mw.wikibase.getSitelink(tmp_id);
			if tmp_sitelink then
				if (sitelink==nil or (tmp_sitelink~=sitelink)) then
					extlabels[tmp_sitelink]=mw.wikibase.getLabel(tmp_id);
				end
			end
		end
	end


	
	-- Format title
	if sitelink then
		if sitelink~=label then
			title="[[" .. sitelink .."|" ..label .."]]";
		else
			title="[[" .. sitelink .."]]";
		end
	else
		local replacements={}
		title=label

		-- Trying to search linkable words from title and replace them with md5 hash 
		-- for preventing duplicate linking
		for tmp_sitelink, tmp_label in pairs(extlabels) do
			if mw.ustring.find(title, tmp_label, 1, true ) then
				if tmp_sitelink~=tmp_label then
					tmp_link="[[" .. tmp_sitelink .."|" ..tmp_label .."]]";
				else
					tmp_link="[[" .. tmp_sitelink .."]]";
				end
				tmp_key="__" .. mw.hash.hashValue( "md5", tmp_link ) .."__"
				title=mw.ustring.gsub(title, tmp_label, tmp_key)
				replacements[tmp_key]=tmp_link;
				
				-- remove used links from extlabels table
				extlabels[tmp_sitelink]=nil;
			end
		end
		-- Replace md5 hashes with real links
		for tmp_key, tmp_link in pairs(replacements) do
			title=mw.ustring.gsub(title, tmp_key, tmp_link)
		end
	end
	
	-- Format description
	local prefix ="";
	for tmp_sitelink, tmp_label in pairs(extlabels) do
		if tmp_sitelink~=tmp_label then
			tmp_link="[[" .. tmp_sitelink .."|" ..tmp_label .."]]";
		else
			tmp_link="[[" .. tmp_sitelink .."]]";
		end
		description=description .. prefix .. tmp_link;
		prefix=", "
	end
	
	
	-- Format output
	if description~="" then 
		ret=title .. "<br><small>(" .. description .. ")</small>";
	else
		ret=title;
	end
	
	return ret;
end

-- Tulostaa tunnisteetlinkit
function t.tunnisteetcol(frame) 
   local targetproperties={
   		p4009={label = "RKY", url="http://www.rky.fi/read/asp/r_kohde_det.aspx?KOHDE_ID=$1"},
   		p4106={label = "MJID", url="http://www.kyppi.fi/to.aspx?id=112.$1"},
   		p5310={label = "RPRID", url="https://www.kyppi.fi/palveluikkuna/rapea/read/asp/r_kohde_det.aspx?KOHDE_ID=$1"},
   		p5313={label = "RPID", url=""},
   		p8355={label = "Ratu", url="https://fiwiki-tools-web.toolforge.org/helsinki_city_map_redirect.php?P8355=$1"},
   		p2347={label = "YSO", url="http://www.yso.fi/onto/yso/p$1"},
		p3824={label = "VTJ-PRT", url=""},   		
   		wikidata={label = "Wikidata", url="https://www.wikidata.org/wiki/$1"}
	   }
	local ret=""
	local parentargs={}
	if frame == mw.getCurrentFrame() then
		parentargs=frame:getParent().args
	end
	
   	for propkey, prop in pairs(targetproperties) do
   		proparg=parentargs[propkey] or frame.args[propkey] or ""
		local propvalues=mw.text.split( proparg, " ", true )
		for p, propval in pairs(propvalues) do
			if propval~="" then
				str=prop.label .. ": "
				if prop.url~="" then
					str = str .. "[" .. mw.ustring.gsub(prop.url, "$1", propval) .." " .. propval .."]"
				else
					str = str .. propval
				end
				ret = ret .. str .."<br>"
			end
		end
   	end
	return ret
end

return t;