From b7d7ca401485c9058a2554f9c6de0d58080c756f Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 17 Sep 2020 10:49:37 +0200 Subject: [PATCH] Monkey patch for bug in safari 14 (#7031) --- cast/src/launcher/entrypoint.ts | 1 + demo/src/entrypoint.ts | 1 + hassio/src/entrypoint.ts | 1 + src/entrypoints/authorize.ts | 1 + src/entrypoints/core.ts | 1 + src/entrypoints/custom-panel.ts | 1 + src/entrypoints/onboarding.ts | 1 + src/resources/safari-14-attachshadow-patch.ts | 13 +++++++++++++ 8 files changed, 20 insertions(+) create mode 100644 src/resources/safari-14-attachshadow-patch.ts diff --git a/cast/src/launcher/entrypoint.ts b/cast/src/launcher/entrypoint.ts index dd4711e379..2e184b830f 100644 --- a/cast/src/launcher/entrypoint.ts +++ b/cast/src/launcher/entrypoint.ts @@ -1,3 +1,4 @@ +import "../../../src/resources/safari-14-attachshadow-patch"; import "../../../src/resources/ha-style"; import "../../../src/resources/roboto"; import "./layout/hc-connect"; diff --git a/demo/src/entrypoint.ts b/demo/src/entrypoint.ts index 5ddbcc0ca4..ebaa3172a8 100644 --- a/demo/src/entrypoint.ts +++ b/demo/src/entrypoint.ts @@ -1,3 +1,4 @@ +import "../../src/resources/safari-14-attachshadow-patch"; import "@polymer/polymer/lib/elements/dom-if"; import "@polymer/polymer/lib/elements/dom-repeat"; import "../../src/resources/ha-style"; diff --git a/hassio/src/entrypoint.ts b/hassio/src/entrypoint.ts index 10f2c3a23f..00c34787e6 100644 --- a/hassio/src/entrypoint.ts +++ b/hassio/src/entrypoint.ts @@ -1,4 +1,5 @@ import "../../src/resources/compatibility"; +import "../../src/resources/safari-14-attachshadow-patch"; import "../../src/resources/roboto"; import "./hassio-main"; diff --git a/src/entrypoints/authorize.ts b/src/entrypoints/authorize.ts index 2a691c973f..8ecbd26ebb 100644 --- a/src/entrypoints/authorize.ts +++ b/src/entrypoints/authorize.ts @@ -1,5 +1,6 @@ // Compat needs to be first import import "../resources/compatibility"; +import "../resources/safari-14-attachshadow-patch"; import "@polymer/polymer/lib/elements/dom-if"; import "@polymer/polymer/lib/elements/dom-repeat"; import "../auth/ha-authorize"; diff --git a/src/entrypoints/core.ts b/src/entrypoints/core.ts index 8a6bedf9db..c6093ac056 100644 --- a/src/entrypoints/core.ts +++ b/src/entrypoints/core.ts @@ -1,5 +1,6 @@ // Compat needs to be first import import "../resources/compatibility"; +import "../resources/safari-14-attachshadow-patch"; import { Auth, Connection, diff --git a/src/entrypoints/custom-panel.ts b/src/entrypoints/custom-panel.ts index d43d881679..4ff9160025 100644 --- a/src/entrypoints/custom-panel.ts +++ b/src/entrypoints/custom-panel.ts @@ -1,4 +1,5 @@ import "../resources/compatibility"; +import "../resources/safari-14-attachshadow-patch"; import { PolymerElement } from "@polymer/polymer"; import { fireEvent } from "../common/dom/fire_event"; import { loadJS } from "../common/dom/load_resource"; diff --git a/src/entrypoints/onboarding.ts b/src/entrypoints/onboarding.ts index 0c30daed0a..56054746e8 100644 --- a/src/entrypoints/onboarding.ts +++ b/src/entrypoints/onboarding.ts @@ -1,5 +1,6 @@ // Compat needs to be first import import "../resources/compatibility"; +import "../resources/safari-14-attachshadow-patch"; import "../onboarding/ha-onboarding"; import "../resources/ha-style"; import "../resources/roboto"; diff --git a/src/resources/safari-14-attachshadow-patch.ts b/src/resources/safari-14-attachshadow-patch.ts new file mode 100644 index 0000000000..597e0f480e --- /dev/null +++ b/src/resources/safari-14-attachshadow-patch.ts @@ -0,0 +1,13 @@ +// https://github.com/home-assistant/frontend/pull/7031 +const isSafari14 = /^((?!chrome|android).)*version\/14\.0.*safari/i.test( + navigator.userAgent +); +if (isSafari14) { + const origAttachShadow = window.Element.prototype.attachShadow; + window.Element.prototype.attachShadow = function (init) { + if (init && init.delegatesFocus) { + delete init.delegatesFocus; + } + return origAttachShadow.apply(this, [init]); + }; +}