mirror of
				https://github.com/home-assistant/frontend.git
				synced 2025-10-31 06:29:43 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			20201204.0
			...
			script-yam
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | bda951e6d1 | 
| @@ -1,7 +1,10 @@ | ||||
| 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 { ActionDetail } from "@material/mwc-list/mwc-list-foundation"; | ||||
| import "@material/mwc-list/mwc-list-item"; | ||||
| import "../../../components/ha-icon-button"; | ||||
| import "../../../components/ha-button-menu"; | ||||
| import { | ||||
|   css, | ||||
|   CSSResult, | ||||
| @@ -38,7 +41,7 @@ import { HaDeviceAction } from "../automation/action/types/ha-automation-action- | ||||
| import "../ha-config-section"; | ||||
| import { configSections } from "../ha-panel-config"; | ||||
| import "../../../components/ha-svg-icon"; | ||||
| import { mdiContentSave } from "@mdi/js"; | ||||
| import { mdiContentSave, mdiDotsVertical } from "@mdi/js"; | ||||
| import { PaperListboxElement } from "@polymer/paper-listbox"; | ||||
| import { slugify } from "../../../common/string/slugify"; | ||||
|  | ||||
| @@ -63,6 +66,8 @@ export class HaScriptEditor extends LitElement { | ||||
|  | ||||
|   @internalProperty() private _errors?: string; | ||||
|  | ||||
|   @internalProperty() private _yamlMode = false; | ||||
|  | ||||
|   protected render(): TemplateResult { | ||||
|     return html` | ||||
|       <hass-tabs-subpage | ||||
| @@ -72,19 +77,46 @@ export class HaScriptEditor extends LitElement { | ||||
|         .backCallback=${() => this._backTapped()} | ||||
|         .tabs=${configSections.automation} | ||||
|       > | ||||
|         ${!this.scriptEntityId | ||||
|           ? "" | ||||
|           : html` | ||||
|               <ha-icon-button | ||||
|                 class="warning" | ||||
|                 slot="toolbar-icon" | ||||
|                 title="${this.hass.localize( | ||||
|                   "ui.panel.config.script.editor.delete_script" | ||||
|                 )}" | ||||
|                 icon="hass:delete" | ||||
|                 @click=${this._deleteConfirm} | ||||
|               ></ha-icon-button> | ||||
|             `} | ||||
|         <ha-button-menu | ||||
|           corner="BOTTOM_START" | ||||
|           slot="toolbar-icon" | ||||
|           @action=${this._handleAction} | ||||
|         > | ||||
|           <mwc-icon-button | ||||
|             slot="trigger" | ||||
|             .title=${this.hass.localize("ui.common.menu")} | ||||
|             .label=${this.hass.localize("ui.common.overflow_menu")} | ||||
|             ><ha-svg-icon path=${mdiDotsVertical}></ha-svg-icon> | ||||
|           </mwc-icon-button> | ||||
|           <mwc-list-item | ||||
|             aria-label=${this._yamlMode | ||||
|               ? this.hass.localize("ui.panel.config.automation.editor.edit_ui") | ||||
|               : this.hass.localize( | ||||
|                   "ui.panel.config.automation.editor.edit_yaml" | ||||
|                 )} | ||||
|           > | ||||
|             ${this._yamlMode | ||||
|               ? this.hass.localize("ui.panel.config.automation.editor.edit_ui") | ||||
|               : this.hass.localize( | ||||
|                   "ui.panel.config.automation.editor.edit_yaml" | ||||
|                 )} | ||||
|           </mwc-list-item> | ||||
|           ${!this.scriptEntityId | ||||
|             ? "" | ||||
|             : html` | ||||
|                 <mwc-list-item | ||||
|                   class="warning" | ||||
|                   aria-label=${this.hass.localize( | ||||
|                     "ui.panel.config.script.editor.delete_script" | ||||
|                   )} | ||||
|                 > | ||||
|                   ${this.hass.localize( | ||||
|                     "ui.panel.config.script.editor.delete_script" | ||||
|                   )} | ||||
|                 </mwc-list-item> | ||||
|               `} | ||||
|         </ha-button-menu> | ||||
|  | ||||
|         ${this.narrow | ||||
|           ? html` <span slot="header">${this._config?.alias}</span> ` | ||||
|           : ""} | ||||
| @@ -98,151 +130,195 @@ export class HaScriptEditor extends LitElement { | ||||
|             })}" | ||||
|           > | ||||
|             ${this._config | ||||
|               ? html` | ||||
|                   <ha-config-section .isWide=${this.isWide}> | ||||
|                     ${!this.narrow | ||||
|                       ? html` <span slot="header">${this._config.alias}</span> ` | ||||
|                       : ""} | ||||
|                     <span slot="introduction"> | ||||
|                       ${this.hass.localize( | ||||
|                         "ui.panel.config.script.editor.introduction" | ||||
|                       )} | ||||
|                     </span> | ||||
|                     <ha-card> | ||||
|                       <div class="card-content"> | ||||
|                         <paper-input | ||||
|                           .label=${this.hass.localize( | ||||
|                             "ui.panel.config.script.editor.alias" | ||||
|                           )} | ||||
|                           name="alias" | ||||
|                           .value=${this._config.alias} | ||||
|                           @value-changed=${this._valueChanged} | ||||
|                           @change=${this._aliasChanged} | ||||
|                         > | ||||
|                         </paper-input> | ||||
|                         <ha-icon-input | ||||
|                           .label=${this.hass.localize( | ||||
|                             "ui.panel.config.script.editor.icon" | ||||
|                           )} | ||||
|                           .name=${"icon"} | ||||
|                           .value=${this._config.icon} | ||||
|                           @value-changed=${this._valueChanged} | ||||
|                         > | ||||
|                         </ha-icon-input> | ||||
|                         ${!this.scriptEntityId | ||||
|                           ? html` <paper-input | ||||
|                               .label=${this.hass.localize( | ||||
|                                 "ui.panel.config.script.editor.id" | ||||
|                               )} | ||||
|                               .errorMessage=${this.hass.localize( | ||||
|                                 "ui.panel.config.script.editor.id_already_exists" | ||||
|                               )} | ||||
|                               .invalid=${this._idError} | ||||
|                               .value=${this._entityId} | ||||
|                               @value-changed=${this._idChanged} | ||||
|               ? this._yamlMode | ||||
|                 ? html` | ||||
|                     <ha-config-section .isWide=${false}> | ||||
|                       ${!this.narrow | ||||
|                         ? html` | ||||
|                             <span slot="header">${this._config.alias}</span> | ||||
|                           ` | ||||
|                         : ""} | ||||
|                       <ha-card> | ||||
|                         <div class="card-content"> | ||||
|                           <ha-yaml-editor | ||||
|                             .defaultValue=${this._config} | ||||
|                             @value-changed=${this._onYamlChange} | ||||
|                           ></ha-yaml-editor> | ||||
|                         </div> | ||||
|                         ${this.scriptEntityId | ||||
|                           ? html` | ||||
|                               <div | ||||
|                                 class="card-actions layout horizontal justified center" | ||||
|                               > | ||||
|                                 <span></span> | ||||
|                                 <mwc-button | ||||
|                                   @click=${this._runScript} | ||||
|                                   title="${this.hass.localize( | ||||
|                                     "ui.panel.config.script.picker.activate_script" | ||||
|                                   )}" | ||||
|                                   ?disabled=${this._dirty} | ||||
|                                 > | ||||
|                                   ${this.hass.localize( | ||||
|                                     "ui.card.script.execute" | ||||
|                                   )} | ||||
|                                 </mwc-button> | ||||
|                               </div> | ||||
|                             ` | ||||
|                           : ``} | ||||
|                       </ha-card> | ||||
|                     </ha-config-section> | ||||
|                   ` | ||||
|                 : html` | ||||
|                     <ha-config-section .isWide=${this.isWide}> | ||||
|                       ${!this.narrow | ||||
|                         ? html` | ||||
|                             <span slot="header">${this._config.alias}</span> | ||||
|                           ` | ||||
|                         : ""} | ||||
|                       <span slot="introduction"> | ||||
|                         ${this.hass.localize( | ||||
|                           "ui.panel.config.script.editor.introduction" | ||||
|                         )} | ||||
|                       </span> | ||||
|                       <ha-card> | ||||
|                         <div class="card-content"> | ||||
|                           <paper-input | ||||
|                             .label=${this.hass.localize( | ||||
|                               "ui.panel.config.script.editor.alias" | ||||
|                             )} | ||||
|                             name="alias" | ||||
|                             .value=${this._config.alias} | ||||
|                             @value-changed=${this._valueChanged} | ||||
|                             @change=${this._aliasChanged} | ||||
|                           > | ||||
|                           </paper-input> | ||||
|                           <ha-icon-input | ||||
|                             .label=${this.hass.localize( | ||||
|                               "ui.panel.config.script.editor.icon" | ||||
|                             )} | ||||
|                             .name=${"icon"} | ||||
|                             .value=${this._config.icon} | ||||
|                             @value-changed=${this._valueChanged} | ||||
|                           > | ||||
|                           </ha-icon-input> | ||||
|                           ${!this.scriptEntityId | ||||
|                             ? html` <paper-input | ||||
|                                 .label=${this.hass.localize( | ||||
|                                   "ui.panel.config.script.editor.id" | ||||
|                                 )} | ||||
|                                 .errorMessage=${this.hass.localize( | ||||
|                                   "ui.panel.config.script.editor.id_already_exists" | ||||
|                                 )} | ||||
|                                 .invalid=${this._idError} | ||||
|                                 .value=${this._entityId} | ||||
|                                 @value-changed=${this._idChanged} | ||||
|                               > | ||||
|                               </paper-input>` | ||||
|                             : ""} | ||||
|                           <p> | ||||
|                             ${this.hass.localize( | ||||
|                               "ui.panel.config.script.editor.modes.description", | ||||
|                               "documentation_link", | ||||
|                               html`<a | ||||
|                                 href="https://www.home-assistant.io/integrations/script/#script-modes" | ||||
|                                 target="_blank" | ||||
|                                 rel="noreferrer" | ||||
|                                 >${this.hass.localize( | ||||
|                                   "ui.panel.config.script.editor.modes.documentation" | ||||
|                                 )}</a | ||||
|                               >` | ||||
|                             )} | ||||
|                           </p> | ||||
|                           <paper-dropdown-menu-light | ||||
|                             .label=${this.hass.localize( | ||||
|                               "ui.panel.config.script.editor.modes.label" | ||||
|                             )} | ||||
|                             no-animations | ||||
|                           > | ||||
|                             <paper-listbox | ||||
|                               slot="dropdown-content" | ||||
|                               .selected=${this._config.mode | ||||
|                                 ? MODES.indexOf(this._config.mode) | ||||
|                                 : 0} | ||||
|                               @iron-select=${this._modeChanged} | ||||
|                             > | ||||
|                             </paper-input>` | ||||
|                           : ""} | ||||
|                               ${MODES.map( | ||||
|                                 (mode) => html` | ||||
|                                   <paper-item .mode=${mode}> | ||||
|                                     ${this.hass.localize( | ||||
|                                       `ui.panel.config.script.editor.modes.${mode}` | ||||
|                                     ) || mode} | ||||
|                                   </paper-item> | ||||
|                                 ` | ||||
|                               )} | ||||
|                             </paper-listbox> | ||||
|                           </paper-dropdown-menu-light> | ||||
|                           ${this._config.mode && | ||||
|                           MODES_MAX.includes(this._config.mode) | ||||
|                             ? html` <paper-input | ||||
|                                 .label=${this.hass.localize( | ||||
|                                   `ui.panel.config.script.editor.max.${this._config.mode}` | ||||
|                                 )} | ||||
|                                 type="number" | ||||
|                                 name="max" | ||||
|                                 .value=${this._config.max || "10"} | ||||
|                                 @value-changed=${this._valueChanged} | ||||
|                               > | ||||
|                               </paper-input>` | ||||
|                             : html``} | ||||
|                         </div> | ||||
|                         ${this.scriptEntityId | ||||
|                           ? html` | ||||
|                               <div | ||||
|                                 class="card-actions layout horizontal justified center" | ||||
|                               > | ||||
|                                 <span></span> | ||||
|                                 <mwc-button | ||||
|                                   @click=${this._runScript} | ||||
|                                   title="${this.hass.localize( | ||||
|                                     "ui.panel.config.script.picker.activate_script" | ||||
|                                   )}" | ||||
|                                   ?disabled=${this._dirty} | ||||
|                                 > | ||||
|                                   ${this.hass.localize( | ||||
|                                     "ui.card.script.execute" | ||||
|                                   )} | ||||
|                                 </mwc-button> | ||||
|                               </div> | ||||
|                             ` | ||||
|                           : ``} | ||||
|                       </ha-card> | ||||
|                     </ha-config-section> | ||||
|  | ||||
|                     <ha-config-section .isWide=${this.isWide}> | ||||
|                       <span slot="header"> | ||||
|                         ${this.hass.localize( | ||||
|                           "ui.panel.config.script.editor.sequence" | ||||
|                         )} | ||||
|                       </span> | ||||
|                       <span slot="introduction"> | ||||
|                         <p> | ||||
|                           ${this.hass.localize( | ||||
|                             "ui.panel.config.script.editor.modes.description", | ||||
|                             "documentation_link", | ||||
|                             html`<a | ||||
|                               href="https://www.home-assistant.io/integrations/script/#script-modes" | ||||
|                               target="_blank" | ||||
|                               rel="noreferrer" | ||||
|                               >${this.hass.localize( | ||||
|                                 "ui.panel.config.script.editor.modes.documentation" | ||||
|                               )}</a | ||||
|                             >` | ||||
|                             "ui.panel.config.script.editor.sequence_sentence" | ||||
|                           )} | ||||
|                         </p> | ||||
|                         <paper-dropdown-menu-light | ||||
|                           .label=${this.hass.localize( | ||||
|                             "ui.panel.config.script.editor.modes.label" | ||||
|                           )} | ||||
|                           no-animations | ||||
|                         <a | ||||
|                           href="https://home-assistant.io/docs/scripts/" | ||||
|                           target="_blank" | ||||
|                           rel="noreferrer" | ||||
|                         > | ||||
|                           <paper-listbox | ||||
|                             slot="dropdown-content" | ||||
|                             .selected=${this._config.mode | ||||
|                               ? MODES.indexOf(this._config.mode) | ||||
|                               : 0} | ||||
|                             @iron-select=${this._modeChanged} | ||||
|                           > | ||||
|                             ${MODES.map( | ||||
|                               (mode) => html` | ||||
|                                 <paper-item .mode=${mode}> | ||||
|                                   ${this.hass.localize( | ||||
|                                     `ui.panel.config.script.editor.modes.${mode}` | ||||
|                                   ) || mode} | ||||
|                                 </paper-item> | ||||
|                               ` | ||||
|                             )} | ||||
|                           </paper-listbox> | ||||
|                         </paper-dropdown-menu-light> | ||||
|                         ${this._config.mode && | ||||
|                         MODES_MAX.includes(this._config.mode) | ||||
|                           ? html` <paper-input | ||||
|                               .label=${this.hass.localize( | ||||
|                                 `ui.panel.config.script.editor.max.${this._config.mode}` | ||||
|                               )} | ||||
|                               type="number" | ||||
|                               name="max" | ||||
|                               .value=${this._config.max || "10"} | ||||
|                               @value-changed=${this._valueChanged} | ||||
|                             > | ||||
|                             </paper-input>` | ||||
|                           : html``} | ||||
|                       </div> | ||||
|                       ${this.scriptEntityId | ||||
|                         ? html` | ||||
|                           <div class="card-actions layout horizontal justified center"> | ||||
|                             <span></span> | ||||
|                             <mwc-button | ||||
|                               @click=${this._runScript} | ||||
|                               title="${this.hass.localize( | ||||
|                                 "ui.panel.config.script.picker.activate_script" | ||||
|                              )}" | ||||
|                              ?disabled=${this._dirty} | ||||
|                             > | ||||
|                               ${this.hass.localize("ui.card.script.execute")} | ||||
|                            </mwc-button> | ||||
|                          </div> | ||||
|                           ` | ||||
|                         : ``} | ||||
|                     </ha-card> | ||||
|                   </ha-config-section> | ||||
|  | ||||
|                   <ha-config-section .isWide=${this.isWide}> | ||||
|                     <span slot="header"> | ||||
|                       ${this.hass.localize( | ||||
|                         "ui.panel.config.script.editor.sequence" | ||||
|                       )} | ||||
|                     </span> | ||||
|                     <span slot="introduction"> | ||||
|                       <p> | ||||
|                         ${this.hass.localize( | ||||
|                           "ui.panel.config.script.editor.sequence_sentence" | ||||
|                         )} | ||||
|                       </p> | ||||
|                       <a | ||||
|                         href="https://home-assistant.io/docs/scripts/" | ||||
|                         target="_blank" | ||||
|                         rel="noreferrer" | ||||
|                       > | ||||
|                         ${this.hass.localize( | ||||
|                           "ui.panel.config.script.editor.link_available_actions" | ||||
|                         )} | ||||
|                       </a> | ||||
|                     </span> | ||||
|                     <ha-automation-action | ||||
|                       .actions=${this._config.sequence} | ||||
|                       @value-changed=${this._sequenceChanged} | ||||
|                       .hass=${this.hass} | ||||
|                     ></ha-automation-action> | ||||
|                   </ha-config-section> | ||||
|                 ` | ||||
|                           ${this.hass.localize( | ||||
|                             "ui.panel.config.script.editor.link_available_actions" | ||||
|                           )} | ||||
|                         </a> | ||||
|                       </span> | ||||
|                       <ha-automation-action | ||||
|                         .actions=${this._config.sequence} | ||||
|                         @value-changed=${this._sequenceChanged} | ||||
|                         .hass=${this.hass} | ||||
|                       ></ha-automation-action> | ||||
|                     </ha-config-section> | ||||
|                   ` | ||||
|               : ""} | ||||
|           </div> | ||||
|         </div> | ||||
| @@ -319,7 +395,7 @@ export class HaScriptEditor extends LitElement { | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   private async _runScript(ev) { | ||||
|   private async _runScript(ev: Event) { | ||||
|     ev.stopPropagation(); | ||||
|     await triggerScript(this.hass, this.scriptEntityId); | ||||
|     showToast(this, { | ||||
| @@ -331,6 +407,21 @@ export class HaScriptEditor extends LitElement { | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   private _handleAction(ev: CustomEvent<ActionDetail>) { | ||||
|     switch (ev.detail.index) { | ||||
|       case 0: | ||||
|         this._switchYamlMode(); | ||||
|         break; | ||||
|       case 1: | ||||
|         this._deleteConfirm(); | ||||
|         break; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   private _switchYamlMode() { | ||||
|     this._yamlMode = !this._yamlMode; | ||||
|   } | ||||
|  | ||||
|   private _modeChanged(ev: CustomEvent) { | ||||
|     const mode = ((ev.target as PaperListboxElement)?.selectedItem as any) | ||||
|       ?.mode; | ||||
| @@ -370,6 +461,15 @@ export class HaScriptEditor extends LitElement { | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   private _onYamlChange(ev: CustomEvent) { | ||||
|     ev.stopPropagation(); | ||||
|     if (!ev.detail.isValid) { | ||||
|       return; | ||||
|     } | ||||
|     this._config = ev.detail.value; | ||||
|     this._dirty = true; | ||||
|   } | ||||
|  | ||||
|   private _valueChanged(ev: CustomEvent) { | ||||
|     ev.stopPropagation(); | ||||
|     const target = ev.target as any; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user