Modul:Failsafe: Unterschied zwischen den Versionen

Aus skandinavien-wiki.net
Keine Bearbeitungszusammenfassung
K (15 Versionen von wikivoyage:Modul:Failsafe importiert)
 
(4 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
local Failsafe = {
local Failsafe = {
suite  = 'Failsafe',
suite  = 'Failsafe',
serial = '2021-04-08',
serial = '2022-04-25',
item  = 65306115
item  = 65306115
}
}
Zeile 10: Zeile 10:
ok                = '[[File:Artículo bueno.svg|16px|text-bottom|Ok!]]',
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]]',
notOk            = '[[File:Symbol oppose vote.svg|15px|text-bottom|Contra]][[Category:Andere Modulversion in Wikidata]]',
failsafeUsed      = '[[Category:Modulversion mit failsave bestimmt]]',
versionText      = 'Versionsbezeichnung auf Wikidata:',
versionText      = 'Versionsbezeichnung auf Wikidata:',
noVersion        = 'keine Version verfügbar',
noVersion        = 'keine Version verfügbar'
noWikidataVersion = '(keine Version auf Wikidata verfügbar)'
}
}


Zeile 67: Zeile 65:
v = s[ i ].mainsnak.datavalue.value
v = s[ i ].mainsnak.datavalue.value
if v ~= '' then
if v ~= '' then
return v
return v:gsub( '%.', '-' )
end
end
end
end
Zeile 89: Zeile 87:
function fs.getModuleVersion( frame )
function fs.getModuleVersion( frame )
local result = strings.versionText .. ' ' .. strings.noVersion
local result = strings.versionText .. ' ' .. strings.noVersion
local failsafeUsed, fromModule, fromWikidata, m, success
local fromModule, fromWikidata, m, success


local title = mw.ustring.gsub( mw.title.getCurrentTitle().text, '/' .. strings.docPage, '' )
local title = mw.ustring.gsub( mw.title.getCurrentTitle().text, '/' .. strings.docPage, '' )
if title == 'Failsafe' then
if title == 'Failsafe' then -- the module itself
success = true
success = true
m = fs
m = fs
Zeile 102: Zeile 100:
fromModule = m.moduleInterface.serial
fromModule = m.moduleInterface.serial
fromWikidata = fs._failsafe( 'wikidata', m.moduleInterface )
fromWikidata = fs._failsafe( 'wikidata', m.moduleInterface )
elseif type( m.failsafe ) == 'function' then
failsafeUsed = true
fromModule = m.failsafe( '' )
fromWikidata = m.failsafe( 'wikidata' )
end
end
if fromWikidata or fromModule then
if fromWikidata or fromModule then
Zeile 111: Zeile 105:
.. ( fromWikidata or fromModule ) .. '</code>'
.. ( fromWikidata or fromModule ) .. '</code>'
if fromWikidata and fromModule then
if fromWikidata and fromModule then
if fromWikidata == fromModule then
result = result .. ' ' ..
result = result .. ' ' .. strings.ok
( fromWikidata == fromModule and strings.ok or strings.notOk )
else
result = result .. ' ' .. strings.notOk
end
elseif not fromWikidata then
result = result .. ' ' .. noWikidataVersion
end
if failsafeUsed then
result = result .. strings.failsafeUsed
end
end
end
end

Aktuelle Version vom 27. Januar 2023, 07:40 Uhr

Die Dokumentation für dieses Modul kann unter Modul:Failsafe/doc erstellt werden

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