Skip to content

Commit 197bcdd

Browse files
committed
Fix advanced settings toggle template handling
1 parent b4fee69 commit 197bcdd

File tree

2 files changed

+85
-5
lines changed

2 files changed

+85
-5
lines changed

liens-morts-detector-jlg/assets/js/settings-mode-toggle.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,22 @@
4444
var templateHtml = '';
4545

4646
if ($template.length) {
47-
templateHtml = $template.html();
47+
var templateElement = $template.get(0);
48+
49+
if (templateElement && typeof templateElement.innerHTML === 'string') {
50+
templateHtml = templateElement.innerHTML;
51+
}
52+
53+
if (!templateHtml && templateElement && templateElement.content) {
54+
var container = document.createElement('div');
55+
container.appendChild(templateElement.content.cloneNode(true));
56+
templateHtml = container.innerHTML;
57+
}
58+
59+
if (!templateHtml) {
60+
templateHtml = $template.html();
61+
}
62+
4863
if (typeof templateHtml === 'string') {
4964
templateHtml = templateHtml.trim();
5065
}
@@ -55,11 +70,10 @@
5570
return;
5671
}
5772

58-
if ($placeholder.children().length) {
59-
return;
73+
if (!$placeholder.children().length) {
74+
$placeholder.html(templateHtml);
6075
}
6176

62-
$placeholder.html(templateHtml);
6377
initAdvancedSettings($placeholder);
6478
}
6579

tests/js/__tests__/blc-admin-scripts.test.js

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ describe('settings mode toggle', () => {
434434
const advancedDetails = placeholder.querySelector('details');
435435
expect(advancedDetails).not.toBeNull();
436436
expect(advancedDetails.hasAttribute('open')).toBe(true);
437-
expect(initAdvancedSettingsSpy).toHaveBeenCalledTimes(1);
437+
expect(initAdvancedSettingsSpy).toHaveBeenCalledTimes(2);
438438
expect(window.wp.a11y.speak).toHaveBeenCalledWith('Mode avancé activé. Les réglages supplémentaires sont visibles.', 'polite');
439439
});
440440

@@ -461,4 +461,70 @@ describe('settings mode toggle', () => {
461461
expect(window.wp.a11y.speak).toHaveBeenCalledWith('Impossible d’enregistrer votre préférence pour le moment.', 'assertive');
462462
expect(toast.warning).toHaveBeenCalledWith('Impossible d’enregistrer votre préférence pour le moment.');
463463
});
464+
465+
it('insère les réglages avancés quand le gabarit utilise un élément template natif', async () => {
466+
initAdvancedSettingsSpy.mockClear();
467+
$.post.mockClear();
468+
postDeferred = $.Deferred();
469+
$.post.mockReturnValue(postDeferred.promise());
470+
471+
document.body.innerHTML = `
472+
<div class="blc-settings-mode" data-blc-settings-mode-toggle data-current-mode="simple">
473+
<div class="blc-settings-mode__intro">
474+
<h2 id="blc-settings-mode-title">Niveau de configuration</h2>
475+
<p id="blc-settings-mode-description">Description</p>
476+
</div>
477+
<div class="blc-settings-mode__control">
478+
<span id="blc-settings-mode-state" data-blc-settings-mode-state>Mode simple activé — seuls les réglages essentiels sont visibles.</span>
479+
<button type="button" class="button blc-settings-mode__switch" role="switch" aria-checked="false" aria-labelledby="blc-settings-mode-title blc-settings-mode-state" aria-describedby="blc-settings-mode-description" data-blc-settings-mode-control>
480+
<span data-blc-settings-mode-action>Passer en mode avancé</span>
481+
</button>
482+
</div>
483+
</div>
484+
<div class="blc-settings-groups" data-blc-settings-groups>
485+
<div class="blc-settings-groups__advanced" data-blc-settings-advanced-placeholder></div>
486+
</div>
487+
<template id="blc-settings-advanced-template">
488+
<details class="blc-settings-group blc-settings-group--collapsible" open>
489+
<summary class="blc-settings-group__summary">
490+
<span class="blc-settings-group__title">Réglages avancés</span>
491+
<span class="blc-settings-group__description">Optimisez les performances.</span>
492+
</summary>
493+
<div class="blc-settings-group__content">
494+
<div class="blc-settings-advanced">
495+
<div class="blc-settings-advanced__tabs" role="tablist">
496+
<button type="button" class="blc-settings-advanced__tab is-active" data-blc-target="demo" aria-selected="true" tabindex="0" role="tab">Démo</button>
497+
</div>
498+
<div class="blc-settings-advanced__panels">
499+
<section class="blc-settings-advanced__panel is-active" data-blc-panel="demo"></section>
500+
</div>
501+
</div>
502+
</div>
503+
</details>
504+
</template>
505+
`;
506+
507+
window.blcAdminSettings.mode = 'simple';
508+
509+
initSettingsModeToggle = createSettingsModeToggle($, {
510+
toast: toast,
511+
accessibility: { speak: window.wp.a11y.speak },
512+
initAdvancedSettings: initAdvancedSettingsSpy
513+
});
514+
515+
expect(initSettingsModeToggle()).toBe(true);
516+
517+
const button = document.querySelector('[data-blc-settings-mode-control]');
518+
const placeholder = document.querySelector('[data-blc-settings-advanced-placeholder]');
519+
520+
$(button).trigger('click');
521+
522+
expect(placeholder.querySelector('.blc-settings-advanced')).not.toBeNull();
523+
expect(initAdvancedSettingsSpy).toHaveBeenCalled();
524+
525+
postDeferred.resolve({ success: true, data: { mode: 'advanced' } });
526+
await new Promise((resolve) => setTimeout(resolve, 0));
527+
528+
expect(initAdvancedSettingsSpy).toHaveBeenCalledTimes(2);
529+
});
464530
});

0 commit comments

Comments
 (0)