Better form
This commit is contained in:
		@@ -28,7 +28,7 @@ document.addEventListener("DOMContentLoaded", () => {
 | 
				
			|||||||
      div.style.marginBottom = "6px";
 | 
					      div.style.marginBottom = "6px";
 | 
				
			||||||
      div.innerHTML = `
 | 
					      div.innerHTML = `
 | 
				
			||||||
        <input type="text" placeholder="Label" value="${item.label || ""}" style="flex:1;" data-idx="${idx}" data-type="label">
 | 
					        <input type="text" placeholder="Label" value="${item.label || ""}" style="flex:1;" data-idx="${idx}" data-type="label">
 | 
				
			||||||
        <input type="text" placeholder="URL" value="${item.href || ""}" style="flex:2;" data-idx="${idx}" data-type="href">
 | 
					        <input type="text" placeholder="?=tag1,tag2" value="${item.href || ""}" style="flex:2;" data-idx="${idx}" data-type="href">
 | 
				
			||||||
        <button type="button" class="remove-menu-item" data-idx="${idx}">🗑</button>
 | 
					        <button type="button" class="remove-menu-item" data-idx="${idx}">🗑</button>
 | 
				
			||||||
      `;
 | 
					      `;
 | 
				
			||||||
      menuList.appendChild(div);
 | 
					      menuList.appendChild(div);
 | 
				
			||||||
@@ -120,7 +120,7 @@ document.addEventListener("DOMContentLoaded", () => {
 | 
				
			|||||||
      const result = await res.json();
 | 
					      const result = await res.json();
 | 
				
			||||||
      if (result.status === "ok") {
 | 
					      if (result.status === "ok") {
 | 
				
			||||||
        if (thumbnailInput) thumbnailInput.value = result.filename;
 | 
					        if (thumbnailInput) thumbnailInput.value = result.filename;
 | 
				
			||||||
        updateThumbnailPreview(`/photos/${result.filename}`);
 | 
					        updateThumbnailPreview(`/photos/${result.filename}?t=${Date.now()}`);
 | 
				
			||||||
        showToast("Thumbnail uploaded!", "success");
 | 
					        showToast("Thumbnail uploaded!", "success");
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        showToast("Error uploading thumbnail", "error");
 | 
					        showToast("Error uploading thumbnail", "error");
 | 
				
			||||||
@@ -199,7 +199,7 @@ document.addEventListener("DOMContentLoaded", () => {
 | 
				
			|||||||
        form.elements["info.author"].value = data.info?.author || "";
 | 
					        form.elements["info.author"].value = data.info?.author || "";
 | 
				
			||||||
        form.elements["social.instagram_url"].value = data.social?.instagram_url || "";
 | 
					        form.elements["social.instagram_url"].value = data.social?.instagram_url || "";
 | 
				
			||||||
        if (thumbnailInput) thumbnailInput.value = data.social?.thumbnail || "";
 | 
					        if (thumbnailInput) thumbnailInput.value = data.social?.thumbnail || "";
 | 
				
			||||||
        updateThumbnailPreview(data.social?.thumbnail ? `/photos/${data.social.thumbnail}` : "");
 | 
					        updateThumbnailPreview(data.social?.thumbnail ? `/photos/${data.social.thumbnail}?t=${Date.now()}` : "");
 | 
				
			||||||
        form.elements["footer.copyright"].value = data.footer?.copyright || "";
 | 
					        form.elements["footer.copyright"].value = data.footer?.copyright || "";
 | 
				
			||||||
        form.elements["footer.legal_label"].value = data.footer?.legal_label || "";
 | 
					        form.elements["footer.legal_label"].value = data.footer?.legal_label || "";
 | 
				
			||||||
        if (themeSelect) {
 | 
					        if (themeSelect) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,7 +39,7 @@
 | 
				
			|||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
  <!-- Toast container for notifications -->
 | 
					  <!-- Toast container for notifications -->
 | 
				
			||||||
  <div class="content-inner">
 | 
					  <div id="site-info" class="content-inner">
 | 
				
			||||||
    <div id="toast-container"></div>
 | 
					    <div id="toast-container"></div>
 | 
				
			||||||
    <h1>Edit Site Info</h1>
 | 
					    <h1>Edit Site Info</h1>
 | 
				
			||||||
    <form id="site-info-form">
 | 
					    <form id="site-info-form">
 | 
				
			||||||
@@ -48,28 +48,28 @@
 | 
				
			|||||||
        <legend>Info</legend>
 | 
					        <legend>Info</legend>
 | 
				
			||||||
        <div class="fields">
 | 
					        <div class="fields">
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Title:</label>
 | 
					            <label>Title</label>
 | 
				
			||||||
            <input type="text" name="info.title">
 | 
					            <input type="text" name="info.title" placeholder="Your site title">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Subtitle:</label>
 | 
					            <label>Subtitle</label>
 | 
				
			||||||
            <input type="text" name="info.subtitle">
 | 
					            <input type="text" name="info.subtitle" placeholder="Your site subtitle">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Description:</label>
 | 
					            <label>Description</label>
 | 
				
			||||||
            <input type="text" name="info.description"></input>
 | 
					            <input type="text" name="info.description" placeholder="Your site description">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Canonical URL:</label>
 | 
					            <label>Canonical URL</label>
 | 
				
			||||||
            <input type="text" name="info.canonical">
 | 
					            <input type="text" name="info.canonical" placeholder="https://yoursite.com">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Keywords (comma separated):</label>
 | 
					            <label>Keywords (comma separated)</label>
 | 
				
			||||||
            <input type="text" name="info.keywords">
 | 
					            <input type="text" name="info.keywords" placeholder="photo, gallery, photography">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Author:</label>
 | 
					            <label>Author</label>
 | 
				
			||||||
            <input type="text" name="info.author">
 | 
					            <input type="text" name="info.author" placeholder="Your Name">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </fieldset>
 | 
					      </fieldset>
 | 
				
			||||||
@@ -78,13 +78,15 @@
 | 
				
			|||||||
        <legend>Social</legend>
 | 
					        <legend>Social</legend>
 | 
				
			||||||
        <div class="fields">
 | 
					        <div class="fields">
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Instagram URL:</label>
 | 
					            <label>Instagram URL</label>
 | 
				
			||||||
            <input type="text" name="social.instagram_url">
 | 
					            <input type="text" name="social.instagram_url" placeholder="https://instagram.com/yourprofile">
 | 
				
			||||||
            <label>Upload Thumbnail:</label>
 | 
					            <label class="thumbnail-form-label">Upload Thumbnail</label>
 | 
				
			||||||
            <input type="file" id="thumbnail-upload" accept="image/png,image/jpeg,image/webp" style="display:none;">
 | 
					            <input type="file" id="thumbnail-upload" accept="image/png,image/jpeg,image/webp" style="display:none;">
 | 
				
			||||||
            <button type="button" id="choose-thumbnail-btn" class="up-btn">Choose a photo</button>
 | 
					            <button type="button" id="choose-thumbnail-btn" class="up-btn">Choose a photo</button>
 | 
				
			||||||
 | 
					            <div class="thumbnail-form">
 | 
				
			||||||
            <img id="thumbnail-preview" src="" alt="Thumbnail preview" style="max-width:100px;display:none;">
 | 
					            <img id="thumbnail-preview" src="" alt="Thumbnail preview" style="max-width:100px;display:none;">
 | 
				
			||||||
            <button type="button" id="remove-thumbnail-btn" class="up-btn danger" style="display:none;">Remove</button>
 | 
					            <button type="button" id="remove-thumbnail-btn" class="up-btn danger" style="display:none;">Remove</button>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </fieldset>
 | 
					      </fieldset>
 | 
				
			||||||
@@ -103,11 +105,11 @@
 | 
				
			|||||||
        <legend>Footer</legend>
 | 
					        <legend>Footer</legend>
 | 
				
			||||||
        <div class="fields">
 | 
					        <div class="fields">
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Copyright:</label>
 | 
					            <label>Copyright</label>
 | 
				
			||||||
            <input type="text" name="footer.copyright">
 | 
					            <input type="text" name="footer.copyright">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Legal Label:</label>
 | 
					            <label>Legal Label</label>
 | 
				
			||||||
            <input type="text" name="footer.legal_label">
 | 
					            <input type="text" name="footer.legal_label">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
@@ -117,19 +119,19 @@
 | 
				
			|||||||
        <legend>Legals</legend>
 | 
					        <legend>Legals</legend>
 | 
				
			||||||
        <div class="fields">
 | 
					        <div class="fields">
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Hoster Name:</label>
 | 
					            <label>Hoster Name</label>
 | 
				
			||||||
            <input type="text" name="legals.hoster_name">
 | 
					            <input type="text" name="legals.hoster_name">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Hoster Address:</label>
 | 
					            <label>Hoster Address</label>
 | 
				
			||||||
            <input type="text" name="legals.hoster_adress">
 | 
					            <input type="text" name="legals.hoster_adress">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Hoster Contact:</label>
 | 
					            <label>Hoster Contact</label>
 | 
				
			||||||
            <input type="text" name="legals.hoster_contact">
 | 
					            <input type="text" name="legals.hoster_contact">
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div class="input-field" style="flex: 1 1 100%;">
 | 
					          <div class="input-field" style="flex: 1 1 100%;">
 | 
				
			||||||
            <label>Intellectual Property:</label>
 | 
					            <label>Intellectual Property</label>
 | 
				
			||||||
            <div id="ip-list"></div>
 | 
					            <div id="ip-list"></div>
 | 
				
			||||||
            <button type="button" id="add-ip-paragraph">+ Add paragraph</button>
 | 
					            <button type="button" id="add-ip-paragraph">+ Add paragraph</button>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
@@ -140,7 +142,7 @@
 | 
				
			|||||||
        <legend>Build</legend>
 | 
					        <legend>Build</legend>
 | 
				
			||||||
        <div class="fields">
 | 
					        <div class="fields">
 | 
				
			||||||
          <div class="input-field">
 | 
					          <div class="input-field">
 | 
				
			||||||
            <label>Theme:</label>
 | 
					            <label>Theme</label>
 | 
				
			||||||
            <select name="build.theme" id="theme-select"></select>
 | 
					            <select name="build.theme" id="theme-select"></select>
 | 
				
			||||||
            <label>
 | 
					            <label>
 | 
				
			||||||
              <input type="checkbox" name="build.convert_images" id="convert-images-checkbox">
 | 
					              <input type="checkbox" name="build.convert_images" id="convert-images-checkbox">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -364,7 +364,7 @@ h1, h2 {
 | 
				
			|||||||
  text-align: center;
 | 
					  text-align: center;
 | 
				
			||||||
  transition: all 0.1s ease;
 | 
					  transition: all 0.1s ease;
 | 
				
			||||||
  user-select: none;
 | 
					  user-select: none;
 | 
				
			||||||
  box-shadow: 0 4px 10px rgba(0,0,0,0.25);
 | 
					  /* box-shadow: 0 4px 10px rgba(0,0,0,0.25);*/
 | 
				
			||||||
  font-size: 14px;
 | 
					  font-size: 14px;
 | 
				
			||||||
  border: none;
 | 
					  border: none;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -469,10 +469,15 @@ h1, h2 {
 | 
				
			|||||||
/* --- Site Info --- */
 | 
					/* --- Site Info --- */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* --- Site Info Form --- */
 | 
					/* --- Site Info Form --- */
 | 
				
			||||||
#site-info-form {
 | 
					
 | 
				
			||||||
  max-width: 950px;
 | 
					#site-info.content-inner {
 | 
				
			||||||
 | 
					  margin-right: auto;
 | 
				
			||||||
 | 
					  margin-left: auto;
 | 
				
			||||||
 | 
					  max-width: 1140px;
 | 
				
			||||||
 | 
					  padding-bottom: 40px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#site-info-form fieldset {
 | 
					#site-info-form fieldset {
 | 
				
			||||||
  border: none;
 | 
					  border: none;
 | 
				
			||||||
  margin-bottom: 28px;
 | 
					  margin-bottom: 28px;
 | 
				
			||||||
@@ -533,6 +538,12 @@ h1, h2 {
 | 
				
			|||||||
  box-shadow: 0 2px 8px rgba(0,0,0,0.07);
 | 
					  box-shadow: 0 2px 8px rgba(0,0,0,0.07);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#site-info-form input::placeholder,
 | 
				
			||||||
 | 
					#site-info-form textarea::placeholder {
 | 
				
			||||||
 | 
					  color: #83a8b7be;
 | 
				
			||||||
 | 
					  font-style: italic;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#site-info-form input:focus,
 | 
					#site-info-form input:focus,
 | 
				
			||||||
#site-info-form textarea:focus,
 | 
					#site-info-form textarea:focus,
 | 
				
			||||||
#site-info-form select:focus {
 | 
					#site-info-form select:focus {
 | 
				
			||||||
@@ -587,7 +598,6 @@ h1, h2 {
 | 
				
			|||||||
  font-size: 0.98em;
 | 
					  font-size: 0.98em;
 | 
				
			||||||
  margin-top: 8px;
 | 
					  margin-top: 8px;
 | 
				
			||||||
  cursor: pointer;
 | 
					  cursor: pointer;
 | 
				
			||||||
  box-shadow: 0 2px 8px rgba(38,196,255,0.09);
 | 
					 | 
				
			||||||
  transition: background 0.2s;
 | 
					  transition: background 0.2s;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -610,3 +620,13 @@ h1, h2 {
 | 
				
			|||||||
    margin-bottom: 12px;
 | 
					    margin-bottom: 12px;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#site-info-form button.remove-menu-item{
 | 
				
			||||||
 | 
					  margin-top: 0px;
 | 
				
			||||||
 | 
					  margin-bottom: 4px;
 | 
				
			||||||
 | 
					  border-radius: 30px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#site-info-form .thumbnail-form-label {
 | 
				
			||||||
 | 
					  margin-top: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user