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 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,
		readOnly = true,
	})
	local parent = frame:getParent()
	local parent_args = getArgs(parent, {
		frameOnly = true,
		readOnly = true,
	})

	local template_name = mw.title.new(parent:getTitle()).text
	local title = mw.title.getCurrentTitle()
	local is_template_page = parent:getTitle() == title.fullText

	local is_local = (parent_args['lokální'] == 'ano')
	local property = args.property
	local formatterURL = args.pattern or (property and getFormatterUrl(property))
	if not formatterURL then
		error('Nebyla nalezena formátovací URL pro externí identifikátor „' .. template_name .. '“')
	end

	local regex = args.regex
	if regex and is_template_page then
		mw.ustring.find('', regex) -- dummy for error propagation
	end

	local categories = {}
	local good_format = true
	local fromWikidata = false
	local value = args.value
	if not value then
		if not is_local and property then
			value = getWikidataValue(property)
			if value then
				fromWikidata = true
			end
		end
		if not value then
			if not is_template_page then
				error('Nebyla zadána nebo nalezena hodnota pro externí identifikátor „' .. template_name .. '“')
			end

			value = ''
			if property and formatterURL ~= getFormatterUrl(property) then
				-- FIXME: 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
		end
	else
		if not is_local and property and lib.IsOptionTrue(args, 'compare') then
			-- fixme: marked unused
			local marked, category = Wikidata._compareStatements{
				value = value,
				catbase = args.catbase or template_name,
				property = property
			}
			if category then
				table.insert(categories, category)
			end
		end
		if regex then
			local ok, arg, _ = pcall(mw.ustring.find, value, '^' .. regex .. '$')
			if not ok then
				mw.log(arg)
			elseif arg == nil then
				good_format = false
			end
		end
	end
	local text = args.text or mw.wikibase.getLabel() or title.text
	local link = '[' .. lib.formatFromPattern(value, formatterURL) .. ' ' .. text .. ']'
	if args['kurzíva'] == 'ano' then
		link = "''" .. link .. "''"
	end
	local before, after, fail = '', '', ''
	if args.before then
		before = args.before .. ' '
	end
	if args.after then
		after = ' ' .. args.after
	end
	if args['editovat na Wikidatech'] == 'ano' and fromWikidata then
		after = after .. frame:expandTemplate{
			title = 'Editovat na Wikidatech',
			args = { pid = property }
		}
	end
	if not good_format and title.namespace == 0 then
		-- fail = "<sup>''chybný odkaz''</sup>"
		table.insert(categories, mw.ustring.format('[[Kategorie:Údržba:Chybná hodnota %s|%s]]', template_name, title.fullText))
	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
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy