diff --git a/src/hass/fireEvent.js b/src/hass/fireEvent.js new file mode 100644 index 0000000..044c6e2 --- /dev/null +++ b/src/hass/fireEvent.js @@ -0,0 +1,11 @@ +export const fireEvent = (node, type, detail) => { + detail = detail === null || detail === undefined ? {} : detail; + const event = new Event(type, { + bubbles: true, + cancelable: false, + composed: true + }); + event.detail = detail; + node.dispatchEvent(event); + return event; +}; diff --git a/src/hass/handle-click.ts b/src/hass/handle-click.ts index dec63d5..12d61e8 100644 --- a/src/hass/handle-click.ts +++ b/src/hass/handle-click.ts @@ -1,4 +1,5 @@ import { HassUtils } from "./hass-utils"; +import { fireEvent } from "./fireEvent.js"; export const handleClick = ( node: HTMLElement, @@ -50,5 +51,8 @@ export const handleClick = ( const [domain, service] = actionConfig.service.split(".", 2); hass.callService(domain, service, actionConfig.service_data); } + case "fire-dom-event": { + fireEvent(node, "ll-custom", actionConfig); + } } }; diff --git a/src/hass/hass-utils.js b/src/hass/hass-utils.js index dc5a6c3..eaceae8 100644 --- a/src/hass/hass-utils.js +++ b/src/hass/hass-utils.js @@ -1,3 +1,5 @@ +import { fireEvent } from "./fireEvent.js"; + /* Home Assistant utility class Inspired by Thomas Loven's card-tools (no-license) @@ -15,10 +17,10 @@ export class HassUtils { return this.LitElement.prototype.css; } - static callService(hass, domain, service, entity_id, inOptions) { + static callService(hass, domain, service, entityId, inOptions) { hass.callService(domain, service, { - entity_id: entity_id, - ...inOptions, + entity_id: entityId, + ...inOptions }); } @@ -51,8 +53,8 @@ export class HassUtils { return entityId.substr(0, entityId.indexOf(".")); } - static popUp(hass, title, content, large = false) { - let popup = document.createElement("div"); + static popUp(hass, title, content) { + const popup = document.createElement("div"); popup.innerHTML = `