diff --git a/src/panels/config/integrations/integration-panels/ozw/ozw-network-dashboard.ts b/src/panels/config/integrations/integration-panels/ozw/ozw-network-dashboard.ts
index 98ae8a28a6..013f2b794b 100644
--- a/src/panels/config/integrations/integration-panels/ozw/ozw-network-dashboard.ts
+++ b/src/panels/config/integrations/integration-panels/ozw/ozw-network-dashboard.ts
@@ -159,11 +159,13 @@ class OZWNetworkDashboard extends LitElement {
}
private _generateServiceButton(service: string) {
+ const serviceData = { instance_id: this.ozwInstance };
return html`
diff --git a/src/panels/config/logs/dialog-system-log-detail.ts b/src/panels/config/logs/dialog-system-log-detail.ts
index ad5f28c648..34d05afca9 100644
--- a/src/panels/config/logs/dialog-system-log-detail.ts
+++ b/src/panels/config/logs/dialog-system-log-detail.ts
@@ -1,14 +1,21 @@
+import "@material/mwc-icon-button/mwc-icon-button";
+import { mdiContentCopy } from "@mdi/js";
import "@polymer/paper-dialog-scrollable/paper-dialog-scrollable";
+import "@polymer/paper-tooltip/paper-tooltip";
+import type { PaperTooltipElement } from "@polymer/paper-tooltip/paper-tooltip";
import {
css,
CSSResult,
html,
+ internalProperty,
LitElement,
property,
- internalProperty,
+ query,
TemplateResult,
} from "lit-element";
+import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/dialog/ha-paper-dialog";
+import "../../../components/ha-svg-icon";
import {
domainToName,
fetchIntegrationManifest,
@@ -16,12 +23,11 @@ import {
IntegrationManifest,
} from "../../../data/integration";
import { getLoggedErrorIntegration } from "../../../data/system_log";
-import { PolymerChangedEvent } from "../../../polymer-types";
+import type { PolymerChangedEvent } from "../../../polymer-types";
import { haStyleDialog } from "../../../resources/styles";
-import { HomeAssistant } from "../../../types";
-import { SystemLogDetailDialogParams } from "./show-dialog-system-log-detail";
+import type { HomeAssistant } from "../../../types";
+import type { SystemLogDetailDialogParams } from "./show-dialog-system-log-detail";
import { formatSystemLogTime } from "./util";
-import { fireEvent } from "../../../common/dom/fire_event";
class DialogSystemLogDetail extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -30,6 +36,8 @@ class DialogSystemLogDetail extends LitElement {
@internalProperty() private _manifest?: IntegrationManifest;
+ @query("paper-tooltip") private _toolTip?: PaperTooltipElement;
+
public async showDialog(params: SystemLogDetailDialogParams): Promise
Logger: ${item.name}
diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts
index b3195e0cf7..6d248bac05 100644
--- a/src/panels/config/script/ha-script-editor.ts
+++ b/src/panels/config/script/ha-script-editor.ts
@@ -1,44 +1,47 @@
+import "@material/mwc-fab";
+import { mdiContentSave } from "@mdi/js";
import "@polymer/app-layout/app-header/app-header";
-import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light";
import "@polymer/app-layout/app-toolbar/app-toolbar";
-import "../../../components/ha-icon-button";
+import "@polymer/paper-dropdown-menu/paper-dropdown-menu-light";
+import { PaperListboxElement } from "@polymer/paper-listbox";
import {
css,
CSSResult,
html,
+ internalProperty,
LitElement,
property,
- internalProperty,
PropertyValues,
TemplateResult,
} from "lit-element";
import { classMap } from "lit-html/directives/class-map";
import { computeObjectId } from "../../../common/entity/compute_object_id";
import { navigate } from "../../../common/navigate";
+import { slugify } from "../../../common/string/slugify";
import { computeRTL } from "../../../common/util/compute_rtl";
import "../../../components/ha-card";
+import "../../../components/ha-icon-button";
import "../../../components/ha-icon-input";
-import "@material/mwc-fab";
+import "../../../components/ha-svg-icon";
import {
Action,
deleteScript,
getScriptEditorInitData,
- ScriptConfig,
MODES,
MODES_MAX,
+ ScriptConfig,
+ triggerScript,
} from "../../../data/script";
import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box";
import "../../../layouts/ha-app-layout";
import { haStyle } from "../../../resources/styles";
import { HomeAssistant, Route } from "../../../types";
+import { documentationUrl } from "../../../util/documentation-url";
+import { showToast } from "../../../util/toast";
import "../automation/action/ha-automation-action";
import { HaDeviceAction } from "../automation/action/types/ha-automation-action-device_id";
import "../ha-config-section";
import { configSections } from "../ha-panel-config";
-import "../../../components/ha-svg-icon";
-import { mdiContentSave } from "@mdi/js";
-import { PaperListboxElement } from "@polymer/paper-listbox";
-import { slugify } from "../../../common/string/slugify";
export class HaScriptEditor extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -146,7 +149,10 @@ export class HaScriptEditor extends LitElement {
"ui.panel.config.script.editor.modes.description",
"documentation_link",
html`${this.hass.localize(
@@ -193,6 +199,24 @@ export class HaScriptEditor extends LitElement {
`
: html``}
- ${this.hass.localize(
- "ui.panel.config.logs.details",
- "level",
- item.level
- )}
-
+
+ ${this.hass.localize(
+ "ui.panel.config.logs.details",
+ "level",
+ item.level
+ )}
+
+
@@ -148,6 +168,25 @@ class DialogSystemLogDetail extends LitElement {
}
}
+ private _copyLog(): void {
+ const copyElement = this.shadowRoot?.querySelector(
+ "paper-dialog-scrollable"
+ ) as HTMLElement;
+
+ const selection = window.getSelection()!;
+ const range = document.createRange();
+
+ range.selectNodeContents(copyElement);
+ selection.removeAllRanges();
+ selection.addRange(range);
+
+ document.execCommand("copy");
+ window.getSelection()!.removeAllRanges();
+
+ this._toolTip!.show();
+ setTimeout(() => this._toolTip?.hide(), 3000);
+ }
+
static get styles(): CSSResult[] {
return [
haStyleDialog,
@@ -164,6 +203,15 @@ class DialogSystemLogDetail extends LitElement {
pre {
margin-bottom: 0;
}
+ .heading {
+ display: flex;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+ .heading ha-svg-icon {
+ cursor: pointer;
+ }
`,
];
}
diff --git a/src/panels/config/person/dialog-person-detail.ts b/src/panels/config/person/dialog-person-detail.ts
index 94c50807c1..043d407607 100644
--- a/src/panels/config/person/dialog-person-detail.ts
+++ b/src/panels/config/person/dialog-person-detail.ts
@@ -4,23 +4,24 @@ import {
css,
CSSResult,
html,
+ internalProperty,
LitElement,
property,
- internalProperty,
TemplateResult,
} from "lit-element";
import memoizeOne from "memoize-one";
-import "../../../components/ha-picture-upload";
-import type { HaPictureUpload } from "../../../components/ha-picture-upload";
import "../../../components/entity/ha-entities-picker";
import { createCloseHeading } from "../../../components/ha-dialog";
+import "../../../components/ha-picture-upload";
+import type { HaPictureUpload } from "../../../components/ha-picture-upload";
import "../../../components/user/ha-user-picker";
import { PersonMutableParams } from "../../../data/person";
+import { CropOptions } from "../../../dialogs/image-cropper-dialog/show-image-cropper-dialog";
import { PolymerChangedEvent } from "../../../polymer-types";
import { haStyleDialog } from "../../../resources/styles";
import { HomeAssistant } from "../../../types";
+import { documentationUrl } from "../../../util/documentation-url";
import { PersonDetailDialogParams } from "./show-dialog-person-detail";
-import { CropOptions } from "../../../dialogs/image-cropper-dialog/show-image-cropper-dialog";
const includeDomains = ["device_tracker"];
@@ -153,7 +154,10 @@ class DialogPersonDetail extends LitElement {
diff --git a/src/panels/developer-tools/event/developer-tools-event.js b/src/panels/developer-tools/event/developer-tools-event.js
index 4466d48f10..ec7526fee9 100644
--- a/src/panels/developer-tools/event/developer-tools-event.js
+++ b/src/panels/developer-tools/event/developer-tools-event.js
@@ -9,6 +9,7 @@ import "../../../components/ha-code-editor";
import { showAlertDialog } from "../../../dialogs/generic/show-dialog-box";
import { EventsMixin } from "../../../mixins/events-mixin";
import LocalizeMixin from "../../../mixins/localize-mixin";
+import { documentationUrl } from "../../../util/documentation-url";
import "../../../styles/polymer-ha-style";
import "./event-subscribe-card";
import "./events-list";
@@ -61,7 +62,7 @@ class HaPanelDevEvent extends EventsMixin(LocalizeMixin(PolymerElement)) {
[[localize( 'ui.panel.developer-tools.tabs.events.description' )]]
@@ -149,6 +150,10 @@ class HaPanelDevEvent extends EventsMixin(LocalizeMixin(PolymerElement)) {
}
}
+ _computeDocumentationUrl(hass) {
+ return documentationUrl(hass, "/docs/configuration/events/");
+ }
+
_computeValidJSON(parsedJSON) {
return parsedJSON !== ERROR_SENTINEL;
}
diff --git a/src/panels/developer-tools/template/developer-tools-template.ts b/src/panels/developer-tools/template/developer-tools-template.ts
index c9ca775fbf..d41e8fed1e 100644
--- a/src/panels/developer-tools/template/developer-tools-template.ts
+++ b/src/panels/developer-tools/template/developer-tools-template.ts
@@ -19,6 +19,7 @@ import {
} from "../../../data/ws-templates";
import { haStyle } from "../../../resources/styles";
import { HomeAssistant } from "../../../types";
+import { documentationUrl } from "../../../util/documentation-url";
const DEMO_TEMPLATE = `{## Imitate available variables: ##}
{% set my_test_json = {
@@ -107,7 +108,10 @@ class HaPanelDevTemplate extends LitElement {