diff --git a/beango/css/beango.css b/beango/css/beango.css index c138399..751a585 100644 --- a/beango/css/beango.css +++ b/beango/css/beango.css @@ -74,9 +74,9 @@ body { /* NEW: Styles for the text span inside the cell */ .bingo-cell-text { display: inline-block; /* Or block, depending on desired wrapping */ - word-wrap: break-word; - overflow-wrap: break-word; - hyphens: auto; + word-wrap: normal; + overflow-wrap: normal; + hyphens: none; font-size: 1.5rem; /* Moved font size here */ color: var(--cell-text-color, #000); text-shadow: var(--cell-text-outline, none); diff --git a/beango/index.html b/beango/index.html index 47b9624..fd6a089 100644 --- a/beango/index.html +++ b/beango/index.html @@ -110,7 +110,7 @@
- +

If text is also provided, image appears next to it.

diff --git a/beango/js/beango.js b/beango/js/beango.js index 69401f8..10bc184 100644 --- a/beango/js/beango.js +++ b/beango/js/beango.js @@ -465,8 +465,11 @@ function updateHeaderDisplay() { if (headerText === null) { // Check if key exists headerText = DEFAULT_HEADER_TEXT; // Apply default only if key missing } - // Read image URL, applying default if missing OR empty (standard || pattern) - const headerImageUrl = localStorage.getItem(LS_HEADER_IMAGE_URL) || DEFAULT_HEADER_IMAGE_URL; + // Read image URL: use stored value if key exists, otherwise use default + let headerImageUrl = localStorage.getItem(LS_HEADER_IMAGE_URL); + if (headerImageUrl === null) { // Check if key exists in localStorage + headerImageUrl = DEFAULT_HEADER_IMAGE_URL; // Apply default ONLY if key is missing + } const headerContainer = document.getElementById("custom-header-content"); if (!headerContainer) return; @@ -475,8 +478,10 @@ function updateHeaderDisplay() { headerContainer.innerHTML = ""; let hasText = headerText && headerText.trim() !== ""; - let hasCustomText = headerText && headerText.trim() !== "" && headerText !== DEFAULT_HEADER_TEXT; - let hasCustomImage = headerImageUrl && headerImageUrl.trim() !== "" && headerImageUrl !== DEFAULT_HEADER_IMAGE_URL; + // Determine if we are currently using the default bean URL + let isUsingDefaultBeanUrl = headerImageUrl === DEFAULT_HEADER_IMAGE_URL; + // Determine if there is a custom image (non-empty URL that isn't the default bean) + let hasCustomImage = headerImageUrl && headerImageUrl.trim() !== "" && !isUsingDefaultBeanUrl; // Add text if it exists if (hasText) { @@ -495,7 +500,7 @@ function updateHeaderDisplay() { headerContainer.appendChild(h1); } - // Add custom image if URL exists + // Add custom image if URL exists and it's not the default bean URL if (hasCustomImage) { // create a div and an image element const div = document.createElement('div'); @@ -508,20 +513,17 @@ function updateHeaderDisplay() { img.onerror = () => { img.remove(); // Remove broken image placeholder showNotification("Could not load custom header image.", "warning"); - // If there was no text either, maybe add bean? - if (!hasText && !document.getElementById("bean")) { - addDefaultBean(headerContainer); - } + // No fallback logic here. If custom image fails, it's just gone. }; div.appendChild(img); headerContainer.appendChild(div); } - // If there is NO text and NO custom image, add the default bean - else { + // If there is NO text and NO custom image, AND we ended up using the default bean URL, add the default bean + else if (!hasText && !hasCustomImage && isUsingDefaultBeanUrl) { addDefaultBean(headerContainer); } - // Implicitly, if there IS text but NO custom image, nothing else is added here - // (the bean is not automatically added alongside text anymore unless specified by lack of custom image AND lack of text) + // Implicitly, if there IS text but NO custom image, nothing else is added here. + // If the user set the URL to "", hasCustomImage will be false, and isUsingDefaultBeanUrl will be false, so nothing is added. } // Helper to add the default bean image @@ -775,47 +777,6 @@ function generateBoard() { // Reload the page to ensure correct rendering based on saved state location.reload(); - // Reset global variables - currentItems = []; - displayedItems = []; - - // Reset form inputs - document.getElementById('board-size').value = 5; // Default size - document.getElementById('cell-contents').value = ''; - document.getElementById('file-input').value = ''; // Clear file input - - // Reset background inputs to defaults - document.querySelector('input[name="background-type"][value="gradient"]').checked = true; // Default to gradient - document.getElementById('background-color-picker').value = DEFAULT_SOLID_COLOR; - document.getElementById('background-color-opacity-slider').value = DEFAULT_SOLID_COLOR_OPACITY; - document.getElementById('gradient-color-1').value = DEFAULT_GRADIENT_COLOR_1; - document.getElementById('gradient-color-1-opacity-slider').value = DEFAULT_GRADIENT_COLOR_1_OPACITY; - document.getElementById('gradient-color-2').value = DEFAULT_GRADIENT_COLOR_2; - document.getElementById('gradient-color-2-opacity-slider').value = DEFAULT_GRADIENT_COLOR_2_OPACITY; - document.getElementById('gradient-direction').value = DEFAULT_GRADIENT_DIRECTION; - toggleBackgroundControls(); // Ensure correct controls are visible - - // Reset header inputs to defaults - document.getElementById('header-text-input').value = DEFAULT_HEADER_TEXT; - document.getElementById('header-image-url-input').value = DEFAULT_HEADER_IMAGE_URL; - document.getElementById('header-text-color-picker').value = DEFAULT_HEADER_TEXT_COLOR; - document.getElementById('header-text-color-opacity-slider').value = DEFAULT_HEADER_TEXT_COLOR_OPACITY; - updateHeaderDisplay(); // Apply default header display - - // Reset marked style inputs to defaults - document.getElementById('marked-color-picker').value = DEFAULT_MARKED_COLOR; - document.getElementById('marked-color-opacity-slider').value = DEFAULT_MARKED_COLOR_OPACITY; - document.getElementById('marked-image-url-input').value = DEFAULT_MARKED_IMAGE_URL; - document.getElementById('marked-border-color-picker').value = DEFAULT_MARKED_BORDER_COLOR; - document.getElementById('marked-border-opacity-slider').value = DEFAULT_MARKED_BORDER_OPACITY; - refreshMarkedCellStyles(); // Apply default styles (which is none, effectively) - - // Clear the board display - const boardHeader = document.getElementById('board-header'); - if (boardHeader) boardHeader.style.maxWidth = ''; - - setBackground(); // Apply default background - showNotification('Settings and board reset.', 'success'); } function randomizeBoard() { @@ -1330,7 +1291,10 @@ function loadFromLocalStorage() { if (savedHeaderText === null) { // Check if key exists savedHeaderText = DEFAULT_HEADER_TEXT; // Apply default only if key missing } - const savedHeaderImageUrl = localStorage.getItem(LS_HEADER_IMAGE_URL) || DEFAULT_HEADER_IMAGE_URL; + const savedHeaderImageUrl = localStorage.getItem(LS_HEADER_IMAGE_URL); + if (savedHeaderImageUrl === null) { // Check if key exists in localStorage + savedHeaderImageUrl = DEFAULT_HEADER_IMAGE_URL; // Apply default ONLY if key is missing + } let savedHeaderTextColor = localStorage.getItem(LS_HEADER_TEXT_COLOR); if (savedHeaderTextColor === null) { savedHeaderTextColor = DEFAULT_HEADER_TEXT_COLOR; @@ -1632,7 +1596,6 @@ document.addEventListener('DOMContentLoaded', () => { equalizeCellSizes(); // <-- MOVED HERE clearSearch(); // Clear search highlights and input - saveBoardState(); // Save the new randomized state (including cleared marks) // Apply marked styles *after* all other styles/settings are restored refreshMarkedCellStyles(); // <-- Keep here