Zum Hauptinhalt springen

<kaleidr-map>, das Element

<kaleidr-map> bindet ein Kaleidr-Produkt deklarativ ein. Du schreibst das Element mit Attributen; es wird beim Einfügen ins Dokument eingebunden und beim Entfernen aufgeräumt. Definiert wird es von kaleidr.js, daher muss die Seite dieses Skript laden.

<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>

<kaleidr-map product="viewer" share-id="YOUR_MAP_ID"
style="display:block; height:480px"></kaleidr-map>

Das Element ist ein schlanker Wrapper: Es wandelt Attribute in Optionen um und ruft Kaleidr.mount auf sich selbst auf. Alles, was das Element kann, geht auch mit Kaleidr.mount. Umgekehrt nicht: Das Element kann kein aktives Kartenobjekt entgegennehmen und stellt kein Handle bereit.

Verwende das Element, wennVerwende Kaleidr.mount, wenn
Die Einbindung statisches HTML ist.Du das Handle für setCamera, setStyle, setTheme oder destroy brauchst.
Ein CMS oder eine Vorlage HTML ausgibt.Du Chat mit deiner eigenen Karte verbindest und die Option map benötigst.
Das Entfernen aus dem Dokument automatisch aufräumen soll.Ein Framework das Ein- und Aushängen steuert.

Attribute​

Attributnamen verwenden kebab-case, die entsprechenden Einbindungsoptionen camelCase.

AttributEinbindungsoptionProdukteErforderlichStandardNach Einbindung beobachtetBeschreibung
productproductallejakeinerneinchat, viewer, editor oder tile.
publishable-keypublishableKeychat, editor, tileja, außer Chat auf veröffentlichter KartekeinerneinDein kld_pk_…-Schlüssel. Viewer nutzt ihn nicht.
share-idshareIdviewer, chatViewer: jakeinerneinViewer: ID der veröffentlichten Karte. Chat ohne Schlüssel: die veröffentlichte Karte, die Chat bereitstellt.
map-idmapIdviewerneinkeinerneinAlias für share-id.
style-idstyleIdtile, editorempfohlen für TileStandardgrundkarte der Organisation; bei Editor danach kaleidr-morningneinGrundkartenstil-ID oder Stil-URL.
map-targetmapTargetchatneinkeinerneinCSS-Selektor für ein Viewer- oder Tile-<kaleidr-map>-Element, das der Assistent steuert.
containedcontainedchatneinausneinPlatziert das Panel im Element, das positioniert und dimensioniert sein muss.
langlangchatneinWert von <html lang>, sofern gültiges Sprachkennzeichen, sonst EnglischneinSprache der Antworten als BCP-47-Kennzeichen wie en, ko oder pt-BR. Siehe Chat-Sprache.
chat-titletitlechatneineigener PaneltitelneinTitel der Kopfzeile. Verwende chat-title, nicht title: HTML-title zeigt einen Tooltip beim Überfahren.
placeholderplaceholderchatneineigener Platzhaltertext des PanelsneinPlatzhalter im Eingabefeld.
layoutlayoutviewerneinmapneinbar bindet die Chatleiste ein, die auch chat-title, placeholder, theme und lang liest, mit eigenen Standardwerten: siehe die Viewer-Optionen. locator und listings zeigen die Karte neben einer Liste einer Sammlung aus der Ortsbibliothek: siehe Orts-Layouts. guide öffnet den Chat neben einer Karte mit Locations: siehe Guide-Layout. live zeigt Fahrzeuge und die heutigen Haltestellen: siehe Live-Layout.
collectioncollectionviewer Filialfinder, Angebotsliste, Guide und Liveneindie erste Sammlung vom Typ des Layouts, die die Karte zeichnetneinDie ID der Sammlung, die aufgelistet wird; bei live die der Sammlung vom Typ Fahrzeuge.
stopsstopsviewer Liveneindie erste Sammlung vom Typ Haltestellen, die die Karte zeichnetneinDie ID der Sammlung vom Typ Haltestellen.
filtersfiltersviewer Filialfinder und Angebotslisteneinalle Filter der SammlungneinDie angezeigten Besucherfilter, getrennt durch |: search, category, price, beds, baths, open_now.
cardcardviewerneinautoneincompact-Ortskarten zeigen nur Titel, Untertitel und Aktionen.
promptpromptviewerneinkeinerneinEine Frage, die der Kaleidr AI der Karte beim Öffnen der Karte gestellt wird; bei einer Chatleiste der vorausgefüllte Text des Felds.
prompt-parampromptParamviewerneinkeinerneinLiest prompt aus diesem Abfrageparameter der Seiten-URL, wenn der Besucher von einer Seite desselben Ursprungs kam.
promptspromptsViewer-ChatleisteneinkeinerneinBeispielfragen, getrennt durch |.
accentaccentViewer-Chatleistenein#2da84aneinEine CSS-Farbe.
results-urlresultsUrlViewer-ChatleisteneinkeinerneinLeitet Besucher mit ?q=<question> auf diese Seite.
centercenterviewer, tile, editorneinProduktstandardja"longitude,latitude", etwa "-0.1276,51.5072".
zoomzoomviewer, tile, editorneinProduktstandardjaZahl. Viewer und Tile nutzen sie beim Einbinden nur zusammen mit center.
pitchpitchviewer, tile, editorneinProduktstandardjaNeigung in Grad.
bearingbearingviewer, tile, editorneinProduktstandardjaDrehung in Grad.
themethemechat, editorneinkeinerja (wirkt nur bei Chat)JSON-Zeichenfolge. Chat: CSS-Custom-Properties. Editor: 17 Theme-Schlüssel.
flagenabledalleneinkeinerneinElementspezifische Aktivierungssperre.
basebasealleneinhttps://cdn.kaleidr.comneinUrsprung zum Laden der Bundles. Zugelassen sind nur die Kaleidr-CDN (https://cdn.kaleidr.com), der Ursprung von kaleidr.js oder der Seitenursprung. Andere Werte werden mit Warnung ignoriert. Siehe Base-Überschreibung.
viewer-baseviewerBaseviewer, tileneinhttps://map-embed.kaleidr.comneinUrsprung des iframes.
api-baseapiBasechat, editor, tileneinhttps://api.kaleidr.com/inference-apineinZiel für Sitzungsaustausch und Produktanfragen. Muss /inference-api enthalten.
tile-basetileBaseeditorneinhttps://tile.kaleidr.comneinHost zur Auflösung der Stil-IDs.

api-key ist ein veralteter Alias von publishable-key. Die vier …-base-Attribute dienen Tests gegen andere Deployments und werden in Produktion nicht benötigt.

Boolesche Attribute​

flag und contained werden als Wahrheitswerte gelesen:

SchreibweiseGelesen als
contained (ohne Wert), contained=""wahr
"true", "1", "yes", "on"wahr
"false", "0", "no", "off"falsch
Attribut fehltnicht gesetzt
jeder andere Wertignoriert, mit Konsolenwarnung

Bei den Wörtern spielen Großschreibung und umgebende Leerzeichen keine Rolle. Deshalb deaktiviert auch flag="False" das Element. Ein Attribut ohne Wert ist wahr; eine Vorlage mit flag="" aktiviert das Element also. Verwende ausdrücklich false.

Numerische und Kameraattribute​

zoom, pitch und bearing werden als Zahlen interpretiert. center besteht aus zwei kommaseparierten Zahlen, zuerst Längengrad. Unlesbare Werte werden ohne Meldung ignoriert und durch den Produktstandard ersetzt.

Attribute nach dem Einbinden​

Das Element liest seine Attribute einmal beim Einfügen ins Dokument. Danach werden nur fünf beobachtet:

Geändertes Attributviewertileeditorchat
center, zoom, pitch, bearingDie Karte springt zur neuen Kamera.Die Karte springt zur neuen Kamera.Die Karte springt zur neuen Kamera.Konsolenwarnung, sonst nichts.
themeWarnung.Warnung.Warnung. Editor liest das Theme nur beim Einbinden.Das Panel wird neu gestaltet.
Jedes andere AttributNichts.Nichts.Nichts.Nichts.

Kameraänderungen durch Attribute sind nie animiert. Für Animationen verwende Kaleidr.mount und rufe handle.setCamera({ …, duration: 800 }) auf.

Ändert sich ein Kameraattribut, übermittelt das Element sämtliche aktuellen Kameraattribute. Wenn du nur zoom an einem Element mit center änderst, wird auch der Mittelpunkt erneut gesetzt.

Um share-id, style-id, publishable-key, product, flag, contained, lang, chat-title oder placeholder zu ändern, ersetze das Element: Entferne es und füge ein neues mit den geänderten Attributen ein. Bei Tile kann handle.setStyle den Stil ohne erneute Einbindung wechseln, aber nur bei Einbindung mit Kaleidr.mount.

// Show a different published map in the same place.
const old = document.querySelector('kaleidr-map');
const next = old.cloneNode(false);
next.setAttribute('share-id', 'ANOTHER_MAP_ID');
old.replaceWith(next);

Lebenszyklus​

EreignisVerhalten des Elements
Wird ins Dokument eingefügtLiest Attribute und bindet sich ein. Bei Chat, Editor und Tile beginnt ein Sitzungsaustausch.
Ist vor dem Laden von kaleidr.js bereits im DokumentWartet auf das Skript und bindet sich anschließend ein.
Wird aus dem Dokument entferntZerstört die Einbindung, entfernt ihre Elemente und stoppt Sitzungserneuerungen.
Wird erneut eingefügtLiest Attribute neu und bindet sich mit neuem Sitzungsaustausch ein.
Wird zu anderem Elternelement verschobenWird entfernt und neu eingefügt, also zerstört und erneut eingebunden.
product fehlt oder ist kein zulässiger WertProtokolliert [kaleidr] <kaleidr-map> requires product="chat|viewer|editor|tile" und bindet nicht ein. Späteres Setzen von product bewirkt nichts.

Die Konsequenzen:

  • Setze Attribute vor dem Einfügen. Wenn du das Element in JavaScript erzeugst, setze alle Attribute und füge es danach ein. Andernfalls bindet es sich sofort mit den bis dahin vorhandenen Werten ein.

    const el = document.createElement('kaleidr-map');
    el.setAttribute('product', 'tile');
    el.setAttribute('publishable-key', 'kld_pk_live_…');
    el.setAttribute('style-id', 'kaleidr-night');
    el.style.cssText = 'display:block; height:480px';
    document.getElementById('slot').appendChild(el); // mounts here
  • Erneutes Einbinden kostet. Ein Tile-Element zählt dabei einen neuen Kartenaufruf. Editor verliert Bearbeitungen und Chat beginnt eine neue Unterhaltung. Code, der DOM-Knoten neu erstellt oder umsortiert, etwa Listen in Frameworks, kann das unbemerkt auslösen. Siehe Framework-Integration.

  • Ausgeblendete Elemente binden sich trotzdem ein. display:none verzögert nichts; Tile startet auch in geschlossenem Tab eine Sitzung.

  • Kinder bleiben sichtbar, bis eine Karte sie ersetzt. Inhalt des Elements wird zunächst dargestellt. Viewer und Tile ersetzen ihn nach dem Laden durch den iframe, sodass er als Ladeplatzhalter dient und bei fehlgeschlagener oder durch die Aktivierungssperre zurückgehaltener Einbindung als Fallback bleibt. Chat und Editor entfernen Kinder nicht. Lass das Element leer, wenn du diesen Effekt nicht willst.

Größe​

<kaleidr-map> ist standardmäßig display:block, sodass height wirkt:

<kaleidr-map product="viewer" share-id="YOUR_MAP_ID"
style="height:480px"></kaleidr-map>

Drei wichtige Details:

  • Deine eigene display-Einstellung hat Vorrang. Inline-Styles, Stylesheet-Regeln und das hidden-Attribut überschreiben den Standard. Bei display:inline wirkt height nicht.
  • Keine Freigabe in der Content Security Policy nötig. Der Standard wird weder per <style>-Tag noch per style-Attribut gesetzt, also funktioniert er auch ohne 'unsafe-inline'.
  • Safari vor 16.4 übernimmt den Standard nicht. Das Element bleibt inline und ignoriert width und height. Deshalb enthalten die Beispiele display:block im style-Attribut. Das schadet anderen Browsern nicht und ermöglicht in alten Safari-Versionen die Größe.

Deshalb verwenden die Beispiele:

<kaleidr-map product="viewer" share-id="YOUR_MAP_ID"
style="display:block; height:480px"></kaleidr-map>

oder einmal für die ganze Website:

kaleidr-map { display: block; height: 480px; }
ProduktGrößenverhalten
viewer, tileDer iframe ist 100 % so breit wie das Element. Seine Höhe beträgt 100 %, falls das Element beim Einbinden eine Höhe hat, andernfalls feste 500 Pixel. Die Einbindung setzt position:relative (falls keine Inline-Position vorhanden) und overflow:hidden.
editorDer Editor füllt 100 % von Breite und Höhe des Elements. Ohne Höhe ist nichts sichtbar.
chatOhne contained ist das Panel als Fenster oben links im Viewport fixiert; die Elementgröße spielt keine Rolle. Mit contained befindet es sich im Element, das position:relative oder eine andere Positionierung sowie eine Größe benötigt.

Die 500-Pixel-Alternative wird einmal beim Einbinden entschieden. Fehlt dem Element dann eine Höhe, bleibt der iframe 500 Pixel hoch, auch wenn später eine Höhe festgelegt wird.

Wenn deine Content Security Policy Inline-style-Attribute verbietet, lege die Größe über ein Stylesheet fest. Der Blockstandard des Elements ist davon nicht betroffen.

Handle-Matrix​

Das Element bietet kein Handle. Um diese Methoden aufzurufen, binde mit Kaleidr.mount ein. Der Aufruf gibt ein Handle zurück.

Methodechatviewereditortile
destroy()jajajaja
setCamera(camera)nicht unterstütztjajaja
setTheme(theme)janicht unterstütztnicht unterstütztnicht unterstützt
setStyle(style)nicht unterstütztnicht unterstütztnicht unterstütztja
send(text)nicht unterstütztjanicht unterstütztnicht unterstützt
setFilters(filters)nicht unterstütztjanicht unterstütztnicht unterstützt
showVehiclesLayer(layer)nicht unterstütztjanicht unterstütztnicht unterstützt
clearVehiclesLayer()nicht unterstütztjanicht unterstütztnicht unterstützt

Jedes Handle verfügt über alle diese Methoden. „Nicht unterstützt“ bedeutet, dass der Aufruf nichts tut und eine Konsolenwarnung protokolliert, aber keine Ausnahme wirft. Das gehört zum Vertrag /embed/v1.

Je Produkt:

  • chat: setTheme gestaltet das Panel um. setCamera ist nicht unterstützt, weil Chat keine eigene Karte besitzt. Der Assistent bewegt beim Antworten die verbundene Karte; dein Code bewegt sie über die API der Kartenbibliothek.
  • viewer: setCamera bewegt die veröffentlichte Karte. setFilters setzt die Besucherfilter eines Orts-Layouts. showVehiclesLayer zeichnet eigene Fahrzeuge auf die Karte, und clearVehiclesLayer entfernt sie: siehe die Fahrzeugebene.
  • editor: setCamera bewegt die Editorkarte. Theme und Grundkarte sind beim Einbinden festgelegt.
  • tile: setCamera bewegt die Karte und setStyle wechselt die Grundkarte direkt.

setCamera akzeptiert { center, zoom, pitch, bearing, duration }. Alle Felder sind optional, center ist [longitude, latitude], und duration wird in Millisekunden angegeben. Siehe kaleidr.js.

Chat und map-target​

Chat kann zwei Kartentypen steuern:

  • Deine eigene Karte (Mapbox GL JS, MapLibre GL JS, Google Maps oder Leaflet). Ein Kartenobjekt passt nicht in ein Attribut. Verwende Kaleidr.mount mit der Option map. Siehe Chat-Referenz.

  • Ein Kaleidr-Viewer- oder Tile-Element auf derselben Seite. Verweise mit einem CSS-Selektor in map-target darauf:

    <div style="position:relative">
    <kaleidr-map id="basemap" product="tile" publishable-key="kld_pk_live_…"
    style-id="kaleidr-morning"
    style="display:block; height:480px"></kaleidr-map>

    <kaleidr-map product="chat" publishable-key="kld_pk_live_…" contained
    map-target="#basemap"
    style="display:block; position:absolute; inset:0; z-index:1; pointer-events:none"></kaleidr-map>
    </div>

    Die Reihenfolge der beiden Elemente ist unerheblich. Chat sucht sein Ziel erst bei Bedarf.

Ohne map und map-target ist Chat ein Panel ohne Karte.

Wrapper und CSS des Chat-Elements legen das Panel über die Karte. Jede Deklaration wird unter Design und Anordnung erläutert. Chat auf veröffentlichten Karten findest du unter Chat auf veröffentlichter Karte.

Konsolenmeldungen​

NachrichtBedeutung
[kaleidr] <kaleidr-map> requires product="chat|viewer|editor|tile"product fehlt oder ist falsch geschrieben. Keine Einbindung.
[kaleidr] <attribute>="<value>" is not a recognized boolean — the attribute is IGNORED. Use <attribute>="true" / "false" (or omit it).flag oder contained besitzt einen nicht akzeptierten Wert. Die Meldung nennt das Attribut: flag="…" oder contained="…".
[kaleidr] base "<value>" is IGNORED — bundles load from https://cdn.kaleidr.com. A base must be the Kaleidr CDN, the origin kaleidr.js was loaded from, or this page's own origin.base nennt einen nicht erlaubten Ursprung. Das Produkt lädt trotzdem vom Standard-CDN.
[kaleidr] embed is disabled — this mount passed `enabled: false` (or `flag="false"`). …flag hält das Element zurück. Ersetze es ohne die Sperre, um einzubinden.
[kaleidr] setCamera() is not supported on product "chat" — the call is a no-op. …Ein Kameraattribut eines Chat-Elements wurde geändert.
[kaleidr] setTheme() is not supported on product "<product>" — the call is a no-op. …theme wurde auf Viewer, Tile oder Editor geändert.

Einbindungsfehler werden als [kaleidr:<product>] … protokolliert und in kaleidr.js aufgelistet.

Nicht verfügbar​

  • Ereignisse. Das Element sendet keine DOM-Events.
  • Eigenschaften oder Methoden. Es hat kein setCamera, keine handle-Eigenschaft und kein ready-Promise.
  • Erneutes Lesen von Attributen. Abgesehen von den fünf überwachten werden Änderungen nach dem Einbinden ignoriert.

Verwandte Themen​