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 getArgs = (require 'Modul:Arguments').getArgs
local Wikidata = require 'Modul:Wikidata'
local lib = require 'Modul:Wikidata/lib'

local p = {}
--[[
local function checkRegex(regex, value)
	if regex then
		mw.ustring.match(value, '^' .. regex .. '$')
	end
	return false
end
]]
local function getWikidataValue(property)
	return Wikidata.getRawValueFromLua{ property = property }
end

local function getFormatterUrl(prop)
	return Wikidata.getRawValueFromLua{ id = prop, property = 'P1630' }
end

function p.print(frame)
	local args = getArgs(frame, {
		removeBlanks = true,
		frameOnly = true,
	})
	local parent = frame:getParent()
	local parent_args = getArgs(parent, {
		frameOnly = true,
	})
	local is_local = (parent_args['lokální'] == 'ano')
	local template_name = mw.title.new(parent:getTitle()).text
	local formatterURL = args.pattern or (args.property and getFormatterUrl(args.property))
	if not formatterURL then
		error('Nebyla nalezena formátovací URL pro externí identifikátor „' .. template_name .. '“')
	end

	local categories = {}
	local title = mw.title.getCurrentTitle()
	local badFormat = false --TODO
	local fromWikidata = false
	local value = args.value
	if not value then
		local property = args.property
		if not is_local and property then
			value = getWikidataValue(property)
			if value then
				fromWikidata = true
			end
		end
		if not value then
			if parent:getTitle() == title.fullText then
				value = ''
				if property and formatterURL ~= getFormatterUrl(property) then
					--table.insert(categories, lib.category('diff', 'Formátovací URL'))
					table.insert(categories, '[[Kategorie:Údržba:Formátovací URL se liší od Wikidat|' .. template_name .. ']]')
				end
			else
				error('Nebyla zadána nebo nalezena hodnota pro externí identifikátor „' .. template_name .. '“')
			end
		end
	else
		if not is_local and args.property and lib.IsOptionTrue(args, 'compare') then
			-- fixme: marked unused
			local marked, category = Wikidata._compareStatements{
				value = value,
				catbase = args.catbase or template_name,
				property = args.property
			}
			if category then
				table.insert(categories, category)
			end
		end
		--[=[
		badFormat = checkRegex(args.regex, value)
		if badFormat and title.namespace == 0 then
			table.insert(categories, mw.ustring.format('[[Kategorie:Údržba:Špatný formát %s|%s]]', template_name, title.fullText))
		end
		]=]
	end
	local text = args.text or mw.wikibase.getLabel() or title.text
	local link = '[' .. lib.formatFromPattern(value, formatterURL) .. ' ' .. text .. ']'
	local before, after, fail = '', '', ''
	if args.before then
		before = args.before .. ' '
	end
	if args.after then
		after = ' ' .. args.after
	end
	if badFormat then
		fail = "<sup>''chybný odkaz''</sup>"
		-- TODO: kategorie
	end
	local ret = mw.ustring.format('%s%s%s%s%s', before, link, after, fail, table.concat(categories))
	if fromWikidata then
		return lib.addWdClass(ret)
	end
	return ret
end

return p