
![]() | Dieses Modul ist getestet und für den projektweiten Gebrauch geeignet. Es kann in Vorlagen benutzt und auf Hilfeseiten erläutert werden. Entwicklungen an dem Modul sollten auf Failsafe/Test und die Anwendung auf der Spielwiese getestet werden, da wiederholte Trial-and-Error-Edits die Resourcen stark belasten können. |
Verwendungszweck
Das Modul stellt eine Funktion zur Einbindung in andere Module zur Versionsprüfung bereit. Üblicherweise gelangt diese Funktion bei Modulimporten zum Einsatz, wird aber auch für Wikivoyage-Module bereitgestellt.
Versionsbezeichnung auf Wikidata: 2022-04-25
Funktionen
function fs._failsafe( version, moduleInterface )
- Vorgaben:
version
nil
,false
: keine Versionsprüfung notwendig. Versionsnummer wird aus dem Modul selbst bezogen.string
: Zeichenkette der geforderten Version. Wennversion = 'wikidata'
ist, wird die Versionsnummer aus Wikidata bezogen, wenn sie dort vorhanden ist. Ansonsten aus dem Modul selbst. Wennversion
eine Versionsnummer enthält, wird sie mit der Version im Modul verglichen. Wenn die angeforderte Version kleiner oder gleich der Modulversion ist, wird die aktuelle Modulversion zurückgeliefert, ansonstenfalse
.table
:frame
-Tabelle (template, #invoke)
moduleInterface
- Tabelle mit Angaben zum Modul.
- Zurückgelieferter Wert:
- Version oder
false
- Version oder
function fs.getModuleVersion( frame )
- Liefert das Versionsdatum aus Wikidata bzw. dem Modul selbst und markiert, ob beide Angaben identisch sind, wenn sie vorhanden sind.
- Vorgaben:
- Keine
Aufbau der moduleInterface-Tabelle
local Modulname = { suite = 'Modulname', sub = 'Untermodul', serial = '2019-07-09', item = 12345678, -- Wikidata id -- nachfolgende kommen vor, aber nicht bekannt, was sie bewirken sollen frame = false, ns = -9999, -- number; current namespace number nsDocs = -99999, -- number; central documentation namespace number title = false, -- current page Title object transl = false, subpages = ?, suffix = ?, swift = ?, start = ?, -- string; defined pageDocRoot argument script = ?, -- string; module name (main) say = ?, -- string; message key specific = ?, -- string, optional; additional information collect = ?, lazy = ?, lead = ?, }
Mehr evtl. in Modul:Vorlage:LuaModuleDoc auf der deutschen Wikipedia.
Beispiele
function fs._failsafe( nil, moduleInterface )
{{#invoke: {{BASEPAGENAME}} | failsafe }}
Liefern die Version aus dem Modul selbst.
function fs._failsafe( 'wikidata', moduleInterface )
{{#invoke: {{BASEPAGENAME}} | failsafe | wikidata }}
Liefern die Version aus Wikidata.
function fs._failsafe( '2019-07-09', moduleInterface )
{{#invoke: {{BASEPAGENAME}} | failsafe | 2019-07-09 }}
Vergleichen die angeforderte Version mit der Modulversion.
{{#ifeq: {{#invoke:{{BASEPAGENAME}} | failsafe}} | {{#invoke:{{BASEPAGENAME}} | failsafe | wikidata }}
| {{ombox | type = notice | image = [[Image:Blue check.svg|30px]] | text = Das Modul ist auf dem aktuellen Stand. }}
}}
Hinweise
- Die obige Dokumentation wurde aus der Seite Modul:Failsafe/Doku eingefügt. (bearbeiten | Versionsgeschichte) Die Kategorien für dieses Modul sollten in der Dokumentation eingetragen werden. Die Interwiki-Links sollten auf Wikidata eingepflegt werden.
- Liste der Unterseiten
-- module interface local Failsafe = { suite = 'Failsafe', serial = '2022-04-25', 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]][[Category:Andere Modulversion in Wikidata]]', versionText = 'Versionsbezeichnung auf Wikidata:', noVersion = 'keine Version 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:gsub( '%.', '-' ) 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( 'Module:' .. title ) end function fs.getModuleVersion( frame ) local result = strings.versionText .. ' ' .. strings.noVersion local fromModule, fromWikidata, m, success local title = mw.ustring.gsub( mw.title.getCurrentTitle().text, '/' .. strings.docPage, '' ) if title == 'Failsafe' then -- the module itself 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 ) end if fromWikidata or fromModule then result = strings.versionText .. ' <code>' .. ( fromWikidata or fromModule ) .. '</code>' if fromWikidata and fromModule then result = result .. ' ' .. ( fromWikidata == fromModule and strings.ok or strings.notOk ) end end end return result end return fs