Modul:IsIn

Aus Wikivoyage
Zur Navigation springen Zur Suche springen
Template-info.png Dokumentation für das Modul IsIn[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

Dieses Modul enthält Funktionen zur Unterstützung der Vorlagen {{IstIn}} und {{IstInKat}}. Die Funktionen des Moduls werden nicht direkt aufgerufen, sondern über die genannten Vorlagen.

Versionsbezeichnung auf WikiData: 2020-10-24 Ok!

Funktionen

function isIn.isDisambig( frame )

Die Funktion bestimmt, ob es sich bei der angegebenen Seite um eine Begriffsklärungsseite (Wegweiser) handelt oder nicht. Es gibt zwar das Schlüsselwort __DISAMBIG__, das aber von Vorlagen und Lua-Modulen nicht ausgewertet werden kann. Deshalb wird der Status aus Wikidata bezogen.

Es gibt zwei Parameterformen:

  • frame: string. Die zu testende Seite wird direkt als Zeichenkette übergeben.
  • frame: table. Der Aufruf erfolgt über invoke in der Form: {{#invoke: IsIn | isDisambig | page = <Titel> }}. Der Artikelname wird über die Parameter page oder 1 übergeben.

Das Ergebnis wird als eine Zeichenkette übergeben. Einzige Werte sind true (ist eine Begriffsklärungsseite) oder false (ist keine Begriffsklärungsseite).

function isIn.checkTarget( frame )

Die Funktion liefert den Typ der zu testenden Seite als Zeichenkette zurück. Der Aufruf erfolgt über invoke in der Form: {{#invoke: IsIn | checkTarget | page = {{{1}}} | enterTarget = Ist-In eintragen }}.

Vorgabeparameter:

  • |page= Name der zu testenden Seite.
  • |enterTarget= Dummy-Seitenname, der auf einen fehlenden Eintrag hinweist.

Mögliche Rückgabewerte:

  • emptyTarget: Es wurde eine leere Zeichenkette übergeben.
  • enterTarget: Die übergebene Zeichenkette ist identisch zu enterTarget.
  • invalidTitle: Die Zeichenkette enthält unerlaubte Zeichen.
  • isDisambig: Bei der zu testenden Seite handelt es sich um eine Begriffsklärungsseite.
  • isItself: Die zu testende Seite ist identisch zur aufrufenden Artikelseite.
  • isRedirect: Bei der zu testenden Seite handelt es sich um eine Weiterleitungsseite.
  • notExisting: Die angegebene Seite existiert nicht.

In allen anderen Fällen wird der Seitenname mit dem Namensraum zurückgegeben.

function isIn.addCategories( frame )

Die Funktion liefert einen Satz von Kategorieaufrufen als Zeichenkette zurück, die der Elternvorlage als nummerierte Parameter übergeben wurden. Ungerade Parameter bezeichnen den Kategoriennamen (ohne Kategorie), gerade das Sortierkriterium.

function isIn.addPageCategory( frame )

Die Funktion liefert einen Kategorieaufruf als Zeichenkette zur aufrufenden Seite zurück, wenn die Kategorie existiert.

Benötigte weitere Module

Dieses Modul benötigt folgende weitere Module: Wikidata utilities
Hinweise
-- documentation
local isInDoc = {
	suite  = 'IsIn',
	serial = '2020-10-24',
	item   = 99527605
}

require( 'Module:No globals' )
local fw = require( 'Module:Wikidata utilities' )

local wikidata = {
	instanceOf = 'P31',
	disambigId = 'Q4167410'
}

local isIn = {}

function isIn.isDisambig( frame )
	local page, pageId
	if not frame then
		return 'false'
	end
	if type( frame ) == 'table' and not frame.args then
		return 'false'
	end
	if type( frame ) == 'table' then
		page = frame.args.page or frame.args[ 1 ] or ''
	else
		page = frame
	end
	page = mw.text.trim( page )
	if page == '' then
		return 'false'
	end
	pageId = mw.wikibase.getEntityIdForTitle( page )
	if not pageId then
		return 'false'
	end
	local values = fw.getValues( pageId, wikidata.instanceOf )
	if values == '' then
		return 'false'
	end
	for i, v in ipairs( values ) do
		if v.id == wikidata.disambigId then
			return 'true'
		end
	end
	return 'false'
end

function isIn.checkTarget( frame )
	local page = mw.title.getCurrentTitle()

	local args = frame.args
	args.page = args.page or args[ 1 ] or ''
	args.page = mw.text.trim( args.page )
	args.enterTarget = args.enterTarget or ''
	local targetPage = mw.ustring.gsub( args.page, '^' .. page.nsText .. ':', '' )
	if targetPage == '' then
		return 'emptyTarget'
	elseif targetPage == page.text then
		return 'isItself'
	elseif args.enterTarget == args.page then
		return 'enterTarget'
	end

	if page.nsText ~= '' then
		targetPage = page.nsText .. ':' .. targetPage
	end
	local targetObj = mw.title.new( targetPage )
	if not targetObj then
		return 'invalidTitle'
	elseif not targetObj.exists then
		return 'notExisting'
	elseif targetObj.isRedirect then
		return 'isRedirect'
	elseif isIn.isDisambig( targetPage ) == 'true' then
		return 'isDisambig'
	else
		return args.page
	end
end

function isIn.addCategories( frame )
	local args = frame:getParent().args
	local cat, catSort
	local i = -1
	local result = ''
	repeat
		i = i + 2
		cat = args[ i ] or ''
		catSort = args[ i + 1 ] or ''
		if cat ~= '' then
			result = result .. '[[Category:' .. cat
				.. ( catSort ~= '' and ( '|' .. catSort ) or '' )
				.. ']]'
		end
	until i > 30 or cat == ''
	return result
end

function isIn.addPageCategory( frame )
	local page = mw.title.getCurrentTitle()
	if page.nsText == '' then -- only main namespace
		page = 'Category:' .. page.text
		local title = mw.title.new( page )
		if title and title.exists then
			return '[[' .. page.. '| ]]'
		end
	end
	return ''
end

-- module administration
function isIn.IsIn()
	return isInDoc
end

function isIn.failsafe( version )
	return fw._failsafe( version, isInDoc ) or ''
end

return isIn