Modul:IsIn
Dieses Modul wird auf vielen Seiten benutzt, und Änderungen werden projektweit sofort wahrgenommen. Bitte teste Änderungen vorher im /Sandkasten oder in deinem Benutzernamensraum. Die getestete Änderung sollte dann in einem einzigen Edit auf dieser Seite eingefügt werden. Bitte diskutiere Änderungen zuerst auf der Diskussionsseite bevor du sie implementierst. |
Dieses Modul ist geschützt. Es wird sehr häufig verwendet oder substituiert. Änderungen können zu einer großen Serverlast führen, und Vandalismus kann sich auf eine Vielzahl von Artikel auswirken. |
Dieses Modul benutzt die Wikidata-Eigenschaft:
|
Verwendung
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: 2022-10-22
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 überinvoke
in der Form:{{#invoke: IsIn | isDisambig | page = <Titel> }}
. Der Artikelname wird über die Parameterpage
oder1
ü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 zuenterTarget
.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
- Die obige Dokumentation wurde aus der Seite Modul:IsIn/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
-- documentation
local isInDoc = {
suite = 'IsIn',
serial = '2022-10-22',
item = 99527605
}
-- require( 'strict' )
local wu = require( 'Module:Wikidata utilities' )
local wikidata = {
instanceOf = 'P31',
disambigId = 'Q4167410'
}
local isIn = {
moduleInterface = isInDoc
}
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 = wu.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
return isIn