Read the statement by Michael Teeuw here.
I need Help. my shopping list is not clickable
-
so I’m not sure if this is the right area but, I built a module to create a real time editable shopping list. the core is there but I cannot click into the box to add an item. when I check the dev logs it shows no issues and when I exit dev logs it lets me type into the box, but I cannot add the item. once I click out the box I cannot click in it. I’m stumped and even resorted to AI for help with zero luck. what am I missing? any help would be greatly appreciated.
Module.register("MMM-ShoppingList", { defaults: { initialItems: [] // Initial items in the shopping list }, start: function() { console.log("Starting module: " + this.name); this.shoppingList = this.config.initialItems; }, getStyles: function() { return ["MMM-ShoppingList.css"]; }, getDom: function() { var wrapper = document.createElement("div"); wrapper.id = "shopping-list-container"; var heading = document.createElement("h1"); heading.innerText = "Shopping List"; wrapper.appendChild(heading); var list = document.createElement("ul"); list.id = "shopping-list"; wrapper.appendChild(list); for (let item of this.shoppingList) { list.appendChild(this.createListItem(item)); } var inputDiv = document.createElement("div"); inputDiv.id = "add-item"; var input = document.createElement("input"); input.type = "text"; input.id = "new-item"; input.placeholder = "Add new item..."; inputDiv.appendChild(input); var button = document.createElement("button"); button.innerText = "Add"; button.onclick = () => { alert("Button clicked"); this.addItem(input.value); input.value = ""; }; inputDiv.appendChild(button); wrapper.appendChild(inputDiv); console.log('Returning wrapper with interactive elements'); console.log('DOM:', wrapper); return wrapper; }, createListItem: function(item) { var li = document.createElement("li"); li.innerText = item; var deleteSpan = document.createElement("span"); deleteSpan.className = "delete"; deleteSpan.innerHTML = "❌"; deleteSpan.onclick = () => { alert("Delete clicked"); this.removeItem(item); }; li.appendChild(deleteSpan); return li; }, addItem: function(item) { if (item === "") return; console.log('Adding item:', item); this.shoppingList.push(item); this.renderShoppingList(); console.log('Item added:', item); }, removeItem: function(item) { console.log('Removing item:', item); this.shoppingList = this.shoppingList.filter(i => i !== item); this.renderShoppingList(); console.log('Item removed:', item); }, renderShoppingList: function() { var list = document.getElementById("shopping-list"); if (list) { list.innerHTML = ""; for (let item of this.shoppingList) { console.log('Rendering item:', item); list.appendChild(this.createListItem(item)); } console.log('DOM updated with new list'); } else { console.log('Error: Shopping list container not found'); } }, notificationReceived: function(notification, payload, sender) { console.log('Notification received:', notification); if (notification === "DOM_OBJECTS_CREATED") { console.log('DOM_OBJECTS_CREATED notification received'); this.renderShoppingList(); } } });the Dev Log:
Initializing MagicMirror². translator.js:116 Loading core translation file: translations/en.json VM4 sandbox_bundle:2 Electron Security Warning (Insecure Content-Security-Policy) This renderer process has either no Content Security Policy set or a policy with "unsafe-eval" enabled. This exposes users of this app to unnecessary security risks. For more information and help, consult https://electronjs.org/docs/tutorial/security. This warning will not show up once the app is packaged. warnAboutInsecureCSP @ VM4 sandbox_bundle:2 translator.js:132 Loading core translation fallback file: translations/en.json loader.js:178 Load script: modules/MMM-Cursor/MMM-Cursor.js module.js:489 Module registered: MMM-Cursor loader.js:151 Bootstrapping module: MMM-Cursor loader.js:155 Scripts loaded for: MMM-Cursor loader.js:194 Load stylesheet: modules/MMM-Cursor/MMM-Cursor.css loader.js:158 Styles loaded for: MMM-Cursor loader.js:161 Translations loaded for: MMM-Cursor loader.js:178 Load script: modules/default/alert/alert.js module.js:489 Module registered: alert loader.js:151 Bootstrapping module: alert loader.js:178 Load script: modules/default/alert/notificationFx.js loader.js:155 Scripts loaded for: alert loader.js:194 Load stylesheet: vendor/css/font-awesome.css loader.js:194 Load stylesheet: modules/default/alert/./styles/notificationFx.css loader.js:194 Load stylesheet: modules/default/alert/./styles/center.css loader.js:158 Styles loaded for: alert translator.js:99 alert - Load translation: translations/en.json translator.js:99 alert - Load translation fallback: translations/bg.json loader.js:161 Translations loaded for: alert loader.js:178 Load script: modules/default/clock/clock.js module.js:489 Module registered: clock loader.js:151 Bootstrapping module: clock loader.js:178 Load script: vendor/node_modules/moment/min/moment-with-locales.js loader.js:178 Load script: vendor/node_modules/moment-timezone/builds/moment-timezone-with-data.js loader.js:178 Load script: vendor/node_modules/suncalc/suncalc.js loader.js:155 Scripts loaded for: clock loader.js:194 Load stylesheet: modules/default/clock/clock_styles.css loader.js:158 Styles loaded for: clock loader.js:161 Translations loaded for: clock loader.js:178 Load script: modules/MMM-WiFiPassword/MMM-WiFiPassword.js module.js:489 Module registered: MMM-WiFiPassword loader.js:151 Bootstrapping module: MMM-WiFiPassword loader.js:178 Load script: modules/MMM-WiFiPassword/qrcode.min.js loader.js:194 Load stylesheet: modules/MMM-WiFiPassword/MMM-WiFiPassword.css loader.js:155 Scripts loaded for: MMM-WiFiPassword loader.js:158 Styles loaded for: MMM-WiFiPassword loader.js:161 Translations loaded for: MMM-WiFiPassword loader.js:178 Load script: modules/MMM-ShoppingList/MMM-ShoppingList.js module.js:489 Module registered: MMM-ShoppingList loader.js:151 Bootstrapping module: MMM-ShoppingList loader.js:155 Scripts loaded for: MMM-ShoppingList loader.js:194 Load stylesheet: modules/MMM-ShoppingList/MMM-ShoppingList.css loader.js:158 Styles loaded for: MMM-ShoppingList loader.js:161 Translations loaded for: MMM-ShoppingList loader.js:178 Load script: modules/default/weather/weather.js module.js:489 Module registered: weather loader.js:151 Bootstrapping module: weather loader.js:254 File already loaded: moment.js loader.js:178 Load script: modules/default/weather/weatherutils.js loader.js:178 Load script: modules/default/weather/weatherobject.js loader.js:178 Load script: modules/default/weather/providers/overrideWrapper.js loader.js:178 Load script: modules/default/weather/weatherprovider.js loader.js:254 File already loaded: suncalc.js loader.js:178 Load script: modules/default/weather/providers/openmeteo.js loader.js:155 Scripts loaded for: weather loader.js:254 File already loaded: font-awesome.css loader.js:194 Load stylesheet: vendor/node_modules/weathericons/css/weather-icons.css loader.js:194 Load stylesheet: modules/default/weather/weather.css loader.js:158 Styles loaded for: weather loader.js:161 Translations loaded for: weather loader.js:151 Bootstrapping module: weather loader.js:254 File already loaded: moment.js loader.js:254 File already loaded: weatherutils.js loader.js:254 File already loaded: weatherobject.js loader.js:254 File already loaded: modules/default/weather/providers/overrideWrapper.js loader.js:254 File already loaded: weatherprovider.js loader.js:254 File already loaded: suncalc.js loader.js:254 File already loaded: modules/default/weather/providers/openmeteo.js loader.js:155 Scripts loaded for: weather loader.js:254 File already loaded: font-awesome.css loader.js:254 File already loaded: weather-icons.css loader.js:254 File already loaded: weather.css loader.js:158 Styles loaded for: weather loader.js:161 Translations loaded for: weather loader.js:178 Load script: modules/MMM-DailyChoreGridColor/MMM-DailyChoreGridColor.js module.js:489 Module registered: MMM-DailyChoreGridColor loader.js:151 Bootstrapping module: MMM-DailyChoreGridColor loader.js:155 Scripts loaded for: MMM-DailyChoreGridColor loader.js:158 Styles loaded for: MMM-DailyChoreGridColor loader.js:161 Translations loaded for: MMM-DailyChoreGridColor loader.js:178 Load script: modules/MMM-Fireworks/MMM-Fireworks.js module.js:489 Module registered: MMM-Fireworks loader.js:151 Bootstrapping module: MMM-Fireworks loader.js:178 Load script: https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js loader.js:155 Scripts loaded for: MMM-Fireworks loader.js:158 Styles loaded for: MMM-Fireworks loader.js:161 Translations loaded for: MMM-Fireworks loader.js:194 Load stylesheet: css/custom.css MMM-Cursor.js:24 Starting module: MMM-Cursor alert.js:42 Starting module: alert clock.js:43 Starting module: clock MMM-ShoppingList.js:7 Starting module: MMM-ShoppingList weatherprovider.js:28 Weather provider: Open-Meteo initialized. weatherprovider.js:39 Weather provider: Open-Meteo started. weatherprovider.js:28 Weather provider: Open-Meteo initialized. weatherprovider.js:39 Weather provider: Open-Meteo started. main.js:601 All modules started! MMM-ShoppingList.js:103 Notification received: ALL_MODULES_STARTED MMM-Fireworks.js:68 Notification received: ALL_MODULES_STARTED MMM-ShoppingList.js:51 Returning wrapper with interactive elements MMM-ShoppingList.js:52 DOM: <div id="shopping-list-container"><h1>Shopping List</h1><ul id="shopping-list"><li>flex"Milk"<span class="delete">❌</span></li><li>flex"Eggs"<span class="delete">❌</span></li><li>flex"Bread"<span class="delete">❌</span></li></ul><div id="add-item"><input type="text" id="new-item" placeholder="Add new item..."><button>Add</button></div></div> MMM-ShoppingList.js:103 Notification received: MODULE_DOM_CREATED MMM-Fireworks.js:68 Notification received: MODULE_DOM_CREATED MMM-ShoppingList.js:103 Notification received: DOM_OBJECTS_CREATED MMM-ShoppingList.js:105 DOM_OBJECTS_CREATED notification received MMM-ShoppingList.js:93 Rendering item: Milk MMM-ShoppingList.js:93 Rendering item: Eggs MMM-ShoppingList.js:93 Rendering item: Bread MMM-ShoppingList.js:96 DOM updated with new list MMM-Fireworks.js:68 Notification received: DOM_OBJECTS_CREATED weather.js:164 New weather information available. MMM-ShoppingList.js:103 Notification received: CURRENTWEATHER_TYPE MMM-Fireworks.js:68 Notification received: CURRENTWEATHER_TYPE MMM-ShoppingList.js:103 Notification received: WEATHER_UPDATED MMM-Fireworks.js:68 Notification received: WEATHER_UPDATED weather.js:164 New weather information available. MMM-ShoppingList.js:103 Notification received: WEATHER_UPDATED MMM-Fireworks.js:68 Notification received: WEATHER_UPDATED -
@sdetweil @chrisfr1976 you all are amazing. all i had to do was change the fireworks to fullscreen_below and now it all works. the text box is clickable and editable and the chores list sets off the fireworks and i see them. thank you both. i enjoy learning and doing all this.
-
@lucifer6669 are spans clickable ?
use the developers window, ctrl-shift-i
sources tab
find your code in left nav, then you can step thru the code as it happens -
@sdetweil honestly at this point I have no idea what i’m doing. I have another module chore list that has clickable toggles and button and even activates fireworks once everything is marked done and it works perfectly fine
-
@lucifer6669 Hi,
you’re running this:loader.js:178 Load script: modules/MMM-Fireworks/MMM-Fireworks.js module.js:489 Module registered: MMM-Fireworks loader.js:151 Bootstrapping module: MMM-FireworksIf is is configured in
fullscreen_aboveyou can’t see it but it is there.I think MMM-Fireworks it can be in
fullscreen_behind. But you may need to check if you have a background image that the z-index is correct. You can try to add in the background image css az-index: -2;and for Fireworks az-index: -1;. Then start a test for Fireworks. If you can see it, it should be okay and you can click in your list. I’m not sure if this works. This is on my to-check-list :) -
@chrisfr1976 fullscreen_below
-
@lucifer6669 also, you should start w your module only while developing
-
@chrisfr1976 thanks. i will try this. i have no issues with the fireworks module firing when my chore list is completed. but it may be interfering with the clickable chore list.
-
@sdetweil @chrisfr1976 you all are amazing. all i had to do was change the fireworks to fullscreen_below and now it all works. the text box is clickable and editable and the chores list sets off the fireworks and i see them. thank you both. i enjoy learning and doing all this.
-
S sdetweil has marked this topic as solved on
-
@lucifer6669
Hi,
I’ve just fixed that issue in general. I’ve addedwrapper.style.pointerEvents = "none";andp.canvas.style.pointerEvents = "none";in the module file. This allows pointer events to pass to modules underneath! So also the CalExt3 can be used again with the pop-up windows. I’m also very happy now :-)Cheers Chris!
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login