Hilfe:Lua/Links
Diese Hilfeseite stellt fĂŒr Lua-Programmierer die UnterstĂŒtzung bei Weblinks und Wikilinks durch Scribunto-Standardbibliotheken dar.
Es sind
Wie bei Wikisyntax können Wiki-Seiten sowohl ĂŒber URL wie auch ĂŒber den Seitenbezeichner adressiert werden.
mw.title
[Bearbeiten | Quelltext bearbeiten]Das title-Objekt reprÀsentiert einen Seitennamen, vor allem aber die Eigenschaften der entsprechenden Wiki-Seite.
Es sind etliche Informationen ĂŒber die aktuelle (oberste) Seite und auch jede andere im Projekt verfĂŒgbar: Titel, Namensraum, Existenz, bis zum Inhalt.
Bibliotheksfunktionen und Konstruktoren
[Bearbeiten | Quelltext bearbeiten]- mw.title.getCurrentTitle()
- title-Objekt fĂŒr die aktuelle (oberste) Seite.
- mw.title.makeTitle( namespace, title, fragment, interwiki )
- title-Objekt fĂŒr die spezifizierte Seite.
- namespace kann alles sein, was unter
mw.site.namespacesmöglich ist.[1] - title ist natĂŒrlich eine Pflichtangabe.
- Ein nachgestelltes Fragment und eine Interwiki-PrÀfix-Gruppe (Sprache, Projekt) sind optional.
- Diese Funktion ist âteuerâ.[2]
- mw.title.new( text, namespace )
- mw.title.new( id )
- Erschafft ein neues title-Objekt.
- Wenn das erste Argument vom Typ number ist und somit fĂŒr die id entsprechend
curidgeneriert wird, ist der RĂŒckgabewertnil, wenn eine solche Seite nicht existiert. - Ein Seitenname text muss erlaubt sein; darf insbesondere kein Prozent-Encoding enthalten.
- Diese Funktion ist âteuerâ,[2] sofern es sich nicht um die aktuelle Seite im Sinne von
.getCurrentTitle()handelt und diese Seite auch nicht bereits geladen wurde. - Wenn das erste Argument vom Typ string ist und somit ein text ĂŒbergeben wurde, wird bei gĂŒltigem Wert selbst dann ein Objekt zurĂŒckgegeben, wenn diese Seite nicht existiert.
- Wenn im text kein Namensraum enthalten ist, wird namespace benutzt. namespace kann alles sein, was unter
mw.site.namespacesmöglich ist.[1] - Wenn text kein syntaktisch gĂŒltiger Seitenname ist, ist der RĂŒckgabewert
nil.
- Wenn im text kein Namensraum enthalten ist, wird namespace benutzt. namespace kann alles sein, was unter
- mw.title.newBatch( { texts }, namespace )
- Erschafft eine Sammelabfrage von Seitentiteln.
- Das erste Argument vom Typ table enthĂ€lt ausschlieĂlich strings als Seitentitel. Numerische Argumente wie bei title.new() sind unzulĂ€ssig.
- Das zweite Argument vom Typ string enthĂ€lt optional einen Standard-Namensraumbezeichner fĂŒr die angegebenen Seitentitel. Wenn in einem Element von texts kein Namensraum enthalten ist, wird namespace benutzt. namespace kann alles sein, was unter
mw.site.namespacesmöglich ist.[1] - ZurĂŒckgegeben wird ein Objekt, das zwei Methoden unterstĂŒtzt:
lookupExistence()fĂŒllt die Eigenschaften exists, contentModel, id und isRedirect des title-Objekts der jeweiligen Seiten.getTitles()gibt eine table der title-Objekte der abgefragten Seitentitel zurĂŒck. UngĂŒltige Seitentitel bekommen den Wertnilzugewiesen.
- Diese Funktion ist âteuerâ,[2] jedoch nur einmal je 25 abgefragter Seitentitel.
- mw.title.equals( a, b )
trueâ wenn beide title-Objekte die gleiche Seite darstellen.- Fragmente werden beim Vergleich ignoriert.
- mw.title.compare( a, b )
- RĂŒckgabewerte sind
-1,0, oder1, um anzuzeigen, ob title-Objekt a kleiner, gleich oder gröĂer ist als title-Objekt b. ZunĂ€chst werden die Nummern der NamensrĂ€ume verglichen, danach ggf. die (normalisierten) Seitentitel.
title-Objekt
[Bearbeiten | Quelltext bearbeiten]Wie bei jedem Objekt kann, nachdem es erstellt wurde, das von ihm reprÀsentierte Gebilde nÀher untersucht werden.
Mit relationalen Operatoren können title-Objekte verglichen werden.
tostring( title )ergibt title.prefixedText.
Eigenschaften
[Bearbeiten | Quelltext bearbeiten]Die meisten Eigenschaften lassen sich nur lesen, falls nicht anders angegeben (fragment).
- .id
curidoder0, wenn die Seite nicht existiert.- .interwiki
- Interwiki-PrÀfix-Gruppe (Sprache, Projekt), oder
"". - .namespace
- Namensraum-Nummer.
- .fragment
- Das fragment, oder
"". - Kann gesetzt werden.
- .nsText
- Der kanonische Name des Namensraums
- .subjectNsText
- Namensraum-Name der Inhaltsseite (GegenstĂŒck zur Diskussionsseite)
- .talkNsText
- Namensraum-Name der Diskussionsseite (GegenstĂŒck zur Inhaltsseite)
- .text
- Seitentitel, ohne Namensraum und Interwiki-PrÀfix
- .prefixedText
- Seitentitel, mit Namensraum und Interwiki-PrÀfix
- .fullText
- Seitentitel, mit Namensraum und Interwiki-PrÀfix und Fragment.
- .rootText
- Auf einer Unterseite der Titel der obersten Basis-Seite;
.textansonsten. - .baseText
- Auf einer Unterseite der Titel der unmittelbar ĂŒbergeordneten Basis-Seite;
.textansonsten. - .subpageText
- Auf einer Unterseite der Titel des letzten Namens-Elementes;
.textansonsten. - .canTalk
truewenn diese Seite eine Diskussionsseite haben kann (NRâ„0).- .exists
trueâ wenn diese Seite existiert.- Bei Dateien und
Media:ist dies ein Alias fĂŒr.file.existsund wird entsprechend bewertet. - Ansonsten geht dies nicht erneut in die ZĂ€hlung âteurerâ[2] Funktionen ein.
- Bei Bildung durch
.getCurrentTitle()existiert die Seite immer (es sei denn, sie wĂŒrde soeben erst mit dem Speichern erstellt); beimw.title.makeTitle()wird dies erst ermittelt. - .file
- table, falls in den NamensrÀumen der Mediendateien, sonst
false.- Dies ist doppelt teuer,[2] weil auch auf Commons nachgefragt werden könnte.
- Komponenten:
.exists- Wenn nicht existent, sind alle weiteren Komponenten
nil.
- Wenn nicht existent, sind alle weiteren Komponenten
.height- Höhe in Pixeln; falls paged media, dann der ersten Seite.
.mimeType.pages- table, falls paged media; darin eine table pro Seite, mit Höhe und Breite.
.size- GröĂe in Bytes.
.width- Breite in Pixeln; falls paged media, dann der ersten Seite.
- .fileExists
. Obsolet; jetzt .file.exists
.getFileInfo()- abgelöst durch
.file - .isContentPage
trueâ wenn es ein Inhalts-Namensraum ist.- .isDisambiguationPage
trueâ wenn die Seite als BegriffsklĂ€rungsseite deklariert ist.- .isExternal
trueâ wenn es einen Interwiki-PrĂ€fix gibt.- .isLocal
trueâ wenn es ein Projekt gleicher Art ist.- FĂŒr die deutschsprachige Wikipedia ist jede Wikipedia âlokalâ, Wiktionary und Meta sind es nicht.
- Mit einem lokalen Projekt kann ĂŒber Interlanguage verbunden werden.
- .isRedirect
trueâ wenn diese Seite als Weiterleitung gespeichert ist.- .isSpecialPage
trueâ wenn diese Seite eine Spezialseite sein kann (wenn sie im NamensraumSpezial:liegt und es ein gĂŒltiger Alias ist)- .isSubpage
trueâ wenn dies eine Unterseite einer anderen ist.- .isTalkPage
trueâ wenn dies eine Diskussionsseite ist.- .categories
- sequence table mit Kategorietiteln
- Diese Funktion ist âteuerâ.[2]
- .content
- Zeichenkette mit dem unverÀnderten Quelltext (Wikitext oder andere Ressource) des title-Objekts; bzw.
nil, wenn die Seite nicht existiert. - .contentModel
- âContent Modelâ fĂŒr diese Seite, als Zeichenkette:
css,javascript,Scribunto(Modul),wikitextusw. - .protectionLevels
mRestrictionssequence table- Diese Funktion ist âteuerâ.[2]
- cascadingProtection
- Kaskadierender Seitenschutz
- Objekt mit Komponenten:
restrictionssources
- Ohne Kaskadenschutz sind beide Komponenten
nil - Diese Funktion ist âteuerâ.[2]
- .pageLang
- mw.language-Objekt zur Seiteninhaltssprache.
- In mehrsprachigen Wikis können bestimmten Seiten eigene Sprachen zugewiesen sein; ansonsten ist fĂŒr alle Seiten deren Sprache zunĂ€chst gleich der Projektsprache.
- Bei Seiten, deren âContent Modelâ nicht
wikitextist, also insbesondere Programmiersprachen, ist meistendie Seitensprache. Dadurch wird ggf. lateinische Schrift von links nach rechts die Vorgabe. - .redirectTarget
- Ziel einer Weiterleitungsseite
- title-Objekt
- .basePageTitle
- Wirkungsgleich zu mw.title.makeTitle( title.namespace, title.baseText )
- .rootPageTitle
- Wirkungsgleich zu mw.title.makeTitle( title.namespace, title.rootText )
- .talkPageTitle
- Wirkungsgleich zu mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text )
nilwenn es zu diesem title keine Diskussionsseite geben kann.- .subjectPageTitle
- Wirkungsgleich zu mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text )
Methoden (Funktionen)
[Bearbeiten | Quelltext bearbeiten]- :isSubpageOf( title )
- Parameter: title, ein title-Objekt
- RĂŒckgabe:
trueâ wenn das aktuelle Objekt eine Unterseite von title ist. - :inNamespace( namespace )
- Parameter: namespace. namespace kann alles sein, was unter
mw.site.namespacesmöglich ist.[1] - RĂŒckgabe:
trueâ wenn das aktuelle Objekt im angegebenen Namensraum liegt. - :inNamespaces( ns1, ns2, ⊠)
- Parameter: mehrere NamensrÀume
- RĂŒckgabe:
trueâ wenn das aktuelle Objekt in einem der angegebenen NamensrĂ€ume liegt. - :hasSubjectNamespace( namespace )
- Parameter: namespace. namespace kann alles sein, was unter
mw.site.namespacesmöglich ist.[1] - RĂŒckgabe:
trueâ wenn diese Seite selbst oder ihre Diskussionsseite im Inhalts-Namensraum namespace liegt. - :subPageTitle( text )
- Wirkungsgleich zu mw.title.makeTitle( title.namespace, title.text .. "/" .. text )
- :partialUrl()
- Parameter: keine
- RĂŒckgabe: Die Eigenschaft .text mit dem URL-Encoding wie in einer URL.
- :localUrl( query )
- Parameter: Die optionale query wie .fullUrl()
- RĂŒckgabe: URL des Objekts relativ zur Projekt-Domain
- :fullUrl( query, proto )
- RĂŒckgabe: Volle URL zum aktuellen Objekt.
- Parameter: Die optionale query gibt weitere URL-Parameter an und kann ein table
k=vsein oder eine Zeichenkette. - proto kann einen der folgenden Werte annehmen:
"relative"(Vorgabe des optionalen Wertes)"http""https""canonical"
- :canonicalUrl( query )
- Parameter: Die optionale query wie .fullUrl()
- RĂŒckgabe: Kanonische URL des Objekts (standardisiertes Format mit Protokoll)
- :getContent()
- Parameter: keine
- RĂŒckgabe: Zeichenkette mit dem unverĂ€nderten Quelltext; veraltet, seit Herbst 2024 .content
mw.uri
[Bearbeiten | Quelltext bearbeiten]Diese Methoden sind gut geeignet zur Synthese von URL und zur Analyse formal korrekter URL.
Bei unbekannt im Wikitext vorgefundenen Zeichenketten, die eine URL sein sollen, empfiehlt sich vorher eine vorsichtige Analyse auf formale ZulÀssigkeit mit URLutil, oder andere Mechanismen zum Abfangen von Fehlersituationen.
- mw.uri.encode( s, enctype )
- Encoding der Zeichenkette s (Prozent).
- Der optionale enctype (Vorgabe:
"QUERY") kann folgende Werte haben:"QUERY"â Leerzeichen als+fĂŒr query-Komponenten."PATH"â Leerzeichen als%20"WIKI"â Leerzeichen als_(dies ist nicht vollstĂ€ndig umkehrbar, weil auch vorhandene_ununterscheidbar werden)
- mw.uri.decode( s, enctype )
- Prozent-Dekodierung von s
- Der optionale enctype (Vorgabe:
"QUERY") kann folgende Werte haben:"QUERY"â ersetze+durch Leerzeichen"PATH"â Keine besondere Behandlung potentieller Leerzeichen."WIKI"â ersetze_durch Leerzeichen
- mw.uri.anchorEncode( s )
- Encoding von s, so dass dieser als Fragment in einer Wiki-URL benutzt werden kann (Punkt statt Prozent).
- mw.uri.buildQueryString( table )
- Wandle den Inhalt einer table in eine Folge von Zuweisungen k=v und verkette durch
&zu einer Zeichenkette. - Die k in table sollen Zeichenketten sein.
- Die v in table können sein: string, number, sequence table fĂŒr mehrfaches Auftreten,
falsefĂŒr âleerâ. - mw.uri.parseQueryString( s )
- Wandle eine Zeichenkette s um in eine table und löse die
&k=v in Elemente der table.- Leere Zuweisungen
&k= erhalten den Wertfalse. - Wiederholte Zuweisungen mit gleichem k werden als sequence table abgelegt.
- Alle anderen v werden Zeichenketten.
- Leere Zuweisungen
- mw.uri.localUrl( page, query )
- uri-Objekt fĂŒr die lokale URL (bezogen auf die Domain) einer Wiki-Seite page oder einfache Zeichenkette.
- Optional mit query als fertige Zeichenkette oder table mit Spezifikationen k=v.
- mw.uri.fullUrl( page, query )
- uri-Objekt fĂŒr die vollstĂ€ndige URL (aber ohne Protokoll) einer Wiki-Seite page oder einfache Zeichenkette.
- Optional mit query als fertige Zeichenkette oder table mit Spezifikationen k=v.
- mw.uri.canonicalUrl( page, query )
- uri-Objekt fĂŒr die kanonische URL (mit aktuellem Protokoll) einer Wiki-Seite page oder einfache Zeichenkette.
- Optional mit query als fertige Zeichenkette oder table mit Spezifikationen k=v.
- mw.uri.new( s )
- mw.uri.new( table )
- uri-Objekt bilden durch Parsen einer Zeichenkette s oder BefĂŒllen der Felder in table.
- mw.uri.validate( s )
- mw.uri.validate( table )
- ĂberprĂŒfe die Verwendbarkeit einer Zeichenkette s oder der Felder in table fĂŒr
mw.uri.new(). - boolean fĂŒr Verwendbarkeit, Zeichenkette mit Fehlermeldung sonst.
uri-Objekt
[Bearbeiten | Quelltext bearbeiten]Wie bei jedem Objekt kann, nachdem es erstellt wurde, das von ihm reprÀsentierte Gebilde nÀher untersucht werden.
Felder, von denen einige oder alle nil sein können:
- .protocol
- (string) protocol/scheme
- .user
- (string) user
- .password
- (string) password
- .host
- (string) host name
- .port
- (number) port
- .path
- (string) path
- .query
- (table) wie aus
mw.uri.parseQueryString - .fragment
- (string) fragment.
AuĂerdem sind die nachstehenden Eigenschaften vorhanden:
- .userInfo
- (string) user and password
- .hostPort
- (string) host and port
- .authority
- (string) user, password, host, and port
- .queryString
- (string) version of the query table
- .relativePath
- (string) path, query string, and fragment
tostring()ergibt den (kanonischen) Text der URI.
An Methoden sind vorhanden:
- :parse( s )
- Werte von query-Zuweisungen aus der Zeichenkette s in das Objekt einfĂŒgen.
- Bestehende Werte, die nicht in s vorkommen, bleiben erhalten.
- :clone()
- Kopie des Objekts
- :extend( parameters )
- parameters ist eine table, deren Wertzuweisungen den bestehenden in der Query-Komponente hinzugefĂŒgt werden oder sie ĂŒberschreiben.
Anwendungsbeispiel
[Bearbeiten | Quelltext bearbeiten]Die nachstehende Funktion versucht ein Link auf die Versionsgeschichte zurĂŒckzugeben, wobei die Seite ĂŒber die Seitenkennnummer curid definiert ist. Programmierfehler und ungĂŒltige Zahlenwerte werden erkannt. Beide auf dieser Seite dargestellten Bibliotheken/Objekte werden verwendet.
function versionen( curid )
local r
if type( curid ) == "number" and curid > 0 then
local page = mw.title.new( curid )
if page then
local uri = mw.uri.fullUrl( page.prefixedText,
{ action = "history" } )
r = string.format( "[%s Versionen]", tostring( uri ) )
else
r = string.format( "Seite %d fehlt", curid )
end
else
r = "*BAD curid*"
end
return r
end