Modul:Failsafe: Unterschied zwischen den Versionen
K (Datum) |
(+getModuleVersion) |
||
| Zeile 2: | Zeile 2: | ||
local Failsafe = { | local Failsafe = { | ||
suite = 'Failsafe', | suite = 'Failsafe', | ||
serial = ' | serial = '2021-04-08', | ||
item = 65306115 | item = 65306115 | ||
} | } | ||
-- modul variable | local strings = { | ||
local fs = {} | docPage = 'Doku', | ||
ok = '[[File:Artículo bueno.svg|16px|text-bottom|Ok!]]', | |||
notOk = '[[File:Symbol oppose vote.svg|15px|text-bottom|Contra]]', | |||
otherVersion = '[[Category:Andere Modulversion in Wikidata]]', | |||
versionText = 'Versionsbezeichnung auf Wikidata:', | |||
noVersion = 'keine Version verfügbar', | |||
noWikidataVersion = '(keine Version auf Wikidata verfügbar)' | |||
} | |||
-- modul variable and administration | |||
local fs = { | |||
moduleInterface = Failsafe | |||
} | |||
-- possible vaules of version | -- possible vaules of version | ||
| Zeile 13: | Zeile 25: | ||
-- string: string of version required | -- string: string of version required | ||
-- table: frame table (template, #invoke) | -- table: frame table (template, #invoke) | ||
-- | -- aModuleInterface | ||
-- table | -- table | ||
function fs._failsafe( version, | function fs._failsafe( version, aModuleInterface ) | ||
if type( | if type( aModuleInterface ) ~= 'table' then | ||
return false | return false | ||
end | end | ||
| Zeile 48: | Zeile 60: | ||
if version == 'wikidata' then | if version == 'wikidata' then | ||
version = nil | version = nil | ||
i = | i = aModuleInterface.item | ||
if type( i ) == 'number' and i > 0 then | if type( i ) == 'number' and i > 0 then | ||
s = mw.wikibase.getBestStatements( 'Q' .. i, 'P348' ) | s = mw.wikibase.getBestStatements( 'Q' .. i, 'P348' ) | ||
| Zeile 62: | Zeile 74: | ||
end | end | ||
if not | if not aModuleInterface.serial then | ||
return false | return false | ||
elseif not version or version <= | elseif not version or version <= aModuleInterface.serial then | ||
return | return aModuleInterface.serial | ||
else | else | ||
return false | return false | ||
| Zeile 71: | Zeile 83: | ||
end | end | ||
local function getModule( title ) | |||
return require( li.modulePrefix .. id ) | |||
return | |||
end | end | ||
function fs.getModuleVersion( frame ) | |||
local result = strings.noVersion | |||
local fromModule, fromWikidata, m, success | |||
local title = mw.ustring.gsub( mw.title.getCurrentTitle().text, '/' .. strings.docPage, '' ) | |||
if title == 'Failsafe' then | |||
success = true | |||
m = fs | |||
else | |||
success, m = pcall( getModule, title ) | |||
end | |||
if success then | |||
if m.moduleInterface then | |||
fromModule = m.moduleInterface.serial | |||
fromWikidata = fs._failsafe( 'wikidata', m.moduleInterface ) | |||
elseif m.failsafe then | |||
fromModule = m.failsafe( '' ) | |||
fromWikidata = m.failsafe( 'wikidata' ) | |||
end | |||
if fromWikidata or fromModule then | |||
result = strings.versionText .. ' <code>' | |||
.. ( fromWikidata or fromModule ) .. '</code>' | |||
if fromWikidata and fromModule then | |||
if fromWikidata == fromModule then | |||
result = result .. ' ' .. strings.ok | |||
else | |||
result = result .. ' ' .. strings.notOk .. strings.otherVersion | |||
end | |||
elseif not fromWikidata then | |||
result = result .. ' ' .. noWikidataVersion | |||
end | |||
end | |||
end | |||
return result | |||
end | end | ||
return fs | return fs | ||
Version vom 8. April 2021, 07:50 Uhr
Die Dokumentation für dieses Modul kann unter Modul:Failsafe/doc erstellt werden
-- module interface
local Failsafe = {
suite = 'Failsafe',
serial = '2021-04-08',
item = 65306115
}
local strings = {
docPage = 'Doku',
ok = '[[File:Artículo bueno.svg|16px|text-bottom|Ok!]]',
notOk = '[[File:Symbol oppose vote.svg|15px|text-bottom|Contra]]',
otherVersion = '[[Category:Andere Modulversion in Wikidata]]',
versionText = 'Versionsbezeichnung auf Wikidata:',
noVersion = 'keine Version verfügbar',
noWikidataVersion = '(keine Version auf Wikidata verfügbar)'
}
-- modul variable and administration
local fs = {
moduleInterface = Failsafe
}
-- possible vaules of version
-- nil, false: no version required
-- string: string of version required
-- table: frame table (template, #invoke)
-- aModuleInterface
-- table
function fs._failsafe( version, aModuleInterface )
if type( aModuleInterface ) ~= 'table' then
return false
end
local i, s, v
-- check if version is a frame table
if type( version ) == 'table' and type( version.args ) == 'table' then
s = version.args[ 1 ]
if not s and type( version.getParent ) == 'function' then
i = version:getParent()
if i then
s = i.args[ 1 ]
end
end
version = s
end
-- version should be a string
if type( version ) == 'string' then
-- check if empty string
version = mw.text.trim( version )
if version == '' then
version = nil
end
else
version = nil
end
-- getting version from Wikidata
if version == 'wikidata' then
version = nil
i = aModuleInterface.item
if type( i ) == 'number' and i > 0 then
s = mw.wikibase.getBestStatements( 'Q' .. i, 'P348' )
for i = 1, #s, 1 do
if s[ i ].mainsnak.snaktype == 'value' then
v = s[ i ].mainsnak.datavalue.value
if v ~= '' then
return v
end
end
end
end
end
if not aModuleInterface.serial then
return false
elseif not version or version <= aModuleInterface.serial then
return aModuleInterface.serial
else
return false
end
end
local function getModule( title )
return require( li.modulePrefix .. id )
end
function fs.getModuleVersion( frame )
local result = strings.noVersion
local fromModule, fromWikidata, m, success
local title = mw.ustring.gsub( mw.title.getCurrentTitle().text, '/' .. strings.docPage, '' )
if title == 'Failsafe' then
success = true
m = fs
else
success, m = pcall( getModule, title )
end
if success then
if m.moduleInterface then
fromModule = m.moduleInterface.serial
fromWikidata = fs._failsafe( 'wikidata', m.moduleInterface )
elseif m.failsafe then
fromModule = m.failsafe( '' )
fromWikidata = m.failsafe( 'wikidata' )
end
if fromWikidata or fromModule then
result = strings.versionText .. ' <code>'
.. ( fromWikidata or fromModule ) .. '</code>'
if fromWikidata and fromModule then
if fromWikidata == fromModule then
result = result .. ' ' .. strings.ok
else
result = result .. ' ' .. strings.notOk .. strings.otherVersion
end
elseif not fromWikidata then
result = result .. ' ' .. noWikidataVersion
end
end
end
return result
end
return fs