Modulo:Wikidata/bildoj
Etoso
[antaŭrigardi] [redakti] [historio] [renovigi]
![Dokumentado](http://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/OOjs_UI_icon_puzzle-ltr.svg/20px-OOjs_UI_icon_puzzle-ltr.svg.png)
Ŝ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.) |
![]() |
|
-- 2022-08-06
-- 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, p)
local ligilo
if id ~= "" and id ~= nil then
ligilo = id
else
ligilo = wikidata.pageId({args = {id=id} }) or ""
end
if ligilo then
if p ~= "" and p ~= nil then
ligilo = "[[:d:" .. ligilo .. "#" .. p .. "|[+]]]"
else
ligilo = "[[:d:" .. ligilo .. "#P2096|[+]]]"
end
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"] or "frameless"
local priskribo = frame.args["priskribo de bildoj"]
local defpriskribo = frame.args["defaŭlta priskribo de bildo"] or ""
-- 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 {}
-- helpa variablo
local alt = ""
-- 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 el parametro
alt = bp
priskribo = '<div style="text-align:center">' .. bp .. "</div>"
else
priskribo = p.priskriboBildo({args = {id=id, showerrors, default=default, subf="jes", bn = i, pkodo=pkodo, pkodo2=pkodo2} }) or ""
if priskribo ~= "" and (pkodo2 == "P2096" or pkodo2 == "P163" or pkodo2 == "P237") then
local ligilo = link(id, pkodo2)
-- priskribo el Vikidatumoj
alt = priskribo
priskribo = '<div style="text-align:center" class="wikidata-content">' .. priskribo .. " " .. ligilo .. "</div>"
else
-- defaŭlta priskribo
alt = defpriskribo
priskribo = '<div style="text-align:center">' .. defpriskribo .. "</div>"
end
end
else
if bp ~= "" then
alt = alt .. ";;;" .. bp
priskribo = priskribo .. ";;;" .. '<div style="text-align:center">' .. bp .. "</div>"
else
bp1 = p.priskriboBildo({args = {id=id, showerrors, default=default, subf="jes", bn = i, pkodo=pkodo, pkodo2=pkodo2} }) or ""
if bp1 ~= "" and (pkodo2 == "P2096" or pkodo2 == "P163" or pkodo2 == "P237") then
local ligilo = link(id, pkodo2)
alt = alt .. ";;;" .. bp1
bp1 = '<div style="text-align:center" class="wikidata-content">' .. bp1 .. " " .. ligilo .. "</div>"
priskribo = priskribo .. ";;;" .. bp1
else
alt = alt .. ";;; "
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}}
b = bildfunkcio.InfoboxImage({args={image=bildaro,size=grandeco,sizedefault=defgrandeco,center="yes", alt=alt, caption=priskribo, wd="yes"} })
b = b .. kat2 -- aldoni kategorion laŭ la supra difino
else
--b = bildfunkcio._InfoboxImage(bildaro, "", "", grandeco, "", defgrandeco, alt, "", "", "", "", "", "", "", "yes")
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
priskribo1 = p.priskriboBildo({args={id= id, showerrors=showerrors, default=default, pkodo=pkodo, pkodo2=pkodo2} }) or ""
-- necesas por certigi, ke sub alta bildo restas spaco por la priskribo
if priskribo1 ~= "" and priskribo1 ~= nil and (pkodo2 == "P2096" or pkodo2 == "P163" or pkodo2 == "P237") then
local ligilo = link(id, pkodo2)
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
b = bildfunkcio.InfoboxImage({args= {image=bildaro, size=grandeco, alt=priskribo1, sizedefault=defgrandeco, center="yes"} })
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" and #bildo > 1 then
-- nur se vokata kiel subfunkcio
v = bildo[1].qualifiers and bildo[bn].qualifiers and bildo[bn].qualifiers[pkodo2] or nil
else
v = bildo[1].qualifiers and bildo[1].qualifiers[pkodo2] or nil
end
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
function p.nombro(frame)
local id = frame.args["id"]
local pkodo= frame.args["pkodo"] or "P18"
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 bildaro
local artikolo = ""
if id ~= nil and id ~= "" then
bildaro = wikidata.claim({args = { pkodo, list=";;;", id = id} })
artikolo = wikidata.labelOf({args={id}}) or ""
else
bildaro = wikidata.claim({args = { pkodo, list=";;;"} })
artikolo = wikidata.labelOf({args={}}) or ""
end
local nombro = listoj.count({args = {";;;", bildaro} })
local nombro2 = tonumber(nombro)
if type(nombro2) == "number" then
return "Nombro de bildoj: '''" .. nombro .. "''' - por " .. pkodo .. " de la artikolo [[" .. artikolo .. "]]"
else
return "neniuj informoj"
end
end
return p