From 2882a94b2352547d90cbd9ee66449f0c5077cd58 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 22 Jul 2022 23:07:07 +0200 Subject: [PATCH 01/70] Implement custom popups for cards that uses custom actions. --- .../ulm_templates/actions/actions_card.yaml | 102 +++++++++++++++-- .../ulm_templates/actions/actions_icon.yaml | 102 +++++++++++++++-- .../ulm_templates/actions/actions_name.yaml | 108 +++++++++++++++--- .../2-line_cards/card_graph.yaml | 24 ++-- .../icon_more_info_alert.yaml | 4 + .../icon_more_info_new.yaml | 4 + 6 files changed, 291 insertions(+), 53 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 9c9c42d63..7760a3b04 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -24,6 +24,14 @@ ulm_actions_card: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -52,11 +60,29 @@ ulm_actions_card: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -79,6 +105,14 @@ ulm_actions_card: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -107,11 +141,29 @@ ulm_actions_card: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" double_tap_action: action: > [[[ @@ -133,6 +185,14 @@ ulm_actions_card: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -161,8 +221,26 @@ ulm_actions_card: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index eccbc286c..8425c8460 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -24,6 +24,14 @@ ulm_actions_icon: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -52,11 +60,29 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -79,6 +105,14 @@ ulm_actions_icon: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -107,11 +141,29 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" double_tap_action: action: > [[[ @@ -133,6 +185,14 @@ ulm_actions_icon: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -161,8 +221,26 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 3210625c7..0cd33442d 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -24,6 +24,14 @@ ulm_actions_name: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -52,11 +60,29 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -64,6 +90,9 @@ ulm_actions_name: var action = variables.ulm_name_hold_action; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + console.log(entity.entity_id); + console.log(variables.ulm_custom_popup); + if (domain == "binary_sensor" || domain == "sensor"){ if (action == 'toggle') action = 'none'; @@ -79,11 +108,19 @@ ulm_actions_name: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_name_hold_action == 'navigate' ? variables.ulm_name_hold_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -107,11 +144,30 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; + ]]] + double_tap_action: action: > [[[ @@ -133,6 +189,14 @@ ulm_actions_name: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -161,8 +225,26 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml index 878bc8244..d80eb10da 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml @@ -1,6 +1,8 @@ --- ### Card Graph ### card_graph: + template: + - "ulm_actions_card" variables: ulm_card_graph_color: "var(--info-color)" ulm_card_graph_name: "[[[ return entity.attributes.friendly_name; ]]]" @@ -29,27 +31,17 @@ card_graph: type: "custom:button-card" template: - "card_generic" + entity: "[[[ return entity.entity_id ]]]" + variables: + ulm_card_generic_icon: "[[[ return variables.ulm_card_graph_icon; ]]]" + ulm_card_generic_name: "[[[ return variables.ulm_card_graph_name; ]]]" + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - box-shadow: "none" - border-radius: "var(--border-radius) var(--border-radius) 0px 0px" - padding: "12px" - entity: "[[[ return entity.entity_id ]]]" - custom_fields: - item1: - card: - type: "custom:button-card" - custom_fields: - item1: - card: - type: "custom:button-card" - entity: "[[[ return entity.entity_id ]]]" - icon: "[[[ return variables.ulm_card_graph_icon; ]]]" - item2: - card: - type: "custom:button-card" - entity: "[[[ return entity.entity_id ]]]" - label: "[[[ return variables.ulm_card_graph_name ]]]" + item2: card: type: "custom:mini-graph-card" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml index 8aa570950..4724736ab 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml @@ -37,6 +37,8 @@ icon_more_info_alert: template: - "icon_alert" - "ulm_actions_icon" + variables: + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - overflow: "visible" @@ -48,6 +50,8 @@ icon_more_info_alert: template: - "icon_info" - "ulm_actions_name" + variables: + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - padding: "6px" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml index 2731d226a..1539f555e 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml @@ -37,6 +37,8 @@ icon_more_info_new: template: - "icon" - "ulm_actions_icon" + variables: + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - overflow: "visible" @@ -48,6 +50,8 @@ icon_more_info_new: template: - "icon_info" - "ulm_actions_name" + variables: + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - padding: "6px" From d2e95a9bce7ec6db2106adabe3c020424926736a Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 24 Jul 2022 12:09:59 +0200 Subject: [PATCH 02/70] Fix coding style for custom pupups. --- .../lovelace/ulm_templates/actions/actions_card.yaml | 1 - .../lovelace/ulm_templates/actions/actions_icon.yaml | 1 - .../lovelace/ulm_templates/actions/actions_name.yaml | 4 +--- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 7760a3b04..849068f48 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -83,7 +83,6 @@ ulm_actions_card: 'ulm_popup_media_player_entity': entity.entity_id }; ]]] - hold_action: action: > [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 8425c8460..0d78b2fc0 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -83,7 +83,6 @@ ulm_actions_icon: 'ulm_popup_media_player_entity': entity.entity_id }; ]]] - hold_action: action: > [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 0cd33442d..dc15ff6ff 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -83,7 +83,6 @@ ulm_actions_name: 'ulm_popup_media_player_entity': entity.entity_id }; ]]] - hold_action: action: > [[[ @@ -167,7 +166,6 @@ ulm_actions_name: 'ulm_popup_media_player_entity': entity.entity_id }; ]]] - double_tap_action: action: > [[[ @@ -192,7 +190,7 @@ ulm_actions_name: if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; - if ((typeof popup_config === 'object') && 'template' in popup_config) { + if ((typeof popup_config === 'object') && 'template' in popup_config){ action = 'fire-dom-event'; } } From d48566f62aaa4648711c93f3527106625431ca3d Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 24 Jul 2022 22:57:24 +0200 Subject: [PATCH 03/70] Remove debug logs for cusom popup --- .../lovelace/ulm_templates/actions/actions_name.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index dc15ff6ff..291064982 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -89,9 +89,6 @@ ulm_actions_name: var action = variables.ulm_name_hold_action; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); - console.log(entity.entity_id); - console.log(variables.ulm_custom_popup); - if (domain == "binary_sensor" || domain == "sensor"){ if (action == 'toggle') action = 'none'; From 70cbf6cd9aaa82b032fcf15bf0601db77647b35a Mon Sep 17 00:00:00 2001 From: Boris Kubiak Date: Tue, 26 Jul 2022 10:06:18 +0200 Subject: [PATCH 04/70] feat(card-person): use variable icon --- .../ulm_templates/card_templates/cards/card_person.yaml | 3 ++- docs/usage/cards/card_person.md | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_person.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_person.yaml index 048127b20..47da16c65 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_person.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_person.yaml @@ -6,6 +6,7 @@ card_person: - "ulm_translation_engine" variables: ulm_card_person_use_entity_picture: false + ulm_card_person_icon: "mdi:face-man" ulm_card_person_zone1: "" ulm_card_person_zone2: "" ulm_address: "" @@ -27,7 +28,7 @@ card_person: ]]] name: "[[[ return states[variables.ulm_card_person_entity].attributes.friendly_name ]]]" entity: "[[[ return variables.ulm_card_person_entity; ]]]" - icon: "mdi:face-man" + icon: "[[[ return variables.ulm_card_person_icon; ]]]" show_entity_picture: "[[[ return variables.ulm_card_person_use_entity_picture ]]]" entity_picture: "[[[ return variables.ulm_card_person_use_entity_picture ? states[variables.ulm_card_person_entity].attributes.entity_picture\ \ : null ]]]" diff --git a/docs/usage/cards/card_person.md b/docs/usage/cards/card_person.md index 5b02b99ee..f70726ad1 100644 --- a/docs/usage/cards/card_person.md +++ b/docs/usage/cards/card_person.md @@ -18,6 +18,7 @@ The `card_person` shows if a person is `home` or `not_home`. If you have setup o | entity | | :material-check: | The person entity | | ulm_card_person_entity | | :material-check: | The person entity | | ulm_card_person_use_entity_picture | | :material-close: | If you set this to true, the card shows the entity picture from your user, otherwise (set to false) shows the icon. Default is false. | +| ulm_card_person_icon | mdi:face-man | :material-close: | Sets the icon to display if entity picture not shown. | | ulm_card_person_zone1 | | :material-close: | Set another zone (beside "home") to use for the card. You can set up two zones besides "home". | | ulm_card_person_zone2 | | :material-close: | Set another zone (beside "home") to use for the card. You can set up two zones besides "home". | | ulm_address | | :material-close: | Show an address as label, add an entity with a geo location | @@ -31,6 +32,7 @@ The `card_person` shows if a person is `home` or `not_home`. If you have setup o variables: ulm_card_person_entity: person.username ulm_card_person_use_entity_picture: true + ulm_card_person_icon: mdi:face-woman ulm_card_person_zone1: zone.work ulm_card_person_zone2: zone.school ulm_address: sensor.s10_mike_gegeocodeerde_locatie From 67304c5e8747307cd53da8dc5ae9ac8d052094d3 Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 26 Jul 2022 11:06:18 +0200 Subject: [PATCH 05/70] Hide exclamation --- .../internal_templates/icon_more_info_alert.yaml | 3 +++ .../card_templates/internal_templates/icon_more_info_new.yaml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml index 8aa570950..1a23eab74 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml @@ -53,3 +53,6 @@ icon_more_info_alert: - padding: "6px" - margin-left: "-6px" - background-color: "rgba(0,0,0,0)" + custom_fields: + notification: + - display: "none" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml index 2731d226a..5f62ecc13 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml @@ -53,3 +53,6 @@ icon_more_info_new: - padding: "6px" - margin-left: "-6px" - background-color: "rgba(0,0,0,0)" + custom_fields: + notification: + - display: "none" From 23b7bebd36958b0cec67640a1976b74685ae600b Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 26 Jul 2022 15:36:51 +0200 Subject: [PATCH 06/70] Add weather popup --- .../ulm_templates/actions/actions_card.yaml | 18 +- .../chips/chip_temperature.yaml | 6 +- .../popup_buttons/popup_button_forecast.yaml | 4 + .../popup_buttons/popup_button_radar.yaml | 4 + .../popup_layouts/popup_weather_row.yaml | 111 ++++++++++++ .../popup_templates/popups/popup_weather.yaml | 13 ++ .../popups/popup_weather_forecast.yaml | 167 ++++++++++++++++++ .../popups/popup_weather_radar.yaml | 61 +++++++ 8 files changed, 380 insertions(+), 4 deletions(-) create mode 100644 custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_forecast.yaml create mode 100644 custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml create mode 100644 custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_layouts/popup_weather_row.yaml create mode 100644 custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather.yaml create mode 100644 custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml create mode 100644 custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 9c9c42d63..535c6b4e6 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -21,7 +21,7 @@ ulm_actions_card: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -52,11 +52,15 @@ ulm_actions_card: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + if (variables.ulm_card_weather_enable_popup){ + return 'popup_weather_forecast' + } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -76,7 +80,7 @@ ulm_actions_card: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -107,11 +111,15 @@ ulm_actions_card: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + if (variables.ulm_card_weather_enable_popup){ + return 'popup_weather_forecast' + } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" double_tap_action: action: > [[[ @@ -130,7 +138,7 @@ ulm_actions_card: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -161,8 +169,12 @@ ulm_actions_card: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + if (variables.ulm_card_weather_enable_popup){ + return 'popup_weather_forecast' + } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_temperature.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_temperature.yaml index 6674a83bb..81ba035b1 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_temperature.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/chips/chip_temperature.yaml @@ -1,7 +1,11 @@ --- ### Chip Temperature ### chip_temperature: - template: "chips" + template: + - "chips" + - "ulm_actions_card" + variables: + ulm_card_weather_enable_popup: false triggers_update: "all" label: | [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_forecast.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_forecast.yaml new file mode 100644 index 000000000..f03c45aeb --- /dev/null +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_forecast.yaml @@ -0,0 +1,4 @@ +--- +popup_button_forecast: + template: "ulm_translation_engine" + name: "[[[ return variables.ulm_translation_forecast ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml new file mode 100644 index 000000000..aaeed643b --- /dev/null +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml @@ -0,0 +1,4 @@ +--- +popup_button_radar: + template: "ulm_translation_engine" + name: "[[[ return variables.ulm_translation_radar ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_layouts/popup_weather_row.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_layouts/popup_weather_row.yaml new file mode 100644 index 000000000..f7ddb597b --- /dev/null +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_layouts/popup_weather_row.yaml @@ -0,0 +1,111 @@ +--- +popup_weather_row: + template: + - "icon" + show_name: false + styles: + grid: + - grid-template-areas: '"i date templow tempmax"' + - grid-template-columns: 1fr 2fr 1fr 1fr + - grid-template-rows: min-content min-content min-content min-content + card: + - padding: 2px 0px + icon: + - color: > + [[[ + var state = entity.attributes.forecast[variables.ulm_popup_weather_entity_idx].condition; + var icon = { + "clear-night": "rgba(var(--color-yellow),1)", + "cloudy": "rgba(var(--color-blue),1)", + "exceptional": "rgba(var(--color-red),1)", + "fog": "rgba(var(--color-grey),1)", + "hail": "rgba(var(--color-blue),1)", + "lightning": "rgba(var(--color-blue),1)", + "lightning-rainy": "rgba(var(--color-blue),1)", + "partlycloudy": "rgba(var(--color-yellow),1)", + "pouring": "rgba(var(--color-grey),1)", + "rainy": "rgba(var(--color-blue),1)", + "snowy": "rgba(var(--color-blue),1)", + "snowy-rainy": "rgba(var(--color-blue),1)", + "sunny": "rgba(var(--color-yellow),1)", + "windy": "rgba(var(--color-grey),1)", + "default": "rgba(var(--color-grey),1)", + } + return (icon[state] || icon["default"]); + ]]] + img_cell: + - background-color: > + [[[ + var state = entity.attributes.forecast[variables.ulm_popup_weather_entity_idx].condition; + var icon = { + "clear-night": "rgba(var(--color-yellow),0.2)", + "cloudy": "rgba(var(--color-blue),0.2)", + "exceptional": "rgba(var(--color-red),0.2)", + "fog": "rgba(var(--color-grey),0.2)", + "hail": "rgba(var(--color-blue),0.2)", + "lightning": "rgba(var(--color-blue),0.2)", + "lightning-rainy": "rgba(var(--color-blue),0.2)", + "partlycloudy": "rgba(var(--color-yellow),0.2)", + "pouring": "rgba(var(--color-grey),0.2)", + "rainy": "rgba(var(--color-blue),0.2)", + "snowy": "rgba(var(--color-blue),0.2)", + "snowy-rainy": "rgba(var(--color-blue),0.2)", + "sunny": "rgba(var(--color-yellow),0.2)", + "windy": "rgba(var(--color-grey),0.2)", + "default": "rgba(var(--color-grey),0.2)", + } + return (icon[state] || icon["default"]); + ]]] + - height: 36px + - width: 36px + custom_fields: + date: + - text-align: left + - text-transform: capitalize + templow: + - background-color: "rgba(var(--color-blue), 1)" + - color: "white" + - border-radius: 15px + - height: 30px + - vertical-align: middle + - line-height: 30px + - width: 90% + tempmax: + - background-color: "rgba(var(--color-red), 1)" + - color: "white" + - border-radius: 15px + - height: 30px + - vertical-align: middle + - line-height: 30px + - width: 90% + custom_fields: + date: | + [[[ + const userLocale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language; + const date = new Date(entity.attributes.forecast[variables.ulm_popup_weather_entity_idx].datetime); + return date.toLocaleDateString(userLocale, {weekday: 'long',}); + ]]] + templow: "[[[ return entity.attributes.forecast[variables.ulm_popup_weather_entity_idx].templow + '°' ]]]" + tempmax: "[[[ return entity.attributes.forecast[variables.ulm_popup_weather_entity_idx].temperature + '°' ]]]" + icon: | + [[[ + var state = entity.attributes.forecast[variables.ulm_popup_weather_entity_idx].condition; + var icon = { + "clear-night": "mdi:weather-night", + "cloudy": "mdi:weather-cloudy", + "exceptional": "mdi:weather-sunny-alert", + "fog": "mdi:weather-fog", + "hail": "mdi:weather-hail", + "lightning": "mdi:weather-lightning", + "lightning-rainy": "mdi:weather-lightning-rainy", + "partlycloudy": "mdi:weather-partly-cloudy", + "pouring": "mdi:weather-pouring", + "rainy": "mdi:weather-rainy", + "snowy": "mdi:weather-snowy", + "snowy-rainy": "mdi:weather-snowy-rainy", + "sunny": "mdi:weather-sunny", + "windy": "mdi:weather-windy", + "default": "mdi:crosshairs-question" + } + return (icon[state] || icon["default"]); + ]]] diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather.yaml new file mode 100644 index 000000000..2eb4e57cb --- /dev/null +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather.yaml @@ -0,0 +1,13 @@ +--- +popup_weather: + hold_action: + action: "fire-dom-event" + browser_mod: + command: "popup" + large: true + hide_header: true + card: + type: "custom:button-card" + template: "popup_weather_forecast" + variables: + ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml new file mode 100644 index 000000000..73cc30f22 --- /dev/null +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml @@ -0,0 +1,167 @@ +--- +popup_weather_forecast: + styles: + grid: + - grid-template-areas: "'header header' 'content1 content2' 'footer footer'" + - grid-template-rows: "14vh 56vh 16vh" + - grid-template-columns: "1fr 1fr" + - column-gap: "30px" + card: + - background: "var(--primary-background-color)" + - box-shadow: "none" + - padding: "4%" + custom_fields: + header: + - align-self: "start" + content1: + - align-self: "center" + content2: + - align-self: "center" + buttons: + - display: "none" + footer: + - align-self: "end" + - margin-top: "25px" + extra_styles: | + @media (max-width: 800px) { + #container { + grid-template-areas: "header" "content1" "buttons" "footer" !important; + grid-template-rows: 14vh 56vh 13vh 13vh !important; + grid-template-columns: 1fr !important; + } + #buttons { + display: block !important; + align-self: start !important; + } + #content2 { + display: none; + } + } + custom_fields: + header: + card: + type: "custom:button-card" + template: "popup_header" + entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + icon: | + [[[ + var state = states[variables.ulm_popup_weather_entity].state; + var icon = { + "clear-night": "mdi:weather-night", + "cloudy": "mdi:weather-cloudy", + "exceptional": "mdi:weather-sunny-alert", + "fog": "mdi:weather-fog", + "hail": "mdi:weather-hail", + "lightning": "mdi:weather-lightning", + "lightning-rainy": "mdi:weather-lightning-rainy", + "partlycloudy": "mdi:weather-partly-cloudy", + "pouring": "mdi:weather-pouring", + "rainy": "mdi:weather-rainy", + "snowy": "mdi:weather-snowy", + "snowy-rainy": "mdi:weather-snowy-rainy", + "sunny": "mdi:weather-sunny", + "windy": "mdi:weather-windy", + "default": "mdi:crosshairs-question" + } + return (icon[state] || icon["default"]); + ]]] + content1: + card: + type: vertical-stack + cards: + - type: "custom:button-card" + entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + show_name: false + show_icon: false + styles: + grid: + - grid-template-areas: '"temp" "tempminmax' + - grid-template-columns: 1fr + - grid-template-rows: min-content min-content + card: + - background: none + - box-shadow: none + custom_fields: + temp: + - font-size: 60px + custom_fields: + temp: "[[[ return states[variables.ulm_popup_weather_entity].attributes.temperature + '°' ]]]" + tempminmax: "[[[ return 'Max. ' + states[variables.ulm_popup_weather_entity].attributes.forecast[0].temperature + '° Min. ' + states[variables.ulm_popup_weather_entity].attributes.forecast[0].templow + '°' ]]]" + - type: vertical-stack + cards: + - type: "custom:button-card" + template: popup_weather_row + entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + variables: + ulm_popup_weather_entity_idx: 0 + - type: "custom:button-card" + tempalte: popup_weather_row + entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + variables: + ulm_popup_weather_entity_idx: 1 + - type: "custom:button-card" + tempalte: popup_weather_row + entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + variables: + ulm_popup_weather_entity_idx: 2 + - type: "custom:button-card" + tempalte: popup_weather_row + entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + variables: + ulm_popup_weather_entity_idx: 3 + - type: "custom:button-card" + tempalte: popup_weather_row + entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + variables: + ulm_popup_weather_entity_idx: 4 + - type: "custom:button-card" + tempalte: popup_weather_row + entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + variables: + ulm_popup_weather_entity_idx: 5 + buttons: + card: + type: "custom:button-card" + template: "list_2_items" + styles: + card: + - background: "none" + custom_fields: + item1: + card: + icon: "mdi:calendar-month" + type: "custom:button-card" + template: + - "popup_button" + - "popup_button_selected" + - "popup_button_forecast" + item2: + card: + icon: "mdi:radar" + type: "custom:button-card" + template: + - "popup_button" + - "popup_button_radar" + tap_action: + action: "fire-dom-event" + browser_mod: + command: "popup" + hide_header: true + card: + type: "custom:button-card" + template: "popup_weather_radar" + variables: + ulm_popup_weather_entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + footer: + card: + type: "custom:button-card" + template: "popup_list_items" + custom_fields: + item1: + card: + type: "custom:button-card" + template: "popup_button_back" + content2: + card: + type: "custom:weather-radar-card" + square_map: true diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml new file mode 100644 index 000000000..a6d4408f8 --- /dev/null +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml @@ -0,0 +1,61 @@ +--- +popup_weather_radar: + template: "popup_weather_forecast" + styles: + grid: + - grid-template-areas: "'header' 'content2' 'buttons' 'footer'" + - grid-template-rows: "14vh 56vh 13vh 13vh" + - grid-template-columns: "1fr" + custom_fields: + content1: + - display: "none" + extra_styles: | + @media (max-width: 800px) { + #container { + grid-template-areas: "header" "content2" "buttons" "footer" !important; + grid-template-rows: 14vh 56vh 13vh 13vh !important; + grid-template-columns: 1fr !important; + } + #buttons { + display: block !important; + align-self: start !important; + } + #content1 { + display: none; + } + custom_fields: + buttons: + card: + type: "custom:button-card" + template: "list_2_items" + styles: + card: + - background: "none" + custom_fields: + item1: + card: + icon: "mdi:calendar-month" + type: "custom:button-card" + name: "Forecast" + template: + - "popup_button" + # - "popup_button_stats" + tap_action: + action: "fire-dom-event" + browser_mod: + command: "popup" + hide_header: true + card: + type: "custom:button-card" + template: "popup_weather_forecast" + variables: + ulm_popup_weather_entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + item2: + card: + icon: "mdi:radar" + type: "custom:button-card" + name: "Radar" + template: + - "popup_button" + - "popup_button_selected" + # - "popup_button_history" From 8643655349c640d57dc3580687f3a975b7975a51 Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 26 Jul 2022 15:39:17 +0200 Subject: [PATCH 07/70] Add weather popup --- .../ulm_templates/actions/actions_icon.yaml | 19 ++++++++++++++++--- .../ulm_templates/actions/actions_name.yaml | 19 ++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index eccbc286c..abcb5db77 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -21,7 +21,7 @@ ulm_actions_icon: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -52,11 +52,15 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + if (variables.ulm_card_weather_enable_popup){ + return 'popup_weather_forecast' + } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -76,7 +80,7 @@ ulm_actions_icon: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -107,11 +111,16 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + if (variables.ulm_card_weather_enable_popup){ + return 'popup_weather_forecast' + } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" + double_tap_action: action: > [[[ @@ -130,7 +139,7 @@ ulm_actions_icon: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -161,8 +170,12 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + if (variables.ulm_card_weather_enable_popup){ + return 'popup_weather_forecast' + } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 3210625c7..f0020effb 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -21,7 +21,7 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -52,11 +52,15 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + if (variables.ulm_card_weather_enable_popup){ + return 'popup_weather_forecast' + } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -76,7 +80,7 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -107,11 +111,16 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + if (variables.ulm_card_weather_enable_popup){ + return 'popup_weather_forecast' + } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" + double_tap_action: action: > [[[ @@ -130,7 +139,7 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -161,8 +170,12 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + if (variables.ulm_card_weather_enable_popup){ + return 'popup_weather_forecast' + } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" From 76a27e5103e158e590a56aa4e4192ce7d5bce622 Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 26 Jul 2022 15:43:15 +0200 Subject: [PATCH 08/70] Add popup weather --- .../popup_templates/popups/popup_weather_radar.yaml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml index a6d4408f8..0b6512e89 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml @@ -36,10 +36,9 @@ popup_weather_radar: card: icon: "mdi:calendar-month" type: "custom:button-card" - name: "Forecast" template: - "popup_button" - # - "popup_button_stats" + - "popup_button_forecast" tap_action: action: "fire-dom-event" browser_mod: @@ -54,8 +53,7 @@ popup_weather_radar: card: icon: "mdi:radar" type: "custom:button-card" - name: "Radar" template: - "popup_button" - "popup_button_selected" - # - "popup_button_history" + - "popup_button_radar" From 5745e6a9408ab7dc784def0dfd68894377b0720d Mon Sep 17 00:00:00 2001 From: mdb17 Date: Wed, 27 Jul 2022 09:50:31 -0500 Subject: [PATCH 09/70] Update card_media_player.yaml Add Hulu as an icon option --- .../ulm_templates/card_templates/cards/card_media_player.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 6fafb3018..b6b945f24 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -113,6 +113,7 @@ card_media_player: "oto music": "mdi:music-circle", "pandora": "mdi:pandora", "netflix": "mdi:netflix", + "hulu": "mdi:hulu", "bluetooth audio": "mdi:bluetooth" } } From c8962b0038585c552d5e8d02e904fd1de35a09e9 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 18:37:44 +0200 Subject: [PATCH 10/70] Implement redirection of custom actions per card. --- .../ulm_templates/actions/actions_card.yaml | 2 -- .../ulm_templates/actions/actions_icon.yaml | 2 -- .../ulm_templates/actions/actions_name.yaml | 2 -- .../2-line_cards/card_graph.yaml | 19 +++++++++++++++++++ .../icon_more_info_alert.yaml | 14 ++++++++++++++ .../icon_more_info_new.yaml | 14 ++++++++++++++ 6 files changed, 47 insertions(+), 6 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 849068f48..7b70d3e6d 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -1,8 +1,6 @@ --- ### Actions card ### ulm_actions_card: - template: - - "ulm_custom_actions" tap_action: action: > [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 0d78b2fc0..fb45f67a0 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -1,8 +1,6 @@ --- ### Actions icon ### ulm_actions_icon: - template: - - "ulm_custom_actions" tap_action: action: > [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 291064982..755342349 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -1,8 +1,6 @@ --- ### Actions name ### ulm_actions_name: - template: - - "ulm_custom_actions" tap_action: action: > [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml index d80eb10da..a08236390 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml @@ -2,6 +2,7 @@ ### Card Graph ### card_graph: template: + - "ulm_custom_actions" - "ulm_actions_card" variables: ulm_card_graph_color: "var(--info-color)" @@ -35,6 +36,24 @@ card_graph: variables: ulm_card_generic_icon: "[[[ return variables.ulm_card_graph_icon; ]]]" ulm_card_generic_name: "[[[ return variables.ulm_card_graph_name; ]]]" + ulm_card_tap_action: "[[[ return variables.ulm_card_tap_action; ]]]" + ulm_card_tap_navigate_path: "[[[ return variables.ulm_card_tap_navigate_path; ]]]" + ulm_card_hold_action: "[[[ return variables.ulm_card_hold_action; ]]]" + ulm_card_hold_navigate_path: "[[[ return variables.ulm_card_hold_navigate_path; ]]]" + ulm_card_double_tap_action: "[[[ return variables.ulm_card_double_tap_action; ]]]" + ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" + ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml index 4724736ab..74fbef5f8 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml @@ -4,6 +4,8 @@ icon_more_info_alert: show_icon: false show_name: false show_label: false + template: + - "ulm_custom_actions" styles: grid: - grid-template-areas: "'item1'" @@ -38,6 +40,12 @@ icon_more_info_alert: - "icon_alert" - "ulm_actions_icon" variables: + ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: @@ -51,6 +59,12 @@ icon_more_info_alert: - "icon_info" - "ulm_actions_name" variables: + ulm_name_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml index 1539f555e..441038804 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml @@ -4,6 +4,8 @@ icon_more_info_new: show_icon: false show_name: false show_label: false + template: + - "ulm_custom_actions" styles: grid: - grid-template-areas: "'item1'" @@ -38,6 +40,12 @@ icon_more_info_new: - "icon" - "ulm_actions_icon" variables: + ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: @@ -51,6 +59,12 @@ icon_more_info_new: - "icon_info" - "ulm_actions_name" variables: + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: From f93ab3425e10de94709ff5554a6563d51e8e43c1 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 21:12:42 +0200 Subject: [PATCH 11/70] Refactor light, media_player and thermostat popups. Legacy popups will use the custom popup implementation. --- .../ulm_templates/actions/actions_card.yaml | 62 +----------------- .../ulm_templates/actions/actions_icon.yaml | 30 +-------- .../ulm_templates/actions/actions_name.yaml | 64 +------------------ .../2-line_cards/card_graph.yaml | 29 ++------- .../card_templates/cards/card_light.yaml | 34 +++++++--- .../cards/card_media_player.yaml | 36 ++++++++--- .../card_templates/cards/card_thermostat.yaml | 36 ++++++++--- 7 files changed, 96 insertions(+), 195 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 7b70d3e6d..13928d798 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -19,10 +19,6 @@ ulm_actions_card: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -34,7 +30,7 @@ ulm_actions_card: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_card_tap_action == 'navigate' ? variables.ulm_card_tap_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -49,16 +45,6 @@ ulm_actions_card: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -74,12 +60,6 @@ ulm_actions_card: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] hold_action: action: > @@ -87,6 +67,7 @@ ulm_actions_card: var action = variables.ulm_card_hold_action; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + if (domain == "binary_sensor" || domain == "sensor"){ if (action == 'toggle') action = 'none'; @@ -99,10 +80,6 @@ ulm_actions_card: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -129,15 +106,6 @@ ulm_actions_card: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; @@ -154,12 +122,6 @@ ulm_actions_card: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] double_tap_action: action: > @@ -179,10 +141,6 @@ ulm_actions_card: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -209,16 +167,6 @@ ulm_actions_card: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -234,10 +182,4 @@ ulm_actions_card: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index fb45f67a0..786357876 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -19,10 +19,6 @@ ulm_actions_icon: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -34,7 +30,7 @@ ulm_actions_icon: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_icon_tap_action == 'navigate' ? variables.ulm_icon_tap_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -99,10 +95,6 @@ ulm_actions_icon: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -114,7 +106,7 @@ ulm_actions_icon: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_icon_hold_action == 'navigate' ? variables.ulm_icon_hold_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -194,7 +186,7 @@ ulm_actions_icon: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_icon_double_tap_action == 'navigate' ? variables.ulm_icon_double_tap_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -209,16 +201,6 @@ ulm_actions_icon: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -234,10 +216,4 @@ ulm_actions_icon: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 755342349..85e4d1365 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -19,10 +19,6 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -34,7 +30,7 @@ ulm_actions_name: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_name_tap_action == 'navigate' ? variables.ulm_name_tap_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -49,16 +45,6 @@ ulm_actions_name: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -74,12 +60,6 @@ ulm_actions_name: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] hold_action: action: > @@ -99,10 +79,6 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -129,16 +105,6 @@ ulm_actions_name: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -154,12 +120,6 @@ ulm_actions_name: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] double_tap_action: action: > @@ -179,10 +139,6 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config){ @@ -194,7 +150,7 @@ ulm_actions_name: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_name_double_tap_action == 'navigate' ? variables.ulm_name_double_tap_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -209,16 +165,6 @@ ulm_actions_name: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -234,10 +180,4 @@ ulm_actions_name: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml index a08236390..c1b545509 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml @@ -33,28 +33,13 @@ card_graph: template: - "card_generic" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_card_generic_icon: "[[[ return variables.ulm_card_graph_icon; ]]]" - ulm_card_generic_name: "[[[ return variables.ulm_card_graph_name; ]]]" - ulm_card_tap_action: "[[[ return variables.ulm_card_tap_action; ]]]" - ulm_card_tap_navigate_path: "[[[ return variables.ulm_card_tap_navigate_path; ]]]" - ulm_card_hold_action: "[[[ return variables.ulm_card_hold_action; ]]]" - ulm_card_hold_navigate_path: "[[[ return variables.ulm_card_hold_navigate_path; ]]]" - ulm_card_double_tap_action: "[[[ return variables.ulm_card_double_tap_action; ]]]" - ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" - ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" - ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" - ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" - ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" - ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" - ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" - ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" - ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" - ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" - ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" - ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" - ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" - ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" + variables: > + [[[ + let vars = variables; + vars.ulm_card_generic_icon = variables.ulm_card_graph_icon; + vars.ulm_card_generic_name = variables.ulm_card_graph_name; + return vars; + ]]] styles: card: - box-shadow: "none" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml index a5e0e5c1f..f19e87cd5 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml @@ -104,10 +104,19 @@ card_light: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" icon: "[[[ return variables.ulm_card_light_icon ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_light_enable_popup: "[[[ return variables.ulm_card_light_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + if(variables.ulm_card_light_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_light_brightness', + 'popup_variables': { + 'ulm_popup_light_entity': entity.entity_id, + } + } + } + return vars; + ]]] styles: icon: - color: > @@ -141,10 +150,19 @@ card_light: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_light_enable_popup: "[[[ return variables.ulm_card_light_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + if(variables.ulm_card_light_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_light_brightness', + 'popup_variables': { + 'ulm_popup_light_entity': entity.entity_id, + } + }; + } + return vars; + ]]] name: "[[[ return variables.ulm_card_light_name ]]]" label: >- [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 6fafb3018..0a3d02220 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -95,10 +95,20 @@ card_media_player: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + + if(variables.ulm_card_media_player_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_media_player_infos', + 'popup_variables': { + 'ulm_popup_media_player_entity': entity.entity_id, + } + }; + } + return vars; + ]]] icon: | [[[ var icon = entity.attributes.icon || "mdi:speaker"; @@ -139,10 +149,20 @@ card_media_player: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + + if(variables.ulm_card_media_player_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_media_player_infos', + 'popup_variables': { + 'ulm_popup_media_player_entity': entity.entity_id, + } + }; + } + return vars; + ]]] label: "[[[ return variables.ulm_translation_state ]]]" state: - operator: "template" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml index f4c433f77..176b1b8a8 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml @@ -148,10 +148,20 @@ card_thermostat: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_thermostat_enable_popup: "[[[ return variables.ulm_card_thermostat_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + + if(variables.ulm_card_thermostat_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_thermostat_temperature', + 'popup_variables': { + 'ulm_popup_thermostat_entity': entity.entity_id, + } + }; + } + return vars; + ]]] icon: "[[[ return variables.ulm_card_thermostat_icon ]]]" state: - operator: "template" @@ -178,10 +188,20 @@ card_thermostat: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_thermostat_enable_popup: "[[[ return variables.ulm_card_thermostat_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + + if(variables.ulm_card_thermostat_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_thermostat_temperature', + 'popup_variables': { + 'ulm_popup_thermostat_entity': entity.entity_id, + } + }; + } + return vars; + ]]] name: "[[[ return variables.ulm_card_thermostat_name ]]]" label: >- [[[ From dd0ba73eeefad1d672a08fb96a43d6dd45e34158 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 21:30:43 +0200 Subject: [PATCH 12/70] Refactor code style. --- .../ulm_templates/card_templates/cards/card_thermostat.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml index 176b1b8a8..67cb55001 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml @@ -158,7 +158,7 @@ card_thermostat: 'popup_variables': { 'ulm_popup_thermostat_entity': entity.entity_id, } - }; + }; } return vars; ]]] @@ -198,7 +198,7 @@ card_thermostat: 'popup_variables': { 'ulm_popup_thermostat_entity': entity.entity_id, } - }; + }; } return vars; ]]] From bab6719895394649c4eba7595ef8af204c19cdf4 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 21:33:10 +0200 Subject: [PATCH 13/70] Code style. --- .../ulm_templates/card_templates/cards/card_light.yaml | 4 ++-- .../ulm_templates/card_templates/cards/card_media_player.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml index f19e87cd5..632236328 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml @@ -113,7 +113,7 @@ card_light: 'popup_variables': { 'ulm_popup_light_entity': entity.entity_id, } - } + }; } return vars; ]]] @@ -159,7 +159,7 @@ card_light: 'popup_variables': { 'ulm_popup_light_entity': entity.entity_id, } - }; + }; } return vars; ]]] diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 0a3d02220..183bd77f8 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -105,7 +105,7 @@ card_media_player: 'popup_variables': { 'ulm_popup_media_player_entity': entity.entity_id, } - }; + }; } return vars; ]]] @@ -159,7 +159,7 @@ card_media_player: 'popup_variables': { 'ulm_popup_media_player_entity': entity.entity_id, } - }; + }; } return vars; ]]] From e3617b5419608180595232397f8204a77439b289 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 22:50:02 +0200 Subject: [PATCH 14/70] Add haptic support to actions. --- .../lovelace/ulm_templates/actions/actions_card.yaml | 3 +++ .../lovelace/ulm_templates/actions/actions_icon.yaml | 3 +++ .../lovelace/ulm_templates/actions/actions_name.yaml | 3 +++ 3 files changed, 9 insertions(+) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 13928d798..801078708 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -33,6 +33,7 @@ ulm_actions_card: return action; ]]] navigation_path: "[[[ return variables.ulm_card_tap_action == 'navigate' ? variables.ulm_card_tap_navigate_path : '/0' ]]]" + haptic: "medium" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -94,6 +95,7 @@ ulm_actions_card: return action ]]] navigation_path: "[[[ return variables.ulm_card_hold_action == 'navigate' ? variables.ulm_card_hold_navigate_path : '/0' ]]]" + haptic: "light" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -155,6 +157,7 @@ ulm_actions_card: return action ]]] navigation_path: "[[[ return variables.ulm_card_double_tap_action == 'navigate' ? variables.ulm_card_double_tap_navigate_path : '/0' ]]]" + haptic: "light" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 786357876..3b98514c0 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -33,6 +33,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_tap_action == 'navigate' ? variables.ulm_icon_tap_navigate_path : '/0' ]]]" + haptic: "medium" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -109,6 +110,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_hold_action == 'navigate' ? variables.ulm_icon_hold_navigate_path : '/0' ]]]" + haptic: "light" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -189,6 +191,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_double_tap_action == 'navigate' ? variables.ulm_icon_double_tap_navigate_path : '/0' ]]]" + haptic: "light" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 85e4d1365..dc1fe0e87 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -33,6 +33,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_tap_action == 'navigate' ? variables.ulm_name_tap_navigate_path : '/0' ]]]" + haptic: "medium" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -93,6 +94,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_hold_action == 'navigate' ? variables.ulm_name_hold_navigate_path : '/0' ]]]" + haptic: "light" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -153,6 +155,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_double_tap_action == 'navigate' ? variables.ulm_name_double_tap_navigate_path : '/0' ]]]" + haptic: 'light' service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" From b2f503b6f743f9cfad52d43576a829ea44bd334b Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 23:19:38 +0200 Subject: [PATCH 15/70] Configure haptic support using custom action variables. --- .../ulm_templates/actions/actions_card.yaml | 6 +++--- .../ulm_templates/actions/actions_icon.yaml | 6 +++--- .../ulm_templates/actions/actions_name.yaml | 6 +++--- .../icon_more_info_alert.yaml | 18 ++++++++++++------ .../internal_templates/icon_more_info_new.yaml | 6 ++++++ 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 801078708..1bd655632 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -33,7 +33,7 @@ ulm_actions_card: return action; ]]] navigation_path: "[[[ return variables.ulm_card_tap_action == 'navigate' ? variables.ulm_card_tap_navigate_path : '/0' ]]]" - haptic: "medium" + haptic: "[[[ return variables.ulm_card_tap_haptic != null ? variables.ulm_card_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -95,7 +95,7 @@ ulm_actions_card: return action ]]] navigation_path: "[[[ return variables.ulm_card_hold_action == 'navigate' ? variables.ulm_card_hold_navigate_path : '/0' ]]]" - haptic: "light" + haptic: "[[[ return variables.ulm_card_hold_haptic != null ? variables.ulm_card_hold_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -157,7 +157,7 @@ ulm_actions_card: return action ]]] navigation_path: "[[[ return variables.ulm_card_double_tap_action == 'navigate' ? variables.ulm_card_double_tap_navigate_path : '/0' ]]]" - haptic: "light" + haptic: "[[[ return variables.ulm_card_double_tap_haptic != null ? variables.ulm_card_double_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 3b98514c0..8482e4ae9 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -33,7 +33,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_tap_action == 'navigate' ? variables.ulm_icon_tap_navigate_path : '/0' ]]]" - haptic: "medium" + haptic: "[[[ return variables.ulm_icon_tap_haptic != null ? variables.ulm_icon_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -110,7 +110,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_hold_action == 'navigate' ? variables.ulm_icon_hold_navigate_path : '/0' ]]]" - haptic: "light" + haptic: "[[[ return variables.ulm_icon_hold_haptic != null ? variables.ulm_icon_hold_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -191,7 +191,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_double_tap_action == 'navigate' ? variables.ulm_icon_double_tap_navigate_path : '/0' ]]]" - haptic: "light" + haptic: "[[[ return variables.ulm_icon_double_tap_haptic != null ? variables.ulm_icon_double_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index dc1fe0e87..5fee6df24 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -33,7 +33,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_tap_action == 'navigate' ? variables.ulm_name_tap_navigate_path : '/0' ]]]" - haptic: "medium" + haptic: "[[[ return variables.ulm_name_tap_haptic != null ? variables.ulm_name_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -94,7 +94,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_hold_action == 'navigate' ? variables.ulm_name_hold_navigate_path : '/0' ]]]" - haptic: "light" + haptic: "[[[ return variables.ulm_name_hold_haptic != null ? variables.ulm_name_hold_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -155,7 +155,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_double_tap_action == 'navigate' ? variables.ulm_name_double_tap_navigate_path : '/0' ]]]" - haptic: 'light' + haptic: "[[[ return variables.ulm_name_double_tap_haptic != null ? variables.ulm_name_double_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml index 74fbef5f8..626257ea0 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml @@ -41,10 +41,13 @@ icon_more_info_alert: - "ulm_actions_icon" variables: ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_haptic: "[[[ return variables.ulm_icon_hold_haptic; ]]]" ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_haptic: "[[[ return variables.ulm_icon_double_tap_haptic; ]]]" ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: @@ -59,12 +62,15 @@ icon_more_info_alert: - "icon_info" - "ulm_actions_name" variables: - ulm_name_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" - ulm_name_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" - ulm_name_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" - ulm_name_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" - ulm_name_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" - ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_haptic: "[[[ return variables.ulm_name_tap_haptic; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_haptic: "[[[ return variables.ulm_name_hold_haptic; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_haptic: "[[[ return variables.ulm_name_double_tap_haptic; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml index 441038804..812bc5d19 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml @@ -41,10 +41,13 @@ icon_more_info_new: - "ulm_actions_icon" variables: ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_haptic: "[[[ return variables.ulm_icon_hold_haptic; ]]]" ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_haptic: "[[[ return variables.ulm_icon_double_tap_haptic; ]]]" ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: @@ -60,10 +63,13 @@ icon_more_info_new: - "ulm_actions_name" variables: ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_haptic: "[[[ return variables.ulm_name_tap_haptic; ]]]" ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_haptic: "[[[ return variables.ulm_name_hold_haptic; ]]]" ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_haptic: "[[[ return variables.ulm_name_double_tap_haptic; ]]]" ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: From c69d7c2f7fe43a46308d7995294d449e4d47dc26 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 23:53:39 +0200 Subject: [PATCH 16/70] Add default values for actions if they are not set in ulm_custom_actions. --- .../ulm_templates/actions/actions_card.yaml | 6 +++--- .../ulm_templates/actions/actions_icon.yaml | 18 +++--------------- .../ulm_templates/actions/actions_name.yaml | 6 +++--- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 1bd655632..9a6eacc58 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -4,7 +4,7 @@ ulm_actions_card: tap_action: action: > [[[ - var action = variables.ulm_card_tap_action; + var action = variables.ulm_card_tap_action != null ? variables.ulm_card_tap_action : 'toggle'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ @@ -65,7 +65,7 @@ ulm_actions_card: hold_action: action: > [[[ - var action = variables.ulm_card_hold_action; + var action = variables.ulm_card_hold_action != null ? variables.ulm_card_hold_action : 'more-info'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); @@ -128,7 +128,7 @@ ulm_actions_card: double_tap_action: action: > [[[ - var action = variables.ulm_card_double_tap_action; + var action = variables.ulm_card_double_tap_action != null ? variables.ulm_card_double_tap_action : "adaptive"; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 8482e4ae9..9453d72c5 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -4,7 +4,7 @@ ulm_actions_icon: tap_action: action: > [[[ - var action = variables.ulm_icon_tap_action; + var action = variables.ulm_icon_tap_action != null ? variables.ulm_icon_tap_action : 'toggle'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ @@ -71,17 +71,11 @@ ulm_actions_icon: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] hold_action: action: > [[[ - var action = variables.ulm_icon_hold_action; + var action = variables.ulm_icon_hold_action != null ? variables.ulm_icon_hold_action : 'more_info'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ @@ -148,17 +142,11 @@ ulm_actions_icon: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] double_tap_action: action: > [[[ - var action = variables.ulm_icon_double_tap_action; + var action = variables.ulm_icon_double_tap_action != null ? variables.ulm_icon_double_tap_action : 'adaptive'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 5fee6df24..9597d57f8 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -4,7 +4,7 @@ ulm_actions_name: tap_action: action: > [[[ - var action = variables.ulm_name_tap_action; + var action = variables.ulm_name_tap_action != null ? variables.ulm_name_tap_action : 'toggle'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ @@ -65,7 +65,7 @@ ulm_actions_name: hold_action: action: > [[[ - var action = variables.ulm_name_hold_action; + var action = variables.ulm_name_hold_action != null ? variables.ulm_name_hold_action : 'more-info'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ @@ -126,7 +126,7 @@ ulm_actions_name: double_tap_action: action: > [[[ - var action = variables.ulm_name_double_tap_action; + var action = variables.ulm_name_double_tap_action != null ? variables.ulm_name_double_tap_action : 'adaptive'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ From a024d4e913df85d6fcf673ffb0beef410decebf1 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 22 Jul 2022 23:07:07 +0200 Subject: [PATCH 17/70] Implement custom popups for cards that uses custom actions. --- .../ulm_templates/actions/actions_card.yaml | 102 +++++++++++++++-- .../ulm_templates/actions/actions_icon.yaml | 102 +++++++++++++++-- .../ulm_templates/actions/actions_name.yaml | 108 +++++++++++++++--- .../2-line_cards/card_graph.yaml | 24 ++-- .../icon_more_info_alert.yaml | 4 + .../icon_more_info_new.yaml | 4 + 6 files changed, 291 insertions(+), 53 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 9c9c42d63..7760a3b04 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -24,6 +24,14 @@ ulm_actions_card: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -52,11 +60,29 @@ ulm_actions_card: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -79,6 +105,14 @@ ulm_actions_card: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -107,11 +141,29 @@ ulm_actions_card: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" double_tap_action: action: > [[[ @@ -133,6 +185,14 @@ ulm_actions_card: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -161,8 +221,26 @@ ulm_actions_card: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index eccbc286c..8425c8460 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -24,6 +24,14 @@ ulm_actions_icon: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -52,11 +60,29 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -79,6 +105,14 @@ ulm_actions_icon: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -107,11 +141,29 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" double_tap_action: action: > [[[ @@ -133,6 +185,14 @@ ulm_actions_icon: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -161,8 +221,26 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 3210625c7..0cd33442d 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -24,6 +24,14 @@ ulm_actions_name: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -52,11 +60,29 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -64,6 +90,9 @@ ulm_actions_name: var action = variables.ulm_name_hold_action; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + console.log(entity.entity_id); + console.log(variables.ulm_custom_popup); + if (domain == "binary_sensor" || domain == "sensor"){ if (action == 'toggle') action = 'none'; @@ -79,11 +108,19 @@ ulm_actions_name: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_name_hold_action == 'navigate' ? variables.ulm_name_hold_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -107,11 +144,30 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; + ]]] + double_tap_action: action: > [[[ @@ -133,6 +189,14 @@ ulm_actions_name: if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } + + if (action == 'popup' && (variables.ulm_custom_popup != null )){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + action = 'fire-dom-event'; + } + } + if (action == 'popup'){ action = 'more-info' } @@ -161,8 +225,26 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } + + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'template' in popup_config) { + return popup_config.template; + } + } + ]]] + variables: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'popup_variables' in popup_config) { + return popup_config.popup_variables; + } + } + + return { + 'ulm_popup_light_entity': entity.entity_id, + 'ulm_popup_thermostat_entity': entity.entity_id, + 'ulm_popup_media_player_entity': entity.entity_id + }; ]]] - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml index 878bc8244..d80eb10da 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml @@ -1,6 +1,8 @@ --- ### Card Graph ### card_graph: + template: + - "ulm_actions_card" variables: ulm_card_graph_color: "var(--info-color)" ulm_card_graph_name: "[[[ return entity.attributes.friendly_name; ]]]" @@ -29,27 +31,17 @@ card_graph: type: "custom:button-card" template: - "card_generic" + entity: "[[[ return entity.entity_id ]]]" + variables: + ulm_card_generic_icon: "[[[ return variables.ulm_card_graph_icon; ]]]" + ulm_card_generic_name: "[[[ return variables.ulm_card_graph_name; ]]]" + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - box-shadow: "none" - border-radius: "var(--border-radius) var(--border-radius) 0px 0px" - padding: "12px" - entity: "[[[ return entity.entity_id ]]]" - custom_fields: - item1: - card: - type: "custom:button-card" - custom_fields: - item1: - card: - type: "custom:button-card" - entity: "[[[ return entity.entity_id ]]]" - icon: "[[[ return variables.ulm_card_graph_icon; ]]]" - item2: - card: - type: "custom:button-card" - entity: "[[[ return entity.entity_id ]]]" - label: "[[[ return variables.ulm_card_graph_name ]]]" + item2: card: type: "custom:mini-graph-card" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml index 8aa570950..4724736ab 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml @@ -37,6 +37,8 @@ icon_more_info_alert: template: - "icon_alert" - "ulm_actions_icon" + variables: + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - overflow: "visible" @@ -48,6 +50,8 @@ icon_more_info_alert: template: - "icon_info" - "ulm_actions_name" + variables: + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - padding: "6px" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml index 2731d226a..1539f555e 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml @@ -37,6 +37,8 @@ icon_more_info_new: template: - "icon" - "ulm_actions_icon" + variables: + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - overflow: "visible" @@ -48,6 +50,8 @@ icon_more_info_new: template: - "icon_info" - "ulm_actions_name" + variables: + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - padding: "6px" From bc349bfb166316bef95490369c71e4e9b05204e3 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 24 Jul 2022 12:09:59 +0200 Subject: [PATCH 18/70] Fix coding style for custom pupups. --- .../lovelace/ulm_templates/actions/actions_card.yaml | 1 - .../lovelace/ulm_templates/actions/actions_icon.yaml | 1 - .../lovelace/ulm_templates/actions/actions_name.yaml | 4 +--- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 7760a3b04..849068f48 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -83,7 +83,6 @@ ulm_actions_card: 'ulm_popup_media_player_entity': entity.entity_id }; ]]] - hold_action: action: > [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 8425c8460..0d78b2fc0 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -83,7 +83,6 @@ ulm_actions_icon: 'ulm_popup_media_player_entity': entity.entity_id }; ]]] - hold_action: action: > [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 0cd33442d..dc15ff6ff 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -83,7 +83,6 @@ ulm_actions_name: 'ulm_popup_media_player_entity': entity.entity_id }; ]]] - hold_action: action: > [[[ @@ -167,7 +166,6 @@ ulm_actions_name: 'ulm_popup_media_player_entity': entity.entity_id }; ]]] - double_tap_action: action: > [[[ @@ -192,7 +190,7 @@ ulm_actions_name: if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; - if ((typeof popup_config === 'object') && 'template' in popup_config) { + if ((typeof popup_config === 'object') && 'template' in popup_config){ action = 'fire-dom-event'; } } From f467dcac9d656b51b1adf5322ac1569567f7be2a Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 24 Jul 2022 22:57:24 +0200 Subject: [PATCH 19/70] Remove debug logs for cusom popup --- .../lovelace/ulm_templates/actions/actions_name.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index dc15ff6ff..291064982 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -89,9 +89,6 @@ ulm_actions_name: var action = variables.ulm_name_hold_action; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); - console.log(entity.entity_id); - console.log(variables.ulm_custom_popup); - if (domain == "binary_sensor" || domain == "sensor"){ if (action == 'toggle') action = 'none'; From 81fc04e2eabde3882f944e31c9dc47b8a8ecdbd4 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 18:37:44 +0200 Subject: [PATCH 20/70] Implement redirection of custom actions per card. --- .../ulm_templates/actions/actions_card.yaml | 2 -- .../ulm_templates/actions/actions_icon.yaml | 2 -- .../ulm_templates/actions/actions_name.yaml | 2 -- .../2-line_cards/card_graph.yaml | 19 +++++++++++++++++++ .../icon_more_info_alert.yaml | 14 ++++++++++++++ .../icon_more_info_new.yaml | 14 ++++++++++++++ 6 files changed, 47 insertions(+), 6 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 849068f48..7b70d3e6d 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -1,8 +1,6 @@ --- ### Actions card ### ulm_actions_card: - template: - - "ulm_custom_actions" tap_action: action: > [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 0d78b2fc0..fb45f67a0 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -1,8 +1,6 @@ --- ### Actions icon ### ulm_actions_icon: - template: - - "ulm_custom_actions" tap_action: action: > [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 291064982..755342349 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -1,8 +1,6 @@ --- ### Actions name ### ulm_actions_name: - template: - - "ulm_custom_actions" tap_action: action: > [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml index d80eb10da..a08236390 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml @@ -2,6 +2,7 @@ ### Card Graph ### card_graph: template: + - "ulm_custom_actions" - "ulm_actions_card" variables: ulm_card_graph_color: "var(--info-color)" @@ -35,6 +36,24 @@ card_graph: variables: ulm_card_generic_icon: "[[[ return variables.ulm_card_graph_icon; ]]]" ulm_card_generic_name: "[[[ return variables.ulm_card_graph_name; ]]]" + ulm_card_tap_action: "[[[ return variables.ulm_card_tap_action; ]]]" + ulm_card_tap_navigate_path: "[[[ return variables.ulm_card_tap_navigate_path; ]]]" + ulm_card_hold_action: "[[[ return variables.ulm_card_hold_action; ]]]" + ulm_card_hold_navigate_path: "[[[ return variables.ulm_card_hold_navigate_path; ]]]" + ulm_card_double_tap_action: "[[[ return variables.ulm_card_double_tap_action; ]]]" + ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" + ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml index 4724736ab..74fbef5f8 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml @@ -4,6 +4,8 @@ icon_more_info_alert: show_icon: false show_name: false show_label: false + template: + - "ulm_custom_actions" styles: grid: - grid-template-areas: "'item1'" @@ -38,6 +40,12 @@ icon_more_info_alert: - "icon_alert" - "ulm_actions_icon" variables: + ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: @@ -51,6 +59,12 @@ icon_more_info_alert: - "icon_info" - "ulm_actions_name" variables: + ulm_name_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml index 1539f555e..441038804 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml @@ -4,6 +4,8 @@ icon_more_info_new: show_icon: false show_name: false show_label: false + template: + - "ulm_custom_actions" styles: grid: - grid-template-areas: "'item1'" @@ -38,6 +40,12 @@ icon_more_info_new: - "icon" - "ulm_actions_icon" variables: + ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: @@ -51,6 +59,12 @@ icon_more_info_new: - "icon_info" - "ulm_actions_name" variables: + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: From 609d6cce16735606618f1f0b7544ac4d73f18190 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 21:12:42 +0200 Subject: [PATCH 21/70] Refactor light, media_player and thermostat popups. Legacy popups will use the custom popup implementation. --- .../ulm_templates/actions/actions_card.yaml | 62 +----------------- .../ulm_templates/actions/actions_icon.yaml | 30 +-------- .../ulm_templates/actions/actions_name.yaml | 64 +------------------ .../2-line_cards/card_graph.yaml | 29 ++------- .../card_templates/cards/card_light.yaml | 34 +++++++--- .../cards/card_media_player.yaml | 36 ++++++++--- .../card_templates/cards/card_thermostat.yaml | 36 ++++++++--- 7 files changed, 96 insertions(+), 195 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 7b70d3e6d..13928d798 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -19,10 +19,6 @@ ulm_actions_card: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -34,7 +30,7 @@ ulm_actions_card: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_card_tap_action == 'navigate' ? variables.ulm_card_tap_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -49,16 +45,6 @@ ulm_actions_card: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -74,12 +60,6 @@ ulm_actions_card: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] hold_action: action: > @@ -87,6 +67,7 @@ ulm_actions_card: var action = variables.ulm_card_hold_action; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + if (domain == "binary_sensor" || domain == "sensor"){ if (action == 'toggle') action = 'none'; @@ -99,10 +80,6 @@ ulm_actions_card: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -129,15 +106,6 @@ ulm_actions_card: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; @@ -154,12 +122,6 @@ ulm_actions_card: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] double_tap_action: action: > @@ -179,10 +141,6 @@ ulm_actions_card: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -209,16 +167,6 @@ ulm_actions_card: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -234,10 +182,4 @@ ulm_actions_card: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index fb45f67a0..786357876 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -19,10 +19,6 @@ ulm_actions_icon: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -34,7 +30,7 @@ ulm_actions_icon: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_icon_tap_action == 'navigate' ? variables.ulm_icon_tap_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -99,10 +95,6 @@ ulm_actions_icon: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -114,7 +106,7 @@ ulm_actions_icon: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_icon_hold_action == 'navigate' ? variables.ulm_icon_hold_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -194,7 +186,7 @@ ulm_actions_icon: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_icon_double_tap_action == 'navigate' ? variables.ulm_icon_double_tap_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -209,16 +201,6 @@ ulm_actions_icon: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -234,10 +216,4 @@ ulm_actions_icon: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 755342349..85e4d1365 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -19,10 +19,6 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -34,7 +30,7 @@ ulm_actions_name: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_name_tap_action == 'navigate' ? variables.ulm_name_tap_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -49,16 +45,6 @@ ulm_actions_name: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -74,12 +60,6 @@ ulm_actions_name: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] hold_action: action: > @@ -99,10 +79,6 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -129,16 +105,6 @@ ulm_actions_name: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -154,12 +120,6 @@ ulm_actions_name: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] double_tap_action: action: > @@ -179,10 +139,6 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ - action = 'fire-dom-event' - } - if (action == 'popup' && (variables.ulm_custom_popup != null )){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config){ @@ -194,7 +150,7 @@ ulm_actions_name: action = 'more-info' } - return action + return action; ]]] navigation_path: "[[[ return variables.ulm_name_double_tap_action == 'navigate' ? variables.ulm_name_double_tap_navigate_path : '/0' ]]]" service: "input_select.select_option" @@ -209,16 +165,6 @@ ulm_actions_name: type: "custom:button-card" template: > [[[ - if (variables.ulm_card_light_enable_popup){ - return 'popup_light_brightness' - } - if (variables.ulm_card_thermostat_enable_popup){ - return 'popup_thermostat_temperature' - } - if (variables.ulm_card_media_player_enable_popup){ - return 'popup_media_player_infos' - } - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -234,10 +180,4 @@ ulm_actions_name: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml index a08236390..c1b545509 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml @@ -33,28 +33,13 @@ card_graph: template: - "card_generic" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_card_generic_icon: "[[[ return variables.ulm_card_graph_icon; ]]]" - ulm_card_generic_name: "[[[ return variables.ulm_card_graph_name; ]]]" - ulm_card_tap_action: "[[[ return variables.ulm_card_tap_action; ]]]" - ulm_card_tap_navigate_path: "[[[ return variables.ulm_card_tap_navigate_path; ]]]" - ulm_card_hold_action: "[[[ return variables.ulm_card_hold_action; ]]]" - ulm_card_hold_navigate_path: "[[[ return variables.ulm_card_hold_navigate_path; ]]]" - ulm_card_double_tap_action: "[[[ return variables.ulm_card_double_tap_action; ]]]" - ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" - ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" - ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" - ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" - ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" - ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" - ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" - ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" - ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" - ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" - ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" - ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" - ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" - ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" + variables: > + [[[ + let vars = variables; + vars.ulm_card_generic_icon = variables.ulm_card_graph_icon; + vars.ulm_card_generic_name = variables.ulm_card_graph_name; + return vars; + ]]] styles: card: - box-shadow: "none" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml index a5e0e5c1f..f19e87cd5 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml @@ -104,10 +104,19 @@ card_light: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" icon: "[[[ return variables.ulm_card_light_icon ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_light_enable_popup: "[[[ return variables.ulm_card_light_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + if(variables.ulm_card_light_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_light_brightness', + 'popup_variables': { + 'ulm_popup_light_entity': entity.entity_id, + } + } + } + return vars; + ]]] styles: icon: - color: > @@ -141,10 +150,19 @@ card_light: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_light_enable_popup: "[[[ return variables.ulm_card_light_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + if(variables.ulm_card_light_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_light_brightness', + 'popup_variables': { + 'ulm_popup_light_entity': entity.entity_id, + } + }; + } + return vars; + ]]] name: "[[[ return variables.ulm_card_light_name ]]]" label: >- [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 6fafb3018..0a3d02220 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -95,10 +95,20 @@ card_media_player: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + + if(variables.ulm_card_media_player_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_media_player_infos', + 'popup_variables': { + 'ulm_popup_media_player_entity': entity.entity_id, + } + }; + } + return vars; + ]]] icon: | [[[ var icon = entity.attributes.icon || "mdi:speaker"; @@ -139,10 +149,20 @@ card_media_player: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + + if(variables.ulm_card_media_player_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_media_player_infos', + 'popup_variables': { + 'ulm_popup_media_player_entity': entity.entity_id, + } + }; + } + return vars; + ]]] label: "[[[ return variables.ulm_translation_state ]]]" state: - operator: "template" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml index f4c433f77..176b1b8a8 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml @@ -148,10 +148,20 @@ card_thermostat: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_thermostat_enable_popup: "[[[ return variables.ulm_card_thermostat_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + + if(variables.ulm_card_thermostat_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_thermostat_temperature', + 'popup_variables': { + 'ulm_popup_thermostat_entity': entity.entity_id, + } + }; + } + return vars; + ]]] icon: "[[[ return variables.ulm_card_thermostat_icon ]]]" state: - operator: "template" @@ -178,10 +188,20 @@ card_thermostat: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_thermostat_enable_popup: "[[[ return variables.ulm_card_thermostat_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + + if(variables.ulm_card_thermostat_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_thermostat_temperature', + 'popup_variables': { + 'ulm_popup_thermostat_entity': entity.entity_id, + } + }; + } + return vars; + ]]] name: "[[[ return variables.ulm_card_thermostat_name ]]]" label: >- [[[ From aa56ef2c8e99a93213012c01762720312bb6cd9e Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 21:30:43 +0200 Subject: [PATCH 22/70] Refactor code style. --- .../ulm_templates/card_templates/cards/card_thermostat.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml index 176b1b8a8..67cb55001 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml @@ -158,7 +158,7 @@ card_thermostat: 'popup_variables': { 'ulm_popup_thermostat_entity': entity.entity_id, } - }; + }; } return vars; ]]] @@ -198,7 +198,7 @@ card_thermostat: 'popup_variables': { 'ulm_popup_thermostat_entity': entity.entity_id, } - }; + }; } return vars; ]]] From d9a7895a1da41128d3e144aa8d17ed04c9e44550 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 21:33:10 +0200 Subject: [PATCH 23/70] Code style. --- .../ulm_templates/card_templates/cards/card_light.yaml | 4 ++-- .../ulm_templates/card_templates/cards/card_media_player.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml index f19e87cd5..632236328 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml @@ -113,7 +113,7 @@ card_light: 'popup_variables': { 'ulm_popup_light_entity': entity.entity_id, } - } + }; } return vars; ]]] @@ -159,7 +159,7 @@ card_light: 'popup_variables': { 'ulm_popup_light_entity': entity.entity_id, } - }; + }; } return vars; ]]] diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 0a3d02220..183bd77f8 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -105,7 +105,7 @@ card_media_player: 'popup_variables': { 'ulm_popup_media_player_entity': entity.entity_id, } - }; + }; } return vars; ]]] @@ -159,7 +159,7 @@ card_media_player: 'popup_variables': { 'ulm_popup_media_player_entity': entity.entity_id, } - }; + }; } return vars; ]]] From 937428d9d928baf0fc775623cf697690dcc0a930 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 22:50:02 +0200 Subject: [PATCH 24/70] Add haptic support to actions. --- .../lovelace/ulm_templates/actions/actions_card.yaml | 3 +++ .../lovelace/ulm_templates/actions/actions_icon.yaml | 3 +++ .../lovelace/ulm_templates/actions/actions_name.yaml | 3 +++ 3 files changed, 9 insertions(+) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 13928d798..801078708 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -33,6 +33,7 @@ ulm_actions_card: return action; ]]] navigation_path: "[[[ return variables.ulm_card_tap_action == 'navigate' ? variables.ulm_card_tap_navigate_path : '/0' ]]]" + haptic: "medium" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -94,6 +95,7 @@ ulm_actions_card: return action ]]] navigation_path: "[[[ return variables.ulm_card_hold_action == 'navigate' ? variables.ulm_card_hold_navigate_path : '/0' ]]]" + haptic: "light" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -155,6 +157,7 @@ ulm_actions_card: return action ]]] navigation_path: "[[[ return variables.ulm_card_double_tap_action == 'navigate' ? variables.ulm_card_double_tap_navigate_path : '/0' ]]]" + haptic: "light" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 786357876..3b98514c0 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -33,6 +33,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_tap_action == 'navigate' ? variables.ulm_icon_tap_navigate_path : '/0' ]]]" + haptic: "medium" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -109,6 +110,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_hold_action == 'navigate' ? variables.ulm_icon_hold_navigate_path : '/0' ]]]" + haptic: "light" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -189,6 +191,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_double_tap_action == 'navigate' ? variables.ulm_icon_double_tap_navigate_path : '/0' ]]]" + haptic: "light" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 85e4d1365..dc1fe0e87 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -33,6 +33,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_tap_action == 'navigate' ? variables.ulm_name_tap_navigate_path : '/0' ]]]" + haptic: "medium" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -93,6 +94,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_hold_action == 'navigate' ? variables.ulm_name_hold_navigate_path : '/0' ]]]" + haptic: "light" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -153,6 +155,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_double_tap_action == 'navigate' ? variables.ulm_name_double_tap_navigate_path : '/0' ]]]" + haptic: 'light' service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" From 78fb51286cca4a44ad8587287804b939976d7b6d Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 23:19:38 +0200 Subject: [PATCH 25/70] Configure haptic support using custom action variables. --- .../ulm_templates/actions/actions_card.yaml | 6 +++--- .../ulm_templates/actions/actions_icon.yaml | 6 +++--- .../ulm_templates/actions/actions_name.yaml | 6 +++--- .../icon_more_info_alert.yaml | 18 ++++++++++++------ .../internal_templates/icon_more_info_new.yaml | 6 ++++++ 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 801078708..1bd655632 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -33,7 +33,7 @@ ulm_actions_card: return action; ]]] navigation_path: "[[[ return variables.ulm_card_tap_action == 'navigate' ? variables.ulm_card_tap_navigate_path : '/0' ]]]" - haptic: "medium" + haptic: "[[[ return variables.ulm_card_tap_haptic != null ? variables.ulm_card_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -95,7 +95,7 @@ ulm_actions_card: return action ]]] navigation_path: "[[[ return variables.ulm_card_hold_action == 'navigate' ? variables.ulm_card_hold_navigate_path : '/0' ]]]" - haptic: "light" + haptic: "[[[ return variables.ulm_card_hold_haptic != null ? variables.ulm_card_hold_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -157,7 +157,7 @@ ulm_actions_card: return action ]]] navigation_path: "[[[ return variables.ulm_card_double_tap_action == 'navigate' ? variables.ulm_card_double_tap_navigate_path : '/0' ]]]" - haptic: "light" + haptic: "[[[ return variables.ulm_card_double_tap_haptic != null ? variables.ulm_card_double_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 3b98514c0..8482e4ae9 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -33,7 +33,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_tap_action == 'navigate' ? variables.ulm_icon_tap_navigate_path : '/0' ]]]" - haptic: "medium" + haptic: "[[[ return variables.ulm_icon_tap_haptic != null ? variables.ulm_icon_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -110,7 +110,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_hold_action == 'navigate' ? variables.ulm_icon_hold_navigate_path : '/0' ]]]" - haptic: "light" + haptic: "[[[ return variables.ulm_icon_hold_haptic != null ? variables.ulm_icon_hold_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -191,7 +191,7 @@ ulm_actions_icon: return action; ]]] navigation_path: "[[[ return variables.ulm_icon_double_tap_action == 'navigate' ? variables.ulm_icon_double_tap_navigate_path : '/0' ]]]" - haptic: "light" + haptic: "[[[ return variables.ulm_icon_double_tap_haptic != null ? variables.ulm_icon_double_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index dc1fe0e87..5fee6df24 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -33,7 +33,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_tap_action == 'navigate' ? variables.ulm_name_tap_navigate_path : '/0' ]]]" - haptic: "medium" + haptic: "[[[ return variables.ulm_name_tap_haptic != null ? variables.ulm_name_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -94,7 +94,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_hold_action == 'navigate' ? variables.ulm_name_hold_navigate_path : '/0' ]]]" - haptic: "light" + haptic: "[[[ return variables.ulm_name_hold_haptic != null ? variables.ulm_name_hold_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" @@ -155,7 +155,7 @@ ulm_actions_name: return action; ]]] navigation_path: "[[[ return variables.ulm_name_double_tap_action == 'navigate' ? variables.ulm_name_double_tap_navigate_path : '/0' ]]]" - haptic: 'light' + haptic: "[[[ return variables.ulm_name_double_tap_haptic != null ? variables.ulm_name_double_tap_haptic : 'none' ]]]" service: "input_select.select_option" service_data: option: "[[[ return variables.ulm_input_select_option ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml index 74fbef5f8..626257ea0 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml @@ -41,10 +41,13 @@ icon_more_info_alert: - "ulm_actions_icon" variables: ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_haptic: "[[[ return variables.ulm_icon_hold_haptic; ]]]" ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_haptic: "[[[ return variables.ulm_icon_double_tap_haptic; ]]]" ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: @@ -59,12 +62,15 @@ icon_more_info_alert: - "icon_info" - "ulm_actions_name" variables: - ulm_name_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" - ulm_name_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" - ulm_name_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" - ulm_name_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" - ulm_name_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" - ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_haptic: "[[[ return variables.ulm_name_tap_haptic; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_haptic: "[[[ return variables.ulm_name_hold_haptic; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_haptic: "[[[ return variables.ulm_name_double_tap_haptic; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml index 441038804..812bc5d19 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml @@ -41,10 +41,13 @@ icon_more_info_new: - "ulm_actions_icon" variables: ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_haptic: "[[[ return variables.ulm_icon_hold_haptic; ]]]" ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_haptic: "[[[ return variables.ulm_icon_double_tap_haptic; ]]]" ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: @@ -60,10 +63,13 @@ icon_more_info_new: - "ulm_actions_name" variables: ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_haptic: "[[[ return variables.ulm_name_tap_haptic; ]]]" ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_haptic: "[[[ return variables.ulm_name_hold_haptic; ]]]" ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_haptic: "[[[ return variables.ulm_name_double_tap_haptic; ]]]" ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: From 76e618526dc964efe95e62b4ff976c56f4d1cd55 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 27 Jul 2022 23:53:39 +0200 Subject: [PATCH 26/70] Add default values for actions if they are not set in ulm_custom_actions. --- .../ulm_templates/actions/actions_card.yaml | 6 +++--- .../ulm_templates/actions/actions_icon.yaml | 18 +++--------------- .../ulm_templates/actions/actions_name.yaml | 6 +++--- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 1bd655632..9a6eacc58 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -4,7 +4,7 @@ ulm_actions_card: tap_action: action: > [[[ - var action = variables.ulm_card_tap_action; + var action = variables.ulm_card_tap_action != null ? variables.ulm_card_tap_action : 'toggle'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ @@ -65,7 +65,7 @@ ulm_actions_card: hold_action: action: > [[[ - var action = variables.ulm_card_hold_action; + var action = variables.ulm_card_hold_action != null ? variables.ulm_card_hold_action : 'more-info'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); @@ -128,7 +128,7 @@ ulm_actions_card: double_tap_action: action: > [[[ - var action = variables.ulm_card_double_tap_action; + var action = variables.ulm_card_double_tap_action != null ? variables.ulm_card_double_tap_action : "adaptive"; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 8482e4ae9..9453d72c5 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -4,7 +4,7 @@ ulm_actions_icon: tap_action: action: > [[[ - var action = variables.ulm_icon_tap_action; + var action = variables.ulm_icon_tap_action != null ? variables.ulm_icon_tap_action : 'toggle'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ @@ -71,17 +71,11 @@ ulm_actions_icon: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] hold_action: action: > [[[ - var action = variables.ulm_icon_hold_action; + var action = variables.ulm_icon_hold_action != null ? variables.ulm_icon_hold_action : 'more_info'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ @@ -148,17 +142,11 @@ ulm_actions_icon: return popup_config.popup_variables; } } - - return { - 'ulm_popup_light_entity': entity.entity_id, - 'ulm_popup_thermostat_entity': entity.entity_id, - 'ulm_popup_media_player_entity': entity.entity_id - }; ]]] double_tap_action: action: > [[[ - var action = variables.ulm_icon_double_tap_action; + var action = variables.ulm_icon_double_tap_action != null ? variables.ulm_icon_double_tap_action : 'adaptive'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 5fee6df24..9597d57f8 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -4,7 +4,7 @@ ulm_actions_name: tap_action: action: > [[[ - var action = variables.ulm_name_tap_action; + var action = variables.ulm_name_tap_action != null ? variables.ulm_name_tap_action : 'toggle'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ @@ -65,7 +65,7 @@ ulm_actions_name: hold_action: action: > [[[ - var action = variables.ulm_name_hold_action; + var action = variables.ulm_name_hold_action != null ? variables.ulm_name_hold_action : 'more-info'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ @@ -126,7 +126,7 @@ ulm_actions_name: double_tap_action: action: > [[[ - var action = variables.ulm_name_double_tap_action; + var action = variables.ulm_name_double_tap_action != null ? variables.ulm_name_double_tap_action : 'adaptive'; let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); if (domain == "binary_sensor" || domain == "sensor"){ From 1f0496b746f1fe3600c30adb07d09cd99c8d5882 Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 28 Jul 2022 17:50:22 +0200 Subject: [PATCH 27/70] Move ulm_card_action template to more_info. --- .../ulm_templates/card_templates/cards/card_battery.yaml | 7 ------- .../card_templates/cards/card_binary_sensor.yaml | 7 ------- .../card_templates/cards/card_binary_sensor_alert.yaml | 7 ------- .../ulm_templates/card_templates/cards/card_cover.yaml | 7 ------- .../ulm_templates/card_templates/cards/card_generic.yaml | 7 ------- .../card_templates/cards/card_generic_swap.yaml | 7 ------- .../card_templates/cards/card_input_boolean.yaml | 7 +------ .../card_templates/cards/card_power_outlet.yaml | 7 ------- .../ulm_templates/card_templates/cards/card_vacuum.yaml | 6 ------ .../internal_templates/icon_more_info_alert.yaml | 5 +++++ .../internal_templates/icon_more_info_new.yaml | 5 +++++ 11 files changed, 11 insertions(+), 61 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_battery.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_battery.yaml index 499cfb2fc..a4e1ba541 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_battery.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_battery.yaml @@ -3,7 +3,6 @@ card_battery: template: - "icon_more_info_new" - - "ulm_actions_card" - "ulm_translation_engine" variables: ulm_card_battery_name: "[[[ return entity.attributes.friendly_name ]]]" @@ -24,9 +23,6 @@ card_battery: item1: card: type: "custom:button-card" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" icon: | [[[ @@ -99,9 +95,6 @@ card_battery: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" name: "[[[ return variables.ulm_card_battery_name ]]]" label: | [[[ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor.yaml index 781db4a35..b6501a4db 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor.yaml @@ -5,7 +5,6 @@ card_binary_sensor: - "icon_more_info_new" - "blue" - "ulm_translation_engine" - - "ulm_actions_card" show_last_changed: false variables: ulm_show_last_changed: false @@ -23,9 +22,6 @@ card_binary_sensor: type: "custom:button-card" template: - "blue" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" icon: "[[[ return variables.ulm_card_binary_sensor_icon; ]]]" item2: @@ -33,9 +29,6 @@ card_binary_sensor: type: "custom:button-card" template: - "blue_no_card" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" name: "[[[ return variables.ulm_card_binary_sensor_name; ]]]" label: "[[[ return variables.ulm_translation_state;]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor_alert.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor_alert.yaml index 01020386e..2ca7fd9af 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor_alert.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_binary_sensor_alert.yaml @@ -5,7 +5,6 @@ card_binary_sensor_alert: - "icon_more_info_alert" - "blue" - "ulm_translation_engine" - - "ulm_actions_card" show_last_changed: false variables: ulm_show_last_changed: false @@ -23,9 +22,6 @@ card_binary_sensor_alert: type: "custom:button-card" template: - "blue" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" icon: "[[[ return variables.ulm_card_binary_sensor_alert_icon; ]]]" item2: @@ -33,9 +29,6 @@ card_binary_sensor_alert: type: "custom:button-card" template: - "blue_no_card" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" name: "[[[ return variables.ulm_card_binary_sensor_alert_name; ]]]" label: "[[[ return variables.ulm_translation_state;]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_cover.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_cover.yaml index a48a2f544..4c355ec54 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_cover.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_cover.yaml @@ -3,7 +3,6 @@ card_cover: template: - "icon_more_info_new" - - "ulm_actions_card" - "ulm_translation_engine" variables: ulm_card_cover_name: "[[[ return entity.attributes.friendly_name ]]]" @@ -89,9 +88,6 @@ card_cover: item1: card: type: "custom:button-card" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" icon: | [[[ @@ -174,9 +170,6 @@ card_cover: item2: card: type: "custom:button-card" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" name: "[[[ return variables.ulm_card_cover_name ]]]" label: >- diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic.yaml index 61a33675e..bc239d3a3 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic.yaml @@ -3,7 +3,6 @@ card_generic: template: - "icon_more_info_new" - - "ulm_actions_card" - "ulm_translation_engine" variables: ulm_card_generic_icon: "[[[ return entity.attributes.icon ]]]" @@ -17,9 +16,6 @@ card_generic: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" icon: "[[[ return variables.ulm_card_generic_icon; ]]]" styles: icon: @@ -28,8 +24,5 @@ card_generic: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" name: "[[[ return variables.ulm_translation_state_unit ]]]" label: "[[[ return variables.ulm_card_generic_name ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic_swap.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic_swap.yaml index 58c80b476..0b75b093c 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic_swap.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic_swap.yaml @@ -3,7 +3,6 @@ card_generic_swap: template: - "icon_more_info_new" - - "ulm_actions_card" - "ulm_translation_engine" variables: ulm_card_generic_swap_icon: "[[[ return entity.attributes.icon ]]]" @@ -17,9 +16,6 @@ card_generic_swap: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" icon: "[[[ return variables.ulm_card_generic_swap_icon; ]]]" styles: icon: @@ -28,8 +24,5 @@ card_generic_swap: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" label: "[[[ return variables.ulm_translation_state_unit ]]]" name: "[[[ return variables.ulm_card_generic_swap_name ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_input_boolean.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_input_boolean.yaml index 32a9c4522..bd67e84d1 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_input_boolean.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_input_boolean.yaml @@ -21,9 +21,7 @@ card_input_boolean: type: "custom:button-card" template: - "blue" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" + entity: "[[[ return entity.entity_id ]]]" icon: "[[[ return variables.ulm_card_input_boolean_icon; ]]]" item2: @@ -31,9 +29,6 @@ card_input_boolean: type: "custom:button-card" template: - "blue_no_card" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" name: "[[[ return variables.ulm_card_input_boolean_name; ]]]" label: "[[[ return variables.ulm_translation_state ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_power_outlet.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_power_outlet.yaml index 695735cd3..70be47682 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_power_outlet.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_power_outlet.yaml @@ -5,7 +5,6 @@ card_power_outlet: - "icon_more_info_new" - "yellow" - "ulm_translation_engine" - - "ulm_actions_card" variables: ulm_card_power_outlet_consumption_sensor: ulm_card_power_outlet_name: "[[[ return entity.attributes.friendly_name ]]]" @@ -23,9 +22,6 @@ card_power_outlet: type: "custom:button-card" template: - "yellow" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" icon: "[[[ return variables.ulm_card_power_outlet_icon ]]]" item2: @@ -33,9 +29,6 @@ card_power_outlet: type: "custom:button-card" template: - "yellow_no_card" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" name: "[[[ return variables.ulm_card_power_outlet_name ]]]" label: |- diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_vacuum.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_vacuum.yaml index 08c92502d..172165739 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_vacuum.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_vacuum.yaml @@ -78,9 +78,6 @@ card_vacuum: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" icon: "[[[ return variables.ulm_card_vacuum_icon ]]]" styles: icon: @@ -96,9 +93,6 @@ card_vacuum: item2: card: type: "custom:button-card" - variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" entity: "[[[ return entity.entity_id ]]]" name: "[[[ return variables.ulm_card_vacuum_name ]]]" label: > diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml index 626257ea0..c01cb7950 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_alert.yaml @@ -6,6 +6,7 @@ icon_more_info_alert: show_label: false template: - "ulm_custom_actions" + - "ulm_actions_card" styles: grid: - grid-template-areas: "'item1'" @@ -40,6 +41,8 @@ icon_more_info_alert: - "icon_alert" - "ulm_actions_icon" variables: + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" @@ -62,6 +65,8 @@ icon_more_info_alert: - "icon_info" - "ulm_actions_name" variables: + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" ulm_name_tap_haptic: "[[[ return variables.ulm_name_tap_haptic; ]]]" ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml index 812bc5d19..703ccde16 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml @@ -6,6 +6,7 @@ icon_more_info_new: show_label: false template: - "ulm_custom_actions" + - "ulm_actions_card" styles: grid: - grid-template-areas: "'item1'" @@ -40,6 +41,8 @@ icon_more_info_new: - "icon" - "ulm_actions_icon" variables: + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" @@ -62,6 +65,8 @@ icon_more_info_new: - "icon_info" - "ulm_actions_name" variables: + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" ulm_name_tap_haptic: "[[[ return variables.ulm_name_tap_haptic; ]]]" ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" From cc96e5c7eacea8598786611184929257d50213f0 Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 28 Jul 2022 18:25:04 +0200 Subject: [PATCH 28/70] Add combound_card template for 2-line cards. --- .../2-line_cards/card_graph.yaml | 31 ++------- .../internal_templates/combound_card.yaml | 69 +++++++++++++++++++ 2 files changed, 73 insertions(+), 27 deletions(-) create mode 100644 custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml index c1b545509..66e2e733c 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml @@ -2,8 +2,7 @@ ### Card Graph ### card_graph: template: - - "ulm_custom_actions" - - "ulm_actions_card" + - "combound_card" variables: ulm_card_graph_color: "var(--info-color)" ulm_card_graph_name: "[[[ return entity.attributes.friendly_name; ]]]" @@ -13,38 +12,16 @@ card_graph: ulm_card_graph_hours: 24 ulm_card_graph_type: "fill" ulm_card_graph_points: "0.5" - show_icon: false - show_name: false - show_label: false triggers_update: "all" - styles: - grid: - - grid-template-areas: "'item1' 'item2'" - - grid-template-columns: "1fr" - - grid-template-rows: "min-content min-content" - card: - - border-radius: "var(--border-radius)" - - box-shadow: "var(--box-shadow)" - - padding: "0px" custom_fields: item1: card: type: "custom:button-card" template: - "card_generic" - entity: "[[[ return entity.entity_id ]]]" - variables: > - [[[ - let vars = variables; - vars.ulm_card_generic_icon = variables.ulm_card_graph_icon; - vars.ulm_card_generic_name = variables.ulm_card_graph_name; - return vars; - ]]] - styles: - card: - - box-shadow: "none" - - border-radius: "var(--border-radius) var(--border-radius) 0px 0px" - - padding: "12px" + variables: + ulm_card_generic_icon: "[[[ return variables.ulm_card_graph_icon; ]]]" + ulm_card_generic_name: "[[[ return variables.ulm_card_graph_name; ]]]" item2: card: diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml new file mode 100644 index 000000000..8d6ae296f --- /dev/null +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml @@ -0,0 +1,69 @@ +--- +### Combound card for extension ### +combound_card: + template: + - "ulm_custom_actions" + - "ulm_actions_card" + show_icon: false + show_name: false + show_label: false + triggers_update: "all" + styles: + grid: + - grid-template-areas: "'item1' 'item2'" + - grid-template-columns: "1fr" + - grid-template-rows: "min-content min-content" + card: + - border-radius: "var(--border-radius)" + - box-shadow: "var(--box-shadow)" + - padding: "0px" + custom_fields: + item1: + card: + type: "custom:button-card" + entity: "[[[ return entity.entity_id ]]]" + variables: + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" + ulm_card_tap_action: "[[[ return variables.ulm_card_tap_action; ]]]" + ulm_card_tap_haptic: "[[[ return variables.ulm_card_tap_haptic; ]]]" + ulm_card_tap_navigate_path: "[[[ return variables.ulm_card_tap_navigate_path; ]]]" + ulm_card_hold_action: "[[[ return variables.ulm_card_hold_action; ]]]" + ulm_card_hold_haptic: "[[[ return variables.ulm_card_hold_haptic; ]]]" + ulm_card_hold_navigate_path: "[[[ return variables.ulm_card_hold_navigate_path; ]]]" + ulm_card_double_tap_action: "[[[ return variables.ulm_card_double_tap_action; ]]]" + ulm_card_double_tap_haptic: "[[[ return variables.ulm_card_double_tap_haptic; ]]]" + ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" + ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" + ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_haptic: "[[[ return variables.ulm_icon_hold_haptic; ]]]" + ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_haptic: "[[[ return variables.ulm_icon_double_tap_haptic; ]]]" + ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_haptic: "[[[ return variables.ulm_name_tap_haptic; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_haptic: "[[[ return variables.ulm_name_hold_haptic; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_haptic: "[[[ return variables.ulm_name_double_tap_haptic; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" + styles: + card: + - box-shadow: "none" + - border-radius: "var(--border-radius) var(--border-radius) 0px 0px" + - padding: "12px" + + item2: + card: + type: "custom:button-card" + style: | + ha-card { + box-shadow: none; + border-radius: var(--border-radius); + } From a7d950fa6c3fa5bbe1e8746b551d5a21935c9a0d Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 28 Jul 2022 18:36:31 +0200 Subject: [PATCH 29/70] Fix trailing whitspaces. --- .../card_templates/internal_templates/combound_card.yaml | 2 +- .../card_templates/internal_templates/icon_more_info_new.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml index 8d6ae296f..acb5d63b6 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml @@ -33,7 +33,7 @@ combound_card: ulm_card_hold_navigate_path: "[[[ return variables.ulm_card_hold_navigate_path; ]]]" ulm_card_double_tap_action: "[[[ return variables.ulm_card_double_tap_action; ]]]" ulm_card_double_tap_haptic: "[[[ return variables.ulm_card_double_tap_haptic; ]]]" - ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" + ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml index 703ccde16..899b6a334 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/icon_more_info_new.yaml @@ -42,7 +42,7 @@ icon_more_info_new: - "ulm_actions_icon" variables: ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" From 3dbe6dae422bcc2cf049ef4d3e47be28b2a9492a Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 28 Jul 2022 18:38:57 +0200 Subject: [PATCH 30/70] Fix whitespaces. --- .../card_templates/internal_templates/combound_card.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml index acb5d63b6..d3554c828 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml @@ -33,7 +33,7 @@ combound_card: ulm_card_hold_navigate_path: "[[[ return variables.ulm_card_hold_navigate_path; ]]]" ulm_card_double_tap_action: "[[[ return variables.ulm_card_double_tap_action; ]]]" ulm_card_double_tap_haptic: "[[[ return variables.ulm_card_double_tap_haptic; ]]]" - ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" + ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" From 3cf761afd9976fac612ddb1811239ad3387384f3 Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 28 Jul 2022 18:41:31 +0200 Subject: [PATCH 31/70] Fix indention. --- .../internal_templates/combound_card.yaml | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml index d3554c828..7d3703ce5 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml @@ -23,36 +23,36 @@ combound_card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" variables: - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_tap_action: "[[[ return variables.ulm_card_tap_action; ]]]" - ulm_card_tap_haptic: "[[[ return variables.ulm_card_tap_haptic; ]]]" - ulm_card_tap_navigate_path: "[[[ return variables.ulm_card_tap_navigate_path; ]]]" - ulm_card_hold_action: "[[[ return variables.ulm_card_hold_action; ]]]" - ulm_card_hold_haptic: "[[[ return variables.ulm_card_hold_haptic; ]]]" - ulm_card_hold_navigate_path: "[[[ return variables.ulm_card_hold_navigate_path; ]]]" - ulm_card_double_tap_action: "[[[ return variables.ulm_card_double_tap_action; ]]]" - ulm_card_double_tap_haptic: "[[[ return variables.ulm_card_double_tap_haptic; ]]]" - ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" - ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" - ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" - ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" - ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" - ulm_icon_hold_haptic: "[[[ return variables.ulm_icon_hold_haptic; ]]]" - ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" - ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" - ulm_icon_double_tap_haptic: "[[[ return variables.ulm_icon_double_tap_haptic; ]]]" - ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" - ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" - ulm_name_tap_haptic: "[[[ return variables.ulm_name_tap_haptic; ]]]" - ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" - ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" - ulm_name_hold_haptic: "[[[ return variables.ulm_name_hold_haptic; ]]]" - ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" - ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" - ulm_name_double_tap_haptic: "[[[ return variables.ulm_name_double_tap_haptic; ]]]" - ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" - ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" + ulm_card_tap_action: "[[[ return variables.ulm_card_tap_action; ]]]" + ulm_card_tap_haptic: "[[[ return variables.ulm_card_tap_haptic; ]]]" + ulm_card_tap_navigate_path: "[[[ return variables.ulm_card_tap_navigate_path; ]]]" + ulm_card_hold_action: "[[[ return variables.ulm_card_hold_action; ]]]" + ulm_card_hold_haptic: "[[[ return variables.ulm_card_hold_haptic; ]]]" + ulm_card_hold_navigate_path: "[[[ return variables.ulm_card_hold_navigate_path; ]]]" + ulm_card_double_tap_action: "[[[ return variables.ulm_card_double_tap_action; ]]]" + ulm_card_double_tap_haptic: "[[[ return variables.ulm_card_double_tap_haptic; ]]]" + ulm_card_double_tap_navigate_path: "[[[ return variables.ulm_card_double_tap_navigate_path; ]]]" + ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" + ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_haptic: "[[[ return variables.ulm_icon_hold_haptic; ]]]" + ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_haptic: "[[[ return variables.ulm_icon_double_tap_haptic; ]]]" + ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_haptic: "[[[ return variables.ulm_name_tap_haptic; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_haptic: "[[[ return variables.ulm_name_hold_haptic; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_haptic: "[[[ return variables.ulm_name_double_tap_haptic; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" styles: card: - box-shadow: "none" From 185d279f27493f16e3af6fa81e916a1190b96d87 Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 28 Jul 2022 18:43:44 +0200 Subject: [PATCH 32/70] Fix indention of graph_card. --- .../ulm_templates/card_templates/2-line_cards/card_graph.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml index 66e2e733c..5755e9de1 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml @@ -20,8 +20,8 @@ card_graph: template: - "card_generic" variables: - ulm_card_generic_icon: "[[[ return variables.ulm_card_graph_icon; ]]]" - ulm_card_generic_name: "[[[ return variables.ulm_card_graph_name; ]]]" + ulm_card_generic_icon: "[[[ return variables.ulm_card_graph_icon; ]]]" + ulm_card_generic_name: "[[[ return variables.ulm_card_graph_name; ]]]" item2: card: From 4fefaa37dff94c679ea4013834a05e95f20288e8 Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 28 Jul 2022 18:57:38 +0200 Subject: [PATCH 33/70] Rename extended card template. --- .../ulm_templates/card_templates/2-line_cards/card_graph.yaml | 2 +- .../{combound_card.yaml => extended_card.yaml} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/{combound_card.yaml => extended_card.yaml} (98%) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml index 5755e9de1..5ecfd6e63 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml @@ -2,7 +2,7 @@ ### Card Graph ### card_graph: template: - - "combound_card" + - "extended_card" variables: ulm_card_graph_color: "var(--info-color)" ulm_card_graph_name: "[[[ return entity.attributes.friendly_name; ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/extended_card.yaml similarity index 98% rename from custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml rename to custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/extended_card.yaml index 7d3703ce5..19ee39753 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/combound_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/internal_templates/extended_card.yaml @@ -1,6 +1,6 @@ --- -### Combound card for extension ### -combound_card: +### Extension template for combining cards ### +extended_card: template: - "ulm_custom_actions" - "ulm_actions_card" From 63b54701d99edc0510b7631ac2744b415b3ca260 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 29 Jul 2022 18:34:58 +0200 Subject: [PATCH 34/70] Add documentation of custom_popups. --- docs/setup/custom_actions.md | 200 ++++++++++++++++++++++++++++++++++- 1 file changed, 198 insertions(+), 2 deletions(-) diff --git a/docs/setup/custom_actions.md b/docs/setup/custom_actions.md index a85c725f5..f9ea349e7 100644 --- a/docs/setup/custom_actions.md +++ b/docs/setup/custom_actions.md @@ -39,11 +39,47 @@ Possible values for each variables are : | adaptive | Switch UI LOVELACE MINIMALIST popup on adaptive dashboard
if current dashboard is adaptive (if not `popup` action is used) | | navigate | Navigate to an other UI LOVELACE MINIMALIST view. Need additional variable (see below) | +## Haptic feedback + +Next to the action also the haptic feedback of the actions can be configured in the `custom_actions.yaml` file: + +For each action a haptic feedback could be configured: + +```yaml +--- +ulm_custom_actions: + variables: + ulm_card_tap_haptic: "medium" + ulm_card_tap_haptic: "none" + ulm_card_double_tap_haptic: "none" + ulm_icon_tap_haptic: "none" + ulm_icon_hold_haptic: "none" + ulm_icon_double_tap_haptic: "none" + ulm_name_tap_haptic: "medium" + ulm_name_hold_haptic: "none" + ulm_name_double_tap_haptic: "none" +``` + + +Possible values for each variables (according to the underlying [button card]( +https://github.com/custom-cards/button-card)) are : + +- `none` +- `success` +- `warning` +- `failure` +- `light` +- `medium` +- `heavy` +- `selection` + + !!! tip "Reloading" Once you have edited `custom_actions.yaml` file, you must reload `"UI LOVELACE MINIMALIST"` configuration. Just go to `"Configuration" --> "Settings"` in Home Assistant and press the `"UI_LOVELACE_MINIMALIST"` button within the "YAML configuration reloading" section. + ## Navigate action To define the path of `navigate` action, add one of the following depending on your action : @@ -70,7 +106,7 @@ To define the path of `navigate` action, add one of the following depending on y ## Overwrite custom actions -When creating a dashboard, custom actions can be overwritten on your card definition. +When creating a dashboard, custom actions and the haptic feedback can be overwritten on your card definition. For example, this code will overwrite the tap action on card with `more-info` action : ```yaml @@ -79,9 +115,169 @@ For example, this code will overwrite the tap action on card with `more-info` ac entity: "cover.somfy_portail" variables: ulm_card_tap_action: "more-info" + ulm_card_tap_haptic: "success" ``` +## Custom Popups + +The implementation of the custom action now supports the configuration of individual popups. The custom popup +can be easily configured for each card. + +To enable a custom popup the variable `ulm_custom_popup` must be set within the card. +This variable have two subvariables `template` and `popup_variables`. The template must be the name of the +template that should be loaded. The necessary configuration variables for the popup can be configured in +the variable `popup_variables`. + + +```yaml +- type: 'custom:button-card' + template: card_power_outlet + entity: switch.power_outlet_livingroom + variables: + ulm_card_power_outlet_consumption_sensor: sensor.power_outlet_livingroom_consumption + ulm_card_power_outlet_name: Power Outlet Livingroom + ulm_custom_popup: + template: "popup_power_outlet_stats" + popup_variables: + ulm_popup_power_outlet_sensor1: sensor.power_outlet_livingroom + ulm_popup_power_outlet_sensor2: sensor.power_outlet_livingroom_consumption + ulm_popup_power_outlet_graph_sensor: sensor.power_outlet_livingroom + ulm_popup_power_outlet_entity: switch.power_outlet_livingroom + +``` + +The available popup templates `popup_media_player_infos`, `popup_light_brightness`, `popup_thermostat_temperature` +or `popup_power_outlet_stats` can already be used with the custom popups. + +This implementation allows the easy creation of custom popups that can be loaded by other cards. + +!!! note "Light, Media Player, Thermostat" + + The `card_light`, `card_media_player` and `card_thermostat` uses a different approach. Therefore the popup can + be simply enabled by setting on of the variables `ulm_card_light_enable_popup`, `ulm_card_thermostat_enable_popup` + or `ulm_card_media_player_enable_popup` to true. + + + ## For developers -To enable action customization on your custom cards, use the following templates `icon_more_info_new` and `ulm_actions_card` +To enable action customization on your custom cards, use either the `icon_more_info_new` or the `extended_card` template. +There is no need to implement the `ulm_card_actions` template anymore. + +There are tree possibilities to include the custom actions into your custom cards: + + +### Use template `extend_card` as combination of two cards + +The simplest way to create a custom card that uses these custom actions is the combination of two cards. + +For enabling the feature the custom card must implement the template `extended_card`. +Then two custom fields must be used: +- `item1` must be a card that already implements the template `icon_more_info_new`. + Most of the core cards already implements this template. +- `item2` can be any Lovelace card that should extend the card. + +If you add custom styles to `item2` then following code should be added into the `style` field +``` +ha-card { + box-shadow: none; + border-radius: var(--border-radius); +} +``` + +The already available **Graph card** (`card_graph`) is an example for this implementation. As +`item1` a `generic_card` is used. The `item2` provides a mini-graph-card. + + +??? note "Graph card as example" + + ```yaml title="card_binary_sensor_alert.yaml" + --8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml" + ``` + + +### Use template `icon_more_info_new` or `icon_more_info_alert` + +The card must implement the template `icon_more_info_new`or `icon_more_info_alert`. Then it must implement a custom field +`item1` which is also a `custom:button-card`. This card must have the custom fields `item1`which represents the icon and +`item2`which represents the name. + +Most of the internal card templates uses this option. Take a look into the code. + + +??? note "Generic card as example" + + ```yaml title="card_binary_sensor_alert.yaml" + --8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_generic.yaml" + ``` + +### Individual implementation + +The following script shows the usage off all necessary variables and template that will be used by the custom actions. + +The card must implement the templates `ulm_custom_actions` and `ulm_action_card` in the correct order. +The example shows the custom fields `item1` that implements the redirection of an icon field and `item2` that implements the redirecton +of a name field. + +```yaml +--- +custom_card: + template: + - "ulm_custom_actions" + - "ulm_actions_card" + custom_fields: + item1: + card: + type: "custom:button-card" + entity: "[[[ return entity.entity_id ]]]" + template: + - "ulm_actions_icon" + variables: + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" + ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_haptic: "[[[ return variables.ulm_icon_tap_haptic; ]]]" + ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_haptic: "[[[ return variables.ulm_icon_hold_haptic; ]]]" + ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_haptic: "[[[ return variables.ulm_icon_double_tap_haptic; ]]]" + ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" + item2: + card: + type: "custom:button-card" + entity: "[[[ return entity.entity_id ]]]" + template: + - "ulm_actions_name" + variables: + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_haptic: "[[[ return variables.ulm_name_tap_haptic; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_haptic: "[[[ return variables.ulm_name_hold_haptic; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_haptic: "[[[ return variables.ulm_name_double_tap_haptic; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" + ulm_custom_popup: "[[[ return variables.ulm_custom_popup; ]]]" + +``` + + +!!! tip "For developes who have already implemented the custom actions on their card" + + There could be some breaking changes: + + - The custom card should either implement the `icon_more_info_new` or the `extended_card` + - The template ulm_actions_card can be removed + - The variable redirections for the ulm_*_action can be removed + + Also the custom popup feature has some breaking changes: + The variables `ulm_card_light_enable_popup`, `ulm_card_thermostat_enable_popup` and `ulm_card_media_player_enable_popup` + aren't used internally anymore. The are only working on their appropriate cards as configuration option for the end user of the card. + So the custom_popup variable should be used instead. \ No newline at end of file From b66bd6edf9f2a368d552759340cb3632bd6f8028 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 29 Jul 2022 18:46:39 +0200 Subject: [PATCH 35/70] Fix code style. --- docs/setup/custom_actions.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/setup/custom_actions.md b/docs/setup/custom_actions.md index f9ea349e7..ee64fede0 100644 --- a/docs/setup/custom_actions.md +++ b/docs/setup/custom_actions.md @@ -64,7 +64,7 @@ ulm_custom_actions: Possible values for each variables (according to the underlying [button card]( https://github.com/custom-cards/button-card)) are : -- `none` +- `none` - `success` - `warning` - `failure` @@ -143,11 +143,11 @@ the variable `popup_variables`. ulm_popup_power_outlet_sensor1: sensor.power_outlet_livingroom ulm_popup_power_outlet_sensor2: sensor.power_outlet_livingroom_consumption ulm_popup_power_outlet_graph_sensor: sensor.power_outlet_livingroom - ulm_popup_power_outlet_entity: switch.power_outlet_livingroom + ulm_popup_power_outlet_entity: switch.power_outlet_livingroom ``` -The available popup templates `popup_media_player_infos`, `popup_light_brightness`, `popup_thermostat_temperature` +The available popup templates `popup_media_player_infos`, `popup_light_brightness`, `popup_thermostat_temperature` or `popup_power_outlet_stats` can already be used with the custom popups. This implementation allows the easy creation of custom popups that can be loaded by other cards. @@ -172,7 +172,7 @@ There are tree possibilities to include the custom actions into your custom card The simplest way to create a custom card that uses these custom actions is the combination of two cards. -For enabling the feature the custom card must implement the template `extended_card`. +For enabling the feature the custom card must implement the template `extended_card`. Then two custom fields must be used: - `item1` must be a card that already implements the template `icon_more_info_new`. Most of the core cards already implements this template. @@ -197,7 +197,7 @@ The already available **Graph card** (`card_graph`) is an example for this imple ``` -### Use template `icon_more_info_new` or `icon_more_info_alert` +### Use template `icon_more_info_new` or `icon_more_info_alert` The card must implement the template `icon_more_info_new`or `icon_more_info_alert`. Then it must implement a custom field `item1` which is also a `custom:button-card`. This card must have the custom fields `item1`which represents the icon and @@ -217,8 +217,8 @@ Most of the internal card templates uses this option. Take a look into the code. The following script shows the usage off all necessary variables and template that will be used by the custom actions. The card must implement the templates `ulm_custom_actions` and `ulm_action_card` in the correct order. -The example shows the custom fields `item1` that implements the redirection of an icon field and `item2` that implements the redirecton -of a name field. +The example shows the custom fields `item1` that implements the redirection of an icon field and `item2` that implements the +redirecton of a name field. ```yaml --- @@ -279,5 +279,5 @@ custom_card: Also the custom popup feature has some breaking changes: The variables `ulm_card_light_enable_popup`, `ulm_card_thermostat_enable_popup` and `ulm_card_media_player_enable_popup` - aren't used internally anymore. The are only working on their appropriate cards as configuration option for the end user of the card. - So the custom_popup variable should be used instead. \ No newline at end of file + aren't used internally anymore. The are only working on their appropriate cards as configuration option for the end user + of the card. So the custom_popup variable should be used instead. \ No newline at end of file From ba560b88a29c5d07de07e561efc9d857e898ea22 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 29 Jul 2022 18:53:20 +0200 Subject: [PATCH 36/70] Fix code style. --- docs/setup/custom_actions.md | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/docs/setup/custom_actions.md b/docs/setup/custom_actions.md index ee64fede0..a7591ba66 100644 --- a/docs/setup/custom_actions.md +++ b/docs/setup/custom_actions.md @@ -60,7 +60,6 @@ ulm_custom_actions: ulm_name_double_tap_haptic: "none" ``` - Possible values for each variables (according to the underlying [button card]( https://github.com/custom-cards/button-card)) are : @@ -73,13 +72,11 @@ https://github.com/custom-cards/button-card)) are : - `heavy` - `selection` - !!! tip "Reloading" Once you have edited `custom_actions.yaml` file, you must reload `"UI LOVELACE MINIMALIST"` configuration. Just go to `"Configuration" --> "Settings"` in Home Assistant and press the `"UI_LOVELACE_MINIMALIST"` button within the "YAML configuration reloading" section. - ## Navigate action To define the path of `navigate` action, add one of the following depending on your action : @@ -129,7 +126,6 @@ This variable have two subvariables `template` and `popup_variables`. The templa template that should be loaded. The necessary configuration variables for the popup can be configured in the variable `popup_variables`. - ```yaml - type: 'custom:button-card' template: card_power_outlet @@ -158,8 +154,6 @@ This implementation allows the easy creation of custom popups that can be loaded be simply enabled by setting on of the variables `ulm_card_light_enable_popup`, `ulm_card_thermostat_enable_popup` or `ulm_card_media_player_enable_popup` to true. - - ## For developers To enable action customization on your custom cards, use either the `icon_more_info_new` or the `extended_card` template. @@ -167,19 +161,20 @@ There is no need to implement the `ulm_card_actions` template anymore. There are tree possibilities to include the custom actions into your custom cards: - ### Use template `extend_card` as combination of two cards The simplest way to create a custom card that uses these custom actions is the combination of two cards. For enabling the feature the custom card must implement the template `extended_card`. Then two custom fields must be used: + - `item1` must be a card that already implements the template `icon_more_info_new`. Most of the core cards already implements this template. - `item2` can be any Lovelace card that should extend the card. If you add custom styles to `item2` then following code should be added into the `style` field -``` + +```javascript ha-card { box-shadow: none; border-radius: var(--border-radius); @@ -189,14 +184,12 @@ ha-card { The already available **Graph card** (`card_graph`) is an example for this implementation. As `item1` a `generic_card` is used. The `item2` provides a mini-graph-card. - ??? note "Graph card as example" ```yaml title="card_binary_sensor_alert.yaml" --8<-- "custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/2-line_cards/card_graph.yaml" ``` - ### Use template `icon_more_info_new` or `icon_more_info_alert` The card must implement the template `icon_more_info_new`or `icon_more_info_alert`. Then it must implement a custom field @@ -205,7 +198,6 @@ The card must implement the template `icon_more_info_new`or `icon_more_info_aler Most of the internal card templates uses this option. Take a look into the code. - ??? note "Generic card as example" ```yaml title="card_binary_sensor_alert.yaml" @@ -268,7 +260,6 @@ custom_card: ``` - !!! tip "For developes who have already implemented the custom actions on their card" There could be some breaking changes: @@ -279,5 +270,5 @@ custom_card: Also the custom popup feature has some breaking changes: The variables `ulm_card_light_enable_popup`, `ulm_card_thermostat_enable_popup` and `ulm_card_media_player_enable_popup` - aren't used internally anymore. The are only working on their appropriate cards as configuration option for the end user - of the card. So the custom_popup variable should be used instead. \ No newline at end of file + aren't used internally anymore. The are only working on their appropriate cards as configuration option for the end user + of the card. So the custom_popup variable should be used instead. From 3963bd0396e42ff52dce6ddeb01a31e52c251a25 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 29 Jul 2022 18:59:36 +0200 Subject: [PATCH 37/70] Add third template for custom_action. --- docs/setup/custom_actions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/setup/custom_actions.md b/docs/setup/custom_actions.md index a7591ba66..557ffb2da 100644 --- a/docs/setup/custom_actions.md +++ b/docs/setup/custom_actions.md @@ -156,8 +156,8 @@ This implementation allows the easy creation of custom popups that can be loaded ## For developers -To enable action customization on your custom cards, use either the `icon_more_info_new` or the `extended_card` template. -There is no need to implement the `ulm_card_actions` template anymore. +To enable action customization on your custom cards, use either the `icon_more_info_new`, `icon_more_info_alert` or +the `extended_card` template. There is no need to implement the `ulm_card_actions` template anymore. There are tree possibilities to include the custom actions into your custom cards: From 407df907819ab40ff6de41d7a0281db47e957dda Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 29 Jul 2022 19:29:05 +0200 Subject: [PATCH 38/70] Correct spelling. --- docs/setup/custom_actions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/setup/custom_actions.md b/docs/setup/custom_actions.md index 557ffb2da..d926884dd 100644 --- a/docs/setup/custom_actions.md +++ b/docs/setup/custom_actions.md @@ -159,7 +159,7 @@ This implementation allows the easy creation of custom popups that can be loaded To enable action customization on your custom cards, use either the `icon_more_info_new`, `icon_more_info_alert` or the `extended_card` template. There is no need to implement the `ulm_card_actions` template anymore. -There are tree possibilities to include the custom actions into your custom cards: +There are three possibilities to include the custom actions into your custom cards: ### Use template `extend_card` as combination of two cards From 618279eac8820c7ec65d7ece5f4ebcabf27178d8 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 29 Jul 2022 19:36:55 +0200 Subject: [PATCH 39/70] Fix unnecessary usage of ulm_actions_card templates. --- .../ulm_templates/card_templates/cards/card_input_boolean.yaml | 1 - .../lovelace/ulm_templates/card_templates/cards/card_light.yaml | 1 - .../ulm_templates/card_templates/cards/card_media_player.yaml | 1 - .../ulm_templates/card_templates/cards/card_thermostat.yaml | 1 - .../lovelace/ulm_templates/card_templates/cards/card_vacuum.yaml | 1 - 5 files changed, 5 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_input_boolean.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_input_boolean.yaml index bd67e84d1..cfaef7581 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_input_boolean.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_input_boolean.yaml @@ -3,7 +3,6 @@ card_input_boolean: template: - "icon_more_info_new" - - "ulm_actions_card" - "ulm_translation_engine" - "blue" variables: diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml index 632236328..b8f214a6c 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml @@ -3,7 +3,6 @@ card_light: template: - "icon_more_info_new" - - "ulm_actions_card" - "ulm_translation_engine" variables: ulm_card_light_name: "[[[ return entity.attributes.friendly_name ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 89aa20b41..a14c85c77 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -3,7 +3,6 @@ card_media_player: template: - "icon_more_info_new" - - "ulm_actions_card" - "ulm_translation_engine" variables: ulm_card_media_player_name: "[[[ return entity.attributes.friendly_name ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml index 67cb55001..51f4ed3f2 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml @@ -4,7 +4,6 @@ card_thermostat: template: - "ulm_translation_engine" - "icon_more_info_new" - - "ulm_actions_card" variables: ulm_card_thermostat_name: "[[[ return entity.attributes.friendly_name ]]]" ulm_card_thermostat_icon: "[[[ return 'mdi:thermometer' ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_vacuum.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_vacuum.yaml index 172165739..1057737b0 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_vacuum.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_vacuum.yaml @@ -7,7 +7,6 @@ card_vacuum: template: - "icon_more_info_new" - "ulm_translation_engine" - - "ulm_actions_card" variables: ulm_card_vacuum_name: "[[[ return entity.attributes.friendly_name ]]]" ulm_card_vacuum_icon: "[[[ return entity.attributes.icon ]]]" From db7c0c3a09600b8347f879af1a793c09d3b4b016 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 29 Jul 2022 20:53:05 +0200 Subject: [PATCH 40/70] Allow none entities for custom actions. --- .../ulm_templates/actions/actions_card.yaml | 13 ++++++------- .../ulm_templates/actions/actions_icon.yaml | 12 ++++++------ .../ulm_templates/actions/actions_name.yaml | 12 ++++++------ 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 9a6eacc58..f8969c26f 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -5,9 +5,9 @@ ulm_actions_card: action: > [[[ var action = variables.ulm_card_tap_action != null ? variables.ulm_card_tap_action : 'toggle'; - let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + let domain = (entity != null) ? entity.entity_id.substr(0, entity.entity_id.indexOf(".")) : ""; - if (domain == "binary_sensor" || domain == "sensor"){ + if (domain == "binary_sensor" || domain == "sensor" || domain == ""){ if (action == 'toggle') action = 'none'; } @@ -66,10 +66,9 @@ ulm_actions_card: action: > [[[ var action = variables.ulm_card_hold_action != null ? variables.ulm_card_hold_action : 'more-info'; - let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + let domain = (entity != null) ? entity.entity_id.substr(0, entity.entity_id.indexOf(".")) : ""; - - if (domain == "binary_sensor" || domain == "sensor"){ + if (domain == "binary_sensor" || domain == "sensor" || domain == ""){ if (action == 'toggle') action = 'none'; } @@ -129,9 +128,9 @@ ulm_actions_card: action: > [[[ var action = variables.ulm_card_double_tap_action != null ? variables.ulm_card_double_tap_action : "adaptive"; - let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + let domain = (entity != null) ? entity.entity_id.substr(0, entity.entity_id.indexOf(".")) : ""; - if (domain == "binary_sensor" || domain == "sensor"){ + if (domain == "binary_sensor" || domain == "sensor" || domain == ""){ if (action == 'toggle') action = 'none'; } diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 9453d72c5..2e4272268 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -5,9 +5,9 @@ ulm_actions_icon: action: > [[[ var action = variables.ulm_icon_tap_action != null ? variables.ulm_icon_tap_action : 'toggle'; - let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + let domain = (entity != null) ? entity.entity_id.substr(0, entity.entity_id.indexOf(".")) : ""; - if (domain == "binary_sensor" || domain == "sensor"){ + if (domain == "binary_sensor" || domain == "sensor" || domain == ""){ if (action == 'toggle') action = 'none'; } @@ -76,9 +76,9 @@ ulm_actions_icon: action: > [[[ var action = variables.ulm_icon_hold_action != null ? variables.ulm_icon_hold_action : 'more_info'; - let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + let domain = (entity != null) ? entity.entity_id.substr(0, entity.entity_id.indexOf(".")) : ""; - if (domain == "binary_sensor" || domain == "sensor"){ + if (domain == "binary_sensor" || domain == "sensor" || domain == ""){ if (action == 'toggle') action = 'none'; } @@ -147,9 +147,9 @@ ulm_actions_icon: action: > [[[ var action = variables.ulm_icon_double_tap_action != null ? variables.ulm_icon_double_tap_action : 'adaptive'; - let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + let domain = (entity != null) ? entity.entity_id.substr(0, entity.entity_id.indexOf(".")) : ""; - if (domain == "binary_sensor" || domain == "sensor"){ + if (domain == "binary_sensor" || domain == "sensor" || domain == ""){ if (action == 'toggle') action = 'none'; } diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 9597d57f8..35473cbe0 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -5,9 +5,9 @@ ulm_actions_name: action: > [[[ var action = variables.ulm_name_tap_action != null ? variables.ulm_name_tap_action : 'toggle'; - let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + let domain = (entity != null) ? entity.entity_id.substr(0, entity.entity_id.indexOf(".")) : ""; - if (domain == "binary_sensor" || domain == "sensor"){ + if (domain == "binary_sensor" || domain == "sensor" || domain == ""){ if (action == 'toggle') action = 'none'; } @@ -66,9 +66,9 @@ ulm_actions_name: action: > [[[ var action = variables.ulm_name_hold_action != null ? variables.ulm_name_hold_action : 'more-info'; - let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + let domain = (entity != null) ? entity.entity_id.substr(0, entity.entity_id.indexOf(".")) : ""; - if (domain == "binary_sensor" || domain == "sensor"){ + if (domain == "binary_sensor" || domain == "sensor" || domain == ""){ if (action == 'toggle') action = 'none'; } @@ -127,9 +127,9 @@ ulm_actions_name: action: > [[[ var action = variables.ulm_name_double_tap_action != null ? variables.ulm_name_double_tap_action : 'adaptive'; - let domain = entity.entity_id.substr(0, entity.entity_id.indexOf(".")); + let domain = (entity != null) ? entity.entity_id.substr(0, entity.entity_id.indexOf(".")) : ""; - if (domain == "binary_sensor" || domain == "sensor"){ + if (domain == "binary_sensor" || domain == "sensor" || domain == ""){ if (action == 'toggle') action = 'none'; } From c2efa46be1f8daf5a074cc4743426da6844b0410 Mon Sep 17 00:00:00 2001 From: basbruss <68892092+basbruss@users.noreply.github.com> Date: Fri, 29 Jul 2022 21:36:38 +0200 Subject: [PATCH 41/70] Fix code quality --- docs/setup/custom_actions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/setup/custom_actions.md b/docs/setup/custom_actions.md index d926884dd..d91cb2bf9 100644 --- a/docs/setup/custom_actions.md +++ b/docs/setup/custom_actions.md @@ -156,7 +156,7 @@ This implementation allows the easy creation of custom popups that can be loaded ## For developers -To enable action customization on your custom cards, use either the `icon_more_info_new`, `icon_more_info_alert` or +To enable action customization on your custom cards, use either the `icon_more_info_new`, `icon_more_info_alert` or the `extended_card` template. There is no need to implement the `ulm_card_actions` template anymore. There are three possibilities to include the custom actions into your custom cards: From e973517baf5f9b91e6a77fec8a4693777cea761b Mon Sep 17 00:00:00 2001 From: mdb17 Date: Fri, 29 Jul 2022 15:23:03 -0500 Subject: [PATCH 42/70] added standby logic Added logic to treat the standby state the same as the off state. --- .../cards/card_media_player.yaml | 87 ++++++++++++------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index a14c85c77..4f703941f 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -3,6 +3,7 @@ card_media_player: template: - "icon_more_info_new" + - "ulm_actions_card" - "ulm_translation_engine" variables: ulm_card_media_player_name: "[[[ return entity.attributes.friendly_name ]]]" @@ -48,7 +49,14 @@ card_media_player: if (!variables.ulm_card_media_player_collapsible) { return "12px"; } else { - return entity.state !== "off" ? "12px" : "0px"; + if (entity.state == "off"){ + return "0px"; + } else if (entity.state == "standby"){ + return "0px"; + } + else { + return "12px"; + } } ]]] card: @@ -68,7 +76,14 @@ card_media_player: [[[ if(variables.ulm_card_media_player_enable_controls) { if(variables.ulm_card_media_player_collapsible){ - return entity.state === "off" ? "none" : "block"; + if (entity.state == "off"){ + return "none"; + } else if (entity.state == "standby"){ + return "none"; + } + else { + return "block"; + } } return "block"; } @@ -79,7 +94,14 @@ card_media_player: [[[ if(variables.ulm_card_media_player_enable_volume_slider) { if(variables.ulm_card_media_player_collapsible){ - return entity.state === "off" ? "none" : "block"; + if (entity.state == "off"){ + return "none"; + } else if (entity.state == "standby"){ + return "none"; + } + else { + return "block"; + } } return "block"; } @@ -94,20 +116,16 @@ card_media_player: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: > - [[[ - let vars = variables; - - if(variables.ulm_card_media_player_enable_popup) { - vars.ulm_custom_popup = { - 'template': 'popup_media_player_infos', - 'popup_variables': { - 'ulm_popup_media_player_entity': entity.entity_id, - } - }; - } - return vars; - ]]] + variables: + ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" + ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" + ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" + ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" + ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" + ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" + ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" icon: | [[[ var icon = entity.attributes.icon || "mdi:speaker"; @@ -149,20 +167,16 @@ card_media_player: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: > - [[[ - let vars = variables; - - if(variables.ulm_card_media_player_enable_popup) { - vars.ulm_custom_popup = { - 'template': 'popup_media_player_infos', - 'popup_variables': { - 'ulm_popup_media_player_entity': entity.entity_id, - } - }; - } - return vars; - ]]] + variables: + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" + ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" label: "[[[ return variables.ulm_translation_state ]]]" state: - operator: "template" @@ -173,7 +187,14 @@ card_media_player: return name; ]]] - operator: "template" - value: "[[[ return entity.state != 'off' ]]]" + value: "[[[ return entity.state == 'standby' ]]]" + name: | + [[[ + let name = variables.ulm_card_media_player_name || states[entity.entity_id].attributes.friendly_name; + return name; + ]]] + - operator: "template" + value: "[[[ return entity.state != 'off' || 'standby']]]" name: | [[[ let name = variables.ulm_card_media_player_name || states[entity.entity_id].attributes.friendly_name; @@ -305,6 +326,8 @@ card_media_player: icon: "mdi:play" - value: "off" icon: "mdi:play" + - value: "standby" + icon: "mdi:play" styles: card: - background-color: | From baced691d260b7613d91952aec1a8be98763ae44 Mon Sep 17 00:00:00 2001 From: mdb17 Date: Fri, 29 Jul 2022 15:55:00 -0500 Subject: [PATCH 43/70] Apply suggestions from code review Co-authored-by: BasBruss <68892092+basbruss@users.noreply.github.com> --- .../cards/card_media_player.yaml | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 4f703941f..07a8e754d 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -76,14 +76,7 @@ card_media_player: [[[ if(variables.ulm_card_media_player_enable_controls) { if(variables.ulm_card_media_player_collapsible){ - if (entity.state == "off"){ - return "none"; - } else if (entity.state == "standby"){ - return "none"; - } - else { - return "block"; - } + return (entity.state === "off" || entity.state === "standby") ? "none" : "block"; } return "block"; } @@ -94,14 +87,7 @@ card_media_player: [[[ if(variables.ulm_card_media_player_enable_volume_slider) { if(variables.ulm_card_media_player_collapsible){ - if (entity.state == "off"){ - return "none"; - } else if (entity.state == "standby"){ - return "none"; - } - else { - return "block"; - } + return (entity.state === "off" || entity.state === "standby") ? "none" : "block"; } return "block"; } From b32601c3ecc73f9dd275dc244a82618879d18a09 Mon Sep 17 00:00:00 2001 From: mdb17 Date: Fri, 29 Jul 2022 16:07:16 -0500 Subject: [PATCH 44/70] Update card_media_player.yaml --- .../cards/card_media_player.yaml | 31 +++---------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 07a8e754d..879e002b9 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -3,7 +3,6 @@ card_media_player: template: - "icon_more_info_new" - - "ulm_actions_card" - "ulm_translation_engine" variables: ulm_card_media_player_name: "[[[ return entity.attributes.friendly_name ]]]" @@ -49,14 +48,7 @@ card_media_player: if (!variables.ulm_card_media_player_collapsible) { return "12px"; } else { - if (entity.state == "off"){ - return "0px"; - } else if (entity.state == "standby"){ - return "0px"; - } - else { - return "12px"; - } + return (entity.state === "off" || entity.state === "standby") ? "0px" : "12p }x"; } ]]] card: @@ -76,22 +68,18 @@ card_media_player: [[[ if(variables.ulm_card_media_player_enable_controls) { if(variables.ulm_card_media_player_collapsible){ - return (entity.state === "off" || entity.state === "standby") ? "none" : "block"; + return (entity.state === "off" || entity.state === "standby") ? "none" : "block"; } - return "block"; } - return "none"; ]]] item3: - display: | [[[ if(variables.ulm_card_media_player_enable_volume_slider) { if(variables.ulm_card_media_player_collapsible){ - return (entity.state === "off" || entity.state === "standby") ? "none" : "block"; + return (entity.state === "off" || entity.state === "standby") ? "none" : "block"; } - return "block"; } - return "none"; ]]] custom_fields: item1: @@ -153,16 +141,7 @@ card_media_player: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" - ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" - ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" - ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" - ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" - ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" + label: "[[[ return variables.ulm_translation_state ]]]" state: - operator: "template" @@ -397,4 +376,4 @@ card_media_player: border-radius: 14px; background-color: transparent; box-shadow: none; - } + } \ No newline at end of file From 9b2bed0c2a541a2627a40c1aaeecb6dcad0b0738 Mon Sep 17 00:00:00 2001 From: mdb17 Date: Fri, 29 Jul 2022 16:13:14 -0500 Subject: [PATCH 45/70] Update card_media_player.yaml fixed white space --- .../card_templates/cards/card_media_player.yaml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 879e002b9..461a30695 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -48,7 +48,7 @@ card_media_player: if (!variables.ulm_card_media_player_collapsible) { return "12px"; } else { - return (entity.state === "off" || entity.state === "standby") ? "0px" : "12p }x"; + return (entity.state === "off" || entity.state === "standby") ? "0px" : "12px"; } ]]] card: @@ -102,7 +102,7 @@ card_media_player: ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" icon: | [[[ - var icon = entity.attributes.icon || "mdi:speaker"; + var icon = entity.attributes.icon || "mdi:speaker"; if(entity.attributes.app_name){ var app = entity.attributes.app_name.toLowerCase(); var icon = { @@ -141,7 +141,16 @@ card_media_player: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - + variables: + ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" + ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" + ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" + ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" + ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" + ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" + ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" + ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" + ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" label: "[[[ return variables.ulm_translation_state ]]]" state: - operator: "template" @@ -260,7 +269,6 @@ card_media_player: ? 'white' : 'rgba(var(--color-theme), 0.9)' ]]] - item2: card: type: "custom:button-card" From c0eb7402b76d1bbc859dae696f6b85999827a47a Mon Sep 17 00:00:00 2001 From: mdb17 Date: Fri, 29 Jul 2022 20:54:19 -0500 Subject: [PATCH 46/70] Added newline --- .../ulm_templates/card_templates/cards/card_media_player.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 461a30695..1ed9e56f5 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -384,4 +384,4 @@ card_media_player: border-radius: 14px; background-color: transparent; box-shadow: none; - } \ No newline at end of file + } From 188dd433c27cc03e90f72ad4c02e39bd82538ca0 Mon Sep 17 00:00:00 2001 From: schumijo Date: Sat, 30 Jul 2022 15:13:26 +0200 Subject: [PATCH 47/70] Revert "Add weather popup" This reverts commit 8643655349c640d57dc3580687f3a975b7975a51. --- .../ulm_templates/actions/actions_icon.yaml | 19 +++---------------- .../ulm_templates/actions/actions_name.yaml | 19 +++---------------- 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index abcb5db77..eccbc286c 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -21,7 +21,7 @@ ulm_actions_icon: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -52,15 +52,11 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } - if (variables.ulm_card_weather_enable_popup){ - return 'popup_weather_forecast' - } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -80,7 +76,7 @@ ulm_actions_icon: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -111,16 +107,11 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } - if (variables.ulm_card_weather_enable_popup){ - return 'popup_weather_forecast' - } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" - double_tap_action: action: > [[[ @@ -139,7 +130,7 @@ ulm_actions_icon: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -170,12 +161,8 @@ ulm_actions_icon: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } - if (variables.ulm_card_weather_enable_popup){ - return 'popup_weather_forecast' - } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index f0020effb..3210625c7 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -21,7 +21,7 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -52,15 +52,11 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } - if (variables.ulm_card_weather_enable_popup){ - return 'popup_weather_forecast' - } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" hold_action: action: > @@ -80,7 +76,7 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -111,16 +107,11 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } - if (variables.ulm_card_weather_enable_popup){ - return 'popup_weather_forecast' - } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" - double_tap_action: action: > [[[ @@ -139,7 +130,7 @@ ulm_actions_name: action = 'call-service' } - if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup || variables.ulm_card_weather_enable_popup) ){ + if (action == 'popup' && (variables.ulm_card_light_enable_popup || variables.ulm_card_media_player_enable_popup || variables.ulm_card_thermostat_enable_popup) ){ action = 'fire-dom-event' } if (action == 'popup'){ @@ -170,12 +161,8 @@ ulm_actions_name: if (variables.ulm_card_media_player_enable_popup){ return 'popup_media_player_infos' } - if (variables.ulm_card_weather_enable_popup){ - return 'popup_weather_forecast' - } ]]] variables: ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" - ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" From 6e2584f102d5c5258c04eb9cf4974815fa22bd3c Mon Sep 17 00:00:00 2001 From: schumijo Date: Sat, 30 Jul 2022 15:25:56 +0200 Subject: [PATCH 48/70] Fix quality and translation --- .../popup_buttons/popup_button_forecast.yaml | 2 +- .../popup_layouts/popup_weather_row.yaml | 36 +++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_forecast.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_forecast.yaml index f03c45aeb..043f4ba85 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_forecast.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_forecast.yaml @@ -1,4 +1,4 @@ --- popup_button_forecast: template: "ulm_translation_engine" - name: "[[[ return variables.ulm_translation_forecast ]]]" + name: "[[[ return hass.resources[hass['language']]['ui.card.weather.forecast']; ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_layouts/popup_weather_row.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_layouts/popup_weather_row.yaml index f7ddb597b..9aee9ae62 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_layouts/popup_weather_row.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_layouts/popup_weather_row.yaml @@ -5,11 +5,11 @@ popup_weather_row: show_name: false styles: grid: - - grid-template-areas: '"i date templow tempmax"' - - grid-template-columns: 1fr 2fr 1fr 1fr - - grid-template-rows: min-content min-content min-content min-content + - grid-template-areas: "'i date templow tempmax'" + - grid-template-columns: "1fr 2fr 1fr 1fr" + - grid-template-rows: "min-content min-content min-content min-content" card: - - padding: 2px 0px + - padding: "2px 0px" icon: - color: > [[[ @@ -56,28 +56,28 @@ popup_weather_row: } return (icon[state] || icon["default"]); ]]] - - height: 36px - - width: 36px + - height: "36px" + - width: "36px" custom_fields: date: - - text-align: left - - text-transform: capitalize + - text-align: "left" + - text-transform: "capitalize" templow: - background-color: "rgba(var(--color-blue), 1)" - color: "white" - - border-radius: 15px - - height: 30px - - vertical-align: middle - - line-height: 30px - - width: 90% + - border-radius: "15px" + - height: "30px" + - vertical-align: "middle" + - line-height: "30px" + - width: "90%" tempmax: - background-color: "rgba(var(--color-red), 1)" - color: "white" - - border-radius: 15px - - height: 30px - - vertical-align: middle - - line-height: 30px - - width: 90% + - border-radius: "15px" + - height: "30px" + - vertical-align: "middle" + - line-height: "30px" + - width: "90%" custom_fields: date: | [[[ From b3ca07e59fb0837a66bd3db916cc66e64b0b3cca Mon Sep 17 00:00:00 2001 From: Michel Peterson Date: Sat, 30 Jul 2022 16:30:44 +0300 Subject: [PATCH 49/70] Custom Card "Room" support for new popups Add support for the new popup framework while maintaining backwards compatibility with the old one. --- custom_cards/custom_card_esh_room/README.md | 6 +++- .../custom_card_esh_room.yaml | 34 ++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/custom_cards/custom_card_esh_room/README.md b/custom_cards/custom_card_esh_room/README.md index 58cb908c4..b7b132a9e 100644 --- a/custom_cards/custom_card_esh_room/README.md +++ b/custom_cards/custom_card_esh_room/README.md @@ -17,7 +17,7 @@ hide: - Full credit to user [bms on the forum](https://community.home-assistant.io/t/lovelace-ui-minimalist/322687/192), they created the design and base of it in full, EverythingSmartHome put it into a PR as the basis - beasthouse and basbruss on the EverythingSmartHome discord channel for emoji/humidity customization - mpeterson added support for a switch to control climate and also to remove the need to have an entity associated -- Version: 2.1.0 +- Version: 2.1.1 ## Changelog @@ -40,6 +40,10 @@ Fixes text overflow issue over the climate button. - It now uses the `ulm_actions_card` template, which allows the usage of the popups wherever custom actions are set as `popup`. - Allow overflowing label and text to the climate button area whenever there is no climate button. +
+2.1.1 +Add support for the new popup framework while maintaining backwards compatibility with the old one. +
## Description diff --git a/custom_cards/custom_card_esh_room/custom_card_esh_room.yaml b/custom_cards/custom_card_esh_room/custom_card_esh_room.yaml index b117ba711..8179b2c03 100644 --- a/custom_cards/custom_card_esh_room/custom_card_esh_room.yaml +++ b/custom_cards/custom_card_esh_room/custom_card_esh_room.yaml @@ -159,8 +159,21 @@ card_esh_room: template: - "widget_icon" - "ulm_actions_card" - variables: - ulm_card_light_enable_popup: "[[[ return variables.ulm_card_light_enable_popup; ]]]" + variables: > + [[[ + let vars = {}; + vars.ulm_card_light_enable_popup = variables.ulm_card_light_enable_popup; + + if(variables.ulm_card_light_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_light_brightness', + 'popup_variables': { + 'ulm_popup_light_entity': variables.ulm_custom_card_esh_room_light_entity, + } + }; + } + return vars; + ]]] climate: card: @@ -218,5 +231,18 @@ card_esh_room: template: - "widget_icon" - "ulm_actions_card" - variables: - ulm_card_thermostat_enable_popup: "[[[ return variables.ulm_card_thermostat_enable_popup; ]]]" + variables: > + [[[ + let vars = {}; + vars.ulm_card_thermostat_enable_popup = variables.ulm_card_light_enable_popup; + + if(variables.ulm_card_thermostat_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_thermostat_temperature', + 'popup_variables': { + 'ulm_popup_thermostat_entity': variables.ulm_custom_card_esh_room_climate_entity, + } + }; + } + return vars; + ]]] From ef4d17ddd30696a1fb0d0689f651d09cc26e5279 Mon Sep 17 00:00:00 2001 From: mdb17 Date: Sat, 30 Jul 2022 09:39:46 -0500 Subject: [PATCH 50/70] Update custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml Co-authored-by: BasBruss <68892092+basbruss@users.noreply.github.com> --- .../ulm_templates/card_templates/cards/card_media_player.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 1ed9e56f5..6a5622335 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -168,7 +168,7 @@ card_media_player: return name; ]]] - operator: "template" - value: "[[[ return entity.state != 'off' || 'standby']]]" + value: "[[[ return entity.state != 'off' || entity.state != 'standby']]]" name: | [[[ let name = variables.ulm_card_media_player_name || states[entity.entity_id].attributes.friendly_name; From 45e353b0a1cbc8243c9c33a45393af1217ce2b60 Mon Sep 17 00:00:00 2001 From: mdb17 Date: Sat, 30 Jul 2022 23:42:39 -0500 Subject: [PATCH 51/70] Update card_media_player.yaml --- .../ulm_templates/card_templates/cards/card_media_player.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 6a5622335..5fec6c33f 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -70,7 +70,9 @@ card_media_player: if(variables.ulm_card_media_player_collapsible){ return (entity.state === "off" || entity.state === "standby") ? "none" : "block"; } + return "block"; } + return "none"; ]]] item3: - display: | @@ -79,7 +81,9 @@ card_media_player: if(variables.ulm_card_media_player_collapsible){ return (entity.state === "off" || entity.state === "standby") ? "none" : "block"; } + return "block"; } + return "none"; ]]] custom_fields: item1: From 73dd4cd38341c714b83beff5a75c1e9b2d530af4 Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 2 Aug 2022 09:35:25 +0200 Subject: [PATCH 52/70] Fix quality check --- .../popups/popup_weather_forecast.yaml | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml index 73cc30f22..40143d754 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml @@ -67,7 +67,7 @@ popup_weather_forecast: ]]] content1: card: - type: vertical-stack + type: "vertical-stack" cards: - type: "custom:button-card" entity: "[[[ return variables.ulm_popup_weather_entity ]]]" @@ -75,47 +75,47 @@ popup_weather_forecast: show_icon: false styles: grid: - - grid-template-areas: '"temp" "tempminmax' - - grid-template-columns: 1fr - - grid-template-rows: min-content min-content + - grid-template-areas: "'temp' 'tempminmax'" + - grid-template-columns: "1fr" + - grid-template-rows: "min-content min-content" card: - - background: none - - box-shadow: none + - background: "none" + - box-shadow: "none" custom_fields: temp: - - font-size: 60px + - font-size: "60px" custom_fields: temp: "[[[ return states[variables.ulm_popup_weather_entity].attributes.temperature + '°' ]]]" tempminmax: "[[[ return 'Max. ' + states[variables.ulm_popup_weather_entity].attributes.forecast[0].temperature + '° Min. ' + states[variables.ulm_popup_weather_entity].attributes.forecast[0].templow + '°' ]]]" - - type: vertical-stack + - type: "vertical-stack" cards: - type: "custom:button-card" - template: popup_weather_row + template: "popup_weather_row" entity: "[[[ return variables.ulm_popup_weather_entity ]]]" variables: ulm_popup_weather_entity_idx: 0 - type: "custom:button-card" - tempalte: popup_weather_row + tempalte: "popup_weather_row" entity: "[[[ return variables.ulm_popup_weather_entity ]]]" variables: ulm_popup_weather_entity_idx: 1 - type: "custom:button-card" - tempalte: popup_weather_row + tempalte: "popup_weather_row" entity: "[[[ return variables.ulm_popup_weather_entity ]]]" variables: ulm_popup_weather_entity_idx: 2 - type: "custom:button-card" - tempalte: popup_weather_row + tempalte: "popup_weather_row" entity: "[[[ return variables.ulm_popup_weather_entity ]]]" variables: ulm_popup_weather_entity_idx: 3 - type: "custom:button-card" - tempalte: popup_weather_row + tempalte: "popup_weather_row" entity: "[[[ return variables.ulm_popup_weather_entity ]]]" variables: ulm_popup_weather_entity_idx: 4 - type: "custom:button-card" - tempalte: popup_weather_row + tempalte: "popup_weather_row" entity: "[[[ return variables.ulm_popup_weather_entity ]]]" variables: ulm_popup_weather_entity_idx: 5 From e2963beb110fb01a1e7be1ba330ca16b9a16aaf3 Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 2 Aug 2022 09:38:34 +0200 Subject: [PATCH 53/70] Fix quality check --- .../lovelace/ulm_templates/actions/actions_card.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index f88b1c017..8704740b2 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -195,4 +195,4 @@ ulm_actions_card: if (variables.ulm_card_weather_enable_popup){ return 'popup_weather_forecast' } - ]]] \ No newline at end of file + ]]] From fdfac9fe1874742c8d241cb73b8a2373be8aa548 Mon Sep 17 00:00:00 2001 From: schumijo <40740060+schumijo@users.noreply.github.com> Date: Tue, 2 Aug 2022 09:57:52 +0200 Subject: [PATCH 54/70] Remove weather variable --- .../lovelace/ulm_templates/actions/actions_card.yaml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 8704740b2..05ddd036c 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -61,9 +61,6 @@ ulm_actions_card: return popup_config.popup_variables; } } - if (variables.ulm_card_weather_enable_popup){ - return 'popup_weather_forecast' - } ]]] hold_action: @@ -127,9 +124,6 @@ ulm_actions_card: return popup_config.popup_variables; } } - if (variables.ulm_card_weather_enable_popup){ - return 'popup_weather_forecast' - } ]]] double_tap_action: @@ -192,7 +186,4 @@ ulm_actions_card: return popup_config.popup_variables; } } - if (variables.ulm_card_weather_enable_popup){ - return 'popup_weather_forecast' - } ]]] From 3dd65fbc725e780ce62fec34dec58b7032591c2a Mon Sep 17 00:00:00 2001 From: schumijo <40740060+schumijo@users.noreply.github.com> Date: Tue, 2 Aug 2022 09:58:17 +0200 Subject: [PATCH 55/70] Update actions_card.yaml --- .../lovelace/ulm_templates/actions/actions_card.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index 05ddd036c..f8969c26f 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -62,7 +62,6 @@ ulm_actions_card: } } ]]] - hold_action: action: > [[[ @@ -125,7 +124,6 @@ ulm_actions_card: } } ]]] - double_tap_action: action: > [[[ From df9952ee78301d2818369ae9a842798d927e1cf6 Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 2 Aug 2022 10:05:25 +0200 Subject: [PATCH 56/70] Add doc --- docs/assets/img/popup_weather_phone.png | Bin 0 -> 32966 bytes docs/assets/img/popup_weather_tablet.png | Bin 0 -> 205492 bytes docs/usage/popups/popup_weather.md | 19 +++++++++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 docs/assets/img/popup_weather_phone.png create mode 100644 docs/assets/img/popup_weather_tablet.png create mode 100644 docs/usage/popups/popup_weather.md diff --git a/docs/assets/img/popup_weather_phone.png b/docs/assets/img/popup_weather_phone.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5ee1728aaf428ce6f349638b93844decf448f7 GIT binary patch literal 32966 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 literal 0 HcmV?d00001 diff --git a/docs/assets/img/popup_weather_tablet.png b/docs/assets/img/popup_weather_tablet.png new file mode 100644 index 0000000000000000000000000000000000000000..869fb1c5695879686fac8de7bd819ae107e320b7 GIT binary patch literal 205492 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

uMcFu{I!xpW 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

%xnHF{`D3Mb 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 literal 0 HcmV?d00001 diff --git a/docs/usage/popups/popup_weather.md b/docs/usage/popups/popup_weather.md new file mode 100644 index 000000000..a1944c19e --- /dev/null +++ b/docs/usage/popups/popup_weather.md @@ -0,0 +1,19 @@ +--- +title: Weather Popup +hide: + - toc +--- + + +### Weather popup + +![Phone](../../assets/img/popup_weather_phone.png){ width="500" } +![Tablet](../../assets/img/popup_weather_tablet.png){ width="500" } + +#### Requirements + +- weather-radar-card (download for HACS) + +## Credits + +- Designed by schumijo From 6daa8f73587d042c0d848301aaa19324b18e16c4 Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 2 Aug 2022 10:09:44 +0200 Subject: [PATCH 57/70] Add weather-radar-card --- scripts/update-cards.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/update-cards.py b/scripts/update-cards.py index 554b6fbee..8c8c6ca11 100755 --- a/scripts/update-cards.py +++ b/scripts/update-cards.py @@ -12,6 +12,7 @@ ('mini-media-player', 'https://github.com/kalkih/mini-media-player/releases/download/v1.16.4/mini-media-player-bundle.js'), ('my-cards', 'https://github.com/AnthonMS/my-cards/releases/download/v1.0.0/my-cards.js'), ('simple-weather-card', 'https://github.com/kalkih/simple-weather-card/releases/download/v0.8.3/simple-weather-card-bundle.js'), + ('weather-radar-card', 'https://github.com/Makin-Things/weather-radar-card/releases/download/v2.0.6/weather-radar-card.js'), # for adaptive dashboard ('lovelace-layout-card', 'https://raw.githubusercontent.com/thomasloven/lovelace-layout-card/2.4.2/layout-card.js'), ('lovelace-state-switch', 'https://raw.githubusercontent.com/thomasloven/lovelace-state-switch/1.9.5/state-switch.js'), From 95c77e3396aa5201ebcde37b401b27ee5d10ed45 Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 2 Aug 2022 10:12:03 +0200 Subject: [PATCH 58/70] Add weather-radar-card --- custom_components/ui_lovelace_minimalist/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/custom_components/ui_lovelace_minimalist/base.py b/custom_components/ui_lovelace_minimalist/base.py index 949d9e2ff..a6ca2c977 100644 --- a/custom_components/ui_lovelace_minimalist/base.py +++ b/custom_components/ui_lovelace_minimalist/base.py @@ -320,6 +320,7 @@ async def configure_plugins(self) -> bool: "simple-weather-card", "lovelace-layout-card", "lovelace-state-switch", + "weather-radar-card", ] for p in depenceny_resource_paths: if not self.configuration.include_other_cards: From be9685ef100250d5ba61c8c7e45f4fe4cc87a48b Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 2 Aug 2022 10:20:36 +0200 Subject: [PATCH 59/70] Update translation --- .../ui_lovelace_minimalist/lovelace/translations/cn.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/cs.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/da.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/de.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/en.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/es.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/fi.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/fr.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/it.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/nl.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/no.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/pl.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/pt-BR.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/pt.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/ru.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/sk.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/sv.yaml | 1 + .../ui_lovelace_minimalist/lovelace/translations/tr.yaml | 1 + .../popup_templates/popup_buttons/popup_button_radar.yaml | 2 +- 19 files changed, 19 insertions(+), 1 deletion(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/cn.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/cn.yaml index 2475fbacf..9b3781eb9 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/cn.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/cn.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "你好" ulm_volume: "体积" ulm_popups_color: "顏色" + ulm_radar: "雷达" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/cs.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/cs.yaml index 79e777838..443813fe2 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/cs.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/cs.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Ahoj" ulm_volume: "Hlasitost" ulm_popups_color: "Barva" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/da.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/da.yaml index 7daaffaf0..1f16b71f2 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/da.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/da.yaml @@ -13,3 +13,4 @@ ulm_language_variables: ulm_hello: "Hej" ulm_volume: "Volumen" ulm_popups_color: "Farve" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/de.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/de.yaml index 9f7317d67..84b40122a 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/de.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/de.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Hallo" ulm_volume: "Lautstärke" ulm_popups_color: "Farbe" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/en.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/en.yaml index 26639da6e..93d2c3bfa 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/en.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/en.yaml @@ -13,3 +13,4 @@ ulm_language_variables: ulm_hello: "Hello" ulm_volume: "Volume" ulm_popups_color: "Color" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/es.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/es.yaml index bc8952353..84ebd9eeb 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/es.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/es.yaml @@ -13,3 +13,4 @@ ulm_language_variables: ulm_hello: "Hola" ulm_volume: "Volumen" ulm_popups_color: "Color" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/fi.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/fi.yaml index 7a06561fa..d3f78a6ec 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/fi.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/fi.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Hei" ulm_volume: "Äänenvoimakkuus" ulm_popups_color: "Väri" + ulm_radar: "Tutka" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/fr.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/fr.yaml index 482267b00..34e65e640 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/fr.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/fr.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Bonjour" ulm_volume: "Volume" ulm_popups_color: "Couleur" + ulm_radar: "Radar" \ No newline at end of file diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/it.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/it.yaml index 1019eedf8..89b7327f1 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/it.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/it.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Ciao" ulm_volume: "Volume" ulm_popups_color: "Colore" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/nl.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/nl.yaml index 00ea82687..ebd499d7d 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/nl.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/nl.yaml @@ -13,3 +13,4 @@ ulm_language_variables: ulm_hello: "Hallo" ulm_volume: "Volume" ulm_popups_color: "Kleur" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/no.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/no.yaml index d2c9d27f9..47e6451dc 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/no.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/no.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Hei" ulm_volume: "Volume" ulm_popups_color: "Farge" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/pl.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/pl.yaml index 079e0a85c..f6b960552 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/pl.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/pl.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Witaj" ulm_volume: "Objętość" ulm_popups_color: "Kolor" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/pt-BR.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/pt-BR.yaml index 15a0ce73b..fc593775b 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/pt-BR.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/pt-BR.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Olá" ulm_volume: "Volume" ulm_popups_color: "Cor" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/pt.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/pt.yaml index 220c309d0..a6bb80f45 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/pt.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/pt.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Olá" ulm_volume: "Volume" ulm_popups_color: "Cor" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/ru.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/ru.yaml index ceb1f12a6..fae2fe72b 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/ru.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/ru.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Здравствуйте" ulm_volume: "Объем" ulm_popups_color: "Цвет" + ulm_radar: "Pадар" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/sk.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/sk.yaml index c47bcc031..1ec4dcf7f 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/sk.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/sk.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Ahoj" ulm_volume: "Volume" ulm_popups_color: "Farba" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/sv.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/sv.yaml index b0b865550..2d93e8fb4 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/sv.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/sv.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Hej" ulm_volume: "Volym" ulm_popups_color: "Färg" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/tr.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/tr.yaml index 5d0fa3011..25f8c73b6 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/tr.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/tr.yaml @@ -10,3 +10,4 @@ ulm_language_variables: ulm_hello: "Hello" ulm_volume: "Cilt" ulm_popups_color: "Renk" + ulm_radar: "Radar" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml index aaeed643b..93f5cc9a1 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml @@ -1,4 +1,4 @@ --- popup_button_radar: template: "ulm_translation_engine" - name: "[[[ return variables.ulm_translation_radar ]]]" + name: "[[[ return variables.ulm_radar ]]]" From 90b13400af0b5be3ca744d1f0816c84a1c213126 Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 2 Aug 2022 10:23:28 +0200 Subject: [PATCH 60/70] Fix quality --- .../ui_lovelace_minimalist/lovelace/translations/fr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/translations/fr.yaml b/custom_components/ui_lovelace_minimalist/lovelace/translations/fr.yaml index 34e65e640..966732ccf 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/translations/fr.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/translations/fr.yaml @@ -10,4 +10,4 @@ ulm_language_variables: ulm_hello: "Bonjour" ulm_volume: "Volume" ulm_popups_color: "Couleur" - ulm_radar: "Radar" \ No newline at end of file + ulm_radar: "Radar" From 586d25a88076d663159272d21eed0741b0ec231b Mon Sep 17 00:00:00 2001 From: schumijo Date: Tue, 2 Aug 2022 13:48:15 +0200 Subject: [PATCH 61/70] Update doc --- docs/usage/popups/popup_weather.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/usage/popups/popup_weather.md b/docs/usage/popups/popup_weather.md index a1944c19e..d289be81c 100644 --- a/docs/usage/popups/popup_weather.md +++ b/docs/usage/popups/popup_weather.md @@ -14,6 +14,17 @@ hide: - weather-radar-card (download for HACS) +##### How to use + +To enable this popup, add the followgin code to your card : + +```yaml + ulm_custom_popup: + template: "popup_weather_forecast" + popup_variables: + ulm_popup_weather_entity: weather.xxx +``` + ## Credits - Designed by schumijo From de4d2c4d766cbed82b82e1f8205a885ebdfa5d83 Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 2 Aug 2022 22:10:33 +0200 Subject: [PATCH 62/70] Use entity variable for custom popups. --- .../ulm_templates/actions/actions_card.yaml | 34 +++++++- .../ulm_templates/actions/actions_icon.yaml | 33 ++++++++ .../ulm_templates/actions/actions_name.yaml | 33 ++++++++ .../card_templates/cards/card_light.yaml | 22 ++---- .../cards/card_media_player.yaml | 19 ++--- .../card_templates/cards/card_thermostat.yaml | 10 +-- .../popup_buttons/popup_chip_controls.yaml | 14 ++-- .../popup_templates/popups/popup_light.yaml | 3 +- .../popups/popup_light_brightness.yaml | 78 ++++++++++--------- .../popups/popup_light_color.yaml | 6 +- .../popups/popup_light_color_temp.yaml | 6 +- .../popups/popup_media_player.yaml | 3 +- .../popups/popup_media_player_infos.yaml | 38 ++++----- .../popups/popup_media_player_volume.yaml | 3 +- .../popups/popup_power_outlet.yaml | 2 +- .../popups/popup_power_outlet_history.yaml | 2 +- .../popups/popup_power_outlet_stats.yaml | 17 +++- .../popups/popup_thermostat.yaml | 3 +- .../popups/popup_thermostat_temperature.yaml | 70 +++++++++-------- docs/setup/custom_actions.md | 24 +++++- 20 files changed, 261 insertions(+), 159 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml index f8969c26f..44e647d02 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_card.yaml @@ -53,6 +53,17 @@ ulm_actions_card: } } ]]] + entity: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'entity' in popup_config) { + return popup_config.entity; + } + } + + return (entity != null) ? entity.entity_id : null; + ]]] variables: > [[[ if (variables.ulm_custom_popup != null ){ @@ -107,7 +118,6 @@ ulm_actions_card: type: "custom:button-card" template: > [[[ - if (variables.ulm_custom_popup != null ){ let popup_config = variables.ulm_custom_popup; if ((typeof popup_config === 'object') && 'template' in popup_config) { @@ -115,6 +125,17 @@ ulm_actions_card: } } ]]] + entity: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'entity' in popup_config) { + return popup_config.entity; + } + } + + return (entity != null) ? entity.entity_id : null; + ]]] variables: > [[[ if (variables.ulm_custom_popup != null ){ @@ -176,6 +197,17 @@ ulm_actions_card: } } ]]] + entity: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'entity' in popup_config) { + return popup_config.entity; + } + } + + return (entity != null) ? entity.entity_id : null; + ]]] variables: > [[[ if (variables.ulm_custom_popup != null ){ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml index 2e4272268..e4f6e7418 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_icon.yaml @@ -63,6 +63,17 @@ ulm_actions_icon: } } ]]] + entity: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'entity' in popup_config) { + return popup_config.entity; + } + } + + return (entity != null) ? entity.entity_id : null; + ]]] variables: > [[[ if (variables.ulm_custom_popup != null ){ @@ -134,6 +145,17 @@ ulm_actions_icon: } } ]]] + entity: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'entity' in popup_config) { + return popup_config.entity; + } + } + + return (entity != null) ? entity.entity_id : null; + ]]] variables: > [[[ if (variables.ulm_custom_popup != null ){ @@ -199,6 +221,17 @@ ulm_actions_icon: } } ]]] + entity: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'entity' in popup_config) { + return popup_config.entity; + } + } + + return (entity != null) ? entity.entity_id : null; + ]]] variables: > [[[ if (variables.ulm_custom_popup != null ){ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml index 35473cbe0..6140e4ab9 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/actions/actions_name.yaml @@ -53,6 +53,17 @@ ulm_actions_name: } } ]]] + entity: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'entity' in popup_config) { + return popup_config.entity; + } + } + + return (entity != null) ? entity.entity_id : null; + ]]] variables: > [[[ if (variables.ulm_custom_popup != null ){ @@ -114,6 +125,17 @@ ulm_actions_name: } } ]]] + entity: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'entity' in popup_config) { + return popup_config.entity; + } + } + + return (entity != null) ? entity.entity_id : null; + ]]] variables: > [[[ if (variables.ulm_custom_popup != null ){ @@ -175,6 +197,17 @@ ulm_actions_name: } } ]]] + entity: > + [[[ + if (variables.ulm_custom_popup != null ){ + let popup_config = variables.ulm_custom_popup; + if ((typeof popup_config === 'object') && 'entity' in popup_config) { + return popup_config.entity; + } + } + + return (entity != null) ? entity.entity_id : null; + ]]] variables: > [[[ if (variables.ulm_custom_popup != null ){ diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml index b8f214a6c..3a3db1e2d 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_light.yaml @@ -108,10 +108,7 @@ card_light: let vars = variables; if(variables.ulm_card_light_enable_popup) { vars.ulm_custom_popup = { - 'template': 'popup_light_brightness', - 'popup_variables': { - 'ulm_popup_light_entity': entity.entity_id, - } + 'template': 'popup_light_brightness' }; } return vars; @@ -154,10 +151,7 @@ card_light: let vars = variables; if(variables.ulm_card_light_enable_popup) { vars.ulm_custom_popup = { - 'template': 'popup_light_brightness', - 'popup_variables': { - 'ulm_popup_light_entity': entity.entity_id, - } + 'template': 'popup_light_brightness' }; } return vars; @@ -217,10 +211,10 @@ card_light: [[[ var color = entity.attributes.rgb_color; if (entity.state == "unavailable"){ - return "rgba(var(--color-grey),1)"; + return "rgba(var(--color-grey),1)"; } else if (color && variables.ulm_card_light_enable_color){ - return "rgba(" + color + ",1)"; + return "rgba(" + color + ",1)"; } else{ return "rgba(var(--color-yellow),1)"; @@ -230,10 +224,10 @@ card_light: [[[ var color = entity.attributes.rgb_color; if (entity.state == "unavailable"){ - return "rgba(var(--color-grey),0.2)"; + return "rgba(var(--color-grey),0.2)"; } else if (color && variables.ulm_card_light_enable_color){ - return "rgba(" + color + ",0.2)"; + return "rgba(" + color + ",0.2)"; } else{ return "rgba(var(--color-yellow),0.2)"; @@ -243,10 +237,10 @@ card_light: [[[ var color = entity.attributes.rgb_color; if (entity.state == "unavailable"){ - return "rgba(var(--color-grey),1)"; + return "rgba(var(--color-grey),1)"; } else if (color && variables.ulm_card_light_enable_color){ - return "rgba(" + color + ",1)"; + return "rgba(" + color + ",1)"; } else{ return "rgba(var(--color-yellow),1)"; diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index a14c85c77..af54a3d9f 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -100,10 +100,7 @@ card_media_player: if(variables.ulm_card_media_player_enable_popup) { vars.ulm_custom_popup = { - 'template': 'popup_media_player_infos', - 'popup_variables': { - 'ulm_popup_media_player_entity': entity.entity_id, - } + 'template': 'popup_media_player_infos' }; } return vars; @@ -155,10 +152,7 @@ card_media_player: if(variables.ulm_card_media_player_enable_popup) { vars.ulm_custom_popup = { - 'template': 'popup_media_player_infos', - 'popup_variables': { - 'ulm_popup_media_player_entity': entity.entity_id, - } + 'template': 'popup_media_player_infos' }; } return vars; @@ -251,8 +245,7 @@ card_media_player: card: type: "custom:button-card" template: "popup_media_player_infos" - variables: - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + entity: "[[[ return entity.entity_id ]]]" tap_action: action: "call-service" service: "media_player.media_previous_track" @@ -292,8 +285,7 @@ card_media_player: card: type: "custom:button-card" template: "popup_media_player_infos" - variables: - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + entity: "[[[ return entity.entity_id; ]]]" tap_action: action: "call-service" service: "media_player.media_play_pause" @@ -336,8 +328,7 @@ card_media_player: card: type: "custom:button-card" template: "popup_media_player_infos" - variables: - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + entity: "[[[ return entity.entity_id; ]]]" tap_action: action: "call-service" service: "media_player.media_next_track" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml index 51f4ed3f2..a9e55191e 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_thermostat.yaml @@ -153,10 +153,7 @@ card_thermostat: if(variables.ulm_card_thermostat_enable_popup) { vars.ulm_custom_popup = { - 'template': 'popup_thermostat_temperature', - 'popup_variables': { - 'ulm_popup_thermostat_entity': entity.entity_id, - } + 'template': 'popup_thermostat_temperature' }; } return vars; @@ -193,10 +190,7 @@ card_thermostat: if(variables.ulm_card_thermostat_enable_popup) { vars.ulm_custom_popup = { - 'template': 'popup_thermostat_temperature', - 'popup_variables': { - 'ulm_popup_thermostat_entity': entity.entity_id, - } + 'template': 'popup_thermostat_temperature' }; } return vars; diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_chip_controls.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_chip_controls.yaml index a0a33b42d..ca2e111e6 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_chip_controls.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_chip_controls.yaml @@ -1,8 +1,6 @@ --- popup_chip_controls: template: "chips" - variables: - ulm_popup_media_player_entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" styles: card: - background: "none" @@ -20,13 +18,13 @@ popup_chip_controls: card: type: "custom:button-card" template: "icon_controls" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" icon: "mdi:skip-previous" tap_action: action: "call-service" service: "media_player.media_previous_track" service_data: - entity_id: "[[[ return variables.ulm_popup_media_player_entity]]]" + entity_id: "[[[ return entity.entity_id; ]]]" styles: icon: - color: "rgba(var(--color-theme),0.5)" @@ -34,7 +32,7 @@ popup_chip_controls: card: type: "custom:button-card" template: "icon_controls" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" icon: "mdi:play" state: - value: "playing" @@ -43,18 +41,18 @@ popup_chip_controls: action: "call-service" service: "media_player.media_play_pause" service_data: - entity_id: "[[[ return variables.ulm_popup_media_player_entity]]]" + entity_id: "[[[ return entity.entity_id; ]]]" item3: card: type: "custom:button-card" template: "icon_controls" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" icon: "mdi:skip-next" tap_action: action: "call-service" service: "media_player.media_next_track" service_data: - entity_id: "[[[ return variables.ulm_popup_media_player_entity]]]" + entity_id: "[[[ return entity.entity_id; ]]]" styles: icon: - color: "rgba(var(--color-theme),0.5)" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light.yaml index 4fd039869..2b70809ac 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light.yaml @@ -9,5 +9,4 @@ popup_light: card: type: "custom:button-card" template: "popup_light_brightness" - variables: - ulm_popup_light_entity: "[[[ return entity.entity_id ]]]" + entity: "[[[ return entity.entity_id; ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_brightness.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_brightness.yaml index ea82d6739..4ca68e991 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_brightness.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_brightness.yaml @@ -1,5 +1,9 @@ --- popup_light_brightness: + show_icon: false + show_name: false + show_label: false + show_units: false styles: grid: - grid-template-areas: > @@ -8,13 +12,13 @@ popup_light_brightness: var brightness_modes = ["brightness", "hs", "color_temp", "rgb", "rgbw", "xy"]; var color_temp_modes = ["color_temp"]; var color_modes = ["hs", "rgb", "rgbw", "xy"]; - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => brightness_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => brightness_modes.includes(r))) { contents.push("content1"); } - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { contents.push("content2"); } - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_modes.includes(r))) { contents.push("content3"); } return "\"" + "header ".repeat(contents.length) + "\" " + "\"" + contents.join(" ") + "\" " + "\"" + "footer ".repeat(contents.length) + "\""; @@ -26,13 +30,13 @@ popup_light_brightness: var brightness_modes = ["brightness", "hs", "color_temp", "rgb", "rgbw", "xy"]; var color_temp_modes = ["color_temp"]; var color_modes = ["hs", "rgb", "rgbw", "xy"]; - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => brightness_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => brightness_modes.includes(r))) { columns.push("1fr"); } - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { columns.push("1fr"); } - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_modes.includes(r))) { columns.push("2fr"); } return columns.join(" "); @@ -49,7 +53,7 @@ popup_light_brightness: - display: > [[[ var brightness_modes = ["brightness", "hs", "color_temp", "rgb", "rgbw", "xy"]; - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => brightness_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => brightness_modes.includes(r))) { return "block"; } return "none"; @@ -59,7 +63,7 @@ popup_light_brightness: - display: > [[[ var color_temp_modes = ["color_temp"]; - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { return "block"; } return "none"; @@ -69,7 +73,7 @@ popup_light_brightness: - display: > [[[ var color_modes = ["hs", "rgb", "rgbw", "xy"]; - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_modes.includes(r))) { return "block"; } return "none"; @@ -107,11 +111,11 @@ popup_light_brightness: card: type: "custom:button-card" template: "popup_header" - entity: "[[[ return variables.ulm_popup_light_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" content1: card: type: "custom:my-slider" - entity: "[[[ return variables.ulm_popup_light_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" radius: "20px" rotate: 270 containerHeight: "320px" @@ -123,12 +127,12 @@ popup_light_brightness: thumbWidth: "0px" mainSliderColor: > [[[ - var color = states[variables.ulm_popup_light_entity].attributes.rgb_color; - if (states[variables.ulm_popup_light_entity].state == "unavailable"){ - return "rgba(var(--color-grey),1)"; + var color = entity.attributes.rgb_color; + if (entity.state == "unavailable"){ + return "rgba(var(--color-grey),1)"; } else if (color){ - return "rgba(" + color + ",1)"; + return "rgba(" + color + ",1)"; } else{ return "rgba(var(--color-yellow),1)"; @@ -137,12 +141,12 @@ popup_light_brightness: mainSliderColorOff: "rgba(var(--color-theme),0.1)" secondarySliderColor: > [[[ - var color = states[variables.ulm_popup_light_entity].attributes.rgb_color; - if (states[variables.ulm_popup_light_entity].state == "unavailable"){ - return "rgba(var(--color-grey),0.2)"; + var color = entity.attributes.rgb_color; + if (entity.state == "unavailable"){ + return "rgba(var(--color-grey),0.2)"; } else if (color){ - return "rgba(" + color + ",0.2)"; + return "rgba(" + color + ",0.2)"; } else{ return "rgba(var(--color-yellow),0.2)"; @@ -167,11 +171,11 @@ popup_light_brightness: content2: card: type: "custom:my-slider" - entity: "[[[ return variables.ulm_popup_light_entity ]]]" - minBar: "[[[ return states[variables.ulm_popup_light_entity].attributes.min_mireds ]]]" - minSet: "[[[ return states[variables.ulm_popup_light_entity].attributes.min_mireds ]]]" - maxBar: "[[[ return states[variables.ulm_popup_light_entity].attributes.max_mireds ]]]" - maxSet: "[[[ return states[variables.ulm_popup_light_entity].attributes.max_mireds ]]]" + entity: "[[[ return entity.entity_id ]]]" + minBar: "[[[ return entity.attributes.min_mireds ]]]" + minSet: "[[[ return entity.attributes.min_mireds ]]]" + maxBar: "[[[ return entity.attributes.max_mireds ]]]" + maxSet: "[[[ return entity.attributes.max_mireds ]]]" function: "Warmth" radius: "20px" rotate: 270 @@ -222,13 +226,13 @@ popup_light_brightness: var brightness_modes = ["brightness", "hs", "color_temp", "rgb", "rgbw", "xy"]; var color_temp_modes = ["color_temp"]; var color_modes = ["hs", "rgb", "rgbw", "xy"]; - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => brightness_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => brightness_modes.includes(r))) { areas.push("item1"); } - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { areas.push("item2"); } - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_modes.includes(r))) { areas.push("item3"); } return "\"" + areas.join(" ") + "\""; @@ -239,13 +243,13 @@ popup_light_brightness: var brightness_modes = ["brightness", "hs", "color_temp", "rgb", "rgbw", "xy"]; var color_temp_modes = ["color_temp"]; var color_modes = ["hs", "rgb", "rgbw", "xy"]; - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => brightness_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => brightness_modes.includes(r))) { columns.push("1fr"); } - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { columns.push("1fr"); } - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_modes.includes(r))) { columns.push("1fr"); } return columns.join(" "); @@ -271,7 +275,7 @@ popup_light_brightness: - display: > [[[ var color_temp_modes = ["color_temp"]; - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_temp_modes.includes(r))) { return "block"; } return "none"; @@ -284,8 +288,7 @@ popup_light_brightness: card: type: "custom:button-card" template: "popup_light_color_temp" - variables: - ulm_popup_light_entity: "[[[ return variables.ulm_popup_light_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" item3: card: icon: "mdi:palette" @@ -298,7 +301,7 @@ popup_light_brightness: - display: > [[[ var color_modes = ["hs", "rgb", "rgbw", "xy"]; - if (states[variables.ulm_popup_light_entity].attributes.supported_color_modes.some(r => color_modes.includes(r))) { + if (entity.attributes.supported_color_modes.some(r => color_modes.includes(r))) { return "block"; } return "none"; @@ -311,8 +314,7 @@ popup_light_brightness: card: type: "custom:button-card" template: "popup_light_color" - variables: - ulm_popup_light_entity: "[[[ return variables.ulm_popup_light_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" footer: card: type: "custom:button-card" @@ -326,11 +328,11 @@ popup_light_brightness: card: type: "custom:button-card" template: "popup_button_power" - entity: "[[[ return variables.ulm_popup_light_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" content3: card: type: "custom:light-entity-card" - entity: "[[[ return variables.ulm_popup_light_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" persist_features: true brightness: false color_temp: false diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_color.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_color.yaml index df584c719..951e1fe2f 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_color.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_color.yaml @@ -55,8 +55,7 @@ popup_light_color: card: type: "custom:button-card" template: "popup_light_brightness" - variables: - ulm_popup_light_entity: "[[[ return variables.ulm_popup_light_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" item2: card: icon: "mdi:sun-thermometer-outline" @@ -72,8 +71,7 @@ popup_light_color: card: type: "custom:button-card" template: "popup_light_color_temp" - variables: - ulm_popup_light_entity: "[[[ return variables.ulm_popup_light_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" item3: card: icon: "mdi:palette" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_color_temp.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_color_temp.yaml index df06dbb8d..6c19a7cb9 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_color_temp.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_light_color_temp.yaml @@ -55,8 +55,7 @@ popup_light_color_temp: card: type: "custom:button-card" template: "popup_light_brightness" - variables: - ulm_popup_light_entity: "[[[ return variables.ulm_popup_light_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" item2: card: icon: "mdi:sun-thermometer-outline" @@ -80,5 +79,4 @@ popup_light_color_temp: card: type: "custom:button-card" template: "popup_light_color" - variables: - ulm_popup_light_entity: "[[[ return variables.ulm_popup_light_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player.yaml index 3c8b551b3..fa6fd06ee 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player.yaml @@ -9,5 +9,4 @@ popup_media_player: card: type: "custom:button-card" template: "popup_media_player_infos" - variables: - ulm_popup_media_player_entity: "[[[ return entity.entity_id ]]]" + entity: "[[[ return entity.entity_id; ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player_infos.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player_infos.yaml index 76b3e4e1a..fe6ae9620 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player_infos.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player_infos.yaml @@ -1,5 +1,9 @@ --- popup_media_player_infos: + show_icon: false + show_name: false + show_label: false + show_units: false triggers_update: "all" styles: grid: @@ -51,7 +55,7 @@ popup_media_player_infos: card: type: "custom:button-card" template: "popup_header" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" content1: card: type: "custom:button-card" @@ -66,12 +70,12 @@ popup_media_player_infos: - background: | [[[ if(hass.themes.darkMode){ - return states[variables.ulm_popup_media_player_entity].state == 'playing' && states[variables.ulm_popup_media_player_entity].attributes.entity_picture != null - ? ' center / cover url(' + states[variables.ulm_popup_media_player_entity].attributes.entity_picture + '), radial-gradient(circle, #333333 90%, grey 105% ,#333333 110%)' + return entity.state == 'playing' && entity.attributes.entity_picture != null + ? ' center / cover url(' + entity.attributes.entity_picture + '), radial-gradient(circle, #333333 90%, grey 105% ,#333333 110%)' : '' }else{ - return states[variables.ulm_popup_media_player_entity].state == 'playing' && states[variables.ulm_popup_media_player_entity].attributes.entity_picture != null - ? ' center / cover url(' + states[variables.ulm_popup_media_player_entity].attributes.entity_picture + '), radial-gradient(circle, white 5%, grey 100% ,white 110%)' + return entity.state == 'playing' && entity.attributes.entity_picture != null + ? ' center / cover url(' + entity.attributes.entity_picture + '), radial-gradient(circle, white 5%, grey 100% ,white 110%)' : '' } ]]] @@ -104,11 +108,11 @@ popup_media_player_infos: card: type: "custom:button-card" template: "popup_button_app" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" picture: card: type: "custom:mini-media-player" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" artwork: "full-cover" hide: name: true @@ -128,7 +132,7 @@ popup_media_player_infos: media: card: type: "custom:mini-media-player" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" hide: runtime: false icon: true @@ -161,7 +165,7 @@ popup_media_player_infos: control: card: type: "custom:mini-media-player" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" hide: controls: true icon: true @@ -187,8 +191,6 @@ popup_media_player_infos: card: type: "custom:button-card" template: "list_2_items" - variables: - ulm_popup_media_player_entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" styles: card: - background: "none" @@ -202,8 +204,7 @@ popup_media_player_infos: card: type: "custom:button-card" template: "popup_chip_controls" - variables: - ulm_popup_media_player_entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" styles: card: - background: "none" @@ -213,7 +214,7 @@ popup_media_player_infos: card: type: "custom:button-card" template: "popup_chip_volume" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" styles: card: - background: "none" @@ -227,8 +228,7 @@ popup_media_player_infos: card: type: "custom:button-card" template: "popup_media_player_volume" - variables: - ulm_popup_media_player_entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" footer: card: type: "custom:button-card" @@ -242,16 +242,16 @@ popup_media_player_infos: card: type: "custom:button-card" template: "popup_button_power" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" item3: card: type: "custom:button-card" template: "popup_button_source" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" content2: card: type: "custom:my-slider" - entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" radius: "20px" rotate: 270 containerHeight: "320px" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player_volume.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player_volume.yaml index 4b1f99ceb..ba20b2a04 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player_volume.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_media_player_volume.yaml @@ -49,8 +49,7 @@ popup_media_player_volume: card: type: "custom:button-card" template: "popup_media_player_infos" - variables: - ulm_popup_media_player_entity: "[[[ return variables.ulm_popup_media_player_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" item2: card: type: "custom:button-card" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet.yaml index b499cb565..095514343 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet.yaml @@ -9,8 +9,8 @@ popup_power_outlet: card: type: "custom:button-card" template: "popup_power_outlet_stats" + entity: "[[[ return entity.entity_id ]]]" variables: - ulm_popup_power_outlet_entity: "[[[ return entity.entity_id ]]]" ulm_popup_power_outlet_sensor1: "[[[ return variables.ulm_popup_power_outlet_sensor1 ]]]" ulm_popup_power_outlet_sensor2: "[[[ return variables.ulm_popup_power_outlet_sensor2 ]]]" ulm_popup_power_outlet_graph_sensor: "[[[ return variables.ulm_popup_power_outlet_graph_sensor ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_history.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_history.yaml index c7e3d1ed5..822a79eab 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_history.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_history.yaml @@ -50,8 +50,8 @@ popup_power_outlet_history: card: type: "custom:button-card" template: "popup_power_outlet_stats" + entity: "[[[ return entity.entity_id ]]]" variables: - ulm_popup_power_outlet_entity: "[[[ return variables.ulm_popup_power_outlet_entity ]]]" ulm_popup_power_outlet_sensor1: "[[[ return variables.ulm_popup_power_outlet_sensor1 ]]]" ulm_popup_power_outlet_sensor2: "[[[ return variables.ulm_popup_power_outlet_sensor2 ]]]" ulm_popup_power_outlet_graph_sensor: "[[[ return variables.ulm_popup_power_outlet_graph_sensor ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_stats.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_stats.yaml index 2d7971f76..602f52215 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_stats.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_stats.yaml @@ -1,5 +1,9 @@ --- popup_power_outlet_stats: + show_icon: false + show_name: false + show_label: false + show_units: false styles: grid: - grid-template-areas: "'header header' 'content1 content1' 'content2 content3' 'footer footer'" @@ -44,7 +48,12 @@ popup_power_outlet_stats: card: type: "custom:button-card" template: "popup_header" - entity: "[[[ return variables.ulm_popup_power_outlet_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" + name: > + [[[ + console.log(this); + return "TEst" + ]]] content1: card: type: "grid" @@ -132,8 +141,8 @@ popup_power_outlet_stats: card: type: "custom:button-card" template: "popup_power_outlet_history" + entity: "[[[ return entity.entity_id ]]]" variables: - ulm_popup_power_outlet_entity: "[[[ return variables.ulm_popup_power_outlet_entity ]]]" ulm_popup_power_outlet_sensor1: "[[[ return variables.ulm_popup_power_outlet_sensor1 ]]]" ulm_popup_power_outlet_sensor2: "[[[ return variables.ulm_popup_power_outlet_sensor2 ]]]" ulm_popup_power_outlet_graph_sensor: "[[[ return variables.ulm_popup_power_outlet_graph_sensor ]]]" @@ -150,12 +159,12 @@ popup_power_outlet_stats: card: type: "custom:button-card" template: "popup_button_power" - entity: "[[[ return variables.ulm_popup_power_outlet_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" content3: card: type: "logbook" entities: - - "[[[ return variables.ulm_popup_power_outlet_entity ]]]" + - "[[[ return entity.entity_id ]]]" card_mod: style: | ha-card { diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_thermostat.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_thermostat.yaml index edf003919..9735668a2 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_thermostat.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_thermostat.yaml @@ -9,5 +9,4 @@ popup_thermostat: card: type: "custom:button-card" template: "popup_thermostat_temperature" - variables: - ulm_popup_thermostat_entity: "[[[ return entity.entity_id ]]]" + entity: "[[[ return entity.entity_id ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_thermostat_temperature.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_thermostat_temperature.yaml index 5e09ab6d9..ca5d7bbb4 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_thermostat_temperature.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_thermostat_temperature.yaml @@ -1,5 +1,9 @@ --- popup_thermostat_temperature: + show_icon: false + show_name: false + show_label: false + show_units: false styles: grid: - grid-template-areas: "'header' 'content1' 'buttons' 'footer'" @@ -35,11 +39,11 @@ popup_thermostat_temperature: card: type: "custom:button-card" template: "popup_header" - entity: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" content1: card: type: "thermostat" - entity: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" card_mod: style: | ha-card { @@ -64,22 +68,22 @@ popup_thermostat_temperature: - grid-template-areas: > [[[ var areas = []; - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("auto")) { + if (entity.attributes.hvac_modes.includes("auto")) { areas.push("auto"); } - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("heat")) { + if (entity.attributes.hvac_modes.includes("heat")) { areas.push("heat"); } - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("cool")) { + if (entity.attributes.hvac_modes.includes("cool")) { areas.push("cool"); } - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("dry")) { + if (entity.attributes.hvac_modes.includes("dry")) { areas.push("dry"); } - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("fan_only")) { + if (entity.attributes.hvac_modes.includes("fan_only")) { areas.push("fan_only"); } - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("heat_cool")) { + if (entity.attributes.hvac_modes.includes("heat_cool")) { areas.push("heat_cool"); } return "\"" + areas.join(" ") + "\""; @@ -87,22 +91,22 @@ popup_thermostat_temperature: - grid-template-columns: > [[[ var columns = []; - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("auto")) { + if (entity.attributes.hvac_modes.includes("auto")) { columns.push("1fr"); } - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("heat")) { + if (entity.attributes.hvac_modes.includes("heat")) { columns.push("1fr"); } - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("cool")) { + if (entity.attributes.hvac_modes.includes("cool")) { columns.push("1fr"); } - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("dry")) { + if (entity.attributes.hvac_modes.includes("dry")) { columns.push("1fr"); } - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("fan_only")) { + if (entity.attributes.hvac_modes.includes("fan_only")) { columns.push("1fr"); } - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("heat_cool")) { + if (entity.attributes.hvac_modes.includes("heat_cool")) { columns.push("1fr"); } return columns.join(" "); @@ -118,7 +122,7 @@ popup_thermostat_temperature: auto: - display: > [[[ - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("auto")) { + if (entity.attributes.hvac_modes.includes("auto")) { return "block"; } else { return "none"; @@ -127,7 +131,7 @@ popup_thermostat_temperature: heat: - display: > [[[ - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("heat")) { + if (entity.attributes.hvac_modes.includes("heat")) { return "block"; } else { return "none"; @@ -136,7 +140,7 @@ popup_thermostat_temperature: cool: - display: > [[[ - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("cool")) { + if (entity.attributes.hvac_modes.includes("cool")) { return "block"; } else { return "none"; @@ -145,7 +149,7 @@ popup_thermostat_temperature: dry: - display: > [[[ - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("dry")) { + if (entity.attributes.hvac_modes.includes("dry")) { return "block"; } else { return "none"; @@ -154,7 +158,7 @@ popup_thermostat_temperature: fan_only: - display: > [[[ - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("fan_only")) { + if (entity.attributes.hvac_modes.includes("fan_only")) { return "block"; } else { return "none"; @@ -163,7 +167,7 @@ popup_thermostat_temperature: heat_cool: - display: > [[[ - if (states[variables.ulm_popup_thermostat_entity].attributes.hvac_modes.includes("heat_cool")) { + if (entity.attributes.hvac_modes.includes("heat_cool")) { return "block"; } else { return "none"; @@ -173,14 +177,14 @@ popup_thermostat_temperature: auto: card: type: "custom:button-card" - entity: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" template: "widget_icon" icon: "mdi:autorenew" tap_action: action: "call-service" service: "climate.set_hvac_mode" service_data: - entity_id: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity_id: "[[[ return entity.entity_id ]]]" hvac_mode: "auto" styles: card: @@ -199,14 +203,14 @@ popup_thermostat_temperature: heat: card: type: "custom:button-card" - entity: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" template: "widget_icon" icon: "mdi:fire" tap_action: action: "call-service" service: "climate.set_hvac_mode" service_data: - entity_id: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity_id: "[[[ return entity.entity_id ]]]" hvac_mode: "heat" styles: card: @@ -225,14 +229,14 @@ popup_thermostat_temperature: cool: card: type: "custom:button-card" - entity: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" template: "widget_icon" icon: "mdi:snowflake" tap_action: action: "call-service" service: "climate.set_hvac_mode" service_data: - entity_id: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity_id: "[[[ return entity.entity_id ]]]" hvac_mode: "cool" styles: card: @@ -251,14 +255,14 @@ popup_thermostat_temperature: dry: card: type: "custom:button-card" - entity: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" template: "widget_icon" icon: "mdi:water" tap_action: action: "call-service" service: "climate.set_hvac_mode" service_data: - entity_id: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity_id: "[[[ return entity.entity_id ]]]" hvac_mode: "dry" styles: card: @@ -277,14 +281,14 @@ popup_thermostat_temperature: fan_only: card: type: "custom:button-card" - entity: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" template: "widget_icon" icon: "mdi:fan" tap_action: action: "call-service" service: "climate.set_hvac_mode" service_data: - entity_id: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity_id: "[[[ return entity.entity_id ]]]" hvac_mode: "fan_only" styles: card: @@ -303,14 +307,14 @@ popup_thermostat_temperature: heat_cool: card: type: "custom:button-card" - entity: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" template: "widget_icon" icon: "mdi:sun-snowflake" tap_action: action: "call-service" service: "climate.set_hvac_mode" service_data: - entity_id: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity_id: "[[[ return entity.entity_id ]]]" hvac_mode: "heat_cool" styles: card: @@ -339,4 +343,4 @@ popup_thermostat_temperature: card: type: "custom:button-card" template: "popup_button_power" - entity: "[[[ return variables.ulm_popup_thermostat_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" diff --git a/docs/setup/custom_actions.md b/docs/setup/custom_actions.md index d91cb2bf9..3aae9bc62 100644 --- a/docs/setup/custom_actions.md +++ b/docs/setup/custom_actions.md @@ -122,10 +122,15 @@ The implementation of the custom action now supports the configuration of indivi can be easily configured for each card. To enable a custom popup the variable `ulm_custom_popup` must be set within the card. -This variable have two subvariables `template` and `popup_variables`. The template must be the name of the +This variable have three subvariables `template`, `entity` and `popup_variables`. The template must be the name of the template that should be loaded. The necessary configuration variables for the popup can be configured in the variable `popup_variables`. +Usually the popup uses the same entity as the card that calls the popup. It is also possible to overwrite the entity +for the popup. Therfore the entity can be set using the `entity` variable +within the `ulm_custom_popup`. This `entity` variable is optional. It is also possible to disable the entity of the +custom popup it the `entity` variable within the `ulm_custom_popup is set to `none`. + ```yaml - type: 'custom:button-card' template: card_power_outlet @@ -135,6 +140,7 @@ the variable `popup_variables`. ulm_card_power_outlet_name: Power Outlet Livingroom ulm_custom_popup: template: "popup_power_outlet_stats" + entity: switch.power_outlet_livingroom popup_variables: ulm_popup_power_outlet_sensor1: sensor.power_outlet_livingroom ulm_popup_power_outlet_sensor2: sensor.power_outlet_livingroom_consumption @@ -151,7 +157,7 @@ This implementation allows the easy creation of custom popups that can be loaded !!! note "Light, Media Player, Thermostat" The `card_light`, `card_media_player` and `card_thermostat` uses a different approach. Therefore the popup can - be simply enabled by setting on of the variables `ulm_card_light_enable_popup`, `ulm_card_thermostat_enable_popup` + be simply enabled by setting one of the variables `ulm_card_light_enable_popup`, `ulm_card_thermostat_enable_popup` or `ulm_card_media_player_enable_popup` to true. ## For developers @@ -272,3 +278,17 @@ custom_card: The variables `ulm_card_light_enable_popup`, `ulm_card_thermostat_enable_popup` and `ulm_card_media_player_enable_popup` aren't used internally anymore. The are only working on their appropriate cards as configuration option for the end user of the card. So the custom_popup variable should be used instead. + + +## For developers of custom popups + +Custom popups must be a `custom:button-card`. It is also recommended to disable the icon, name and label within the +card configuration using + +```yaml +show_icon: false +show_name: false +show_label: false +show_units: false +``` + From 25ed10643f82f02da94bc7c23897ba16b04a6b68 Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 2 Aug 2022 22:32:30 +0200 Subject: [PATCH 63/70] Fix debug info. --- .../popup_templates/popups/popup_power_outlet_stats.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_stats.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_stats.yaml index 602f52215..89ea130ef 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_stats.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_power_outlet_stats.yaml @@ -49,11 +49,6 @@ popup_power_outlet_stats: type: "custom:button-card" template: "popup_header" entity: "[[[ return entity.entity_id ]]]" - name: > - [[[ - console.log(this); - return "TEst" - ]]] content1: card: type: "grid" From 6a035428bedaad176bb094d9ec3b3fda5b68bf18 Mon Sep 17 00:00:00 2001 From: schumijo Date: Wed, 3 Aug 2022 10:46:43 +0200 Subject: [PATCH 64/70] Adapted to PR 919 --- .../popup_templates/popups/popup_weather.yaml | 3 +- .../popups/popup_weather_forecast.yaml | 39 ++++++++++--------- .../popups/popup_weather_radar.yaml | 3 +- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather.yaml index 2eb4e57cb..c225df1ba 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather.yaml @@ -9,5 +9,4 @@ popup_weather: card: type: "custom:button-card" template: "popup_weather_forecast" - variables: - ulm_popup_weather_entity: "[[[ return entity.entity_id ]]]" + entity: "[[[ return entity.entity_id; ]]]" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml index 40143d754..58c6f2c5f 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_forecast.yaml @@ -1,5 +1,9 @@ --- popup_weather_forecast: + show_icon: false + show_name: false + show_label: false + show_units: false styles: grid: - grid-template-areas: "'header header' 'content1 content2' 'footer footer'" @@ -42,10 +46,10 @@ popup_weather_forecast: card: type: "custom:button-card" template: "popup_header" - entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" icon: | [[[ - var state = states[variables.ulm_popup_weather_entity].state; + var state = entity.state; var icon = { "clear-night": "mdi:weather-night", "cloudy": "mdi:weather-cloudy", @@ -70,7 +74,7 @@ popup_weather_forecast: type: "vertical-stack" cards: - type: "custom:button-card" - entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" show_name: false show_icon: false styles: @@ -85,38 +89,38 @@ popup_weather_forecast: temp: - font-size: "60px" custom_fields: - temp: "[[[ return states[variables.ulm_popup_weather_entity].attributes.temperature + '°' ]]]" - tempminmax: "[[[ return 'Max. ' + states[variables.ulm_popup_weather_entity].attributes.forecast[0].temperature + '° Min. ' + states[variables.ulm_popup_weather_entity].attributes.forecast[0].templow + '°' ]]]" + temp: "[[[ return entity.attributes.temperature + '°' ]]]" + tempminmax: "[[[ return 'Max. ' + entity.attributes.forecast[0].temperature + '° Min. ' + entity.attributes.forecast[0].templow + '°' ]]]" - type: "vertical-stack" cards: - type: "custom:button-card" template: "popup_weather_row" - entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" variables: ulm_popup_weather_entity_idx: 0 - type: "custom:button-card" - tempalte: "popup_weather_row" - entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + template: "popup_weather_row" + entity: "[[[ return entity.entity_id ]]]" variables: ulm_popup_weather_entity_idx: 1 - type: "custom:button-card" - tempalte: "popup_weather_row" - entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + template: "popup_weather_row" + entity: "[[[ return entity.entity_id ]]]" variables: ulm_popup_weather_entity_idx: 2 - type: "custom:button-card" - tempalte: "popup_weather_row" - entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + template: "popup_weather_row" + entity: "[[[ return entity.entity_id ]]]" variables: ulm_popup_weather_entity_idx: 3 - type: "custom:button-card" - tempalte: "popup_weather_row" - entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + template: "popup_weather_row" + entity: "[[[ return entity.entity_id ]]]" variables: ulm_popup_weather_entity_idx: 4 - type: "custom:button-card" - tempalte: "popup_weather_row" - entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + template: "popup_weather_row" + entity: "[[[ return entity.entity_id ]]]" variables: ulm_popup_weather_entity_idx: 5 buttons: @@ -150,8 +154,7 @@ popup_weather_forecast: card: type: "custom:button-card" template: "popup_weather_radar" - variables: - ulm_popup_weather_entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + entity: "[[[ return entity.entity_id ]]]" footer: card: type: "custom:button-card" diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml index 0b6512e89..701379617 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popups/popup_weather_radar.yaml @@ -47,8 +47,7 @@ popup_weather_radar: card: type: "custom:button-card" template: "popup_weather_forecast" - variables: - ulm_popup_weather_entity: "[[[ return variables.ulm_popup_weather_entity ]]]" + entity: "[[[ return entity.entity_id; ]]]" item2: card: icon: "mdi:radar" From 86325f82ff49b5cc426a51e09fba794a8dc54ff3 Mon Sep 17 00:00:00 2001 From: basbruss <68892092+basbruss@users.noreply.github.com> Date: Thu, 4 Aug 2022 08:12:30 +0200 Subject: [PATCH 65/70] Fix outdated branch --- .../cards/card_media_player.yaml | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml index 5fec6c33f..a22de666c 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/card_templates/cards/card_media_player.yaml @@ -94,16 +94,19 @@ card_media_player: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_icon_tap_action: "[[[ return variables.ulm_icon_tap_action; ]]]" - ulm_icon_tap_navigate_path: "[[[ return variables.ulm_icon_tap_navigate_path; ]]]" - ulm_icon_hold_action: "[[[ return variables.ulm_icon_hold_action; ]]]" - ulm_icon_hold_navigate_path: "[[[ return variables.ulm_icon_hold_navigate_path; ]]]" - ulm_icon_double_tap_action: "[[[ return variables.ulm_icon_double_tap_action; ]]]" - ulm_icon_double_tap_navigate_path: "[[[ return variables.ulm_icon_double_tap_navigate_path; ]]]" - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + if(variables.ulm_card_media_player_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_media_player_infos', + 'popup_variables': { + 'ulm_popup_media_player_entity': entity.entity_id, + } + }; + } + return vars; + ]]] icon: | [[[ var icon = entity.attributes.icon || "mdi:speaker"; @@ -145,16 +148,19 @@ card_media_player: card: type: "custom:button-card" entity: "[[[ return entity.entity_id ]]]" - variables: - ulm_name_tap_action: "[[[ return variables.ulm_name_tap_action; ]]]" - ulm_name_tap_navigate_path: "[[[ return variables.ulm_name_tap_navigate_path; ]]]" - ulm_name_hold_action: "[[[ return variables.ulm_name_hold_action; ]]]" - ulm_name_hold_navigate_path: "[[[ return variables.ulm_name_hold_navigate_path; ]]]" - ulm_name_double_tap_action: "[[[ return variables.ulm_name_double_tap_action; ]]]" - ulm_name_double_tap_navigate_path: "[[[ return variables.ulm_name_double_tap_navigate_path; ]]]" - ulm_input_select_option: "[[[ return variables.ulm_input_select_option; ]]]" - ulm_input_select: "[[[ return variables.ulm_input_select; ]]]" - ulm_card_media_player_enable_popup: "[[[ return variables.ulm_card_media_player_enable_popup; ]]]" + variables: > + [[[ + let vars = variables; + if(variables.ulm_card_media_player_enable_popup) { + vars.ulm_custom_popup = { + 'template': 'popup_media_player_infos', + 'popup_variables': { + 'ulm_popup_media_player_entity': entity.entity_id, + } + }; + } + return vars; + ]]] label: "[[[ return variables.ulm_translation_state ]]]" state: - operator: "template" From aecba4b450d2eb8b0694d02ab68284cabe27ad0f Mon Sep 17 00:00:00 2001 From: basbruss <68892092+basbruss@users.noreply.github.com> Date: Thu, 4 Aug 2022 13:26:44 +0200 Subject: [PATCH 66/70] Fix code quality --- docs/setup/custom_actions.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/setup/custom_actions.md b/docs/setup/custom_actions.md index 3aae9bc62..be80fc9c0 100644 --- a/docs/setup/custom_actions.md +++ b/docs/setup/custom_actions.md @@ -127,9 +127,9 @@ template that should be loaded. The necessary configuration variables for the po the variable `popup_variables`. Usually the popup uses the same entity as the card that calls the popup. It is also possible to overwrite the entity -for the popup. Therfore the entity can be set using the `entity` variable -within the `ulm_custom_popup`. This `entity` variable is optional. It is also possible to disable the entity of the -custom popup it the `entity` variable within the `ulm_custom_popup is set to `none`. +for the popup. Therefore the entity can be set using the `entity` variable +within the `ulm_custom_popup`. This `entity` variable is optional. It is also possible to disable the entity of the +custom popup it the `entity` variable within the `ulm_custom_popup is set to`none`. ```yaml - type: 'custom:button-card' @@ -279,10 +279,9 @@ custom_card: aren't used internally anymore. The are only working on their appropriate cards as configuration option for the end user of the card. So the custom_popup variable should be used instead. - ## For developers of custom popups -Custom popups must be a `custom:button-card`. It is also recommended to disable the icon, name and label within the +Custom popups must be a `custom:button-card`. It is also recommended to disable the icon, name and label within the card configuration using ```yaml @@ -291,4 +290,3 @@ show_name: false show_label: false show_units: false ``` - From 88f28409f404d49784fa12d382a21b6389e6d490 Mon Sep 17 00:00:00 2001 From: basbruss <68892092+basbruss@users.noreply.github.com> Date: Thu, 4 Aug 2022 12:28:46 +0000 Subject: [PATCH 67/70] Select working version of state-switch --- scripts/update-cards.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/update-cards.py b/scripts/update-cards.py index 8c8c6ca11..68152e7d7 100755 --- a/scripts/update-cards.py +++ b/scripts/update-cards.py @@ -15,7 +15,7 @@ ('weather-radar-card', 'https://github.com/Makin-Things/weather-radar-card/releases/download/v2.0.6/weather-radar-card.js'), # for adaptive dashboard ('lovelace-layout-card', 'https://raw.githubusercontent.com/thomasloven/lovelace-layout-card/2.4.2/layout-card.js'), - ('lovelace-state-switch', 'https://raw.githubusercontent.com/thomasloven/lovelace-state-switch/1.9.5/state-switch.js'), + ('lovelace-state-switch', 'https://raw.githubusercontent.com/thomasloven/lovelace-state-switch/1.9.3/state-switch.js'), ) for card, src in cards: From 74664b493942e8903a7b8669ce98b86857bd9dba Mon Sep 17 00:00:00 2001 From: basbruss <68892092+basbruss@users.noreply.github.com> Date: Thu, 4 Aug 2022 15:03:48 +0200 Subject: [PATCH 68/70] fix typos --- .../lovelace-layout-card.js | 228 ++++++++++++++++++ .../lovelace-state-switch.js | 139 +++++++++++ docs/setup/custom_cards.md | 2 +- docs/usage/popups/popup_weather.md | 2 +- 4 files changed, 369 insertions(+), 2 deletions(-) create mode 100644 custom_components/ui_lovelace_minimalist/cards/lovelace-layout-card/lovelace-layout-card.js create mode 100644 custom_components/ui_lovelace_minimalist/cards/lovelace-state-switch/lovelace-state-switch.js diff --git a/custom_components/ui_lovelace_minimalist/cards/lovelace-layout-card/lovelace-layout-card.js b/custom_components/ui_lovelace_minimalist/cards/lovelace-layout-card/lovelace-layout-card.js new file mode 100644 index 000000000..25422f4df --- /dev/null +++ b/custom_components/ui_lovelace_minimalist/cards/lovelace-layout-card/lovelace-layout-card.js @@ -0,0 +1,228 @@ +function t(t,e,i,o){var s,n=arguments.length,a=n<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,i):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,i,o);else for(var r=t.length-1;r>=0;r--)(s=t[r])&&(a=(n<3?s(a):n>3?s(e,i,a):s(e,i))||a);return n>3&&a&&Object.defineProperty(e,i,a),a}const e=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),o=new Map;class s{constructor(t,e){if(this._$cssResult$=!0,e!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t}get styleSheet(){let t=o.get(this.cssText);return e&&void 0===t&&(o.set(this.cssText,t=new CSSStyleSheet),t.replaceSync(this.cssText)),t}toString(){return this.cssText}}const n=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,i,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[o+1]),t[0]);return new s(o,i)},a=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return(t=>new s("string"==typeof t?t:t+"",i))(e)})(t):t;var r;const l=window.trustedTypes,d=l?l.emptyScript:"",c=window.reactiveElementPolyfillSupport,h={toAttribute(t,e){switch(e){case Boolean:t=t?d:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},u=(t,e)=>e!==t&&(e==e||t==t),p={attribute:!0,type:String,converter:h,reflect:!1,hasChanged:u};class v extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(t){var e;null!==(e=this.l)&&void 0!==e||(this.l=[]),this.l.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((e,i)=>{const o=this._$Eh(i,e);void 0!==o&&(this._$Eu.set(o,i),t.push(o))})),t}static createProperty(t,e=p){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const i="symbol"==typeof t?Symbol():"__"+t,o=this.getPropertyDescriptor(t,i,e);void 0!==o&&Object.defineProperty(this.prototype,t,o)}}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(o){const s=this[t];this[e]=o,this.requestUpdate(t,s,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||p}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Eu=new Map,this.hasOwnProperty("properties")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const i of e)this.createProperty(i,t[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(a(t))}else void 0!==t&&e.push(a(t));return e}static _$Eh(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}o(){var t;this._$Ep=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Em(),this.requestUpdate(),null===(t=this.constructor.l)||void 0===t||t.forEach((t=>t(this)))}addController(t){var e,i;(null!==(e=this._$Eg)&&void 0!==e?e:this._$Eg=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(i=t.hostConnected)||void 0===i||i.call(t))}removeController(t){var e;null===(e=this._$Eg)||void 0===e||e.splice(this._$Eg.indexOf(t)>>>0,1)}_$Em(){this.constructor.elementProperties.forEach(((t,e)=>{this.hasOwnProperty(e)&&(this._$Et.set(e,this[e]),delete this[e])}))}createRenderRoot(){var t;const i=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return((t,i)=>{e?t.adoptedStyleSheets=i.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):i.forEach((e=>{const i=document.createElement("style"),o=window.litNonce;void 0!==o&&i.setAttribute("nonce",o),i.textContent=e.cssText,t.appendChild(i)}))})(i,this.constructor.elementStyles),i}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostConnected)||void 0===e?void 0:e.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostDisconnected)||void 0===e?void 0:e.call(t)}))}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$ES(t,e,i=p){var o,s;const n=this.constructor._$Eh(t,i);if(void 0!==n&&!0===i.reflect){const a=(null!==(s=null===(o=i.converter)||void 0===o?void 0:o.toAttribute)&&void 0!==s?s:h.toAttribute)(e,i.type);this._$Ei=t,null==a?this.removeAttribute(n):this.setAttribute(n,a),this._$Ei=null}}_$AK(t,e){var i,o,s;const n=this.constructor,a=n._$Eu.get(t);if(void 0!==a&&this._$Ei!==a){const t=n.getPropertyOptions(a),r=t.converter,l=null!==(s=null!==(o=null===(i=r)||void 0===i?void 0:i.fromAttribute)&&void 0!==o?o:"function"==typeof r?r:null)&&void 0!==s?s:h.fromAttribute;this._$Ei=a,this[a]=l(e,t.type),this._$Ei=null}}requestUpdate(t,e,i){let o=!0;void 0!==t&&(((i=i||this.constructor.getPropertyOptions(t)).hasChanged||u)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),!0===i.reflect&&this._$Ei!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,i))):o=!1),!this.isUpdatePending&&o&&(this._$Ep=this._$E_())}async _$E_(){this.isUpdatePending=!0;try{await this._$Ep}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach(((t,e)=>this[e]=t)),this._$Et=void 0);let e=!1;const i=this._$AL;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostUpdate)||void 0===e?void 0:e.call(t)})),this.update(i)):this._$EU()}catch(t){throw e=!1,this._$EU(),t}e&&this._$AE(i)}willUpdate(t){}_$AE(t){var e;null===(e=this._$Eg)||void 0===e||e.forEach((t=>{var e;return null===(e=t.hostUpdated)||void 0===e?void 0:e.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ep}shouldUpdate(t){return!0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,e)=>this._$ES(e,this[e],t))),this._$EC=void 0),this._$EU()}updated(t){}firstUpdated(t){}}var g;v.finalized=!0,v.elementProperties=new Map,v.elementStyles=[],v.shadowRootOptions={mode:"open"},null==c||c({ReactiveElement:v}),(null!==(r=globalThis.reactiveElementVersions)&&void 0!==r?r:globalThis.reactiveElementVersions=[]).push("1.3.0");const _=globalThis.trustedTypes,f=_?_.createPolicy("lit-html",{createHTML:t=>t}):void 0,m=`lit$${(Math.random()+"").slice(9)}$`,y="?"+m,b=`<${y}>`,$=document,w=(t="")=>$.createComment(t),C=t=>null===t||"object"!=typeof t&&"function"!=typeof t,E=Array.isArray,A=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,x=/-->/g,S=/>/g,M=/>|[ \n \r](?:([^\s"'>=/]+)([ \n \r]*=[ \n \r]*(?:[^ \n \r"'`<>=]|("|')|))|$)/g,T=/'/g,O=/"/g,k=/^(?:script|style|textarea|title)$/i,U=(t=>(e,...i)=>({_$litType$:t,strings:e,values:i}))(1),L=Symbol.for("lit-noChange"),P=Symbol.for("lit-nothing"),R=new WeakMap,z=$.createTreeWalker($,129,null,!1),H=(t,e)=>{const i=t.length-1,o=[];let s,n=2===e?"":"",a=A;for(let e=0;e"===l[0]?(a=null!=s?s:A,d=-1):void 0===l[1]?d=-2:(d=a.lastIndex-l[2].length,r=l[1],a=void 0===l[3]?M:'"'===l[3]?O:T):a===O||a===T?a=M:a===x||a===S?a=A:(a=M,s=void 0);const h=a===M&&t[e+1].startsWith("/>")?" ":"";n+=a===A?i+b:d>=0?(o.push(r),i.slice(0,d)+"$lit$"+i.slice(d)+m+h):i+m+(-2===d?(o.push(void 0),e):h)}const r=n+(t[i]||"")+(2===e?"":"");if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return[void 0!==f?f.createHTML(r):r,o]};class j{constructor({strings:t,_$litType$:e},i){let o;this.parts=[];let s=0,n=0;const a=t.length-1,r=this.parts,[l,d]=H(t,e);if(this.el=j.createElement(l,i),z.currentNode=this.el.content,2===e){const t=this.el.content,e=t.firstChild;e.remove(),t.append(...e.childNodes)}for(;null!==(o=z.nextNode())&&r.length0){o.textContent=_?_.emptyScript:"";for(let i=0;i{var e;return E(t)||"function"==typeof(null===(e=t)||void 0===e?void 0:e[Symbol.iterator])})(t)?this.S(t):this.$(t)}A(t,e=this._$AB){return this._$AA.parentNode.insertBefore(t,e)}k(t){this._$AH!==t&&(this._$AR(),this._$AH=this.A(t))}$(t){this._$AH!==P&&C(this._$AH)?this._$AA.nextSibling.data=t:this.k($.createTextNode(t)),this._$AH=t}T(t){var e;const{values:i,_$litType$:o}=t,s="number"==typeof o?this._$AC(t):(void 0===o.el&&(o.el=j.createElement(o.h,this.options)),o);if((null===(e=this._$AH)||void 0===e?void 0:e._$AD)===s)this._$AH.m(i);else{const t=new I(s,this),e=t.p(this.options);t.m(i),this.k(e),this._$AH=t}}_$AC(t){let e=R.get(t.strings);return void 0===e&&R.set(t.strings,e=new j(t)),e}S(t){E(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,o=0;for(const s of t)o===e.length?e.push(i=new B(this.A(w()),this.A(w()),this,this.options)):i=e[o],i._$AI(s),o++;o2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=P}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,e=this,i,o){const s=this.strings;let n=!1;if(void 0===s)t=N(this,t,e,0),n=!C(t)||t!==this._$AH&&t!==L,n&&(this._$AH=t);else{const o=t;let a,r;for(t=s[0],a=0;a{var o,s;const n=null!==(o=null==i?void 0:i.renderBefore)&&void 0!==o?o:e;let a=n._$litPart$;if(void 0===a){const t=null!==(s=null==i?void 0:i.renderBefore)&&void 0!==s?s:null;n._$litPart$=a=new B(e.insertBefore(w(),t),t,void 0,null!=i?i:{})}return a._$AI(t),a})(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!1)}render(){return L}}Y.finalized=!0,Y._$litElement$=!0,null===(K=globalThis.litElementHydrateSupport)||void 0===K||K.call(globalThis,{LitElement:Y});const Z=globalThis.litElementPolyfillSupport;null==Z||Z({LitElement:Y}),(null!==(J=globalThis.litElementVersions)&&void 0!==J?J:globalThis.litElementVersions=[]).push("3.2.0");const X=(t,e)=>"method"===e.kind&&e.descriptor&&!("value"in e.descriptor)?{...e,finisher(i){i.createProperty(e.key,t)}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:e.key,initializer(){"function"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function tt(t){return(e,i)=>void 0!==i?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,i):X(t,e)}function et(t){return tt({...t,state:!0})}var it;null===(it=window.HTMLSlotElement)||void 0===it||it.prototype.assignedElements;var ot={},st={},nt={};Object.defineProperty(nt,"__esModule",{value:!0});nt.ContentRect=function(t){if("getBBox"in t){var e=t.getBBox();return Object.freeze({height:e.height,left:0,top:0,width:e.width})}var i=window.getComputedStyle(t);return Object.freeze({height:parseFloat(i.height||"0"),left:parseFloat(i.paddingLeft||"0"),top:parseFloat(i.paddingTop||"0"),width:parseFloat(i.width||"0")})},Object.defineProperty(st,"__esModule",{value:!0});var at=nt,rt=function(){function t(t){this.target=t,this.$$broadcastWidth=this.$$broadcastHeight=0}return Object.defineProperty(t.prototype,"broadcastWidth",{get:function(){return this.$$broadcastWidth},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"broadcastHeight",{get:function(){return this.$$broadcastHeight},enumerable:!0,configurable:!0}),t.prototype.isActive=function(){var t=at.ContentRect(this.target);return!!t&&(t.width!==this.broadcastWidth||t.height!==this.broadcastHeight)},t}();st.ResizeObservation=rt;var lt={};Object.defineProperty(lt,"__esModule",{value:!0});var dt=nt,ct=function(t){this.target=t,this.contentRect=dt.ContentRect(t)};lt.ResizeObserverEntry=ct,Object.defineProperty(ot,"__esModule",{value:!0});var ht=st,ut=lt,pt=[],vt=function(){function t(t){this.$$observationTargets=[],this.$$activeTargets=[],this.$$skippedTargets=[];var e=function(t){if(void 0===t)return"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.";if("function"!=typeof t)return"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function."}(t);if(e)throw TypeError(e);this.$$callback=t}return t.prototype.observe=function(t){var e,i=ft("observe",t);if(i)throw TypeError(i);mt(this.$$observationTargets,t)>=0||(this.$$observationTargets.push(new ht.ResizeObservation(t)),e=this,pt.indexOf(e)<0&&(pt.push(e),Et()))},t.prototype.unobserve=function(t){var e=ft("unobserve",t);if(e)throw TypeError(e);var i=mt(this.$$observationTargets,t);i<0||(this.$$observationTargets.splice(i,1),0===this.$$observationTargets.length&&_t(this))},t.prototype.disconnect=function(){this.$$observationTargets=[],this.$$activeTargets=[],_t(this)},t}(),gt=ot.ResizeObserver=vt;function _t(t){var e=pt.indexOf(t);e>=0&&(pt.splice(e,1),xt())}function ft(t,e){return void 0===e?"Failed to execute '"+t+"' on 'ResizeObserver': 1 argument required, but only 0 present.":e&&e.nodeType===window.Node.ELEMENT_NODE?void 0:"Failed to execute '"+t+"' on 'ResizeObserver': parameter 1 is not of type 'Element'."}function mt(t,e){for(var i=0;it?e.$$activeTargets.push(i):e.$$skippedTargets.push(i))}))}))},$t=function(){var t=1/0;return pt.forEach((function(e){if(e.$$activeTargets.length){var i=[];e.$$activeTargets.forEach((function(e){var o=new ut.ResizeObserverEntry(e.target);i.push(o),e.$$broadcastWidth=o.contentRect.width,e.$$broadcastHeight=o.contentRect.height;var s=wt(e.target);s{var e;return t.editMode=null===(e=this.lovelace)||void 0===e?void 0:e.editMode})),this._editMode=null!==(n=null===(s=this.lovelace)||void 0===s?void 0:s.editMode)&&void 0!==n&&n}}_shouldShow(t,e,i){var o,s,n,a,r,l,d,c;return"always"===(null===(o=e.view_layout)||void 0===o?void 0:o.show)||"never"!==(null===(s=e.view_layout)||void 0===s?void 0:s.show)&&(("shown"!==(null===(a=null===(n=e.view_layout)||void 0===n?void 0:n.show)||void 0===a?void 0:a.sidebar)||"auto"!==(null===(r=this.hass)||void 0===r?void 0:r.dockedSidebar)&&!this.narrow)&&!("hidden"===(null===(d=null===(l=e.view_layout)||void 0===l?void 0:l.show)||void 0===d?void 0:d.sidebar)&&"docked"===(null===(c=this.hass)||void 0===c?void 0:c.dockedSidebar)&&!this.narrow))}getCardElement(t){var e;if(!(null===(e=this.lovelace)||void 0===e?void 0:e.editMode))return t.card;const i=document.createElement("hui-card-options");return i.hass=this.hass,i.lovelace=this.lovelace,i.path=[this.index,t.index],t.card.editMode=!0,i.appendChild(t.card),!1===t.show&&(i.style.border="1px solid red"),i}_addCard(){this.dispatchEvent(new CustomEvent("ll-create-card"))}_render_fab(){var t;return!0==!(null===(t=this.lovelace)||void 0===t?void 0:t.editMode)?U``:U` + + + + `}static get _fab_styles(){return n` + ha-fab { + position: sticky; + float: right; + right: calc(16px + env(safe-area-inset-right)); + bottom: calc(16px + env(safe-area-inset-bottom)); + z-index: 1; + } + `}}t([tt()],St.prototype,"cards",void 0),t([tt()],St.prototype,"index",void 0),t([tt()],St.prototype,"narrow",void 0),t([tt()],St.prototype,"hass",void 0),t([tt()],St.prototype,"lovelace",void 0),t([tt()],St.prototype,"_editMode",void 0),t([tt()],St.prototype,"_config",void 0);class Mt extends St{constructor(){super(...arguments),this._mediaQueries=[]}async setConfig(t){var e,i,o,s;await super.setConfig(t);for(const t of this._config.cards)if("string"!=typeof(null===(e=t.view_layout)||void 0===e?void 0:e.show)&&(null===(o=null===(i=t.view_layout)||void 0===i?void 0:i.show)||void 0===o?void 0:o.mediaquery)){const e=window.matchMedia(`${t.view_layout.show.mediaquery}`);this._mediaQueries.push(e),e.addEventListener("change",(()=>this._makeLayout()))}else this._mediaQueries.push(null);this._observer&&this._observer.disconnect(),this._observer=new gt((()=>{this._updateSize()})),this._cardObserver&&this._cardObserver.disconnect(),(null===(s=t.layout)||void 0===s?void 0:s.reflow)&&(this._cardObserver=new MutationObserver((t=>{for(const e of t)"attributes"!==e.type||"style"!==e.attributeName&&"hidden"!==e.attributeName||this._makeLayout()})))}async updated(t){var e;await super.updated(t),(t.has("_columns")||t.has("cards"))&&this._makeLayout(),t.has("_editMode")&&this._makeLayout(),(t.has("narrow")||t.has("hass")&&(null===(e=t.get("hass"))||void 0===e?void 0:e.dockedSidebar)!=this.hass.dockedSidebar)&&(this._updateSize(),this._makeLayout())}async firstUpdated(){var t,e,i,o,s,n,a,r,l,d,c,h,u,p,v,g;this._updateSize();const _=(null===(t=this._config.layout)||void 0===t?void 0:t.width)||300,f=(null===(e=this._config.layout)||void 0===e?void 0:e.max_width)||((null===(i=this._config.layout)||void 0===i?void 0:i.width)?Math.ceil(1.5*(null===(o=this._config.layout)||void 0===o?void 0:o.width)):500),m=(null===(s=this._config.layout)||void 0===s?void 0:s.width)?2*this._config.layout.width:600,y=document.createElement("style");y.innerHTML=`\n :host {\n --column-max-width: ${f}px;\n --column-width: ${_}px;\n --column-widths: ${null!==(a=null===(n=this._config.layout)||void 0===n?void 0:n.column_widths)&&void 0!==a?a:"none"};\n --layout-margin: ${null!==(l=null===(r=this._config.layout)||void 0===r?void 0:r.margin)&&void 0!==l?l:"4px 4px 0px 4px"};\n --layout-padding: ${null!==(c=null===(d=this._config.layout)||void 0===d?void 0:d.padding)&&void 0!==c?c:"0px"};\n --card-margin: ${null!==(u=null===(h=this._config.layout)||void 0===h?void 0:h.card_margin)&&void 0!==u?u:"var(--masonry-view-card-margin, 4px 4px 8px)"};\n --layout-height: ${null!==(v=null===(p=this._config.layout)||void 0===p?void 0:p.height)&&void 0!==v?v:"auto"};\n --layout-overflow: ${void 0!==(null===(g=this._config.layout)||void 0===g?void 0:g.height)?"auto":"visible"};\n }\n @media (max-width: ${f}px) {\n .column:first-child > * {\n margin-left: 0;\n }\n .column:last-child > * {\n margin-right: 0;\n }\n }\n @media (max-width: ${m-1}px) {\n .column {\n --column-max-width: ${m}px;\n }\n }\n `,this.shadowRoot.appendChild(y)}connectedCallback(){super.connectedCallback(),this._updateSize()}disconnectedCallback(){super.disconnectedCallback(),this._observer.disconnect()}async _updateSize(){var t,e,i;let o=this.getBoundingClientRect().width,s=0;s=Math.floor(o/((null===(t=this._config.layout)||void 0===t?void 0:t.width)||300)),s=Math.min(s,(null===(e=this._config.layout)||void 0===e?void 0:e.max_cols)||("docked"===(null===(i=this.hass)||void 0===i?void 0:i.dockedSidebar)?3:4)),s=Math.max(s,1),s!==this._columns&&(this._columns=s)}_shouldShow(t,e,i){var o;if(!super._shouldShow(t,e,i))return!1;if(null===(o=this._config.layout)||void 0===o?void 0:o.reflow){if("none"===getComputedStyle(t).display)return!1;if(!0===t.hidden)return!1}const s=this._mediaQueries[i];return!s||!!s.matches}isBreak(t){return"layout-break"===t.localName}async _makeLayout(){this._makeColumnLayout()}async _makeColumnLayout(){var t;if(this._observer.disconnect(),this._cardObserver&&this._cardObserver.disconnect(),!this._columns)return;let e=[];for(let t=0;t{const i=this._config.cards[e];return{card:t,config:i,index:e,show:this._shouldShow(t,i,e)}}));await this._placeColumnCards(e,i.filter((t=>{var e;return(null===(e=this.lovelace)||void 0===e?void 0:e.editMode)||t.show}))),e=e.filter((t=>t.childElementCount>0)),(null===(t=this._config.layout)||void 0===t?void 0:t.rtl)&&e.reverse();const o=this.shadowRoot.querySelector("#columns");for(;o.firstChild;)o.removeChild(o.firstChild);if(this._cardObserver)for(const t of this.cards)this._cardObserver.observe(t,{attributes:!0});for(const t of e)o.appendChild(t);this.requestUpdate(),await this.updateComplete,this._observer.observe(this)}async _placeColumnCards(t,e){}render(){return U` +

+ ${this._render_fab()} + `}static get styles(){return[this._fab_styles,n` + :host { + display: block; + height: 100%; + box-sizing: border-box; + overflow-y: var(--layout-overflow); + } + + #columns { + display: grid; + grid-auto-columns: minmax( + var(--column-width), + var(--column-max-width) + ); + grid-template-columns: var(--column-widths); + justify-content: center; + justify-items: center; + margin: var(--layout-margin); + padding: var(--layout-padding); + height: var(--layout-height); + overflow-y: var(--layout-overflow); + } + .column { + grid-row: 1/2; + max-width: var(--column-max-width); + width: 100%; + } + .column > * { + display: block; + margin: var(--card-margin); + } + `]}}t([tt()],Mt.prototype,"_columns",void 0),t([tt()],Mt.prototype,"_config",void 0);customElements.define("masonry-layout",class extends Mt{async _placeColumnCards(t,e){var i;const o=(null===(i=this._config.layout)||void 0===i?void 0:i.min_height)||5;function s(){let e=0;for(let i=0;isetTimeout((()=>t(1)),500)))]):1}}});customElements.define("horizontal-layout",class extends Mt{async _placeColumnCards(t,e){var i,o;let s=0;for(const n of e){s+=1,(null===(i=n.config.view_layout)||void 0===i?void 0:i.column)&&(s=n.config.view_layout.column);const e=t[(s-1)%t.length];e.appendChild(this.getCardElement(n)),this.isBreak(n.card)&&(s=0,(null===(o=this.lovelace)||void 0===o?void 0:o.editMode)||e.removeChild(n.card))}}});customElements.define("vertical-layout",class extends Mt{async _placeColumnCards(t,e){var i;let o=1;for(const s of e){(null===(i=s.config.view_layout)||void 0===i?void 0:i.column)&&(o=s.config.view_layout.column);t[(o-1)%t.length].appendChild(this.getCardElement(s)),this.isBreak(s.card)&&(o+=1)}}});class Tt extends HTMLElement{setConfig(){this.style.display="none";const t=document.createElement("ha-card");t.innerHTML="BREAK",t.style.cssText="\n background: red;\n text-align: center;\n font-size: large;\n color: white;\n padding: 16px;\n ",this.appendChild(t)}getCardSize(){return 0}set editMode(t){this.style.display=t?"block":"none"}static getConfigElement(){return document.createElement("layout-break-editor")}static getStubConfig(){return{}}}customElements.define("layout-break",Tt),window.customCards=window.customCards||[],window.customCards.push({type:"layout-break",name:"Layout Break",preview:!1,description:"Forces a break in the layout flow. For use with layout-card or special layouts."});class Ot extends HTMLElement{setConfig(t){const e=document.createElement("div");e.innerHTML="BREAK",this.appendChild(e)}}customElements.define("layout-break-editor",Ot);customElements.define("grid-layout",class extends St{constructor(){super(...arguments),this._mediaQueries=[],this._layoutMQs=[]}async setConfig(t){var e,i,o,s,n;await super.setConfig(t);for(const t of this._config.cards)if("string"!=typeof(null===(e=t.view_layout)||void 0===e?void 0:e.show)&&(null===(o=null===(i=t.view_layout)||void 0===i?void 0:i.show)||void 0===o?void 0:o.mediaquery)){const e=window.matchMedia(`${t.view_layout.show.mediaquery}`);this._mediaQueries.push(e),e.addEventListener("change",(()=>this._placeCards()))}else this._mediaQueries.push(null);if(null===(s=this._config.layout)||void 0===s?void 0:s.mediaquery)for(const[t,e]of Object.entries(null===(n=this._config.layout)||void 0===n?void 0:n.mediaquery)){const e=window.matchMedia(t);this._layoutMQs.push(e),e.addEventListener("change",(()=>this._setGridStyles()))}this._setGridStyles()}async updated(t){await super.updated(t),(t.has("cards")||t.has("_editMode"))&&this._placeCards()}async firstUpdated(){var t,e,i,o,s,n,a;this._setGridStyles();const r=document.createElement("style");r.innerHTML=`\n :host {\n --layout-margin: ${null!==(e=null===(t=this._config.layout)||void 0===t?void 0:t.margin)&&void 0!==e?e:"4px 4px 0px 4px"};\n --layout-padding: ${null!==(o=null===(i=this._config.layout)||void 0===i?void 0:i.padding)&&void 0!==o?o:"0px"};\n --layout-height: ${null!==(n=null===(s=this._config.layout)||void 0===s?void 0:s.height)&&void 0!==n?n:"auto"};\n --layout-overflow: ${void 0!==(null===(a=this._config.layout)||void 0===a?void 0:a.height)?"auto":"visible"};\n }`,this.shadowRoot.appendChild(r)}_setGridStyles(){var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector("#root");if(!e)return;const i=t=>{for(const[i,o]of Object.entries(t))(i.startsWith("grid")||"grid"===i||"place-items"===i||"place-content"===i)&&e.style.setProperty(i,o)};e.style.cssText="",this._config.layout&&i(this._config.layout);for(const t of this._layoutMQs)if(t.matches){i(this._config.layout.mediaquery[t.media]);break}}_shouldShow(t,e,i){if(!super._shouldShow(t,e,i))return!1;const o=this._mediaQueries[i];return!o||!!o.matches}_placeCards(){var t,e;const i=this.shadowRoot.querySelector("#root");for(;i.firstChild;)i.removeChild(i.firstChild);let o=this.cards.map(((t,e)=>{const i=this._config.cards[e];return{card:t,config:i,index:e,show:this._shouldShow(t,i,e)}}));for(const s of o.filter((t=>{var e;return(null===(e=this.lovelace)||void 0===e?void 0:e.editMode)||t.show}))){const o=this.getCardElement(s);for(const[i,n]of Object.entries(null!==(e=null===(t=s.config)||void 0===t?void 0:t.view_layout)&&void 0!==e?e:{}))(i.startsWith("grid")||"place-self"===i)&&o.style.setProperty(i,n);i.appendChild(o)}}render(){return U`
+ ${this._render_fab()}`}static get styles(){return[this._fab_styles,n` + :host { + height: 100%; + box-sizing: border-box; + } + #root { + display: grid; + justify-content: stretch; + margin: var(--layout-margin); + padding: var(--layout-padding); + height: var(--layout-height); + overflow-y: var(--layout-overflow); + } + #root > * { + margin: var(--masonry-view-card-margin, 4px 4px 8px); + } + `]}});class kt extends Y{constructor(){super(...arguments),this.editMode=!1,this.isPanel=!1,this._cards=[]}setConfig(t){this._config=Object.assign({},t),this._config.entities&&(this._config.cards=this._config.entities.map((t=>t.type?t:Object.assign(Object.assign({},t),{type:"entity"}))));let e=t.layout_type;e?((null==e?void 0:e.endsWith("-layout"))||(e+="-layout"),e.startsWith("custom:")&&(e=e.substring("custom:".length))):e="hui-masonry-view",this._layoutType=e}async updated(t){var e;if(super.updated(t),t.has("_layoutType")||t.has("_config")){const t={type:this._layoutType,layout:this._config.layout||this._config.layout_options,cards:this._config.cards},i=document.createElement(this._layoutType);null===(e=i.setConfig)||void 0===e||e.call(i,t),this._layoutElement=i,await this._createCards(),this._layoutElement.hass=this.hass,this._layoutElement.narrow=!1,this._layoutElement.lovelace=Object.assign(Object.assign({},this._getLovelace()),{editMode:!1}),this._layoutElement.index=1}t.has("hass")&&(this._cards.forEach((t=>{t.hass=this.hass})),this._layoutElement&&(this._layoutElement.hass=this.hass)),t.has("_cards")&&this._layoutElement&&(this._layoutElement.cards=this._cards),t.has("editMode")&&this._layoutElement&&(this._layoutElement.lovelace=Object.assign(Object.assign({},this._getLovelace()),{editMode:!1}))}_getLovelace(t=this){return t.lovelace?t.lovelace:"home-assistant"!==t.localName?t.parentElement&&t.parentElement.host?this._getLovelace(t.parentElement.host):t.parentNode&&t.parentNode.host?this._getLovelace(t.parentNode.host):t.parentElement?this._getLovelace(t.parentElement):t.parentNode?this._getLovelace(t.parentNode):void 0:void 0}_createCard(t,e){const i=e.createCardElement(t);return i.addEventListener("ll-rebuild",(e=>{e.stopPropagation(),this._rebuildCard(i,t)})),i.hass=this.hass,i}async _createCards(){const t=await window.loadCardHelpers();this._cards=this._config.cards.map((e=>this._createCard(e,t)))}async _rebuildCard(t,e){const i=await window.loadCardHelpers(),o=this._createCard(e,i);t.parentElement&&t.parentElement.replaceChild(o,t),this._cards=this._cards.map((e=>e===t?o:e))}render(){return U`${this._layoutElement}`}static get styles(){return n` + :host(:not(:first-child)) { + margin-top: 0 !important; + } + :host(:not(:last-child)) { + margin-bottom: 0 !important; + } + `}static getConfigElement(){return document.createElement("layout-card-editor")}static getStubConfig(){return{layout_type:"masonry",layout:{},cards:[]}}}t([tt()],kt.prototype,"hass",void 0),t([tt()],kt.prototype,"editMode",void 0),t([tt()],kt.prototype,"isPanel",void 0),t([tt()],kt.prototype,"_config",void 0),t([tt()],kt.prototype,"_cards",void 0),t([tt()],kt.prototype,"_layoutElement",void 0),t([tt()],kt.prototype,"_layoutType",void 0),customElements.define("layout-card",kt),window.customCards=window.customCards||[],window.customCards.push({type:"layout-card",name:"Layout Card",preview:!1,description:"Like a stack card, but with way more control."});const Ut=[{value:"custom:masonry-layout",label:"Masonry (layout-card)"},{value:"custom:horizontal-layout",label:"Horizontal (layout-card)"},{value:"custom:vertical-layout",label:"Vertical (layout-card)"},{value:"custom:grid-layout",label:"Grid (layout-card)"}],Lt=["masonry","sidebar","panel"];class Pt extends Y{constructor(){super(...arguments),this._selectedTab=0,this._selectedCard=0,this._cardGUIMode=!0,this._cardGUIModeAvailable=!0,this._schema=t=>[{name:"layout_type",selector:{select:{options:[...Lt.map((e=>({value:e,label:t(`ui.panel.lovelace.editor.edit_view.types.${e}`)}))),...Ut]}}},{name:"layout",selector:{object:{}}}]}setConfig(t){this._config=t}firstUpdated(){(async()=>{var t,e;if(customElements.get("ha-form"))return;const i=await(null===(e=(t=window).loadCardHelpers)||void 0===e?void 0:e.call(t));if(!i)return;const o=await i.createCardElement({type:"entity"});o&&await o.getConfigElement()})()}_handleSwitchTab(t){this._selectedTab=parseInt(t.detail.index,10)}_editCard(t){t.stopPropagation(),"add-card"!==t.target.id?(this._cardGUIMode=!0,this._cardEditorEl&&(this._cardEditorEl.GUImode=!0),this._cardGUIModeAvailable=!0,this._selectedCard=parseInt(t.detail.selected,10)):this._selectedCard=this._config.cards.length}_addCard(t){t.stopPropagation();const e=[...this._config.cards];e.push(t.detail.config),this._config=Object.assign(Object.assign({},this._config),{cards:e}),this._selectedCard=this._config.cards.length-1,this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_updateCard(t){t.stopPropagation();const e=[...this._config.cards];e[this._selectedCard]=t.detail.config,this._config=Object.assign(Object.assign({},this._config),{cards:e}),this._cardGUIModeAvailable=t.detail.guiModeAvailable,this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_GUIModeChange(t){t.stopPropagation(),this._cardGUIMode=t.detail.guiMode,this._cardGUIModeAvailable=t.detail.guiModeAvailable}_toggleMode(t){this._cardEditorEl.toggleMode()}_moveCard(t){const e=this._selectedCard,i=e+t.currentTarget.move,o=[...this._config.cards],s=o.splice(e,1)[0];o.splice(i,0,s),this._config=Object.assign(Object.assign({},this._config),{cards:o}),this._selectedCard=i,this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_deleteCard(){const t=[...this._config.cards];t.splice(this._selectedCard,1),this._config=Object.assign(Object.assign({},this._config),{cards:t}),this._selectedCard=Math.max(0,this._selectedCard-1),this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:this._config}}))}_valueChanged(t){t.stopPropagation();const e=t.detail.value;this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:e}}))}_computeLabel(t){return"layout_type"===t.name?this.hass.localize("ui.panel.lovelace.editor.edit_view.type"):"layout"===t.name?"Layout options (layout-card)":void 0}render(){return this.hass&&this._config?U` +
+
+ + + + +
+
+ ${[this._renderLayoutEditor,this._renderCardsEditor][this._selectedTab].bind(this)()} +
+
+ `:U``}_renderLayoutEditor(){const t=this._schema(this.hass.localize),e=Object.assign({},this._config);return U` +

+ See + + layout-card on github + + for usage instructions. +

+ + `}_renderCardsEditor(){const t=this._selectedCard,e=this._config.cards.length;return this._config.entities?U` + This layout-card has the entities parameter set. You cannot + manually select cards. + `:U` +
+
+ + ${this._config.cards.map(((t,e)=>U` ${e+1} `))} + + + + + + +
+
+ ${t + + ${this.hass.localize(this._cardEditorEl||this._cardGUIMode?"ui.panel.lovelace.editor.edit_card.show_code_editor":"ui.panel.lovelace.editor.edit_card.show_visual_editor")} + + + + + + + + + + +
+ + `:U` + + `} +
+ + `}static get styles(){return[n` + mwc-tab-bar { + border-bottom: 1px solid var(--divider-color); + } + + .layout, + .cards #editor { + margin-top: 8px; + border: 1px solid var(--divider-color); + padding: 12px; + } + + .cards .toolbar { + display: flex; + --paper-tabs-selection-bar-color: var(--primary-color); + --paper-tab-ink: var(--primary-color); + } + paper-tabs { + display: flex; + font-size: 14px; + flex-grow: 1; + } + #add-card { + max-width: 32px; + padding: 0; + } + + .cards .card-options { + display: flex; + justify-content: flex-end; + width: 100%; + } + #editor { + border: 1px solid var(--divider-color); + padding: 12px; + } + .gui-mode-button { + margin-right: auto; + } + + a { + color: var(--primary-color); + } + `]}}t([tt()],Pt.prototype,"_config",void 0),t([tt()],Pt.prototype,"lovelace",void 0),t([tt()],Pt.prototype,"hass",void 0),t([et()],Pt.prototype,"_selectedTab",void 0),t([et()],Pt.prototype,"_selectedCard",void 0),t([et()],Pt.prototype,"_cardGUIMode",void 0),t([et()],Pt.prototype,"_cardGUIModeAvailable",void 0),t([function(t,e){return(({finisher:t,descriptor:e})=>(i,o)=>{var s;if(void 0===o){const o=null!==(s=i.originalKey)&&void 0!==s?s:i.key,n=null!=e?{kind:"method",placement:"prototype",key:o,descriptor:e(i.key)}:{...i,key:o};return null!=t&&(n.finisher=function(e){t(e,o)}),n}{const s=i.constructor;void 0!==e&&Object.defineProperty(i,o,e(o)),null==t||t(s,o)}})({descriptor:i=>{const o={get(){var e,i;return null!==(i=null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(t))&&void 0!==i?i:null},enumerable:!0,configurable:!0};if(e){const e="symbol"==typeof i?Symbol():"__"+i;o.get=function(){var i,o;return void 0===this[e]&&(this[e]=null!==(o=null===(i=this.renderRoot)||void 0===i?void 0:i.querySelector(t))&&void 0!==o?o:null),this[e]}}return o}})}("hui-card-element-editor")],Pt.prototype,"_cardEditorEl",void 0),customElements.define("layout-card-editor",Pt),customElements.whenDefined("hui-card-element-editor").then((()=>{const t=customElements.get("hui-card-element-editor"),e=t.prototype.getConfigElement;t.prototype.getConfigElement=async function(){const t=await e.bind(this)();if(t){const e=t.setConfig;t.setConfig=function(t){let i=JSON.parse(JSON.stringify(t));this._layoutData=i.view_layout,delete i.view_layout,e.bind(this)(i)}}return t};const i=t.prototype._handleUIConfigChanged;t.prototype._handleUIConfigChanged=function(t){this._configElement&&this._configElement._layoutData&&(t.detail.config.view_layout=this._configElement._layoutData),i.bind(this)(t)}})),customElements.whenDefined("hui-view-editor").then((()=>{const t=customElements.get("hui-view-editor"),e=t.prototype.firstUpdated;t.prototype.firstUpdated=function(){null==e||e.bind(this)(),this._oldSchema=this._schema,this._schema=t=>{const e=this._oldSchema(t),i=e[e.length-1];return"layout"===i.name||(i.selector.select.options.push(...Ut),e.push({name:"layout",selector:{object:{}}})),e};const t=document.createElement("p");t.innerHTML='\n You have layout-card installed which adds some options to this dialog.
\n Please see\n \n layout-card on github\n \n for usage instructions.\n \n ',this.shadowRoot.appendChild(t),this.requestUpdate()}}));class Rt extends HTMLElement{setConfig(t){var e,i;this.height=null!==(e=t.height)&&void 0!==e?e:50,this.size=null!==(i=t.size)&&void 0!==i?i:Math.ceil(this.height/50),this.style.cssText=`\n display: block;\n height: ${this.height}px;\n `}getCardSize(){return this.size}static getConfigElement(){return document.createElement("gap-card-editor")}static getStubConfig(){return{}}}customElements.define("gap-card",Rt),window.customCards=window.customCards||[],window.customCards.push({type:"gap-card",name:"Gap Card",preview:!1,description:"Add a customizable gap in the layout."});class zt extends Y{setConfig(t){this._config=t}heightChanged(t){const e=Object.assign({},this._config);delete e.height,t.detail.value&&(e.height=parseInt(t.detail.value)),this._config=e,this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:e}}))}sizeChanged(t){const e=Object.assign({},this._config);delete e.size,t.detail.value&&(e.size=parseInt(t.detail.value)),this._config=e,this.dispatchEvent(new CustomEvent("config-changed",{detail:{config:e}}))}render(){return U` + + + `}}t([tt()],zt.prototype,"_config",void 0),customElements.define("gap-card-editor",zt);var Ht="2.4.2";console.groupCollapsed(`%cLAYOUT-CARD ${Ht} IS INSTALLED`,"color: green; font-weight: bold"),console.log("Readme:","https://github.com/thomasloven/lovelace-layout-card"),console.groupEnd(); diff --git a/custom_components/ui_lovelace_minimalist/cards/lovelace-state-switch/lovelace-state-switch.js b/custom_components/ui_lovelace_minimalist/cards/lovelace-state-switch/lovelace-state-switch.js new file mode 100644 index 000000000..363339aff --- /dev/null +++ b/custom_components/ui_lovelace_minimalist/cards/lovelace-state-switch/lovelace-state-switch.js @@ -0,0 +1,139 @@ +function t(t,e,i,s){var o,n=arguments.length,r=n<3?e:null===s?s=Object.getOwnPropertyDescriptor(e,i):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(t,e,i,s);else for(var a=t.length-1;a>=0;a--)(o=t[a])&&(r=(n<3?o(r):n>3?o(e,i,r):o(e,i))||r);return n>3&&r&&Object.defineProperty(e,i,r),r}const e=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),s=new Map;class o{constructor(t,e){if(this._$cssResult$=!0,e!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t}get styleSheet(){let t=s.get(this.cssText);return e&&void 0===t&&(s.set(this.cssText,t=new CSSStyleSheet),t.replaceSync(this.cssText)),t}toString(){return this.cssText}}const n=(t,...e)=>{const s=1===t.length?t[0]:e.reduce(((e,i,s)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+t[s+1]),t[0]);return new o(s,i)},r=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const i of t.cssRules)e+=i.cssText;return(t=>new o("string"==typeof t?t:t+"",i))(e)})(t):t;var a;const l=window.trustedTypes,h=l?l.emptyScript:"",d=window.reactiveElementPolyfillSupport,c={toAttribute(t,e){switch(e){case Boolean:t=t?h:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},u=(t,e)=>e!==t&&(e==e||t==t),p={attribute:!0,type:String,converter:c,reflect:!1,hasChanged:u};class v extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(t){var e;null!==(e=this.l)&&void 0!==e||(this.l=[]),this.l.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((e,i)=>{const s=this._$Eh(i,e);void 0!==s&&(this._$Eu.set(s,i),t.push(s))})),t}static createProperty(t,e=p){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const i="symbol"==typeof t?Symbol():"__"+t,s=this.getPropertyDescriptor(t,i,e);void 0!==s&&Object.defineProperty(this.prototype,t,s)}}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(s){const o=this[t];this[e]=s,this.requestUpdate(t,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||p}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Eu=new Map,this.hasOwnProperty("properties")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const i of e)this.createProperty(i,t[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(r(t))}else void 0!==t&&e.push(r(t));return e}static _$Eh(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}o(){var t;this._$Ep=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Em(),this.requestUpdate(),null===(t=this.constructor.l)||void 0===t||t.forEach((t=>t(this)))}addController(t){var e,i;(null!==(e=this._$Eg)&&void 0!==e?e:this._$Eg=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(i=t.hostConnected)||void 0===i||i.call(t))}removeController(t){var e;null===(e=this._$Eg)||void 0===e||e.splice(this._$Eg.indexOf(t)>>>0,1)}_$Em(){this.constructor.elementProperties.forEach(((t,e)=>{this.hasOwnProperty(e)&&(this._$Et.set(e,this[e]),delete this[e])}))}createRenderRoot(){var t;const i=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return((t,i)=>{e?t.adoptedStyleSheets=i.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):i.forEach((e=>{const i=document.createElement("style"),s=window.litNonce;void 0!==s&&i.setAttribute("nonce",s),i.textContent=e.cssText,t.appendChild(i)}))})(i,this.constructor.elementStyles),i}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostConnected)||void 0===e?void 0:e.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostDisconnected)||void 0===e?void 0:e.call(t)}))}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$ES(t,e,i=p){var s,o;const n=this.constructor._$Eh(t,i);if(void 0!==n&&!0===i.reflect){const r=(null!==(o=null===(s=i.converter)||void 0===s?void 0:s.toAttribute)&&void 0!==o?o:c.toAttribute)(e,i.type);this._$Ei=t,null==r?this.removeAttribute(n):this.setAttribute(n,r),this._$Ei=null}}_$AK(t,e){var i,s,o;const n=this.constructor,r=n._$Eu.get(t);if(void 0!==r&&this._$Ei!==r){const t=n.getPropertyOptions(r),a=t.converter,l=null!==(o=null!==(s=null===(i=a)||void 0===i?void 0:i.fromAttribute)&&void 0!==s?s:"function"==typeof a?a:null)&&void 0!==o?o:c.fromAttribute;this._$Ei=r,this[r]=l(e,t.type),this._$Ei=null}}requestUpdate(t,e,i){let s=!0;void 0!==t&&(((i=i||this.constructor.getPropertyOptions(t)).hasChanged||u)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),!0===i.reflect&&this._$Ei!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,i))):s=!1),!this.isUpdatePending&&s&&(this._$Ep=this._$E_())}async _$E_(){this.isUpdatePending=!0;try{await this._$Ep}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach(((t,e)=>this[e]=t)),this._$Et=void 0);let e=!1;const i=this._$AL;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostUpdate)||void 0===e?void 0:e.call(t)})),this.update(i)):this._$EU()}catch(t){throw e=!1,this._$EU(),t}e&&this._$AE(i)}willUpdate(t){}_$AE(t){var e;null===(e=this._$Eg)||void 0===e||e.forEach((t=>{var e;return null===(e=t.hostUpdated)||void 0===e?void 0:e.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ep}shouldUpdate(t){return!0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,e)=>this._$ES(e,this[e],t))),this._$EC=void 0),this._$EU()}updated(t){}firstUpdated(t){}}var f;v.finalized=!0,v.elementProperties=new Map,v.elementStyles=[],v.shadowRootOptions={mode:"open"},null==d||d({ReactiveElement:v}),(null!==(a=globalThis.reactiveElementVersions)&&void 0!==a?a:globalThis.reactiveElementVersions=[]).push("1.3.0");const _=globalThis.trustedTypes,m=_?_.createPolicy("lit-html",{createHTML:t=>t}):void 0,g=`lit$${(Math.random()+"").slice(9)}$`,$="?"+g,y=`<${$}>`,b=document,A=(t="")=>b.createComment(t),w=t=>null===t||"object"!=typeof t&&"function"!=typeof t,S=Array.isArray,E=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,C=/-->/g,x=/>/g,P=/>|[ \n \r](?:([^\s"'>=/]+)([ \n \r]*=[ \n \r]*(?:[^ \n \r"'`<>=]|("|')|))|$)/g,k=/'/g,U=/"/g,T=/^(?:script|style|textarea|title)$/i,H=(t=>(e,...i)=>({_$litType$:t,strings:e,values:i}))(1),M=Symbol.for("lit-noChange"),R=Symbol.for("lit-nothing"),O=new WeakMap,N=b.createTreeWalker(b,129,null,!1),L=(t,e)=>{const i=t.length-1,s=[];let o,n=2===e?"":"",r=E;for(let e=0;e"===l[0]?(r=null!=o?o:E,h=-1):void 0===l[1]?h=-2:(h=r.lastIndex-l[2].length,a=l[1],r=void 0===l[3]?P:'"'===l[3]?U:k):r===U||r===k?r=P:r===C||r===x?r=E:(r=P,o=void 0);const c=r===P&&t[e+1].startsWith("/>")?" ":"";n+=r===E?i+y:h>=0?(s.push(a),i.slice(0,h)+"$lit$"+i.slice(h)+g+c):i+g+(-2===h?(s.push(void 0),e):c)}const a=n+(t[i]||"")+(2===e?"":"");if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return[void 0!==m?m.createHTML(a):a,s]};class I{constructor({strings:t,_$litType$:e},i){let s;this.parts=[];let o=0,n=0;const r=t.length-1,a=this.parts,[l,h]=L(t,e);if(this.el=I.createElement(l,i),N.currentNode=this.el.content,2===e){const t=this.el.content,e=t.firstChild;e.remove(),t.append(...e.childNodes)}for(;null!==(s=N.nextNode())&&a.length0){s.textContent=_?_.emptyScript:"";for(let i=0;i{var e;return S(t)||"function"==typeof(null===(e=t)||void 0===e?void 0:e[Symbol.iterator])})(t)?this.S(t):this.$(t)}A(t,e=this._$AB){return this._$AA.parentNode.insertBefore(t,e)}k(t){this._$AH!==t&&(this._$AR(),this._$AH=this.A(t))}$(t){this._$AH!==R&&w(this._$AH)?this._$AA.nextSibling.data=t:this.k(b.createTextNode(t)),this._$AH=t}T(t){var e;const{values:i,_$litType$:s}=t,o="number"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=I.createElement(s.h,this.options)),s);if((null===(e=this._$AH)||void 0===e?void 0:e._$AD)===o)this._$AH.m(i);else{const t=new D(o,this),e=t.p(this.options);t.m(i),this.k(e),this._$AH=t}}_$AC(t){let e=O.get(t.strings);return void 0===e&&O.set(t.strings,e=new I(t)),e}S(t){S(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,s=0;for(const o of t)s===e.length?e.push(i=new j(this.A(A()),this.A(A()),this,this.options)):i=e[s],i._$AI(o),s++;s2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=R}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,e=this,i,s){const o=this.strings;let n=!1;if(void 0===o)t=z(this,t,e,0),n=!w(t)||t!==this._$AH&&t!==M,n&&(this._$AH=t);else{const s=t;let r,a;for(t=o[0],r=0;r{var s,o;const n=null!==(s=null==i?void 0:i.renderBefore)&&void 0!==s?s:e;let r=n._$litPart$;if(void 0===r){const t=null!==(o=null==i?void 0:i.renderBefore)&&void 0!==o?o:null;n._$litPart$=r=new j(e.insertBefore(A(),t),t,void 0,null!=i?i:{})}return r._$AI(t),r})(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!1)}render(){return M}}Q.finalized=!0,Q._$litElement$=!0,null===(F=globalThis.litElementHydrateSupport)||void 0===F||F.call(globalThis,{LitElement:Q});const X=globalThis.litElementPolyfillSupport;null==X||X({LitElement:Q}),(null!==(G=globalThis.litElementVersions)&&void 0!==G?G:globalThis.litElementVersions=[]).push("3.2.0");const Y=(t,e)=>"method"===e.kind&&e.descriptor&&!("value"in e.descriptor)?{...e,finisher(i){i.createProperty(e.key,t)}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:e.key,initializer(){"function"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function tt(t){return(e,i)=>void 0!==i?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,i):Y(t,e)}var et;null===(et=window.HTMLSlotElement)||void 0===et||et.prototype.assignedElements;const it="lovelace-player-device-id";function st(){if(!localStorage[it]){const t=()=>Math.floor(1e5*(1+Math.random())).toString(16).substring(1);window.fully&&"function"==typeof fully.getDeviceId?localStorage[it]=fully.getDeviceId():localStorage[it]=`${t()}${t()}-${t()}${t()}`}return localStorage[it]}let ot=st();const nt=new URLSearchParams(window.location.search);var rt;function at(){return document.querySelector("hc-main")?document.querySelector("hc-main").hass:document.querySelector("home-assistant")?document.querySelector("home-assistant").hass:void 0}function lt(t){return!!String(t).includes("{%")||(!!String(t).includes("{{")||void 0)}nt.get("deviceID")&&null!==(rt=nt.get("deviceID"))&&("clear"===rt?localStorage.removeItem(it):localStorage[it]=rt,ot=st()),window.cardMod_template_cache=window.cardMod_template_cache||{};const ht=window.cardMod_template_cache;async function dt(t,e,i){const s=at().connection,o=JSON.stringify([e,i]);let n=ht[o];n?(n.callbacks.has(t)||ct(t),t(n.value),n.callbacks.add(t)):(ct(t),t(""),i=Object.assign({user:at().user.name,browser:ot,hash:location.hash.substr(1)||""},i),ht[o]=n={template:e,variables:i,value:"",callbacks:new Set([t]),unsubscribe:s.subscribeMessage((t=>function(t,e){const i=ht[t];i&&(i.value=e.result,i.callbacks.forEach((t=>t(e.result))))}(o,t)),{type:"render_template",template:e,variables:i})})}async function ct(t){let e;for(const[i,s]of Object.entries(ht))if(s.callbacks.has(t)){s.callbacks.delete(t),0==s.callbacks.size&&(e=s.unsubscribe,delete ht[i]);break}e&&await(await e)()}var ut="1.9.3";class pt extends Q{constructor(){super(...arguments),this.cardsInitialized=!1,this.templateRenderer=t=>{this._tmpl=t}}async setConfig(t){if(window.deviceID=ot,this._config=t,this.state=void 0,this.classList.add("no-match"),this.cards={},this.buildCards(),"hash"===t.entity&&(window.addEventListener("location-changed",(()=>this.updated(new Map))),window.addEventListener("hashchange",(()=>this.updated(new Map)))),"mediaquery"===t.entity)for(const e in t.states){window.matchMedia(e).addEventListener("change",(()=>this.update_state()))}if("template"===t.entity||lt(t.entity)){const e=lt(t.entity)?t.entity:t.template;dt(this.templateRenderer,e,{config:t})}this.style.setProperty("display","none")}connectedCallback(){if(super.connectedCallback(),this._config){for(const t in this.cards)this.cards[t].hass=this._hass;("template"===this._config.entity||lt(this._config.entity))&&dt(this.templateRenderer,lt(this._config.entity)?this._config.entity:this._config.template,{config:this._config})}}disconnectedCallback(){super.disconnectedCallback(),ct(this.templateRenderer)}async buildCards(){const t=await window.loadCardHelpers();for(let e in this._config.states)this.cards[e]=await t.createCardElement(this._config.states[e]),this.cards[e].hass=this._hass;this.cardsInitialized=!0,this.update_state(),this._updateVisibility()}update_state(){var t,e,i,s,o,n;if(!this.cardsInitialized)return;let r;switch(this._config.entity){case"template":r=this._tmpl;break;case"user":r=null===(e=null===(t=this._hass)||void 0===t?void 0:t.user)||void 0===e?void 0:e.name;break;case"group":r=(null===(s=null===(i=this._hass)||void 0===i?void 0:i.user)||void 0===s?void 0:s.is_admin)?"admin":"user";break;case"deviceID":case"browser":r=ot;break;case"hash":r=location.hash.substring(1);break;case"mediaquery":for(const t in this.cards)if(window.matchMedia(t).matches){r=t;break}break;default:r=lt(this._config.entity)?this._tmpl:null===(n=null===(o=this._hass)||void 0===o?void 0:o.states[this._config.entity])||void 0===n?void 0:n.state}void 0!==r&&this.cards.hasOwnProperty(r)||(r=this._config.default),this.state=r}set hass(t){this._hass=t;for(const e in this.cards)this.cards[e].hass=t}_updateVisibility(){this.cards[this.state]?(this.classList.remove("no-match"),this.style.setProperty("display",""),this.removeAttribute("hidden")):(this.classList.add("no-match"),this.style.setProperty("display","none"),this.setAttribute("hidden",""))}updated(t){if(t.has("state")){const e=t.get("state");this.cards[e]&&(this.cards[e].classList.remove("visible"),this._config.transition&&(this.shadowRoot.querySelector("#root").classList.add("transition"),this.cards[e].classList.add("out"),window.setTimeout((()=>{this.cards[e].classList.remove("out"),window.setTimeout((()=>{this.shadowRoot.querySelector("#root").classList.remove("transition")}),this._config.transition_time||500)}),this._config.transition_time||500))),this.cards[this.state]&&this.cards[this.state].classList.add("visible"),this._updateVisibility()}else this.update_state()}render(){return H` +
+ ${Object.keys(this.cards).map((t=>H` ${this.cards[t]} `))} +
+ `}async getCardSize(){var t;let e=1;for(const i in this.cards)(null===(t=this.cards[i])||void 0===t?void 0:t.getCardSize)&&(e=Math.max(e,await this.cards[i].getCardSize()));return e}static get styles(){return n` + :host { + perspective: 1000px; + } + :host(.no-match) { + display: none; + } + #root { + margin: -4px; + padding: 4px; + display: grid; + grid-template-rows: auto 0px; + overflow: clip visible; + } + #root.transition { + overflow: hidden; + } + #root * { + grid-column: 1; + grid-row: 2; + overflow: hidden; + min-width: 0; + } + #root *.visible, + #root *.out { + grid-row: 1; + overflow: visible; + } + + #root.slide-down *, + #root.slide-up *, + #root.slide-left *, + #root.slide-right * { + transition-property: transform; + transition-timing-function: linear; + transition-duration: inherit; + transform: translate(0, -110%); + } + #root.slide-up * { + transform: translate(0, 110%); + } + #root.slide-left * { + transform: translate(110%, 0); + } + #root.slide-right * { + transform: translate(-110%, 0); + } + #root.slide-down .visible, + #root.slide-up .visible, + #root.slide-left .visible, + #root.slide-right .visible { + transform: translate(0%); + } + #root.slide-down .out { + transform: translate(0, 110%); + } + #root.slide-up .out { + transform: translate(0, -110%); + } + #root.slide-left .out { + transform: translate(-110%); + } + #root.slide-right .out { + transform: translate(110%); + } + + #root.swap-down *, + #root.swap-up *, + #root.swap-left *, + #root.swap-right * { + transition-property: transform; + transition-timing-function: linear; + transition-duration: inherit; + transform: translate(0, 110%); + } + #root.swap-up * { + transform: translate(0, -110%); + } + #root.swap-left * { + transform: translate(-110%, 0); + } + #root.swap-right * { + transform: translate(110%, 0); + } + #root.swap-down .visible, + #root.swap-up .visible, + #root.swap-left .visible, + #root.swap-right .visible { + transition-delay: inherit; + transform: translate(0%); + } + + #root.flip, + #root.flip-x, + #root.flip-y { + position: relative; + perspective: 1000px; + } + #root.flip *, + #root.flip-x *, + #root.flip-y * { + transform: rotate3d(0, 1, 0, -180deg); + transition-property: transform; + transition-timing-function: linear; + transition-duration: inherit; + transform-style: preserve-3d; + backface-visibility: hidden; + z-index: 100; + } + #root.flip-y * { + transform: rotate3d(1, 0, 0, -180deg); + } + #root.flip .visible, + #root.flip-x .visible, + #root.flip-y .visible { + backface-visibility: hidden; + transform: rotate3d(0, 0, 0, 0deg); + } + #root.flip .out, + #root.flip-x .out, + #root.flip-y .out { + pointer-events: none; + transform: rotate3d(0, 1, 0, 180deg); + } + #root.flip-y .out { + transform: rotate3d(1, 0, 0, 180deg); + } + `}}t([tt()],pt.prototype,"_config",void 0),t([tt()],pt.prototype,"_hass",void 0),t([tt()],pt.prototype,"state",void 0),t([tt()],pt.prototype,"_tmpl",void 0),customElements.get("state-switch")||(customElements.define("state-switch",pt),console.info(`%cSTATE-SWITCH ${ut} IS INSTALLED`,"color: green; font-weight: bold","")); diff --git a/docs/setup/custom_cards.md b/docs/setup/custom_cards.md index aee49da71..ce397607d 100644 --- a/docs/setup/custom_cards.md +++ b/docs/setup/custom_cards.md @@ -10,7 +10,7 @@ This 'theme' and his community do offer support for multiple great Custom-cards. !!! tip " 🚀 New Custom Card Selection Feature! 🚀" - Since the release of `v1.0.4` support has been build in to select custom/community cards that are available in the `main` branch on our Github Repository in the `custom_cards` folder. This Removes the need for copying over files from the Github Repo and put them in the `/config/ui_lovelace_minimlist/custom_cards` folder. + Since the release of `v1.1.0` support has been build in to select custom/community cards that are available in the `main` branch on our Github Repository in the `custom_cards` folder. This Removes the need for copying over files from the Github Repo and put them in the `/config/ui_lovelace_minimlist/custom_cards` folder. ### Custom Cards diff --git a/docs/usage/popups/popup_weather.md b/docs/usage/popups/popup_weather.md index d289be81c..3538ab27d 100644 --- a/docs/usage/popups/popup_weather.md +++ b/docs/usage/popups/popup_weather.md @@ -16,7 +16,7 @@ hide: ##### How to use -To enable this popup, add the followgin code to your card : +To enable this popup, add the following code to your card: ```yaml ulm_custom_popup: From cd6be2f3aa502ff71cf0b961b85a2941f2d9e6b4 Mon Sep 17 00:00:00 2001 From: desty2k <55806660+desty2k@users.noreply.github.com> Date: Thu, 4 Aug 2022 19:40:51 +0200 Subject: [PATCH 69/70] Add translations --- .../languages/pl.yaml | 6 ++++ .../languages/pl.yaml | 6 ++++ .../languages/pl.yaml | 4 +++ .../custom_card_wsly_pollen/languages/pl.yaml | 13 ++++++++ .../translations/en.json | 6 ++-- .../translations/pl.json | 30 +++++++++---------- 6 files changed, 47 insertions(+), 18 deletions(-) create mode 100644 custom_cards/custom_card_httpedo13_thermostat/languages/pl.yaml create mode 100644 custom_cards/custom_card_irmajavi_speedtest/languages/pl.yaml create mode 100644 custom_cards/custom_card_ristou_person/languages/pl.yaml create mode 100644 custom_cards/custom_card_wsly_pollen/languages/pl.yaml diff --git a/custom_cards/custom_card_httpedo13_thermostat/languages/pl.yaml b/custom_cards/custom_card_httpedo13_thermostat/languages/pl.yaml new file mode 100644 index 000000000..c9522f8ea --- /dev/null +++ b/custom_cards/custom_card_httpedo13_thermostat/languages/pl.yaml @@ -0,0 +1,6 @@ +--- +custom_card_httpedo13_thermostat_language_variables: + variables: + custom_card_httpedo13_thermostat_off: "wyłączony" + custom_card_httpedo13_thermostat_on: "włączony" + custom_card_httpedo13_thermostat_heating: "grzanie" diff --git a/custom_cards/custom_card_irmajavi_speedtest/languages/pl.yaml b/custom_cards/custom_card_irmajavi_speedtest/languages/pl.yaml new file mode 100644 index 000000000..cf56d47a2 --- /dev/null +++ b/custom_cards/custom_card_irmajavi_speedtest/languages/pl.yaml @@ -0,0 +1,6 @@ +--- +ulm_custom_card_irmajavi_speedtest_language_variables: + variables: + ulm_custom_card_irmajavi_speedtest_speedtest: "Test prędkości Internetu" + ulm_custom_card_irmajavi_speedtest_download: "Prędkość pobierania" + ulm_custom_card_irmajavi_speedtest_upload: "Prędkość wysyłania" diff --git a/custom_cards/custom_card_ristou_person/languages/pl.yaml b/custom_cards/custom_card_ristou_person/languages/pl.yaml new file mode 100644 index 000000000..41ea3483f --- /dev/null +++ b/custom_cards/custom_card_ristou_person/languages/pl.yaml @@ -0,0 +1,4 @@ +--- +ulm_custom_card_ristou_person_language_variables: + variables: + ulm_custom_card_ristou_person_driving: "Porusza się" diff --git a/custom_cards/custom_card_wsly_pollen/languages/pl.yaml b/custom_cards/custom_card_wsly_pollen/languages/pl.yaml new file mode 100644 index 000000000..ad7a1bb38 --- /dev/null +++ b/custom_cards/custom_card_wsly_pollen/languages/pl.yaml @@ -0,0 +1,13 @@ +# EN.yaml for custom_card_wsly_pollen +--- +custom_card_wsly_pollen_language_variables: + variables: + custom_card_wsly_pollen_none: "Brak" + custom_card_wsly_pollen_very_low: "Bardzo słabe" + custom_card_wsly_pollen_low: "Słabe" + custom_card_wsly_pollen_medium: "Średnie" + custom_card_wsly_pollen_high: "Wysokie" + custom_card_wsly_pollen_very_high: "Bardzo wysokie" + custom_card_wsly_pollen_tree_name: "Drzewa" + custom_card_wsly_pollen_grass_name: "Trawy" + custom_card_wsly_pollen_weed_name: "Zioła" diff --git a/custom_components/ui_lovelace_minimalist/translations/en.json b/custom_components/ui_lovelace_minimalist/translations/en.json index 4203cca40..c0ce54f02 100644 --- a/custom_components/ui_lovelace_minimalist/translations/en.json +++ b/custom_components/ui_lovelace_minimalist/translations/en.json @@ -6,7 +6,7 @@ "title": "UI Lovelace Minimalist Settings", "description": "", "data": { - "community_cards_enabled": "Enable the ability to configure community cards with this integrations, Does require github authentication!" + "community_cards_enabled": "Enable the ability to configure community cards with this integrations, Does require GitHub authentication!" } }, "device": { @@ -42,7 +42,7 @@ "adaptive_ui_icon": "adaptive panel icon", "theme": "Theme", "include_other_cards": "Include custom card resources it's depending on.", - "community_cards_enabled": "Enable the ability to configure community cards with this integrations, Does require github authentication!", + "community_cards_enabled": "Enable the ability to configure community cards with this integrations, Does require GitHub authentication!", "community_cards": "Select Community Cards you want to enable." } } @@ -52,7 +52,7 @@ "not_setup": "UI Lovelace Minimalist is not setup." }, "error": { - "github_cards": "Something went wrong when fetching cards from Github.", + "github_cards": "Something went wrong when fetching cards from GitHub.", "ack": "You need to acknowledge all statements.", "gh_token": "Github Token not set. Please re-install this integration to go through the setup procedure. (No custom configuration will be lost)" } diff --git a/custom_components/ui_lovelace_minimalist/translations/pl.json b/custom_components/ui_lovelace_minimalist/translations/pl.json index 713aad674..fd6883ca6 100644 --- a/custom_components/ui_lovelace_minimalist/translations/pl.json +++ b/custom_components/ui_lovelace_minimalist/translations/pl.json @@ -6,25 +6,25 @@ "title": "Ustawienia UI Lovelace Minimalist", "description": "", "data": { - "community_cards_enabled": "Enable the ability to configure community cards with this integrations, Does require github authentication!" + "community_cards_enabled": "Włącz możliwość dodawania kart tworzonych przez społeczność. Wymaga uwierzytelnienia w serwisie GitHub!" } }, "device": { - "title": "Waiting for device activation" + "title": "Oczekiwanie na aktywację urządzenia" }, "reauth_confirm": { - "title": "Reauthentication needed", - "description": "You need to reauthenticate with GitHub." + "title": "Wymagane jest ponowne uwierzytelnienie", + "description": "Musisz ponownie uwierzytelnić się w serwisie GitHub." } }, "abort": { "single_instance_allowed": "Tylko jedna konfiguracja UI Lovelace Minimalist jest dozwolona.", "not_setup": "UI Lovelace Minimalist nie jest skonfigurowany.", - "github": "Could not authenticate with GitHub, try again later.", - "reauth_successful": "Reauthentication was successful." + "github": "Nie udało się uwierzytelnić w serwisie GitHub, spróbuj ponownie później.", + "reauth_successful": "Ponowne uwierzytelnienie zakończyło się sukcesem" }, "progress": { - "wait_for_device": "1. Open {url} \n2.Paste the following key to authorize ULM: \n```\n{code}\n```\n" + "wait_for_device": "1. Otwórz {url} \n2.Wklej poniższy klucz, aby autoryzować ULM: \n```\n{code}\n```\n" } }, "options": { @@ -37,13 +37,13 @@ "sidepanel_enabled": "Utwórz nowy Dashboard w panelu bocznym.", "sidepanel_icon": "Ikona w panelu bocznym", "sidepanel_title": "Tytuł w panelu bocznym", - "adaptive_ui_enabled": "Enable adaptive Dashboard with popup splitview", - "adaptive_ui_title": "adaptive panel title", - "adaptive_ui_icon": "adaptive panel icon", + "adaptive_ui_enabled": "Włącz wyświetlanie Dashboardu w trybie adaptatywnym", + "adaptive_ui_title": "tytuł panelu adaptatywnego", + "adaptive_ui_icon": "ikona panelu adaptatywnego", "theme": "Motyw", "include_other_cards": "Dołącz zasoby wymagane przez niestandardowe karty.", - "community_cards_enabled": "Enable the ability to configure community cards with this integrations, Does require github authentication!", - "community_cards": "Select Community Cards you want to enable." + "community_cards_enabled": "Włącz możliwość dodawania kart stworzonych przez społeczność. Wymaga uwierzytelnienia w serwisie GitHub!", + "community_cards": "Wybierz karty społeczności, które chcesz włączyć." } } }, @@ -52,9 +52,9 @@ "not_setup": "UI Lovelace Minimalist nie jest skonfigurowany." }, "error": { - "github_cards": "Something went wrong when fetching cards from Github.", - "ack": "You need to acknowledge all statements.", - "gh_token": "Github Token not set. Please re-install this integration to go throught the setup procedure. (No custom configuration will be lost)" + "github_cards": "Wystąpił błąd podczas pobierania kart z serwisu GitHub", + "ack": "Należy zaznaczyć wszystkie oświadczenia.", + "gh_token": "Token GitHub nie został ustawiony. Zainstaluj ponownie integrację, aby przejść przez proces konfiguracji. Żadna niestandardowa konfiguracja nie zostanie utracona." } } } From 4096efb6096e61437338bb9a605c303b7b97262a Mon Sep 17 00:00:00 2001 From: schumijo Date: Fri, 5 Aug 2022 08:50:52 +0200 Subject: [PATCH 70/70] Update template --- .../popup_templates/popup_buttons/popup_button_radar.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml index 93f5cc9a1..64c12067b 100644 --- a/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml +++ b/custom_components/ui_lovelace_minimalist/lovelace/ulm_templates/popup_templates/popup_buttons/popup_button_radar.yaml @@ -1,4 +1,4 @@ --- popup_button_radar: - template: "ulm_translation_engine" + template: "ulm_language_variables" name: "[[[ return variables.ulm_radar ]]]"