Modulo:Wikidata/bildoj

El Vikipedio, la libera enciklopedio
Salti al navigilo Salti al serĉilo
Dokumentado Dokumentado


Ŝablona programado Diskutoj Lua Testoj Subpaĝoj
Modulo Esperanto English Deutsch

Modulo: Dokumentado


Se vi havas demandon pri ĉi tiu Lua-modulo, tiam vi povas demandi en la diskutejo pri Lua-moduloj. La Intervikiaj ligiloj estu metataj al Vikidatumoj. (Vidu Helpopaĝon pri tio.)
-- 2016-03-10
-- jen helpa modulo por Wikidata, kiu uzas la samajn erarmesaĝojn kiel Wikidata kaj subtenas ID por testoj

-- aranĝas zorgigajn kategoriojn nur en la artikola nomspaco
        currentTitle = mw.title.getCurrentTitle()
        local ns   = currentTitle.namespace
        local kat1 = ""
        local kat2 = ""
        local kat3 = ""
        if ns == 0 then 
        	kat1 = "[[Kategorio:Artikoloj kun Vikidatumaj bildoj]]"
        	kat2 = "[[Kategorio:Artikoloj kun pluraj Vikidatumaj bildoj]]"
        	kat3 = "[[Kategorio:Artikoloj kun bildaj priskriboj el Vikidatumoj]]"
        end

local wikidata = require ("Modulo:Wikidata")
local bildfunkcio = require ("Modulo:InfoboxImage")
local listoj = require ("Modulo:Listutil")

-- helpaj funkcioj
local function link (id)
		local ligilo
		if id ~= "" and id ~= nil then
			ligilo = id
		else	
			ligilo = wikidata.pageId({args = {id=id} }) or ""
		end
		if ligilo then
			ligilo = "[[:d:" .. ligilo .. "#P2096|[+]]]"
		end
		return ligilo
end

local p = {}


function p.bildoj(frame)
	local id = frame.args["id"]	
	local showerrors = frame.args["showerrors"]
	local default = frame.args["default"]
	if default then showerrors = nil end
	-- nur en ĉi tiu funkcio
	local grandeco = frame.args["grandeco"]
	local defgrandeco = frame.args["defaŭlta grandeco"] 
	local priskribo = frame.args["priskribo de bildoj"]
	local defpriskribo = frame.args["defaŭlta priskribo de bildo"]
	-- pkodoj por elvoko el alia modulo
	local pkodo = frame.args["pkodo"] or "P18"
	local pkodo2 = frame.args["pkodo2"]	or "P2096"
	-- stira variablo, kiu influas, ĉu la priskribo estas aldonata al la bildo de ĉi tiu modulo aŭ redonata aparte al la vokanta modulo
	local paparte = frame.args["ĉu priskribo aparte"]
	-- stira variablo, kiu influas ĉu grupo de bildoj estas transprenataj el Vikidatumoj aŭ nur unu
	local grupo = frame.args["grupo"] 
	-- variabla tabelo el vokanta modulo
	local tab = frame.args["tabelo"] or {}

	-- get wikidata entity
    local entity
    if id ~= nil and id ~= "" then
        entity = mw.wikibase.getEntity(id)
    else
        entity = mw.wikibase.getEntity()
    end
	if not entity then
		if showerrors then return wikidata.printError("entity-not-found") else return default end
	end
	
	local bildo
	if grupo == "ne" then
		bildaro = wikidata.claim({args = { pkodo, id = id} })	
	else	
	-- {{#invoke:Wikidata|claim|P18|list=;;;}}
		bildaro = wikidata.claim({args = { pkodo, list=";;;", id = id} })
	end

	if bildaro then
		-- {{#invoke:Listutil|count|;;;|{{#invoke:Wikidata|claim|P18|list=;;;}}}}
		local nombro = listoj.count({args = {";;;", bildaro} })
		nombro = tonumber(nombro)
		local b = ""
		if nombro > 1 then
			if priskribo == "" or priskribo == nil then
				for i=1, nombro do
					local bp = frame.args["priskribo de bildo" .. i] or tab["priskribo de bildo" .. i] or ""
					if i == 1 then
						if bp ~= "" then
							priskribo = bp
						else	
							priskribo = p.priskriboBildo({args = {id=id, showerrors, default=default, subf="jes", bn = i, pkodo=pkodo, pkodo2=pkodo2} }) or ""
							if priskribo ~= "" and pkodo2 == "P2096" then
								local ligilo = link(id)								
								priskribo = '<div class="wikidata-content">' .. priskribo .. " " .. ligilo .. "</div>"
							end
						end
					else	
						if bp ~= "" then
							priskribo = priskribo .. ";;;" .. bp
						else	
							bp1 = p.priskriboBildo({args = {id=id, showerrors, default=default, subf="jes", bn = i, pkodo=pkodo, pkodo2=pkodo2} })	or ""
							if bp1 ~= "" and pkodo2 == "P2096" then
								local ligilo = link(id)
								bp1 = '<div class="wikidata-content">' .. bp1 .. " " .. ligilo .. "</div>"	
								priskribo = priskribo .. ";;;" .. bp1								
							else
								priskribo = priskribo .. ";;; "
							end
						end
					end
				end

			end
			-- {{#invoke:InfoboxImage|InfoboxImage|image={{#invoke:Wikidata|claim|P18|list=;;;}}|size={{{bildo-larĝeco|}}}|sizedefault=frameless|alt={{{bildo-priskribo|}}}|suppressplaceholder=yes|center=yes|caption={{{priskribo de bildoj|}}}|wd=yes}}
			if defgrandeco ~= "" and defgrandeco ~= nil then
				b = bildfunkcio.InfoboxImage({args={image=bildaro,size=grandeco,sizedefault=defgrandeco,center="yes", caption=priskribo, wd="yes"} })					
			else	
				b = bildfunkcio.InfoboxImage({args={image=bildaro,size=grandeco,sizedefault="frameless",center="yes", caption=priskribo, wd="yes"} })				
			end
			b = b .. kat2   -- aldoni kategorion laŭ la supra difino
		else
			--b = bildfunkcio._InfoboxImage(bildaro, "", "", grandeco, "", defgrandeco, alt, "", "", "", "", "", "", "", "yes")	
			if defgrandeco ~= "" and defgrandeco ~= nil then			
				b = bildfunkcio.InfoboxImage({args= {image=bildaro,size=grandeco, sizedefault=defgrandeco, center="yes"} })				
			else	
				b = bildfunkcio.InfoboxImage({args= {image=bildaro,size=grandeco, sizedefault="frameless", center="yes"} })
			end
			local priskribo1 = frame.args["priskribo de bildo"]  or priskribo    -- ĉe unusola bildo la numerado de rilata parametro ne necesas
			if priskribo1 ~= "" and priskribo1 ~= nil then
				priskribo = '<div style="text-align:center; width:100%;">' .. priskribo1 .. "</div>"
			else
				local priskribo1 = p.priskriboBildo({args={id= id, showerrors=showerrors, default=default} }) or ""
				-- &nbsp; necesas por certigi, ke sub alta bildo restas spaco por la priskribo
				if priskribo1  ~= "" and priskribo1 ~= nil and pkodo2 == "P2096" then
					local ligilo = link(id)		
					priskribo = '<div style="text-align:center; width:100%;" class="wikidata-content">' .. priskribo1 .. " " .. ligilo .. "</div>"
				elseif defpriskribo ~= "" and defpriskribo ~= nil then
					priskribo = '<div style="text-align:center; width:100%;">' .. defpriskribo .. "</div>"
				end
			end
			if paparte == "jes" then
				priskribo = priskribo1 or defpriskribo
			elseif priskribo ~= "" and priskribo ~= nil then	
				b = b .. priskribo
			end
		end
		b = b .. kat1		-- aldoni kategorion laŭ la supra difino
		if paparte == "jes" then
			return b, priskribo
		else
			return b
		end
	else
		if showerrors then return wikidata.printError("image-not-found") else return default end
		
		--"bildo ne difinita en P18 de Vikidatumoj"

	end	

end	


-- Funkcio por legi la priskribon (P2096) de bildo (p18)
function p.priskriboBildo(frame)
	local id = frame.args["id"]	
	local showerrors = frame.args["showerrors"]
	local default = frame.args["default"]
	if default then showerrors = nil end
	local subf = frame.args["subf"] 		-- ĉu subfunkcio de alia modulo aŭ ne
	local bn = frame.args["bn"]				-- bilda numero el la vokanta funkcio
	local pkodo= frame.args["pkodo"] or "P18"
	local pkodo2= frame.args["pkodo2"] or "P2096"	

	-- get wikidata entity
    local entity
    if id ~= nil and id ~= "" then
        entity = mw.wikibase.getEntity(id)
    else
        entity = mw.wikibase.getEntity()
    end
	if not entity then
		if showerrors then return wikidata.printError("entity-not-found") else return default end
	end
	local bildo = entity:getBestStatements( pkodo )
	if (#bildo == 0) or (bildo[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	
	if subf == "jes" then
	-- nur se vokata kiel subfunkcio	
		v = bildo[1].qualifiers and bildo[bn].qualifiers and bildo[bn].qualifiers[pkodo2] or nil
		if (v==nil) then 
			if showerrors then return wikidata.printError("qualifier-not-found") else return default end 
		else 
			local longo = #v
			for i=1, longo do
				local t =v[i].datavalue.value.text 
				local l = v[i].datavalue.value.language
				if l == "eo" then		-- serĉu tekston kun lingva indiko de esperanto
					return t .. kat3    -- aldonas kategorion. vidu supre
				end
			end
			return ""     						
		end
	else
		v = bildo[1].qualifiers and bildo[1].qualifiers[pkodo2] or nil
		if (v==nil) then 
			if showerrors then return wikidata.printError("qualifier-not-found") else return default end 
		else 
			local longo = #v
			for i=1, longo do
				local t =v[i].datavalue.value.text 
				local l = v[i].datavalue.value.language
				if l == "eo" then		-- serĉu tekston kun lingva indiko de esperanto
					return t .. kat3    -- aldonas kategorion. vidu supre
				end
			end
			return ""  			

		end
    end	
end




return p