FlowChart (WebWidget)
Stellt Flussdiagramme/FlowCharts dar und ermöglicht einer Bearbeitung dieser. Das aussehen der Zellen und Verbindungen ist dabei frei konfigurierbar.
Verwendung
Abhängigkeiten
- flowChart.html
- flowChart-directive.js
- dependencies
- mxGraph/*
- flowChartMxGraphConfig.xml
- flowChartNodeContainer.html
- flowChart.css
- ResizeSensor.js
Bearbeitungsmodus
Der Bearbeitungsmodus ist aktiv, wenn editable auf true gesetzt ist. Unabhängig vom Bearbeitungsmodus kann immer bei gedrückter sekundär Maustatse die Ansicht verschoben und über das Mausrad gezoomt werden.
Über ein Doppelklick auf eine Zelle kann ihr Inhalt verändert werden. Der bearbeitbare Inhalt ist dabei bei Blöcke entweder eine Referenz oder eine Aufzählung an Zustände/Labels , die als Ereignisse interpretiert werden. Die einzelnen Verbindungspunkte werden dabei durch Semikola getrennt. Bei Verbindungen stellt der Inhalt die Aufzählung der Trigger dar. Über ein Klick mit der sekunären Maustaste kann ein Kontextmenü aufgerufen werden. Über dieses kann mit der Zwischenablage interagiert, die Zelle entfernt oder ein Bild des Graphen erzeugt werden. Zudem kann darüber das Aussehen einzelner Zellen angepasst werden. Damit die Style-Eigenschaft wieder vom Style des Zelltyps abhängig ist, muss die Styländerungseingabe mit leerer Eingabe bestätigt werden, Über die Kontextmenüschaltfläche "Neu laden" kann bei referenzierenden zellen das referenzierte Objekt nach einer Änderung neu angefordert werden.
Über den Block Container an der rechten Seite können per Drag and Drop neue Zellen des entspechenden Typs erzeugt werden.
Toolbar Element | Beschreibung |
---|---|
Neu | Schickt die create_new Nachricht. |
Speichern | Triggert die save_flows Nachricht. |
Letzte Änderung rückgängig machen. | |
Letzte rückgängig gemachte Änderung wiederholen. | |
Selektieren | Ändert den Bearbeitungsmodus auf "select". In diesem Modus können neu Zellen per Drag and Drop aus dem BlockConatiner erzeugt und exestierende Zellen bearbeitet werden. Bei gedrückter primären Maustatse können mehrere Graphelemente auf einmal selektiert werden. |
Verbinden | Ändert den Bearbeitungsmodus auf "connect". In diesem Modus ist alles möglich, was im select Modus möglich ist. Zudem ist durch das Ziehen des Mauszeigers aus einer Zellmitte zu einer anderen zelle möglich, neue Verbindungen zu erstellen. Dafür muss die primäre Maustate gedrückt bleiben. |
Bewegen | Es können keine Zellen selektiert werden. Stattdessen lässt sich der Graph auch über das Betätigen der primären Maustaste verschieben. Dieser Modus ist auch aktiv, wenn der Bearbeitungsmodus nicht aktiv ist. |
Analysieren | Startet eine Analyse des aktuell geöfneten FlowCharts. Was analysiert werden soll, kann über das Analyze-Objekt der konfiguration festgelegt werden. |
Layout anwenden | Erlaubt eine schnelle strukturierte neuanordnung der Zellen. |
Ansicht | Erlaubt eine Änderung der Ansicht und das Anzeigen einer Übersicht über den FlowChart. |
Nachrichtenschnittstelle
Bei der Richtungsbeschreibung wird das WebWidget in seine zwei Komponenten unterteilt. Das in HTML implementierte WebWidget, welches die Darstellungslogik und Nutzerinteraktion im Browser implementiert und das in InstantView implementierte WebWidget, welches die andere Seite mit den Daten aus ClassiX versorgt und es steuert.
Name | Parameter | Beschreibung |
---|---|---|
Push-Nachrichten (IV→HTML) | ||
set_config | Config | Diese Nachricht ändert die Einstellung auf die übergebene. Bei nicht angegebenen Einstellungen wird die in Config-Objekt genannten Standareinstellung verwendet. |
merge_config | Config | Diese Nachricht ändert die Einstellung auf die übergebene. Bei nicht angegebenen Einstellungen werden die zuvor verwendeten Einstellung verwendet. |
Array(WrappedBlock|NULL) |
Nutze diese Nachricht, um auf die Nachricht "request" zu antworten.Diese Nachricht fügt Blöcke zum WebWidget hinzu und setzt die Aktion, welche diese Blöcke angefordert hat, fort. Nicht exestierende Blöcke werden durch NULL representiert. |
|
update_block | WrappedBlock | Diese Nachricht überschreibt einen Block oder fügt ihn hinzu. |
open_flow | WrappedBlock | Diese Nachricht öffnet den übergebenden FlowChart. |
Ereignisse (HTML→IV) | ||
initialize | - | Diese Nachricht ist die erste Nachricht, die das WebWidget schickt, sobald es sich initialisiert hat. Es signalisiert, dass nun Push-Nachrichten empfangen und verarbeitet werden können. |
save_flows | Array(WrappedBlock) | Diese Nachricht schickt ein Array mit FlowCharts, die gespeichert werden sollen. Wird gesendet, wenn die Schaltfläche "Speichern"betätigt wird. |
open | Open | Diese Nachricht signalisiert, dass der Block, auf welchen die Referenz verweist, geöffnet werden soll. |
request | Request | Diese nachricht signalisiert, dass Blöcke benötigt werden. Als Antwort sollte die Nachricht add_requested_blocks gesendet werden. |
create_new | - | Wird gesendet, wenn auf die Neu schaltfläche gedrückt wird und signalisiert, dass ein Neuer FlowChart erzeugt werden soll. |
Das Config-Objekt
Feld | Typ | Standardwert | Beschreibung |
---|---|---|---|
Boolean |
true |
Ob der BlockContainer angezeigt werden soll. |
|
Boolean |
true |
Ob die FlowCharts bearbeitbar sind. |
|
newCanBeCreated |
Boolean | false | Ob Schaltfläche zum Erzeugen neuer FlowCharts angezeigt weren sollen. Bei einer Betätigung diser Schaltflächen wird eine create_new Nachricht geschickt. |
limitConnectionDrawing |
Boolean | false | Ob die Anzahl der deklarierten Verbindungspunkte die Anzahl der Verbindungen, die gezeichnet werden können, limitieren soll. |
defaultCellType |
String |
"flow" |
Welchen Zelltyp neue Zellen haben, die erzeugt werden, wenn eine erstellte Verbindung keine Zielzelle hat. Ein leerer String sogt dafür, das Verbindungen ohne Anbund nicht erstellt werden. |
cellTypeOfFlows | String | "flow" | Welchen Zelltyp FlowCharts haben. FlowCharts können auch andere zelltypen haben, jedoch werden dann die ausgehende Verbindungen nicht automatisch bestimmt. |
stylesheet |
JSON-Object |
edge: { |
Legt das Aussehen der Zellen anhand ihrers zelltyps fest. Format: {Name:Style}. Das Aussehen einer Verbindung wird über das Style-objekt mit dem Name/Schlüssel"edge" festgelegt. Das Standardaussehen legt das Style-objekt mit dem Namen/Schlüssen"defaultVertex" fest. |
JSON-Object |
{ "flow": { "canBeOpened": true } } |
Legt die Eigenschaften der Zellen fest. Format: {CellTypeName:CellType} |
|
analyze |
Analyze | true |
{ "tooManyConnectionPointsDeclared":false "endlessLoops": false, "unreachableBlock": false, "notEndingWithSpecifiedBlockType": false, "notAllOutputsConnected": false, "outputNotExist": false, "outputNotSpecified": false, "outputConnectedMoreThanOnce": false, "referenceNotFound": false, "referenceNotSpecified": false } |
Legt fest, welche Analyzen bei einem Flow durchgeführt werden sollen. Wird true übergeben, so werden alle Analyzen durchgeführt. |
importSettings |
{ "codeCellType": "action", "pageCellType": "page", "unify": true, "defaultOkConnectionPoint": "OK" } |
Legt das Importverhalten von .vpfdx Flows und deren benötigten Dateien fest. |
|
neededEndTypes | JSON-Object | {} |
Legt fest, auf welchen Typen ein Flow enden darf und ob der Flow nach einem dieser Typen enden muss, also keine ausgehende Verbindungen erlaubt, selbst wenn Ereignisse vorhanden sind. Format: {CellTypeName:Boolean} |
Array(String) | Leeres Array | Die Celltypen, die den Start beziehungsweise Einstiegspunkte eines Flows markieren. Wird für mehrere Analyzen vorrausgesetzt. Muss nicht gesetzt werden, wenn keine der entsprechenden Analyzen durchgeführt werden sollen. |
Das Style-Objekt
Das Style-objekt legt das Standardmäßige Aussehen aller Zellen, dessens CellType dieses Style haben, fest. Im Celltype wird der Style über den Name, welcher im Stylsheet vergeben wird, referenziert.
Wir ein Feld nicht angegeben, so wird der Wert vom Style defaultVertex verwendet. Somit ist kein Feld obligatorisch.
Feld | Typ | Beschreibung |
---|---|---|
width |
height |
Die standard Weite der Zelle. |
height |
height |
Die standard Höhe der Zelle |
show |
Array(String) |
Welche Felder in welcher Reihenfolge auf der Zelle angezeigt werden solle. Mögliche Werte sind: "value", "id", "type" und "name". Bei "type" wird der Zellltype, bei "name" der (referenzierte) Name, bei "id" die ID der Zelle sund bei "value" entweder die Referenz oder, wenn es kein referenzierender Block ist, die Events angezeigt. |
editable |
Boolean |
Ob der Wert / die Referenz einer Zelle bearbeitbar ist. |
connectable |
Boolean |
Ob die zelle ein ein oder ausgehende Verbindung erlaubt. Die Zelle ist nur verbindbar, wenn es der Style und der Zelltyp dies nicht verbietet. |
shape |
String |
Die Form der Zelle. Die Formen sind: "rectangle", "triangle", "rhombus", "hexagon", "cylinder", "cloud", "parallelogram", "ellipse" und "doubleEllipse" |
rounded |
Boolean |
Ob die Ecken der Form abgerundet sein sollen. |
fonzSize |
Number |
Die Schriftgröße des Textes auf der Zelle. |
align |
String |
Die horizontale Ausrichtung des Textes auf der Zelle. Mögliche Ausrichtungen sind: "left", "center" "right". |
verticalAlign |
String |
Die vertikale Ausrichtung des Textes auf der Zelle. Mögliche Ausrichtungen sind: "top", "middle" "bottom". |
fillColor |
String |
Die Farbe, die die zelle ausfüllt. Mögliche Werte sind HTML-Color-Namen und Hex-Codes. |
fontColor |
String |
Die Frabe der Schrift auf der zelle. Mögliche Werte sind HTML-Color-Namen und Hex-Codes. |
strokeColor |
String | Die Farbe des Randes der Zelle. Mögliche Werte sind HTML-Color-Namen und Hex-Codes. |
overflow | String | Ob überstehender Text angezeigt werden soll. Mögliche Werte: "visible" und "hidden" |
Für mehr StyleOptionen, siehe STYLE_ Konstanten auf https://jgraph.github.io/mxgraph/docs/js-api/files/util/mxConstants-js.html
Das CellType-Objekt
Der Zelltyp beschreibt die Eigenschaften einer zelle
Feld | Typ | Standardwert | Beschreibung |
---|---|---|---|
canBeCreated | Boolean | false | Legt fest, ob leere Zellen dieses Zelltyps aus dem Blockcontainer heraus erstellt werden können. |
style | String | "defaultVertex" | Der Name des zuverwendendes Style-Objektes. |
maxOut | Integer | -1 |
Die Anazhl der möglichen ausgehenden Verbindungen. -1 bedeutet unendlich. Wenn createAsRef gesetzt ist, dann wird dieser Wert von der Anzahl der Ereignisse des referenzierten Blocks überschrieben. |
connectable | Boolean | true | Ob eine Verbindung mit Zellen dieses Typs verbunden werden können. Eine Zelle akzeptiert nur eine eingehende verbindung, wenn auch der Style dies erlaubt. |
description |
String | "" | Eine Beschreibung des Zelltyps, welche im BlockContainer angezeigt wird. |
canBeOpened | Boolean | false | Legt fest ob Blöck dieses Typs geöffnet werden können. Wenn ein Block geöffnet werden kann, dann gibt es im Contetmenü ein weiterer Button, über welche die open Nachricht gesendet werden kann. Vorraussetzung: CreateAsRef ist true. |
createAsRef | Boolean |
false Für unter cellTypeOfFlows angegebenem Typ immer true |
Ob der Zelltyp ein Referenztyp ist, dessen Inhalt also eine Referenz ist. Ist Vorraussetzung für canBeOpened. |
Boolean | false |
Legt fest, ob die Referenz des geöfnetes FlowCharts an die Referenz angehängt wird, wenn die Referenz des Blocks keinen Punkt enthält. Um dann auf ein Element mit einer Referenz ohne Punkt zu verweisen, muss der Prefix "root." (ohne Anführungszeichen) verwendet werden. Wird nur berücksichtigt, wenn createAsRef gesetzt ist. |
Das FlowChart-Objekt
Das FlowChart-Objekt representiert einen FlowChart, welcher angezeigt werden kann. Description und viewPosition sind optional und werden automatisch bei verwendung erzeugt.
Feld | Typ | Beschreibung |
---|---|---|
name | String |
Der Name des FlowCharts. Die Referenz zu einem FlowChart setzt sich zusammen aus dem Pfad und dem Namen: (path.)name Es wird nicht zwischen Groß- und Kleinschreibung unterschieden. |
path | String |
Der Pfad / die Specifikation des FlowCharts. Einzelne Spezifikator werden mit einem Punkt getrennt. Die Referenz zu einem FlowChart setzt sich zusammen aus dem Pfad und dem Namen: (path.)name Es wird nicht zwischen Groß- und Kleinschreibung unterschieden. |
content | Array(Block) | Alle Zellen und Verbindungen des FlowCharts. |
description | String | Die optionale Beschreibung des FlowCharts |
viewPosition | ViewPosition | Die Position und Skalierung des FlowCharts in der Ansicht. |
Das Block-Objekt
Das Block-Objekt representiert eine Zelle in einem FlowChart oder ein Block, aus welchem eine Zelle erzeugt werden kann beziehungsweise auf welchen eine Zelle verweisen kann.
Feld | Typ | Beschreibung |
---|---|---|
Nur wenn der Block eine Zelle ist | ||
geometry | Geometry | Die Position und Größe der Zelle |
style | String |
Der Name des Style-Objektes, welches das Aussehen dieser Zelle festlegt. MIt einem Semikolon getrennt können optional einzelne Feldänderungen des StyleObjektes aufgelistet werden. |
id | String | Eine im FlowChart eindeutige numerische ID. Muss mindestens "2" sein. |
type | String | Der Names des Zelltyps der Zelle. |
Nur wenn type "edge" ist | ||
source | String | Die ID der Zelle, von welcher die Verbindung ausgehen soll |
target | String | Die ID der Zelle, zu wecher die Verbindung geh soll. |
Array(String) | Bei welchen Ereignisse dieser Übergang ausgelöst werden soll. | |
Nur wenn type nicht "edge" ist und der Block eine referenzierende Zelle ist | ||
contentRef | String |
Die Referenz zum Block oder FlowChart, welcher die eigentlichen Informationen hält. Die Referenz zu einem Block setzt sich zusammen aus dem Pfad und dem Namen: (path.)name. Wenn für den Zelltyp pathCanBeRelative true ist, dann kann auch nur der Name angegeben werden, wodurch die Referenz vom FlowChart vorne dranngehängt wird. Dies kann durch den Pseudopfad "root" umgangen werden. Dieses Feld ist nicht vorhanden, wenn der Block bereits die eigentliche Informationen hält. |
Nur wenn type nicht "edge" ist und der Block keine referenzierende Zelle ist (contentRef ist nicht gesetzt) | ||
name | String |
Der Name des Blocks. Die Referenz zu einem Block setzt sich zusammen aus dem Pfad und dem Namen: (path.)name Es wird zwischen Groß- und Kleinschreibung unterschieden. |
path | String |
Der Pfad / die Specifikation des Blocks. Einzelne Spezifikator werden mit einem Punkt getrennt. Die Referenz zu einem Block setzt sich zusammen aus dem Pfad und dem Namen: (path.)name Es wird nicht zwischen Groß- und Kleinschreibung unterschieden |
events | Array(String) | Ein Array, welcher angibt, welche ausgehende Ereignisse dieser Block hat. |
description | String | Die Beschreibung des Blocks |
extraTooltipFields |
JSON-Object | Über dieses Feld können neben der Beschreibung noch weitere Felder zum Tooltip des Blocks hinzugefügt werden. |
Das WrappedBlock-Objekt
Das WrappedBlock-Objekt ist ein Wrapper-Objekt um ein Block- oder FlowChart-Objekt, welches zusätzlich das Verzeichnis hält, von wo dieser geladen wurde.
Feld | Type | Beschreibung |
---|---|---|
content | FlowChart | Block | Der zu öffnende oder speichernde FlowChart |
directory | String | Aus welchem Unterverzeichnis (startend nach dem Wurzelverzeichnis aller FlowChart Daten) der FlowChart geladen wurde bzw. in welchem er gespeichert werden soll. |
Das ViewPosition-Objekt
Feld | Typ | Beschreibung |
---|---|---|
x | Number | Die X-Koordinate der Position der Ansicht. |
y | Number | Die Y-Koordinate der Position der Ansicht. |
scale | Number | Die Skalierung der Ansicht |
Das Geometry-Objekt
Feld | Typ | Beschreibung |
---|---|---|
x | Number | Die X-Koordinate des Blockes im FlowChart. |
y | Number | Die Y-Koordinate des Blockes im FlowChart. |
height | Number | Die Höhe des Blocks oder des Labels einer Verbindung. |
width | Number | Die Weite des Blocks oder des Labels einer Verbindung. |
Nur wenn der Block eine verbindung repäsentiert. | ||
points | Array(JSON-Object) | Die Absolute Position der Biegepunkte einer Verbindung, Das JSON-Objekt für die Punkte hat folgendes Format:
{x:Number,y:Number} |
Das ImportSettings-Objekt
Beschreibt das Importverhalten beim Import von vpfd Dateien. Der Zelltyp von CALL Blöcken wird von cellTypeOfFlows festgelegt.
Feld | Typ | Standardwert | Beschreibung |
---|---|---|---|
actionCellType | String | "action" | Legt fest, welchen Zelltyp importierte Codeblöcke des Typs action haben werden. |
decisionCellType | String | "decision" |
Legt fest, welchen Zelltyp importierte Codeblöcke des Typs DECISION haben werden. |
pageCellType | String | "page" | Legt fest, welchen Zelltyp importierte Blöcke des Typs PAGE haben werden. |
endCellType | String | "end" | Legt fest, welchen Zelltyp importierte Codeblöcke des Typs END haben werden. |
startCellType | String | "start" | Legt fest, welchen Zelltyp importierte Codeblöcke des Typs START haben werden. |
defaultOkConnectionPoint | String | - | "" | Legt fest, durch welchen Name die Namen der Verbindungspunktes von code und call / flow Blöcken, die nur einen verbindungspunkt haben, vereinheitlicht werden soll. Wird kein String übergeben, so findet keine Vereinheitlichung der Ausgänge statt. |
ignoreObsolete | Boolean | false |
Legt fest, ob als obsolete markierte Blöcke beim Import übersprungen werden sollen. Als obsolte markiert gelten alle Verzeichnisse, die mit .obsolete enden oder mit einem Unterstrich anfangen und alle Dateien, die mit einem Unterstrich anfangen. Wenn dieses Feld auf false gesetzt wird, so wird im importiertem Namen die Makierung entfernt, und die Beschreibung der Blöcke auf "obsolete" gesetzt. |
Das Open-Objekt
Feld | Typ | Beschreibung |
---|---|---|
reference | String | Die Referenz des zu öffnenden Blocks/FlowCharts |
type | String | Der CellType des zu öffnenden Blocks. |
sourceRef | String | Die Referenz des FlowCharts, aus welchem die Anfrage stammt. |
sourceDirectory |
String | Das Unterverzeichnis, in welchem angefangen werden soll, den Block oder FlowChart zu suchen. Es sollten alle übergeordnete Unterverzeichnis durchsucht werden. |
Das Request-Object
Feld | Typ | Beschreibung |
---|---|---|
sourceRef | String | Die Referenz des FlowCharts, aus welchem die Anfrage stammt. |
requests | Array(Open ohne die Felder sourceRef und sourceDirectory) | Beschreibung der Blöcke/FlowCharts, die angefordert werden. |
sourceDirectory |
String | Das Unterverzeichnis, in welchem angefangen werden soll, die Blöck beziehungsweise FlowChart zu suchen. Es sollten alle übergeordnete Unterverzeichnis durchsucht werden. Es wird das Verzeichnis übergeben, aus welchem der anfragende FlowChart geöffnet wurde. |
Das Analyze-Objekt
Das Analyze-Objekt gibt an, welche Analyzen durchgeführt werden sollen. Eine Analyze wird immer bei Laden eines Flows oder durch das Betätigen der Schaltfläche Analysieren durchgeführt.
Der Typ aller Felder ist Boolean.
Feld | Beschreibung |
---|---|
tooManyEventsDeclared |
Wenn true, dann wird überprüft, ob bei einer Zelle mehr Ereignisse definiert wurden, als maxOut des ZellTypes an Verbindugen erlaubt. Betroffende Zellen werden mit einer Warnung markiert. Zellen, die keine ausgehende Verbindungen erlauben, also immer das Ende eines Flows makieren, werden ignoriert. |
endlessLoops |
Wenn true, dann wird überprüft, ob es Endlosschleifen, also Schleifen, in denen es kein Möglichkeit mehr gibt, dass Ende des Flows zu ereichen, gibt. Betroffende Zellen werden mit einer Warnung markiert. Vorraussetzung: EntryPointTypes ist gesetzt. |
unreachableBlock |
Wenn true, dann wird überprüft, ob jede Zelle erreichbar ist. Nicht erreichbare Zellen werden mit einer Warnung markiert. Vorraussetzung: EntryPointTypes ist gesetzt. |
eventNotExist |
Wenn true, dann wird überprüft, ob die entsprechenden Ereignisse für die bei einer Verbindung angegebener Trigger vorhanden sind. Hat die Zelle, von welcher der Verbindung ausgeht das angegenenen Ereignis nicht, so wird die Verbindung mit einer Warnung markiert. Wenn der CellTyp der Zelle, bei der die Verbindung startet, gleich cellTypeOfFlows ist, dann wird diese Warnung nur angezeigt, wenn neededEndTypes nicht leer ist und für kein enthaltender Zelltyp createAsRef gesetzt ist. |
notEndingWithSpecifiedBlockType | Wenn true und
neededEndTypes mindesten ein Typ enthält, dann wird überprüft, ob Zellen, bei denen der Flow endet, vom entsprechendem Typ sind. Sind die Zellen von einem anderem Typ, so werden sie mit einem Fehler markiert. Vorraussetzung: EntryPointTypes ist gesetzt. |
notAllEventsConnected |
Wenn true, dann wird überprüft, ob zu allen Ereignisse entsprechende Trigger gesetzt sind. Reagiert auf ein Ereignis kein Auslöser, dann wird die Zelle mit einer Warnung markiert. Zellen, bei denen der Flow endet, also keine ausgehende Verbindungen haben, werden ignoriert. Wenn der CellTyp der Zelle gleich cellTypeOfFlows ist, dann wird diese Warnung nur angezeigt, wenn neededEndTypes nicht leer ist und alle für kein enthaltender Zelltyp createAsRef gesetzt ist. |
triggerNotSpecified |
Wenn true, dann wird überprüft, ob bei jeder Verbindung ein Auslöser angegeben ist. Ist keiner angegeben, so wird die Verbindung mit einem Fehler markiert. |
eventConnectedMoreThanOnce |
Wenn true, dann wird überprüft, dass jedes Ereignis einer Zelle maximal von einer Verbindung als Auslöser gesetzt ist. Wenn ein Ereignis mehrfach ausgewählt ist, dann werden die betroffenden Verbindungen mit einem Fehler markiert. |
referenceNotFound | Wenn true, dann wird bei jeder referenzierenden Zelle überpüft, ob die angegebene Referenz auf ein Block des selben Zelltyps verweist. Wird kein Block gefunden, so wird die Zelle mit einem Fehler markiert. |
referenceNotSpecified | Wenn true, dann wird überpüft, dass bei jeder Zelle mit einem Celltype, bei welchem createAsRef gesetzt ist, eine Referenz angegeben wurde. Fehlt eine Referenz, so wird die betroffende Zelle mit einem Fehler markiert. |