Help:Templates/de

Wenn du Standardtexte hast, die du auf verschiedenen Seiten einbinden möchtest, kommt die Funktionalität von einem Template bei MediaWiki ins Spiel. Anders als Erweiterungen und Mediendateien gibt es keine zentrale Quelle für Templates. Templates können neu geschrieben oder, um doppelte Arbeit zu sparen, von einem anderen Wiki wie z.B. Wikipedia exportiert und dann im Zielwiki importiert werden.

Erstellen
Templates sind Standard-Wiki-Seiten, deren Inhalt so konzipiert ist, dass er in andere Seiten transkludiert (eingebunden) werden kann. Templates folgen einer Konvention, laut welcher dem Namen das Präfix " " vorangestellt wird, um sie diesem Namensraum zuzuweisen; abgesehen davon können sie wie jede andere Wiki-Seite erstellt werden.

Die einfachste Verwendung von Templates sieht folgendermaßen aus. Wenn man eine Seite mit dem Namen "Template:Welcome" erstellt, mit dem folgenden Inhalt:

Hallo! Willkommen in diesem Wiki.

hat man bereits die erste Vorlage erstellt! Wenn man nun den Code

in irgendeiner anderen Seite einfügt, wird auf dieser Seite der Text "Hallo! Willkommen in diesem Wiki." anstatt  erscheinen. Der Vorlageninhalt wurde somit in die andere Seite übernommen, d.h., er wird in diese Seite integriert.

Man kann nun  an einem beliebigen Punkt auf jeder Seite, wo man jemanden begrüßen möchte, einfügen. Nehmen wir an, die Vorlage wird auf 100 Seiten verwendet. Wenn man dann den Vorlageninhalt ändert zu:

Hallo! Willkommen in diesem wundervollen Wiki.

und eine der 100 Seiten, in der die Vorlage verwendet wurde, erneut besucht, wird man den neuen Text anstelle des ursprünglichen sehen. Auf diese Weise kann man die Inhalte von 100 Seiten ändern, ohne diese bearbeitet zu haben - und das nur, weil die Vorlage in diese Seiten eingebunden ist.

Dies ist die grundsätzliche Funktionsweise. Es gibt viele zusätzliche Funktionen, die diese Funktionsweise erweitern und die Verwendung von Vorlagen sehr nützlich machen.

Verwendung
Templates können in anderen Seiten auf diese Weise verwendet werden:


 * – wie oben beschrieben wird der Link automatisch durch den Inhalt von "Template:Name" zu dem Zeitpunkt ersetzt, an dem die Seite mit dem Template-Link aufgerufen wird. Der Link bleibt im Quellcode der Seite unverändert.
 * — wenn man diesen Template-Link verwendet, wird er ab dem Zeitpunkt, an dem die Seite mit dem Link gespeichert wird, endgültig durch den Inhalt von Template:Name ersetzt: eine Kopie des Inhalts von Template:Name ersetzt den Template-Link. Der Inhalt ist dann ein Teil der einschließenden Seite und kann normal, getrennt vom Original, bearbeitet werden. Hinweis: Spätere Änderungen am Ursprung der Template-Seite werden nicht auf die Seite mit dem Template-Link übertragen.
 * — dies wurde eingeführt, um das Ersetzen zu ermöglichen, ohne die Transklusion zu unterbrechen, siehe w:en:Help:Substitution.
 * wenn die Datei, die diese Anweisung enthält, aufgerufen wird, wird die Vorlage so eingefügt, dass ihr Inhalt als rohe Wikisyntax angezeigt wird, genauso, wie es tut.

Jede Wikiseite kann als Vorlage verwendet werden, einfach indem man den Namensbereich angibt, dem sie zugehört.


 * bindet  ein.
 * bindet  ein
 * schließt  ein
 * ersetzt sich selbst mit dem Inhalt von

Wenn kein solcher Namensbereich vorhanden ist, wird der vollständige Name als Vorlagenname angenommen.


 * bindet  ein

Parameter
Um die Funktionalität von Templates zu erweitern erlaubt es MediaWiki, Parameter an die Vorlage zu übergeben, wenn sie eingebunden wird. Parameter ermöglichen es dem Template, unterschiedliche Inhalte zu erzeugen oder sich unterschiedlich zu verhalten.

Angenommen, du möchtest auf der Talk-Seite anderer Benutzer ein kleines Dankeschön einfügen, wie z. B.:

Die Dankesnote wird einen Grund (in diesem Fall, für all deine Bemühungen) und eine Unterschrift (Ich) enthalten. Dein Ziel ist es, dass jeder Benutzer jedem anderen Benutzer danken kann, aus einem beliebigen Grund.

Damit die Notiz überall, wo sie verwendet wird, ähnlich aussieht, kann beispielsweise eine Vorlage namens definiert werden. Obwohl die Notiz überall, wo sie verwendet wird, ähnlich aussehen soll, wenn ein User einem anderen dankt, wird der genaue Inhalt (d.h. der Grund un die Signatur) unterschiedlich sein. Aus diesem Grund sollten diese als Parameter übergeben werden. Wenn wir die verbleibenden Elemente zur Formatierung der Box und zum Platzieren des Bildes ignorieren, lautet der Kerninhalt der Vorlage wie folgt:

Die Verwendung von  und   muss beachtet werden. Auf diese Weise können innerhalb von Vorlagen die Parameter identifiziert werden, die bei der Verwendung der Vorlage angegeben werden. Beachte, dass jeder Parameter der Vorlage von drei Klammern umgeben ist:. Dies unterscheidet sich von der normalen Verwendung des Namens der Vorlage.

Bei der Verwendung einer Vorlage auf einer Seite werden die Parameterwerte durch ein "Pipe"-Zeichen getrennt. MediaWiki erlaubt Parameter auf drei Arten an Vorlagen zu übergeben: Anonym, nummeriert und benannt.



Anonyme Parameter
Um anonyme Parameter zu übergeben, müssen die Werte der Parameter der Reihe nach aufgelistet werden:

In diesem Fall erhält die Vorlage  die Parameter   und , was folgendes erzeugt:

Die Reihenfolge, in der anonyme Parameter übergeben werden, ist entscheidend für ihr Verhalten. Das Tauschen der Parameter wie folgendend:

würde dieses Ergebnis erzeugen:



Nummerierte Parameter
Um Parameter nummeriert zu übergeben, werden alle Parameter beim Übergeben identifiziert:

Dieses Mal erhält die Vorlage  die Parameter   und , was folgendes erzeugt, obwohl die Parameter in umgekehrter Reihenfolge übergeben wurden:


 * Beispiele:

erzeugt:



Benannte Parameter
Der dritte Weg, um Parameter zu übergeben, ist mit Namen statt mit Nummern. In diesem Fall würde der Inhalt der Vorlage zu folgendem geändert werden:

Ein kleines Dankeschön... für. Grüße,

Innerhalb der Vorlage werden  und   statt Nummern verwendet, um jeden Parameter zu identifizieren. Um Parameter benannt zu übergeben, werden alle Parameter beim Übergeben identifiziert:

In diesem Fall erhält die Vorlage  die Parameter   und   und erzeugt:

Benannte Parameter beachten Groß- und Kleinschreibung, weswegen:

folgendes erzeugt:

Der Vorteil der Verwendung von benannten Namensräumen in einer Vorlage ist, neben der Flexibilität der Reihenfolge der Parameter bei der Übergabe, dass der Code der Vorlage leichter zu verstehen ist, wenn viele Parameter vorkommen.



Standardwerte
Beim Einsetzen einer Vorlage, die Parameter erwartet, ohne Argumente bereitzustellen, wie folgend:

würde bei nummerierten Parametern, wie im oberen Beispiel, folgendes Ergebnis erzeugt werden:

Da keine Argumente übergeben wurden präsentiert die Vorlage die bloßen Parameter statt der repräsentierten Werte. In diesem Fall wäre es hilfreich, Standardwerte für Parameter zu erzeugen, d.h. Werte, die benutzt werden, wenn keine Werte übergeben werden. Zum Beispiel, wenn die Werte der Vorlage zu folgendem geändert werden:

dann definiert, dass, wenn keine Argumente übergeben werden, für den Parameter  , der Wert   verwendet. Genauso definiert  den Standardwert des Parameters   als den Wert. Wenn jetzt die Vorlage eingesetzt wird, ohne Argumente zu übergeben, wird folgendes Ergebnis erzeugt:

Häufig werden Standardwerte verwendet, um alternative Namen von Parametern anzugeben. Wenn du beispielsweise  hast, sucht die Vorlage zuerst nach einem Parameter namens "a". Wenn es nicht gesetzt ist, wird es den Parameter namens "b" verwenden. Wenn weder "a" noch "b" gesetzt ist, wird nichts ausgegeben.

Evaluation
Im Allgemeinen werden Vorlagenparameter nach der Tokenisierung in die Vorlage eingesetzt, aber so wie sie sind. Sie werden erst ausgewertet, wenn sie verwendet werden.

Dies hat einige Konsequenzen. Wenn Sie ein  haben, das   enthält, und ein , das   enthält, und   auf eine Seite setzen, wird mytemplate nicht transkludiert, weil Token wie "|" nicht durch ein Template hinzugefügt werden können und ihre spezielle Bedeutung in Templates behalten. Du kannst weiterhin Vorlagen verwenden, um den Namen eines Parameters oder einer Vorlage zu steuern, aber du kannst einen Vorlagenaufruf nicht auf mehrere Vorlagen aufteilen.

Die zweite Folge davon ist die Dead-Code-Eliminierung. Wenn Sie eine Vorlage wie  aufrufen, und Template:Foo enthält nicht , dann wird der displaytitle nicht verwendet, da er nur ausgewertet wird, wenn er benötigt wird, und es gibt keinen Parameter, in den er ersetzt werden kann, also wird er nie ausgewertet. Dies kommt in der Regel bei der Verwendung von Erweiterung:ParserFunktionen zum Tragen und kann besonders in Verbindung mit dem Magischen Wort  auffallen, das je nach Benutzersprache variiert.

Template-Aufrufe, die mit dem magischen Wort  oder   beginnen, werden in einem separaten ersten Durchgang ausgewertet, der zur Zeitersparnis erfolgt, zusammen mit ~ und Links, die den Pipe-Trick verwenden. Wenn diese beim ersten Durchlauf nicht ausgewertet werden können, werden -Aufrufe ignoriert und   wie ein normales Template behandelt.

Viele, aber nicht alle Parser-Funktionen, Parser-Tags und transklusierte Sonderseiten werden nicht wie Templates direkt eingebunden, sondern durch einen "Strip-Marker" ersetzt. Das bedeutet, dass Sie die Ergebnisse nicht mit Parser-Funktionen wie padleft: oder ähnlichen Funktionen von Erweiterungen manipulieren können, da diese die Streifenmarkierung anstelle des Ergebnisses der Parser-Funktion sehen.



Rekursion in Vorlagen
Wenn eine Vorlage in sich selbst eingebunden wird, wirft das MediaWiki nicht in eine endlose Rekursion. MediaWiki stoppt die Einbindung, indem der Name der Vorlage in fetter Schrift erscheint. Wenn der Inhalt von Template:Aaaa zum Beispiel  ist, wird „a a Template loop detected:  Template:Aaaa z z“ angezeigt.



Unzulässige Begriffe
Diese Schutzmaßnahme verhindert einen potenziell nützlichen Template-Ausdruck, bei dem ein Template seine eigenen Aufrufargumente selbst normalisiert. In diesem unzulässigen Beispiel kann  entweder als   oder   bezeichnet werden. Bei der ersten Methode erfolgt ein Rückgriff auf die zweite Argumentstruktur (die mit Hilfe der String-Parser-Funktionen ermittelt wird), die dann einem einheitlichen Verarbeitungspfad folgt.



Falls  modifiziert wird, um nach   zu springen und   eine „identische manuelle Kopie“ von   ist, so funktioniert dieses Verfahren gut, da die Absicherung der automatischen Rekursion dynamisch und nicht statisch funktioniert.

Ein gangbarer Weg für die MediaWiki-Software, die Regel der Selbstrekursion zu lockern, wäre es, zu verlangen, dass jeder rekursive Aufruf eine unterschiedliche Anzahl von Argumenten haben muss, die sich von allen vorherigen aktiven Aufrufen unterscheiden und höchstens einmal rekursiv sein darf, wobei die Anzahl der Argumente nicht abnehmen darf. Das würde eine solide Sicherheit gegen endlose automatische Rekursion bieten und gleichzeitig nützliche Ausdrücke, wie den hier beschriebenen, auf flexible Weise ermöglichen.

Ist der Verarbeitungspfad von geringer Komplexität, kann eine einfache Lösung mit nur einem Template darin bestehen, jeden Aufruf in einer separaten if/else Verzweigung zu verarbeiten und die Logik des Prozesses in jedem Fall zu duplizieren. Wenn der Verarbeitungspfad komplexer ist, kann jeder Fall einer Aufrufstruktur an eine Vorlage zur Implementierung mit einer einheitlichen Aufrufstruktur delegiert werden, die das endgültige Template-Verhalten bereitstellt.



Tabellen in Parametern
Da die Syntax für Wikitabellen Pipes in einfachen geschweiften Klammern ({ }) vorsieht und der Pipe-Trick bei Transklusionsparametern nicht funktioniert, muss man eine Tabelle als separate Seite erstellen und sie von dort aus einbinden.



Steuern der Vorlageneinbindung
Standardmäßig wird der Inhalt einer Vorlage vollständig angezeigt, sowohl bei direkter Betrachtung, als auch wenn sie in einer anderen Seite inkludiert wird. Du kannst das Einbinden der Vorlagen jedoch durch die Verwendung von -, - und -Tags steuern.

Alles zwischen und  wird nur verarbeitet und angezeigt, wenn die Seite direkt angesehen wird und nicht, wenn sie in einer anderen Seite eingefügt ist. Das ist nützlich, wenn man Text oder Code in einer Vorlage einbinden will, diesen jedoch nicht für alle Seiten übernehmen will, die die Vorlage verwenden, zum Beispiel:


 * Kategorisierung von Vorlagen
 * Sprachübergreifende Verweise zu ähnlichen Vorlagen in anderen Sprachen
 * Erläuternde Texte, wie eine Vorlage zu verwenden ist

Das Gegenteil ist. Text zwischen und  wird nur verarbeitet und angezeigt, wenn die Seite eingefügt wird. Der offensichtliche Anwendungsfall ist das Hinzufügen aller Seiten, die eine vorgegebene Vorlage beinhalten, zu einer Kategorie.


 * Kategorisierung-Seiten, die die Vorlage enthalten. Hinweis: Wenn die Kategorien, die von einer Vorlage angewendet werden, auf diese Weise geändert werden, wird die Kategorisierung der Seiten, die diese Vorlage enthalten, möglicherweise erst einige Zeit später aktualisiert: Dies wird von der erledigt. Um die Neukategorisierung einer bestimmten Seite zu erzwingen, öffne diese Seite zur Bearbeitung und speicher sie ohne Änderungen.
 * Stelle sicher, dass der Code der Vorlage beim Anzeigen der Vorlagenseite selbst nicht ausgeführt wird. Typischerweise liegt dies daran, dass er Parameter erwartet, und seine Ausführung ohne Parameter hat ein unerwünschtes Ergebnis.

Alles außerhalb von und  wird normal verarbeitet und angezeigt, d.h. sowohl, wenn die Vorlagenseite direkt angezeigt wird, als auch, wenn die Vorlage in eine andere Seite eingebunden wird. Der Schwerpunkt liegt auf dem, was sich innerhalb dieser beiden Tags befindet.

Alles außerhalb der -Tags wird bei der Einbindung verworfen. Sogar Abschnitte, die nur als includeonly gekennzeichnet sind, werden bei der Einbeziehung verworfen, es sei denn, sie sind ebenfalls als onlyinclude gekennzeichnet. Der Schwerpunkt liegt auf dem, was außerhalb dieses Tags steht.

Eine Verschachtelung dieser Tags ist ebenfalls möglich.

Die drei Tags für partielle Transklusion ermöglichen alle möglichen Kombinationen dessen, was verarbeitet und gerendert wird. Auch Kommentare spielen eine Rolle.



Organisation von Vorlagen
Damit Vorlagen effektiv sein können, müssen Nutzer sie schnell finden können und dazu in der Lage sein, sie zu nutzen.

Um Vorlagen zu finden können Benutzer:
 * 1) auf ' > ' klicken.
 * 2) in der '-Liste Vorlage auswählen und auf ' klicken.

Eine einfache Technik ist die Integration eines Beispiels auf der Vorlagenseite. Zum Beispiel:

Verwendung
Benutzer begrüßen:

Ein Redakteur kann einfach das Beispiel kopieren und einfügen, um eine ähnliche Seite zu erzeugen. Das Beispiel ist trivial, doch ein funktionstüchtiges Beispiel, das demonstriert, wie Vorlagen verwendet werden können, spart in aufwändigen Umgebungen zu speziellen Themen leichter Zeit.



Verlinkung zu einer Vorlage
Eine Vorlagenseite kann wie jede andere Wiki-Seite verlinkt werden. Zum Beispiel wird der Link Template:Navbar mit dem Wikicode  erzeugt.

In vielen Wikis kann Template:Tl verwendet werden, um einen Link zu einer Vorlage bereitzustellen, die so formatiert ist, dass der Wikicode „double curly-braces” angezeigt wird, der erforderlich ist, um die Vorlage zu transkludieren, ohne den Tranklusionsvorgang tatsächlich durchzuführen. Zum Beispiel kann der Code  verwendet werden, um den Link Navbar zu erstellen.

Dieses Konstrukt wird häufig verwendet, wenn auf Vorlagen in der Vorlagendokumentation, auf Hilfeseiten und auf Diskussionsseiten verwiesen wird. Der gleiche Effekt kann mit  erzielt werden, aber der tl-Ansatz erfordert viel weniger Eingaben. In jedem gegebenen Wiki kann die Tl-Vorlage, falls vorhanden, den Text in einem "Code"-Element oder als Monospace-Schrift wiedergeben oder nicht. Wenn nicht (wie in diesem Wiki), kann eine andere ähnlich benannte Vorlage dies tun. Siehe zum Beispiel den Abschnitt "Siehe auch" unserer Template:Tl-Dokumentation.



Kopie von einem Wiki zu einem anderen
Vorlagen erfordern oft CSS oder andere Vorlagen, sodass Benutzer häufig Probleme haben, Vorlagen von einem Wiki in ein anderes zu kopieren. Die folgenden Schritte sollten für die meisten Vorlagen funktionieren.



MediaWiki Code
Falls man Importrechte im neuen Wiki hat:


 * 1) Gehe im Urspungs-Wiki/im originalen Wiki auf Special:Export und downloade .xml-Datein mit den gesamten Versionsgeschichten aller notwendigen Vorlagen. Verfahre dazu wie folgt:
 * 2) * Gebe den Namen der Vorlage in das große Textfeld ein, z. "Vorlage:Willkommen". Achte besonders auf Großschreibung und Sonderzeichen – wenn der Vorlagenname nicht genau richtig ist, wird der Export möglicherweise trotzdem ausgeführt, aber die .xml-Datei enthält nicht die erwarteten Daten.
 * 3) * Wähle das Kästchen "".
 * 4) * Wähle in dem Kästchen "".
 * 5) * Klicke auf.
 * 6) Gehe im neuen Wiki auf Special:Import und lade dort die .xml-Datei hoch.

Falls man keine Importrechte auf dem neuen Wiki hat:


 * 1) Gehe zu der Vorlage, die du aus dem ursprünglichen Wiki kopieren möchtest. Gehe zur Bearbeitungsseite und kopiere den gesamten Wikitext
 * 2) Gehe im neuen Wiki zu der Seite mit dem gleichen Namen wie die kopierte Vorlage. Klicke auf Erstellen/Bearbeiten und füge den kopierten Wikitext ein. Verlinke in der Bearbeitungszusammenfassung jeder Vorlage zur Zuordnung auf die Originalseite.
 * 3) Zurück im Original-Wiki im Bearbeitungsfenster, unterhalb des Bearbeitungsfeldes, sehe dir die Liste der "Auf dieser Seite verwendeten Vorlagen" an. Befolge für jede aufgeführte Vorlage diese Anweisungen. Tu dies auch für jede Vorlage, die von einer dieser Vorlagen verwendet wird, und so weiter.

Dadurch wird der gesamte erforderliche Code kopiert, was für einige Vorlagen ausreicht. Beachte, dass nur Seitenelemente, die beim Rendern der Seite ausgewertet werden, exportiert werden, d.h. Unterseiten der Dokumentation werden dabei nicht exportiert. Wenn es nicht funktioniert, suche auch nach roten Links, die unter "In die aktuelle Version dieser Seite übernommene Seiten:" unterhalb des Bearbeitungsfeldes aufgeführt sind. Wenn es welche gibt, wiederhole die obigen Schritte auch für diese und kopiere auch den Code in die Module.

Nachdem du die Vorlage und alle verknüpften Vorlagen erfolgreich aus dem anderen Wiki importiert hast, bearbeite sie, um die Anpassungen an dein Wiki anzupassen. Zum Beispiel, um ein Logo zu ändern, überflüssige Kategorien oder rote Links zu entfernen.

Erweiterungen
Eine häufig in Vorlagen verwendete Erweiterung ist ParserFunctions. Besuche die Seite und prüfe, ob eine der dort aufgeführten Funktionen in den von Ihnen kopierten Vorlagen verwendet wird. Wenn ja, musst du die -Erweiterung installieren. Um es zu installieren, benötigst du Systemadministrator-Zugriff auf den Server deiner MediaWiki-Installation.

Eine weitere Abhängigkeit, die in Vorlagen verwendet werden kann, insbesondere in Wikipedia, ist Lua.   im Vorlagencode zu haben, ist ein gutes Zeichen dafür. Falls es verwendet wird, musst du die -Erweiterung installieren, und der Systemadministratorzugriff ist ebenfalls erforderlich. Auf dieser Seite findest du weitere Anweisungen zur Installation und Verwendung der Erweiterung.



CSS und JavaScript-Code
Neben dem MediaWiki-Code verwenden viele Vorlagen CSS und einige verlassen sich auf JavaScript, um vollständig zu funktionieren. Wenn sich die kopierten Vorlagen nicht wie erwartet verhalten, kann dies die Ursache sein. Um das erforderliche CSS und JavaScript in dein Wiki zu kopieren, benötigst du normalerweise Administratorrechte, da du Systemmeldungen im Namensraum "MediaWiki:" bearbeitest.


 * 1) Achte auf die Verwendung von CSS-Klassen (Text wie  ) im Vorlagentext. Wenn diese Klassen in „MediaWiki:Common.css“ oder „MediaWiki:Monobook.css“ im ursprünglichen Wiki erscheinen, kopiere diese Klassen in „MediaWiki:Common.css“ im neuen Wiki und prüfe, ob die Vorlage jetzt in Ordnung ist.
 * 2) Wenn die kopierte Vorlage immer noch nicht wie erwartet funktioniert, prüfe, ob sich Code in "MediaWiki:Common.js" oder "MediaWiki:Monobook.js" im Original-Wiki befindet. Wenn dies der Fall ist, kannst du versuchen, es im neuen Wiki nach "MediaWiki:Common.js" zu kopieren. Normalerweise ist es eine gute Idee, nur Code aus vertrauenswürdigen Quellen zu kopieren und zuerst den Code zu durchsuchen, um die relevanten Teile zu identifizieren und auszuwählen. Möglicherweise findest du Kommentare, die als Anhaltspunkte dienen können, um die Funktionalität der einzelnen Teile zu identifizieren.



Siehe auch


Allgemeine Template-Verwendung

 * w:Help:Template – etwas ausführlicher als hier
 * m:Help:Template – ein viel ausführlicheres Dokument über die genaue Funktionsweise von Templates
 * m:Help:Advanced templates – beschreibt noch fortgeschrittenere Techniken wie dynamische Template-Aufrufe und variable Parameternamen



Spezielle Konstrukte, die in Vorlagen verwendet werden

 * – ausgefallene Sachen, die du in einigen Vorlagen finden kannst
 * – zusätzliche ausgefallene Steuerfunktionen wie #if und #switch
 * – Anleitung zur Verwendung von Parser-Funktionen in Vorlagen

<span id="Other_relevant_information">

Andere einschlägige Informationen

 * – ein Beispiel für einen speziellen Anwendungsfall einer Vorlage
 * – Verwendung von Templates als Textanfang für eine Seite
 * m:Help:Embed page – Einbettung von Seiten aus Namespaces außer
 * – Verwendung von Templates als Textanfang für eine Seite
 * m:Help:Embed page – Einbettung von Seiten aus Namespaces außer
 * m:Help:Embed page – Einbettung von Seiten aus Namespaces außer

<span id="External_links">

Externe Links

 * Miraheze-Vorlagen-Repository - MediaWiki-Vorlagen zur allgemeinen Verwendung.