Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.

Commit 96b1cb1

Browse files
committed
feat: add Settings Modal with Reset and Image Size controls
1 parent 546a6fd commit 96b1cb1

3 files changed

Lines changed: 103 additions & 9 deletions

File tree

index.html

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
<div class="header-compact">
1313
<h2>TestOpenCVjs <span id="status" title="Waiting for OpenCV...">🟠</span></h2>
1414
<div class="header-buttons">
15-
<button id="btnResetProject" class="btn-primary" title="Reset Project to Default">
16-
<span class="label-text">Reset</span>
17-
<span class="icon-mobile"></span>
15+
<button id="btnSettings" class="btn-primary" title="Settings">
16+
<span class="label-text">Settings</span>
17+
<span class="icon-mobile"></span>
1818
</button>
1919
<button id="btnProcess" class="btn-primary" title="Rerun">▶️</button>
2020
</div>
@@ -82,6 +82,39 @@ <h2 id="editorTitle">Edit Step</h2>
8282
</div>
8383
</div>
8484

85+
<!-- Settings Modal -->
86+
<div id="settingsModal" class="modal">
87+
<div class="modal-content about-content">
88+
<div class="modal-header">
89+
<h2>Settings</h2>
90+
<span class="close-modal">&times;</span>
91+
</div>
92+
<div class="modal-body" style="padding: 20px; display: flex; flex-direction: column; gap: 15px;">
93+
<p style="margin: 0; font-weight: 600;">Application Settings</p>
94+
95+
<div style="padding-bottom: 15px;">
96+
<label for="itemSizeSlider" style="font-weight: 500; display: block; margin-bottom: 8px; color: #374151;">
97+
Image Size: <span id="itemSizeValue">120px</span>
98+
</label>
99+
<div style="display: flex; align-items: center; gap: 10px;">
100+
<span style="font-size: 0.8em; color: #666;">Small</span>
101+
<input type="range" id="itemSizeSlider" min="50" max="500" value="120" style="flex: 1;">
102+
<span style="font-size: 0.8em; color: #666;">Large</span>
103+
</div>
104+
</div>
105+
106+
<div style="border-top: 1px solid #eee; padding-top: 15px;">
107+
<button id="btnResetProject" class="btn-primary btn-danger" style="width: 100%; justify-content: center;">
108+
⚠️ Reset Project to Default
109+
</button>
110+
<p style="font-size: 0.85em; color: #666; margin-top: 5px; text-align: center;">
111+
This will delete all custom steps and restore the default pipeline.
112+
</p>
113+
</div>
114+
</div>
115+
</div>
116+
</div>
117+
85118
<!-- About Modal -->
86119
<div id="aboutModal" class="modal">
87120
<div class="modal-content about-content">

js/main.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,55 @@ if (btnAbout && aboutModal) {
164164
});
165165
}
166166

167+
// Settings Modal Logic
168+
const btnSettings = document.getElementById("btnSettings");
169+
const settingsModal = document.getElementById("settingsModal");
170+
const closeSettings = settingsModal ? settingsModal.querySelector(".close-modal") : null;
171+
172+
if (btnSettings && settingsModal) {
173+
// Image Size Slider Logic
174+
const itemSizeSlider = document.getElementById("itemSizeSlider");
175+
const itemSizeValue = document.getElementById("itemSizeValue");
176+
177+
// Load saved size or default
178+
const savedSize = localStorage.getItem("itemHeight");
179+
if (savedSize) {
180+
document.documentElement.style.setProperty("--item-height", savedSize + "px");
181+
if (itemSizeSlider) itemSizeSlider.value = savedSize;
182+
if (itemSizeValue) itemSizeValue.innerText = savedSize + "px";
183+
} else {
184+
// Initialize with default slider value
185+
if (itemSizeSlider) {
186+
document.documentElement.style.setProperty("--item-height", itemSizeSlider.value + "px");
187+
}
188+
}
189+
190+
if (itemSizeSlider && itemSizeValue) {
191+
itemSizeSlider.addEventListener("input", (e) => {
192+
const val = e.target.value;
193+
document.documentElement.style.setProperty("--item-height", val + "px");
194+
itemSizeValue.innerText = val + "px";
195+
localStorage.setItem("itemHeight", val);
196+
});
197+
}
198+
199+
btnSettings.addEventListener("click", () => {
200+
ModalManager.open(settingsModal);
201+
});
202+
203+
if (closeSettings) {
204+
closeSettings.addEventListener("click", () => {
205+
ModalManager.close(settingsModal);
206+
});
207+
}
208+
209+
window.addEventListener("click", (event) => {
210+
if (event.target === settingsModal) {
211+
ModalManager.close(settingsModal);
212+
}
213+
});
214+
}
215+
167216
const btnAddNewStepMain = document.getElementById("btnAddNewStepMain");
168217
if (btnAddNewStepMain) {
169218
btnAddNewStepMain.addEventListener("click", () => {

style.css

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,20 @@ body.modal-open #master-scrollbar-container {
171171
border-color: transparent;
172172
}
173173

174+
.btn-danger {
175+
background-color: #dc3545;
176+
color: white;
177+
}
178+
179+
.btn-danger:hover {
180+
background-color: #c82333;
181+
transform: translateY(-1px);
182+
}
183+
184+
.btn-danger:active {
185+
transform: translateY(0);
186+
}
187+
174188
@keyframes spin {
175189
from {
176190
transform: rotate(0deg);
@@ -508,7 +522,7 @@ body.modal-open #master-scrollbar-container {
508522

509523
.image-item canvas,
510524
.image-item img {
511-
max-height: 120px;
525+
height: var(--item-height, 120px);
512526
width: auto;
513527
border: 1px solid #eee;
514528
background: #fff;
@@ -733,7 +747,7 @@ body.modal-open #master-scrollbar-container {
733747

734748
.image-item canvas,
735749
.image-item img {
736-
max-height: 80px;
750+
height: var(--item-height, 80px);
737751
}
738752

739753
.modal-content,
@@ -776,13 +790,11 @@ body.modal-open #master-scrollbar-container {
776790
font-size: 14px;
777791
}
778792

779-
#btnResetProject .label-text,
780-
#btnViewResult .label-text {
793+
.header-compact .label-text {
781794
display: none;
782795
}
783796

784-
#btnResetProject .icon-mobile,
785-
#btnViewResult .icon-mobile {
797+
.header-compact .icon-mobile {
786798
display: inline;
787799
font-size: 1.4em;
788800
}

0 commit comments

Comments
 (0)