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 categories = {}

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

function p.addCategory(category)
	table.insert(categories, category)
end

function p.getFormatterURL(args)
	return nil
end

function p.getIcon(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 false
end

local function wantCompare(args)
	return p.getProperty(args) and p.wantCompare(args)
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, template_name)
	return p.getWhere(args) or error('Neuvedena databáze, kam identifikátor „' .. template_name .. '“ odkazuje!')
end

function p.print(frame)
	local parent = frame:getParent()
	local args = lib.common.cleanArgs(parent.args or {})
	local title = mw.title.getCurrentTitle()
	local template_name = mw.title.new(parent:getTitle()).text
	local formatterURL = getFormatterURL(args)
	if not formatterURL then
		return error('Nebyla nalezena formátovací URL pro externí identifikátor „' .. template_name .. '“!')
	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
			fromWikidata = false
			if parent:getTitle() == title.fullText then
				value = ''
			else
				return error('Externí identifikátor „' .. template_name .. '“ nebyl nalezen!')
			end
		end
	else
		if wantCompare(args) then
			local compare = require 'Modul:Wikidata/compare'
			local options = {
				catbase = template_name,
				property = p.getProperty(args)
			}
			local marked, category = compare.compareFromOptions(value, options)
			if category then
				p.addCategory(category)
			end
		end
	end
	local label = p.getLocalLabel(args) or p.getWikidataLabel(args) or title.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 icon = p.getIcon(args)
	if icon then
		local ImageFormatter = require 'Modul:ImageFormatter'
		icon = ImageFormatter.makeImage(icon, {
			description = p.getIconDescription(args),
			link = p.getIconLink(args) or '',
			size = '16px'
		}) .. ' '
	else
		icon = ''
	end
	local link = '[' .. lib.formatFromPattern(value, formatterURL) .. ' ' .. label .. ']'
	if fromWikidata then
		link = lib.addWdClass(link)
	end
	return inLanguage .. icon .. link .. ' ' .. getWhere(args, template_name) .. table.concat(categories)
end

return p