Hilfe:Lua/Links
{{Wikipedia:Lua/Linkbox}} Diese Hilfeseite stellt für Lua-Programmierer die Unterstützung bei Weblinks und Wikilinks durch Scribunto-Standardbibliotheken dar.
Es sind
mw.title
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
- 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.namespaces
mö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
curid
generiert 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.namespaces
mö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.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
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
Die meisten Eigenschaften lassen sich nur lesen, falls nicht anders angegeben (fragment).
- .id
curid
oder0
, 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)
- .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;
.text
ansonsten. - .baseText
- Auf einer Unterseite der Titel der unmittelbar übergeordneten Basis-Seite;
.text
ansonsten. - .subpageText
- Auf einer Unterseite der Titel des letzten Namens-Elementes;
.text
ansonsten. - .canTalk
true
wenn 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.exists
und 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.- .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.- .contentModel
- „Content Model“ für diese Seite, als Zeichenkette:
css
,javascript
,Scribunto
(Modul),wikitext
. - .protectionLevels
mRestrictions
array- .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 )
nil
wenn 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)
- :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.namespaces
mö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.namespaces
mö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=v
sein 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 (Wikitext oder andere Ressource) des title-Objekts oder
nil
, wenn die Seite nicht existiert.
mw.uri
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.
- 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,
false
fü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
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 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
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