Theme editor UI ajdustment
This commit is contained in:
@ -31,8 +31,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<ul class="nav-list">
|
<ul class="nav-list">
|
||||||
<li class="nav-item appear2"><a href="/site-info">Site info</a>
|
<li class="nav-item appear2"><a href="/site-info">Site info</a></li>
|
||||||
<li class="nav-item appear2"><a href="#">Theme info</a>
|
<li class="nav-item appear2"><a href="/theme-editor">Theme info</a></li>
|
||||||
<li class="nav-item appear2"><a href="#">Gallery</a>
|
<li class="nav-item appear2"><a href="#">Gallery</a>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -31,19 +31,27 @@ function showToast(message, type = "success", duration = 3000) {
|
|||||||
}, duration);
|
}, duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setColorInput(colorId, textId, value) {
|
function setupColorPicker(colorId, btnId, textId, initial) {
|
||||||
const colorInput = document.getElementById(colorId);
|
const colorInput = document.getElementById(colorId);
|
||||||
|
const colorBtn = document.getElementById(btnId);
|
||||||
const textInput = document.getElementById(textId);
|
const textInput = document.getElementById(textId);
|
||||||
if (colorInput) colorInput.value = value;
|
|
||||||
if (textInput) textInput.value = value;
|
colorInput.value = initial;
|
||||||
if (colorInput && textInput) {
|
colorBtn.style.background = initial;
|
||||||
colorInput.addEventListener("input", () => {
|
textInput.value = initial.toUpperCase();
|
||||||
textInput.value = colorInput.value;
|
|
||||||
});
|
// Color input is positioned over the button and is clickable
|
||||||
textInput.addEventListener("input", () => {
|
colorInput.addEventListener("input", () => {
|
||||||
|
colorBtn.style.background = colorInput.value;
|
||||||
|
textInput.value = colorInput.value.toUpperCase();
|
||||||
|
});
|
||||||
|
|
||||||
|
textInput.addEventListener("input", () => {
|
||||||
|
if (/^#[0-9A-F]{6}$/i.test(textInput.value)) {
|
||||||
colorInput.value = textInput.value;
|
colorInput.value = textInput.value;
|
||||||
});
|
colorBtn.style.background = textInput.value;
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function setFontDropdown(selectId, value, options) {
|
function setFontDropdown(selectId, value, options) {
|
||||||
@ -75,7 +83,7 @@ function renderGoogleFonts(googleFonts) {
|
|||||||
<input type="text" name="google_fonts[${idx}][family]" value="${font.family || ""}">
|
<input type="text" name="google_fonts[${idx}][family]" value="${font.family || ""}">
|
||||||
<label>Weights (comma separated)</label>
|
<label>Weights (comma separated)</label>
|
||||||
<input type="text" name="google_fonts[${idx}][weights]" value="${(font.weights || []).join(',')}">
|
<input type="text" name="google_fonts[${idx}][weights]" value="${(font.weights || []).join(',')}">
|
||||||
<button type="button" class="remove-google-font" data-idx="${idx}">Remove</button>
|
<button type="button" class="remove-google-font remove-btn" data-idx="${idx}"> 🗑️ Remove</button>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
});
|
});
|
||||||
@ -106,13 +114,13 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|||||||
|
|
||||||
// Colors
|
// Colors
|
||||||
if (themeYaml.colors) {
|
if (themeYaml.colors) {
|
||||||
setColorInput("color-primary", "color-primary-text", themeYaml.colors.primary || "#0065a1");
|
setupColorPicker("color-primary", "color-primary-btn", "color-primary-text", themeYaml.colors.primary || "#0065a1");
|
||||||
setColorInput("color-primary-dark", "color-primary-dark-text", themeYaml.colors.primary_dark || "#005384");
|
setupColorPicker("color-primary-dark", "color-primary-dark-btn", "color-primary-dark-text", themeYaml.colors.primary_dark || "#005384");
|
||||||
setColorInput("color-secondary", "color-secondary-text", themeYaml.colors.secondary || "#00b0f0");
|
setupColorPicker("color-secondary", "color-secondary-btn", "color-secondary-text", themeYaml.colors.secondary || "#00b0f0");
|
||||||
setColorInput("color-accent", "color-accent-text", themeYaml.colors.accent || "#ffc700");
|
setupColorPicker("color-accent", "color-accent-btn", "color-accent-text", themeYaml.colors.accent || "#ffc700");
|
||||||
setColorInput("color-text-dark", "color-text-dark-text", themeYaml.colors.text_dark || "#616161");
|
setupColorPicker("color-text-dark", "color-text-dark-btn", "color-text-dark-text", themeYaml.colors.text_dark || "#616161");
|
||||||
setColorInput("color-background", "color-background-text", themeYaml.colors.background || "#fff");
|
setupColorPicker("color-background", "color-background-btn", "color-background-text", themeYaml.colors.background || "#fff");
|
||||||
setColorInput("color-browser-color", "color-browser-color-text", themeYaml.colors.browser_color || "#fff");
|
setupColorPicker("color-browser-color", "color-browser-color-btn", "color-browser-color-text", themeYaml.colors.browser_color || "#fff");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fonts
|
// Fonts
|
||||||
@ -243,13 +251,13 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|||||||
function updateFaviconPreview(src) {
|
function updateFaviconPreview(src) {
|
||||||
if (faviconPreview) {
|
if (faviconPreview) {
|
||||||
faviconPreview.src = src || "";
|
faviconPreview.src = src || "";
|
||||||
faviconPreview.style.display = src ? "inline-block" : "none";
|
faviconPreview.style.display = src ? "block" : "none";
|
||||||
}
|
}
|
||||||
if (removeFaviconBtn) {
|
if (removeFaviconBtn) {
|
||||||
removeFaviconBtn.style.display = src ? "inline-block" : "none";
|
removeFaviconBtn.style.display = src ? "block" : "none";
|
||||||
}
|
}
|
||||||
if (chooseFaviconBtn) {
|
if (chooseFaviconBtn) {
|
||||||
chooseFaviconBtn.style.display = src ? "none" : "inline-block";
|
chooseFaviconBtn.style.display = src ? "none" : "block";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<ul class="nav-list">
|
<ul class="nav-list">
|
||||||
<li class="nav-item appear2"><a href="/site-info">Site info</a></li>
|
<li class="nav-item appear2"><a href="/site-info">Site info</a></li>
|
||||||
<li class="nav-item appear2"><a href="#">Theme info</a></li>
|
<li class="nav-item appear2"><a href="/theme-editor">Theme info</a></li>
|
||||||
<li class="nav-item appear2"><a href="#">Gallery</a></li>
|
<li class="nav-item appear2"><a href="#">Gallery</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -484,7 +484,7 @@ h2 {
|
|||||||
|
|
||||||
/* --- Site Info Form --- */
|
/* --- Site Info Form --- */
|
||||||
|
|
||||||
#site-info.content-inner {
|
#site-info.content-inner, #theme-editor.content-inner {
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
max-width: 1140px;
|
max-width: 1140px;
|
||||||
@ -661,4 +661,35 @@ img#thumbnail-preview {
|
|||||||
|
|
||||||
#site-info-form .thumbnail-form-label, #theme-editor-form .thumbnail-form-label {
|
#site-info-form .thumbnail-form-label, #theme-editor-form .thumbnail-form-label {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#favicon-preview {
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.color-fields {
|
||||||
|
gap: 8px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#theme-editor button.color-btn {
|
||||||
|
height: 100%;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="color"].color-input {
|
||||||
|
margin:0;
|
||||||
|
padding: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
height:100%;
|
||||||
|
position:absolute;
|
||||||
|
left:0;
|
||||||
|
top:0;
|
||||||
|
opacity:0;
|
||||||
|
}
|
||||||
|
@ -51,40 +51,62 @@
|
|||||||
<fieldset>
|
<fieldset>
|
||||||
<h2>Colors</h2>
|
<h2>Colors</h2>
|
||||||
<div class="fields">
|
<div class="fields">
|
||||||
|
<!-- Example for one color field, repeat for all -->
|
||||||
<div class="input-field">
|
<div class="input-field">
|
||||||
<label>Primary</label>
|
<label>Primary</label>
|
||||||
<input type="color" name="colors.primary" id="color-primary">
|
<div class="fields color-fields">
|
||||||
<input type="text" name="colors.primary_text" id="color-primary-text" style="width:100px;">
|
<button type="button" id="color-primary-btn" class="color-btn"></button>
|
||||||
|
<input type="color" name="colors.primary" id="color-primary" class="color-input">
|
||||||
|
<input type="text" name="colors.primary_text" id="color-primary-text" style="width:100px;">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field">
|
<div class="input-field">
|
||||||
<label>Primary Dark</label>
|
<label>Primary Dark</label>
|
||||||
<input type="color" name="colors.primary_dark" id="color-primary-dark">
|
<div class="fields color-fields">
|
||||||
<input type="text" name="colors.primary_dark_text" id="color-primary-dark-text" style="width:100px;">
|
<button type="button" id="color-primary-dark-btn" class="color-btn"></button>
|
||||||
|
<input type="color" name="colors.primary_dark" id="color-primary-dark" class="color-input">
|
||||||
|
<input type="text" name="colors.primary_dark_text" id="color-primary-dark-text" style="width:100px;">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field">
|
<div class="input-field">
|
||||||
<label>Secondary</label>
|
<label>Secondary</label>
|
||||||
<input type="color" name="colors.secondary" id="color-secondary">
|
<div class="fields color-fields">
|
||||||
<input type="text" name="colors.secondary_text" id="color-secondary-text" style="width:100px;">
|
<button type="button" id="color-secondary-btn" class="color-btn"></button>
|
||||||
|
<input type="color" name="colors.secondary" id="color-secondary" class="color-input">
|
||||||
|
<input type="text" name="colors.secondary_text" id="color-secondary-text" style="width:100px;">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field">
|
<div class="input-field">
|
||||||
<label>Accent</label>
|
<label>Accent</label>
|
||||||
<input type="color" name="colors.accent" id="color-accent">
|
<div class="fields color-fields">
|
||||||
<input type="text" name="colors.accent_text" id="color-accent-text" style="width:100px;">
|
<button type="button" id="color-accent-btn" class="color-btn"></button>
|
||||||
|
<input type="color" name="colors.accent" id="color-accent" class="color-input">
|
||||||
|
<input type="text" name="colors.accent_text" id="color-accent-text" style="width:100px;">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field">
|
<div class="input-field">
|
||||||
<label>Text Dark</label>
|
<label>Text Dark</label>
|
||||||
<input type="color" name="colors.text_dark" id="color-text-dark">
|
<div class="fields color-fields">
|
||||||
<input type="text" name="colors.text_dark_text" id="color-text-dark-text" style="width:100px;">
|
<button type="button" id="color-text-dark-btn" class="color-btn"></button>
|
||||||
|
<input type="color" name="colors.text_dark" id="color-text-dark" class="color-input">
|
||||||
|
<input type="text" name="colors.text_dark_text" id="color-text-dark-text" style="width:100px;">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field">
|
<div class="input-field">
|
||||||
<label>Background</label>
|
<label>Background</label>
|
||||||
<input type="color" name="colors.background" id="color-background">
|
<div class="fields color-fields">
|
||||||
<input type="text" name="colors.background_text" id="color-background-text" style="width:100px;">
|
<button type="button" id="color-background-btn" class="color-btn"></button>
|
||||||
|
<input type="color" name="colors.background" id="color-background" class="color-input">
|
||||||
|
<input type="text" name="colors.background_text" id="color-background-text" style="width:100px;">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-field">
|
<div class="input-field">
|
||||||
<label>Browser Color</label>
|
<label>Browser Color</label>
|
||||||
<input type="color" name="colors.browser_color" id="color-browser-color">
|
<div class="fields color-fields">
|
||||||
<input type="text" name="colors.browser_color_text" id="color-browser-color-text" style="width:100px;">
|
<button type="button" id="color-browser-color-btn" class="color-btn"></button>
|
||||||
|
<input type="color" name="colors.browser_color" id="color-browser-color" class="color-input">
|
||||||
|
<input type="text" name="colors.browser_color_text" id="color-browser-color-text" style="width:100px;">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
Reference in New Issue
Block a user