diff --git a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts index e934bced92..e7afcdbad1 100755 --- a/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts +++ b/hassio/src/dialogs/snapshot/dialog-hassio-snapshot.ts @@ -22,6 +22,7 @@ import { import { HassDialog } from "../../../../src/dialogs/make-dialog-manager"; import { haStyle, haStyleDialog } from "../../../../src/resources/styles"; import { HomeAssistant } from "../../../../src/types"; +import { fileDownload } from "../../../../src/util/file_download"; import "../../components/supervisor-snapshot-content"; import type { SupervisorSnapshotContent } from "../../components/supervisor-snapshot-content"; import { HassioSnapshotDialogParams } from "./show-dialog-hassio-snapshot"; @@ -288,12 +289,11 @@ class HassioSnapshotDialog } } - const a = document.createElement("a"); - a.href = signedPath.path; - a.download = `home_assistant_snapshot_${slugify(this._computeName)}.tar`; - this.shadowRoot!.appendChild(a); - a.click(); - this.shadowRoot!.removeChild(a); + fileDownload( + this, + signedPath.path, + `home_assistant_snapshot_${slugify(this._computeName)}.tar` + ); } private get _computeName() { diff --git a/src/components/ha-gauge.ts b/src/components/ha-gauge.ts index 26b4ae52aa..2f0e71cabc 100644 --- a/src/components/ha-gauge.ts +++ b/src/components/ha-gauge.ts @@ -7,14 +7,14 @@ import { afterNextRender } from "../common/util/render-status"; import { FrontendLocaleData } from "../data/translation"; import { getValueInPercentage, normalize } from "../util/calculate"; +// Workaround for https://github.com/home-assistant/frontend/issues/6467 +const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + const getAngle = (value: number, min: number, max: number) => { const percentage = getValueInPercentage(normalize(value, min, max), min, max); return (percentage * 180) / 100; }; -// Workaround for https://github.com/home-assistant/frontend/issues/6467 -const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - @customElement("ha-gauge") export class Gauge extends LitElement { @property({ type: Number }) public min = 0; diff --git a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts index 6a9580cb7f..44c66b7ba4 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/zwave_js-config-dashboard.ts @@ -24,6 +24,7 @@ import { import "../../../../../layouts/hass-tabs-subpage"; import { haStyle } from "../../../../../resources/styles"; import type { HomeAssistant, Route } from "../../../../../types"; +import { fileDownload } from "../../../../../util/file_download"; import "../../../ha-config-section"; import { showZWaveJSAddNodeDialog } from "./show-dialog-zwave_js-add-node"; import { showZWaveJSRemoveNodeDialog } from "./show-dialog-zwave_js-remove-node"; @@ -312,12 +313,7 @@ class ZWaveJSConfigDashboard extends LitElement { return; } - const a = document.createElement("a"); - a.href = signedPath.path; - a.download = `zwave_js_dump.jsonl`; - this.shadowRoot!.appendChild(a); - a.click(); - this.shadowRoot!.removeChild(a); + fileDownload(this, signedPath.path, `zwave_js_dump.jsonl`); } static get styles(): CSSResultGroup { diff --git a/src/resources/safari-14-attachshadow-patch.ts b/src/resources/safari-14-attachshadow-patch.ts index 88954ab4d2..93a4a5b78a 100644 --- a/src/resources/safari-14-attachshadow-patch.ts +++ b/src/resources/safari-14-attachshadow-patch.ts @@ -2,6 +2,7 @@ const isSafari14 = /^((?!chrome|android).)*version\/14\.0\s.*safari/i.test( navigator.userAgent ); + if (isSafari14) { const origAttachShadow = window.Element.prototype.attachShadow; window.Element.prototype.attachShadow = function (init) { diff --git a/src/util/file_download.ts b/src/util/file_download.ts new file mode 100644 index 0000000000..6f7eed86dd --- /dev/null +++ b/src/util/file_download.ts @@ -0,0 +1,14 @@ +export const fileDownload = ( + element: HTMLElement, + href: string, + filename: string +): void => { + const a = document.createElement("a"); + a.target = "_blank"; + a.href = href; + a.download = filename; + + element.shadowRoot!.appendChild(a); + a.dispatchEvent(new MouseEvent("click")); + element.shadowRoot!.removeChild(a); +}; diff --git a/src/util/is_safari.ts b/src/util/is_safari.ts new file mode 100644 index 0000000000..e69de29bb2