diff --git a/src/panels/lovelace/components/hui-yaml-editor.ts b/src/panels/lovelace/components/hui-yaml-editor.ts index ae2a9b65ad..2162225ae3 100644 --- a/src/panels/lovelace/components/hui-yaml-editor.ts +++ b/src/panels/lovelace/components/hui-yaml-editor.ts @@ -3,7 +3,10 @@ import CodeMirror from "codemirror"; import "codemirror/mode/yaml/yaml"; // @ts-ignore import codeMirrorCSS from "codemirror/lib/codemirror.css"; +import { HomeAssistant } from "../../../types"; import { fireEvent } from "../../../common/dom/fire_event"; +import { computeRTL } from "../../../common/util/compute_rtl"; + declare global { interface HASSDomEvents { "yaml-changed": { @@ -14,6 +17,7 @@ declare global { } export class HuiYamlEditor extends HTMLElement { + public _hass?: HomeAssistant; public codemirror: CodeMirror; private _value: string; @@ -26,25 +30,40 @@ export class HuiYamlEditor extends HTMLElement { const shadowRoot = this.attachShadow({ mode: "open" }); shadowRoot.innerHTML = ` `; } + set hass(hass: HomeAssistant) { + this._hass = hass; + if (this._hass) { + this.setScrollBarDirection(); + } + } + set value(value: string) { if (this.codemirror) { if (value !== this.codemirror.getValue()) { @@ -76,7 +95,12 @@ export class HuiYamlEditor extends HTMLElement { cm.replaceSelection(spaces); }, }, + gutters: + this._hass && computeRTL(this._hass!) + ? ["rtl-gutter", "CodeMirror-linenumbers"] + : [], }); + this.setScrollBarDirection(); this.codemirror.on("changes", () => this._onChange()); } else { this.codemirror.refresh(); @@ -86,6 +110,16 @@ export class HuiYamlEditor extends HTMLElement { private _onChange(): void { fireEvent(this, "yaml-changed", { value: this.codemirror.getValue() }); } + + private setScrollBarDirection() { + if (!this.codemirror) { + return; + } + + this.codemirror + .getWrapperElement() + .classList.toggle("rtl", computeRTL(this._hass!)); + } } declare global { diff --git a/src/panels/lovelace/editor/card-editor/hui-edit-card.ts b/src/panels/lovelace/editor/card-editor/hui-edit-card.ts index 0022c045b2..1e08ff49dd 100644 --- a/src/panels/lovelace/editor/card-editor/hui-edit-card.ts +++ b/src/panels/lovelace/editor/card-editor/hui-edit-card.ts @@ -119,6 +119,7 @@ export class HuiEditCard extends LitElement { ? this._configElement : html` diff --git a/src/panels/lovelace/hui-editor.ts b/src/panels/lovelace/hui-editor.ts index 87bdd6daed..f92de99ca8 100644 --- a/src/panels/lovelace/hui-editor.ts +++ b/src/panels/lovelace/hui-editor.ts @@ -18,6 +18,7 @@ import "./components/hui-yaml-editor"; // This is not a duplicate import, one is for types, one is for element. // tslint:disable-next-line import { HuiYamlEditor } from "./components/hui-yaml-editor"; +import { HomeAssistant } from "../../types"; const lovelaceStruct = struct.interface({ title: "string?", @@ -26,6 +27,7 @@ const lovelaceStruct = struct.interface({ }); class LovelaceFullConfigEditor extends LitElement { + public hass?: HomeAssistant; public lovelace?: Lovelace; public closeEditor?: () => void; private _saving?: boolean; @@ -34,6 +36,7 @@ class LovelaceFullConfigEditor extends LitElement { static get properties() { return { + hass: {}, lovelace: {}, _saving: {}, _changed: {}, @@ -62,6 +65,7 @@ class LovelaceFullConfigEditor extends LitElement {
@@ -102,7 +106,6 @@ class LovelaceFullConfigEditor extends LitElement { .content { height: calc(100vh - 68px); - direction: ltr; } hui-code-editor {