Modul:ExtId
Vzhled
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 .. '}}') .. ' ' -- 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