Modul:Vorlage:OxfordDNB
Vorlagenprogrammierung | Diskussionen | Lua | Unterseiten | |||
Modul | Deutsch | English
|
Modul: | Dokumentation |
Diese Seite enthält Code in der Programmiersprache Lua. Einbindungszahl Cirrus
Dies ist die (produktive) Mutterversion eines global benutzten Lua-Moduls.
Wenn die serial-Information nicht übereinstimmt, müsste eine Kopie hiervon in das lokale Wiki geschrieben werden.
Wenn die serial-Information nicht übereinstimmt, müsste eine Kopie hiervon in das lokale Wiki geschrieben werden.
Versionsbezeichnung auf WikiData:
2024-03-08
local ODNB = { suite = "OxfordDNB",
serial = "2024-03-08",
maxID = 199999,
item = 124723080 }
--[=[
Template:OxfordDNB
]=]
local Failsafe = ODNB
ODNB.www = function ( at, alert, assign )
-- Build www link
-- Precondition:
-- at -- identifier
-- alert -- error message if invalid, or not
-- assign -- error category if invalid, or not
-- Postcondition:
-- Returns string -- link or error
-- false -- if invalid but no signalling
local s = type( at )
local n, r
if s == "string" then
s = mw.text.trim( at )
if s:find( "/", 2, true ) then
local sT1, sT2, sD
sT1, sT2, sD = s:match( "^(%d%d?)/1010(%d%d)(%d%d%d)$" )
if sT1 and
tonumber( sT1 ) == tonumber( sT2 ) then
n = tonumber( sT1 .. sD )
end
elseif s:match( "^1010%d%d%d%d%d$" ) then
n = tonumber( s:sub( 5 ) )
if n == 0 then
n = false
end
elseif s:match( "^[1-9]%d?%d?%d?%d?%d?$" ) then
n = tonumber( s )
elseif s:match( "^%d%d?%d?%.[1-9]%d?%d?%d?%d?%d?$" ) then
r = string.format( "[[doi:10.1093/odnb/9780198614128.%s]]", s )
end
elseif s == "number" and at >= 1 and at <= ODNB.maxID then
n = math.floor( at )
end
if n then
r = string.format( "[[doi:10.1093/ref:odnb/%d]]", n )
elseif not r then
if alert then
local e = mw.html.create( "span" )
:addClass( "error" )
:css( { ["margin-left"] = "1em",
["margin-right"] = "1em" } )
s = type( alert )
if s == "string" then
s = mw.text.trim( alert )
if s == "" then
e = false
else
e:wikitext( s )
end
elseif s == "table" then
e:tag( alert )
else
e = false
end
if e then
r = " " .. tostring( e )
end
end
if type( assign ) == "string" then
s = mw.text.trim( assign )
if s ~= "" then
r = string.format( "%s[[Category:%s]]",
r or "",
s )
end
end
end
return r or false
end -- ODNB.www
Failsafe.failsafe = function ( atleast )
-- Retrieve versioning and check for compliance
-- Precondition:
-- atleast -- string, with required version
-- or wikidata|item|~|@ or false
-- Postcondition:
-- Returns string -- with queried version/item, also if problem
-- false -- if appropriate
-- 2024-03-01
local since = atleast
local last = ( since == "~" )
local linked = ( since == "@" )
local link = ( since == "item" )
local r
if last or link or linked or since == "wikidata" then
local item = Failsafe.item
since = false
if type( item ) == "number" and item > 0 then
local suited = string.format( "Q%d", item )
if link then
r = suited
else
local entity = mw.wikibase.getEntity( suited )
if type( entity ) == "table" then
local seek = Failsafe.serialProperty or "P348"
local vsn = entity:formatPropertyValues( seek )
if type( vsn ) == "table" and
type( vsn.value ) == "string" and
vsn.value ~= "" then
if last and vsn.value == Failsafe.serial then
r = false
elseif linked then
if mw.title.getCurrentTitle().prefixedText
== mw.wikibase.getSitelink( suited ) then
r = false
else
r = suited
end
else
r = vsn.value
end
end
end
end
elseif link then
r = false
end
end
if type( r ) == "nil" then
if not since or since <= Failsafe.serial then
r = Failsafe.serial
else
r = false
end
end
return r
end -- Failsafe.failsafe()
-- Export
local p = { }
p.www = function ( frame )
-- www link
-- #invoke
-- id -- identifier
-- err -- error message if invalid
-- cat -- error category if invalid
return ODNB.www( frame.args.id, frame.args.err, frame.args.cat )
or ""
end -- p.www
p.failsafe = function ( frame )
-- Versioning interface
local s = type( frame )
local since
if s == "table" then
since = frame.args[ 1 ]
elseif s == "string" then
since = frame
end
if since then
since = mw.text.trim( since )
if since == "" then
since = false
end
end
return Failsafe.failsafe( since ) or ""
end -- p.failsafe()
setmetatable( p, { __call = function ( func, ... )
setmetatable( p, nil )
return Failsafe
end } )
return p