Přeskočit na obsah

Modul:ExtId

Tuto stránku mohou editovat jen zavedení uživatelé a správci.
Z Wikipedie, otevřené encyklopedie

Tento modul je určen pro formátování šablon používaných v externích odkazech k odkazování do databází či na autoritní záznamy a případné přebírání údajů z Wikidat či jejich srovnávání vůči nim.

Použití

{{#invoke:ExtId|print
| pattern = <!-- vzor URL adresy, kde $1 nahrazuje hodnotu, např. "https://cs.wikipedia.org/wiki/$1" -->
| property = <!-- identifikátor vlastnosti na Wikidatech, např. "P345" -->
| value = <!-- hodnota předaná z parametrů šablony -->
| regex = <!-- regulární výraz (Lua syntaxe), pomocí něhož se bude validovat lokálně vyplněná hodnota (např. "%d+") -->
| text = <!-- volitelný vlastní popis odkazu (obvykle předaný z parametrů šablony) -->
| kurzíva = <!-- vyplňte "ano", pokud má být popis odkazu formátován kurzívou -->
| before = <!-- volitelný text zobrazený před odkazem (vlevo) -->
| after = <!-- volitelný text zobrazený za odkazem (vpravo) -->
| editovat na Wikidatech = <!-- vyplňte "ano", pokud se má na konec řádku doplnit {{Editovat na Wikidatech}} -->
| compare = <!-- true zapne u lokálně zadaných hodnot srovnávání s Wikidaty pomocí skrytých kategorií -->
| catbase = <!-- "identifikátor" šablony ve skrytých kategoriích, pokud se liší od názvu šablony, např. "ČSFD" -->
}}


require "Modul:No globals"

local p = {}

local Wikidata = require 'Modul:Wikidata'
local lib = require 'Modul:Wikidata/lib'

function p.getFormatterURL(args)
	return nil
end

function p.getLocalLabel(args)
	return nil
end

function p.getLocalValue(args)
	return nil
end

function p.getProperty(args)
	return nil
end

function p.getWikidataLabel(args)
	return mw.wikibase.label()
end

function p.inLanguage(args)
	return nil
end

function p.paramFromArgs(args, params)
	for _, param in pairs(params) do
		if args[param] then
			return args[param]
		end
	end
	return nil
end

function p.wantCompare(args)
	return p.getProperty(args) and true
end

local function getFormatterURL(args)
	local formatterURL
	local property = p.getProperty(args)
	if property then
		formatterURL = Wikidata.getRawValueFromLua{ property = 'P1630', id = property }
	end
	if not formatterURL then
		formatterURL = p.getFormatterURL()
	end
	return formatterURL
end

local function getWhere(args)
	return p.getWhere(args) or 'v neuvedené databázi'
end

function p.print(frame)
	local parent = frame:getParent()
	local args = lib.common.cleanArgs(parent.args or {})
	local formatterURL = getFormatterURL(args)
	if not formatterURL then
		return error('Nebyla nalezena formátovací URL pro externí identifikátor „' .. parent:getTitle().text .. '“!')
	end

	local fromWikidata = false
	local value = p.getLocalValue(args)
	if not value then
		local property = p.getProperty(args)
		if property then
			fromWikidata = true
			value = Wikidata.getRawValueFromLua{ property = property }
		end
		if not value then
			return error('Externí identifikátor „' .. parent:getTitle().text .. '“ nebyl nalezen!')
		end
--[[else
		if p.wantCompare(args) then
			local compare = require 'Modul:Wikidata/compare'
			value = value .. compare.compareFromOptions(value, options)
		end]]
	end
	local label = p.getLocalLabel(args) or p.getWikidataLabel(args) or mw.getCurrentTitle().text
	local inLanguage = p.inLanguage(args)
	if inLanguage then
		inLanguage = frame:preprocess('{{' .. inLanguage .. '}}') .. '&nbsp;' -- TODO: převod {{Vjazyce}} apod. do Lua
	else
		inLanguage = ''
	end
	local url = '[' .. lib.formatFromPattern(value, formatterURL) .. ' ' .. label .. ']'
	if fromWikidata then
		url = lib.addWdClass(url)
	end
	return inLanguage .. url .. ' ' .. getWhere(args)-- .. addCategory()
end

return p