============
Diazo-Regeln
============
````
spezifiziert eine ``theme``-Datei, z.B.::
``href``
erforderlicher Verweis auf eine HTML-Datei als relative oder absolute URL
``if``
spezifiziert eine mögliche Bedingung für diesen Verweis. Dies ermöglicht auch die Verwendung mehrerer Themes
``if-path``
spezifiziert einen URL-Pfad, der mit dem aktuellen Request erfüllt sein muss damit die Regel angewendet wird.
````
unterdrückt das Theming, z.B.::
Es können auch mehrere ````-Elemente angegeben werden.
Es stehen die Attribute ``if``, ``if-path``, ``if-content`` und ``css:if-content`` zur Verfügung.
````
ersetzt ein Element des Theme durch den Inhalt der Site.
Eine übliche Anwendung ist z.B., die ```` und ````-Tags aus Plone zu übernehmen::
````, ````
fügt Inhalte der Website am Anfang oder Ende des angegebenen Elements ein.
Hiermit können z.B. die von Plone verwalteten CSS- und Javascript-Dateien dem Theme hinzugefügt werden::
Eine weitere, häufig verwendete Möglichkeit ist die Verwendung der ``id``- und ``class``-Elemente des ``body``-Tags um verschiedene Bereiche der Website unterschiedlich zu gestalten::
An dem folgenden Beispiel, in dem die linke und rechte Spalte von Plone in einer Spalte zusammengefasst werden soll, wird deutlich, dass mit der Verwendung von und verhindert werden kann, dass eine Regel die Inhalte einer anderen Regel überschreibt::
````, ````
Diese sind äquivalent zu ```` und ````, aber stellen den betreffenden Inhalt vor oder nach dem betreffenden Element des theme dar.
````
kopiert HTML-Knoten aus der Plone-Site innerhalb des Theme-Tags::
Beachten Sie hierbei, dass jedes ````-Element innerhalb von ``id="portal-globalnav"`` der Plone-Site in den Knoten mit der ``id="main-nav"`` des Themes kopiert wird.
````
entfernt das angegebene Element.
Diese Regel unterscheidet sich insofern von den anderen, da sie aus nur einem ``content-value``-Paar besteht.
Hiermit kann die Ausgabe von Inhalten der Plone-Site unterbunden werden, z.B.das Icon des user-name-Knotens::
Genaugenommen wird jedes ````-Tag innerhalb des Elements mit der ID ``user-name`` entfernt.
````
entfernt das angegebene Element aus ``theme`` oder ``content`` wobei die Kindelemente erhalten bleiben.
**Beispiele**::
Das Element mit der ID ``content`` wird entfernt nicht jedoch dessen Kindelemente::
Zunächst wird das Element in ``theme`` mit der ID ``content-area`` durch das Element in ``content`` mit der ID ``main-area`` ersetzt und dann werden alle Kindelemente von ``#main-area`` mit der Klasse ``wrapper`` abgezogen.
````
fügt die Werte von Elementen aus ``theme`` und ``content`` desselben Attributs zusammen, also z.B.::
Reihenfolge
===========
Die Regeln werden nicht nacheinander abgearbeitet sondern in folgender festgelegter Reihenfolge:
#. ````-Regeln, die ``theme`` verwenden, nicht jedoch ``theme-children``.
#. ````
#. ````-Regeln, die ``theme`` verwenden, nicht jedoch ``theme-children``.
Soll ```` auf demselben Knoten verwendet werden, muss ``method="raw"`` verwendet werden, also z.B.::
#. ````
#. Regeln mit ``attributes``, also z.B.::
#. ``theme-children`` von ````-, ````- und ````-Regeln sofern keine ````-Regel für ``theme`` für denselben Knoten bereits früher ausgeführt wurde.
#. ````-Regeln, die ``theme`` verwenden, nicht jedoch ``theme-children``.
Die folgende Grafik veranschaulicht die Reihenfolge, in der die Regeln angewendet werden:
.. figure:: compiler.png
:alt: Diazo-Compiler
Diese festgelegte Reihenfolge führt meines Erachtens zu einer unnötigen Komplexität bei der Analyse, welche Regeln in welcher Reihenfolge abgearbeitet werden. Zudem bringt Diazo zum aktuellen Zeitpunkt noch keinen Debugger mit, wodurch die Analyse zusätzlich erschwert wird.
Keine Übereinstimmung
=====================
- Falls keine Regel auf ein bestimmtes Element des ``theme`` zutrifft, so wird dieses Element ignoriert.
- Eine ````-Regel, die auf ein Element in ``theme``, jedoch nicht auf ein Element in ``content`` zutrifft, wird im ``theme`` entfernt.
- Eine ````-Regel, die auf ein bestimmtes Element des ``theme`` zutrifft, entfernt ebenfalls dieses Element wenn es kein entsprechendes Element in ``content`` gibt.
- Sollen die Elemente nicht entfernt sondern ein Platzhalter erhalten bleiben, kann eine bedingte Regel mit ``if-content`` angegeben werden, z.B.::