diff --git a/custom_components/simple_sticky_note/js/sticky_note_card.js b/custom_components/simple_sticky_note/js/sticky_note_card.js
index 5f7dd97..259c948 100644
--- a/custom_components/simple_sticky_note/js/sticky_note_card.js
+++ b/custom_components/simple_sticky_note/js/sticky_note_card.js
@@ -16,31 +16,42 @@ class SimpleStickyNote extends HTMLElement {
this.innerHTML = `
-
+
+
+
+
+
+
+
+
`;
this.content = this.querySelector('.note-content');
this.editButton = this.querySelector('.edit-button');
-
+ this.deleteButton = this.querySelector('.delete-button');
this.editButton.addEventListener('click', () => this.showEditPopup());
-
+ this.deleteButton.addEventListener('click', () => this.deleteNote());
this.style.display = 'block';
this.style.height = '100%';
-
const style = document.createElement('style');
style.textContent = `
.note-content {
- height: calc(100% - 40px);
+ height: calc(100% - 48px);
overflow-y: auto;
- padding: 10px;
- font-size: 24px;
+ padding: 16px;
+ font-size: 1.2em;
+ line-height: 1.4;
+ word-wrap: break-word;
+ white-space: pre-wrap;
}
- .edit-button {
+ .button-container {
position: absolute;
- bottom: 10px;
- left: 10px;
- right: 10px;
- width: calc(100% - 20px);
+ bottom: 8px;
+ right: 8px;
+ display: flex;
+ }
+ .edit-button, .delete-button {
+ --mdc-icon-button-size: 40px;
}
`;
this.appendChild(style);
@@ -49,10 +60,9 @@ class SimpleStickyNote extends HTMLElement {
updateCard() {
const entityId = this.config.entity;
const state = this._hass.states[entityId];
-
+
if (state) {
this.content.textContent = state.state;
- this.adjustFontSize(this.content);
}
}
@@ -66,45 +76,35 @@ class SimpleStickyNote extends HTMLElement {
showEditPopup() {
const oldContent = this.content.textContent;
this.content.style.display = 'none';
- this.editButton.style.display = 'none';
-
+ this.querySelector('.button-container').style.display = 'none';
const textarea = document.createElement('textarea');
textarea.value = oldContent;
textarea.style.width = '100%';
- textarea.style.height = 'calc(100% - 40px)';
+ textarea.style.height = 'calc(100% - 48px)';
textarea.style.boxSizing = 'border-box';
- textarea.style.padding = '10px';
+ textarea.style.padding = '16px';
textarea.style.border = 'none';
textarea.style.resize = 'none';
textarea.style.fontFamily = 'inherit';
- textarea.style.fontSize = '24px';
+ textarea.style.fontSize = '1.2em';
+ textarea.style.lineHeight = '1.4';
textarea.style.backgroundColor = 'transparent';
- textarea.style.color = 'black';
-
- textarea.addEventListener('input', () => this.adjustFontSize(textarea));
-
- const saveButton = document.createElement('button');
- saveButton.textContent = 'Save';
- saveButton.style.marginRight = '5px';
-
- const cancelButton = document.createElement('button');
- cancelButton.textContent = 'Cancel';
-
+ textarea.style.color = 'var(--primary-text-color)';
const buttonContainer = document.createElement('div');
buttonContainer.style.position = 'absolute';
- buttonContainer.style.bottom = '10px';
- buttonContainer.style.left = '10px';
- buttonContainer.style.right = '10px';
+ buttonContainer.style.bottom = '8px';
+ buttonContainer.style.right = '8px';
buttonContainer.style.display = 'flex';
- buttonContainer.style.justifyContent = 'space-between';
+ const saveButton = document.createElement('ha-icon-button');
+ saveButton.innerHTML = '';
+
+ const cancelButton = document.createElement('ha-icon-button');
+ cancelButton.innerHTML = '';
buttonContainer.appendChild(saveButton);
buttonContainer.appendChild(cancelButton);
-
this.querySelector('ha-card').appendChild(textarea);
this.querySelector('ha-card').appendChild(buttonContainer);
-
textarea.focus();
-
saveButton.addEventListener('click', () => this.saveNote(textarea.value));
cancelButton.addEventListener('click', () => this.cancelEdit(oldContent));
}
@@ -119,41 +119,35 @@ class SimpleStickyNote extends HTMLElement {
value: newContent
});
this.content.textContent = newContent;
- this.adjustFontSize(this.content);
this.cleanupEditMode();
}
cancelEdit(oldContent) {
this.content.textContent = oldContent;
- this.adjustFontSize(this.content);
this.cleanupEditMode();
}
+ deleteNote() {
+ if (confirm("Are you sure you want to delete this note?")) {
+ if (!this._hass) {
+ console.error('Hass object is not available');
+ return;
+ }
+ this._hass.callService('input_text', 'set_value', {
+ entity_id: this.config.entity,
+ value: ''
+ });
+ this.content.textContent = '';
+ }
+ }
+
cleanupEditMode() {
const textarea = this.querySelector('textarea');
const buttonContainer = this.querySelector('ha-card > div:last-child');
if (textarea) textarea.remove();
if (buttonContainer) buttonContainer.remove();
this.content.style.display = 'block';
- this.editButton.style.display = 'block';
- }
-
- adjustFontSize(element) {
- const maxFontSize = 24;
- const minFontSize = 12;
- const maxLength = 100; // Adjust this value to change when the font starts shrinking
- const text = element.value || element.textContent;
- const length = text.length;
-
- if (length <= maxLength) {
- element.style.fontSize = `${maxFontSize}px`;
- } else {
- const fontSize = Math.max(
- minFontSize,
- maxFontSize - ((length - maxLength) / 5)
- );
- element.style.fontSize = `${fontSize}px`;
- }
+ this.querySelector('.button-container').style.display = 'flex';
}
static getStubConfig() {
diff --git a/custom_components/simple_sticky_note/manifest.json b/custom_components/simple_sticky_note/manifest.json
index 673307e..083fe2a 100644
--- a/custom_components/simple_sticky_note/manifest.json
+++ b/custom_components/simple_sticky_note/manifest.json
@@ -8,5 +8,5 @@
"iot_class": "local_push",
"issue_tracker": "https://github.com/biofects/simple_sticky_note/issues",
"requirements": [],
- "version": "1.3.6"
+ "version": "1.4.0"
}
diff --git a/custom_components/simple_sticky_note/sensor.py b/custom_components/simple_sticky_note/sensor.py
index a7542fa..9f66044 100644
--- a/custom_components/simple_sticky_note/sensor.py
+++ b/custom_components/simple_sticky_note/sensor.py
@@ -3,6 +3,7 @@
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
+from homeassistant.components.input_text import DOMAIN as INPUT_TEXT_DOMAIN
from .const import DOMAIN, CONF_NOTE_TEXT
@@ -13,23 +14,34 @@ async def async_setup_entry(
) -> None:
"""Set up the Simple Sticky Note sensor."""
note_text = config_entry.data[CONF_NOTE_TEXT]
- async_add_entities([SimpleStickNoteSensor(note_text)], True)
+
+ # Create an input_text entity for persistent storage
+ input_text_entity_id = f"input_text.sticky_note_{config_entry.entry_id}"
+ await hass.services.async_call(
+ INPUT_TEXT_DOMAIN,
+ "set_value",
+ {"entity_id": input_text_entity_id, "value": note_text},
+ )
+
+ async_add_entities([SimpleStickNoteSensor(hass, input_text_entity_id)], True)
class SimpleStickNoteSensor(SensorEntity):
"""Representation of a Simple Sticky Note sensor."""
- def __init__(self, note_text):
+ def __init__(self, hass, input_text_entity_id):
"""Initialize the sensor."""
- self._note_text = note_text
- self._attr_unique_id = f"simple_sticky_note_{note_text[:10]}"
+ self.hass = hass
+ self._input_text_entity_id = input_text_entity_id
+ self._attr_unique_id = f"simple_sticky_note_{input_text_entity_id}"
self._attr_name = "Simple Sticky Note"
@property
def state(self):
"""Return the state of the sensor."""
- return self._note_text
+ return self.hass.states.get(self._input_text_entity_id).state
async def async_update(self) -> None:
"""Fetch new state data for the sensor."""
- # This sensor doesn't need to fetch new data as it's set by the user
+ # The state is updated automatically when the input_text entity changes
pass
+