@@ -232,9 +232,39 @@ const bookmarkPanel = document.getElementById("bookmark-panel");
232232const btnCloseBookmarks = document . getElementById ( "btn-close-bookmarks" ) ;
233233const 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 ;
235240let customPaletteEditorOpen = false ;
236241let 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
627657function 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
12991333function 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; });
25982635iterSlider . 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+
26052655familySelect . 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+
26102668fractalSelect . 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+
26142679if ( 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+
26512723toggleCustomPaletteButton . classList . add ( "icon-btn" ) ;
26522724toggleCustomPaletteButton . addEventListener ( "click" , ( ) => {
26532725 if ( params . palette !== "personnalisee" ) return ;
0 commit comments