enhancement
major
minor
defect
critical
major
minor
Problem
Für ein String-Attribut mit einer URL gibt es keine Zellanzeige als anklickbarer externer Link (neuer Browser-Tab). Ebenso fehlt eine Tabellenaktion, die eine externe Adresse öffnet.
Version: 8.0.0-alpha12, React-View-Layer (tl-layout-view/tl-layout-react).
Reproduktion (Prime)
Links (prime/project/documents.view.xml, Tabelle über primeLinks, Spalte Link#url): Die Adresse erscheint nur als Text.
Prime: Die Adresse des gewählten Links ist im Detailbereich anklickbar; in der Tabelle steht sie als Text.
Erwartetes Verhalten
Eine Zellanzeige bzw. Spaltenoption „externer Link“, anklickbar, öffnet die Adresse in einem neuen Tab.
Lösung
Zellanzeige als Link. Die Anzeige LinkDisplay (com.top_logic.layout.view.element) lässt sich als <display> an jede Tabellenspalte hängen – an eine Attributspalte ebenso wie an eine berechnete Spalte – und als <nodeContent> an einen Baum. Sie zeigt den Wert als Link:
- href: TL-Script über $value, das die Adresse berechnet (Standard: der Wert als Text),
- label: der angezeigte Text (Standard: die Adresse),
- tooltip: TL-Script für den Tooltip,
- kind: url (Standard), email (mailto:) oder tel (tel:),
- new-window: ob eine Webadresse in einem neuen Fenster öffnet (Standard: ja).
Die Suche der Tabelle findet die Zelle über den angezeigten Text. Eine Adresse, die Skript ausführt (javascript:, vbscript:, data:), wird nie zum Link. Die Anzeige zeichnet den Link mit dem Part FieldValue, also auch im MUI-Theme.
<column attribute="contactEmail"> <display class="com.top_logic.layout.view.element.LinkDisplay" kind="email"/> </column>
Ein Attribut eines Adresstyps (tl.util:URL, EMail, Phone) oder mit der Annotation <input-control> / TextInputControlProvider input-type="URL" erscheint in Formularen und Tabellen ohne weitere Konfiguration als Link. Für Prime genügt es daher, Link#url entsprechend zu annotieren.
Nur Links auf Webseiten (http, https) öffnen ein neues Fenster; E-Mail- und Telefon-Links übergeben die Adresse an das zuständige Programm, ohne ein leeres Fenster zu hinterlassen.
Aktion „Adresse öffnen“. Die Aktion <open-url url="..." new-window="..."/> (OpenUrlAction) öffnet eine Adresse, die ein TL-Script aus den Eingaben des Kommandos berechnet (z. B. aus der gewählten Zeile), in einem neuen Browser-Tab oder im Fenster der Anwendung. Sie ist als Kommando der Werkzeugleiste, im Menü und als Aktivierung einer Zeile (on-activate) verwendbar. Der Server schickt die Adresse mit dem SSE-Ereignis OpenUrlEvent an den Client. Verweigert der Browser das Fenster (Pop-up-Blocker), erhält der Benutzer einen Hinweis mit einem Link auf die Adresse, die er dann selbst öffnet.
Demo: tl-demo-react, Attribute → Tabelle: Spalten Homepage (Annotation), Kontakt-E-Mail (LinkDisplay kind="email"), Websuche (berechneter Link) und das Kommando Homepage öffnen.