Skip to content

Commit 538e1f4

Browse files
Update minimize view
1 parent ff26dc4 commit 538e1f4

2 files changed

Lines changed: 120 additions & 5 deletions

File tree

public/css/style.css

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -656,18 +656,27 @@ pre {
656656

657657
.controls-minimize-btn {
658658
position: absolute;
659-
top: 10px;
660-
right: 16px;
659+
top: 8px;
660+
right: 12px;
661661
z-index: 2;
662+
width: 42px;
663+
min-width: 42px;
664+
height: 42px;
665+
font-size: 20px;
666+
font-weight: 700;
667+
border-color: rgba(0, 212, 255, 0.28);
668+
background: rgba(0, 212, 255, 0.14);
669+
box-shadow: 0 0 18px rgba(0, 212, 255, 0.12);
662670
}
663671

664672
.controls-summary {
665673
width: 100%;
666674
display: flex;
667675
align-items: center;
668-
justify-content: space-between;
676+
justify-content: flex-start;
677+
flex-wrap: wrap;
669678
gap: 12px;
670-
padding: 10px 12px;
679+
padding: 10px 52px 10px 12px;
671680
border: 1px solid rgba(255, 255, 255, 0.06);
672681
border-radius: var(--radius-lg);
673682
background: rgba(255, 255, 255, 0.03);
@@ -680,6 +689,32 @@ pre {
680689
gap: 2px;
681690
}
682691

692+
.controls-compact {
693+
display: none;
694+
align-items: center;
695+
flex-wrap: wrap;
696+
gap: 8px;
697+
width: 100%;
698+
}
699+
700+
.controls-compact select {
701+
flex: 1 1 150px;
702+
min-width: 120px;
703+
max-width: 240px;
704+
}
705+
706+
.compact-iter-group {
707+
display: inline-flex;
708+
align-items: center;
709+
gap: 8px;
710+
min-width: 170px;
711+
flex: 1 1 200px;
712+
}
713+
714+
.compact-iter-group input[type="range"] {
715+
width: min(180px, 100%);
716+
}
717+
683718
.controls-summary-fractal {
684719
font-size: 12px;
685720
font-weight: 600;
@@ -709,6 +744,14 @@ pre {
709744
display: none;
710745
}
711746

747+
#controls.collapsed .controls-summary-main {
748+
display: none;
749+
}
750+
751+
#controls.collapsed .controls-compact {
752+
display: flex;
753+
}
754+
712755
#controls:not(.collapsed) .controls-summary {
713756
display: none;
714757
}

public/js/renderer.js

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,39 @@ const bookmarkPanel = document.getElementById("bookmark-panel");
232232
const btnCloseBookmarks = document.getElementById("btn-close-bookmarks");
233233
const bookmarkList = document.getElementById("bookmark-list");
234234

235+
let familySelectCompact = null;
236+
let fractalSelectCompact = null;
237+
let iterSliderCompact = null;
238+
let iterValueCompact = null;
239+
let paletteSelectCompact = null;
235240
let customPaletteEditorOpen = false;
236241
let controlsCollapsed = false;
237242

243+
function initialiserControlesCompacts() {
244+
if (!controlsSummary || !btnToggleControls || !familySelect || !paletteSelect) return;
245+
const compact = document.createElement("div");
246+
compact.id = "controls-compact";
247+
compact.className = "controls-compact";
248+
compact.setAttribute("aria-label", "Contrôles compacts");
249+
compact.innerHTML = `
250+
<select id="family-select-compact" aria-label="Choisir une famille de fractales">${familySelect.innerHTML}</select>
251+
<select id="fractal-select-compact" aria-label="Choisir une fractale"></select>
252+
<div class="compact-iter-group">
253+
<input type="range" id="iter-slider-compact" min="64" max="1024" step="64" value="${params.maxIter}" aria-label="Choisir le nombre d'itérations" />
254+
<span id="iter-value-compact" class="control-value">${params.maxIter}</span>
255+
</div>
256+
<select id="palette-select-compact" aria-label="Choisir une palette de couleurs">${paletteSelect.innerHTML}</select>
257+
`;
258+
controlsSummary.insertBefore(compact, btnToggleControls);
259+
familySelectCompact = document.getElementById("family-select-compact");
260+
fractalSelectCompact = document.getElementById("fractal-select-compact");
261+
iterSliderCompact = document.getElementById("iter-slider-compact");
262+
iterValueCompact = document.getElementById("iter-value-compact");
263+
paletteSelectCompact = document.getElementById("palette-select-compact");
264+
}
265+
266+
initialiserControlesCompacts();
267+
238268
// ============================================================
239269
// PALETTES DE COULEURS
240270
// ============================================================
@@ -626,6 +656,7 @@ function definirVisibiliteEditeurPalette(forceOuverture) {
626656

627657
function synchroniserControlePalette() {
628658
paletteSelect.value = params.palette;
659+
if (paletteSelectCompact) paletteSelectCompact.value = params.palette;
629660
paletteBackgroundInput.value = normaliserHexCouleur(params.paletteBackground, "#020008");
630661
paletteInteriorInput.value = normaliserHexCouleur(params.paletteInterior, "#fff5b4");
631662
params.paletteStops = normaliserStopsPalette(params.paletteStops, PALETTES.aurora.stops.map((stop) => rgbVersHex(stop)));
@@ -1289,19 +1320,25 @@ function populateFractalSelect(familyId, selectedFractal = null) {
12891320
const activeFractal = selectedFractal && family.fractales.some(([nom]) => nom === selectedFractal)
12901321
? selectedFractal
12911322
: family.fractales[0][0];
1292-
fractalSelect.innerHTML = family.fractales
1323+
const optionsHtml = family.fractales
12931324
.map(([value, label]) => `<option value="${value}">${label}</option>`)
12941325
.join("");
1326+
fractalSelect.innerHTML = optionsHtml;
1327+
if (fractalSelectCompact) fractalSelectCompact.innerHTML = optionsHtml;
12951328
fractalSelect.value = activeFractal;
1329+
if (fractalSelectCompact) fractalSelectCompact.value = activeFractal;
12961330
return activeFractal;
12971331
}
12981332

12991333
function syncSelectors(selectedFractal = params.fractal) {
13001334
const familyId = findFractalFamily(selectedFractal);
13011335
familySelect.value = familyId;
1336+
if (familySelectCompact) familySelectCompact.value = familyId;
13021337
const activeFractal = populateFractalSelect(familyId, selectedFractal);
13031338
params.fractal = activeFractal;
13041339
if (multibrotPower) multibrotPower.value = String(params.multibrotPower);
1340+
if (iterSliderCompact) iterSliderCompact.value = String(params.maxIter);
1341+
if (iterValueCompact) iterValueCompact.textContent = String(params.maxIter);
13051342
synchroniserControlePalette();
13061343
}
13071344

@@ -2598,19 +2635,47 @@ canvas.addEventListener("touchend", () => { lastPinchDist = null; });
25982635
iterSlider.addEventListener("input", () => {
25992636
params.maxIter = parseInt(iterSlider.value, 10);
26002637
iterValue.textContent = params.maxIter;
2638+
if (iterSliderCompact) iterSliderCompact.value = String(params.maxIter);
2639+
if (iterValueCompact) iterValueCompact.textContent = String(params.maxIter);
26012640
mettreAJourResumeControles();
26022641
render();
26032642
});
26042643

2644+
if (iterSliderCompact) {
2645+
iterSliderCompact.addEventListener("input", () => {
2646+
params.maxIter = parseInt(iterSliderCompact.value, 10);
2647+
iterSlider.value = String(params.maxIter);
2648+
iterValue.textContent = params.maxIter;
2649+
if (iterValueCompact) iterValueCompact.textContent = String(params.maxIter);
2650+
mettreAJourResumeControles();
2651+
render();
2652+
});
2653+
}
2654+
26052655
familySelect.addEventListener("change", () => {
26062656
const fractale = populateFractalSelect(familySelect.value, null);
26072657
setActiveFractal(fractale);
26082658
});
26092659

2660+
if (familySelectCompact) {
2661+
familySelectCompact.addEventListener("change", () => {
2662+
familySelect.value = familySelectCompact.value;
2663+
const fractale = populateFractalSelect(familySelectCompact.value, null);
2664+
setActiveFractal(fractale);
2665+
});
2666+
}
2667+
26102668
fractalSelect.addEventListener("change", () => {
26112669
setActiveFractal(fractalSelect.value);
26122670
});
26132671

2672+
if (fractalSelectCompact) {
2673+
fractalSelectCompact.addEventListener("change", () => {
2674+
fractalSelect.value = fractalSelectCompact.value;
2675+
setActiveFractal(fractalSelectCompact.value);
2676+
});
2677+
}
2678+
26142679
if (btnToggleControls) {
26152680
btnToggleControls.addEventListener("click", () => {
26162681
definirEtatControles(!controlsCollapsed);
@@ -2648,6 +2713,13 @@ paletteSelect.addEventListener("change", () => {
26482713
render();
26492714
});
26502715

2716+
if (paletteSelectCompact) {
2717+
paletteSelectCompact.addEventListener("change", () => {
2718+
paletteSelect.value = paletteSelectCompact.value;
2719+
paletteSelect.dispatchEvent(new Event("change"));
2720+
});
2721+
}
2722+
26512723
toggleCustomPaletteButton.classList.add("icon-btn");
26522724
toggleCustomPaletteButton.addEventListener("click", () => {
26532725
if (params.palette !== "personnalisee") return;

0 commit comments

Comments
 (0)