Dokumentation für das Modul Failsafe[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

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 Ok!

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. Wenn version = 'wikidata' ist, wird die Versionsnummer aus Wikidata bezogen, wenn sie dort vorhanden ist. Ansonsten aus dem Modul selbst. Wenn version 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, ansonsten false.
      • table: frame-Tabelle (template, #invoke)
    • moduleInterface
      • Tabelle mit Angaben zum Modul.
  • Zurückgelieferter Wert:
    • Version oder false
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. }}
    }}
Prüft, ob die Version auf Wikidata mit der Modulversion identisch ist.
Hinweise
-- 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