v3 : « Voter en lot » sur sa propre ligne, au-dessus des vues ; C23 se donne le temps de la chaîne

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-10-31 00:11:13 +01:00
co-authored by Claude Opus 5.5
parent b260596cfd
commit ef271652df
2 changed files with 15 additions and 6 deletions
+4
View File
@@ -85,10 +85,14 @@ test('C22 — le vote groupé : une section en un geste, et l’article à deux
}); });
test('C23 — le vote par la chaîne Ğ1 : un geste, confirmé par l’indexeur ; le dernier fait foi', async ({ page, browser }) => { test('C23 — le vote par la chaîne Ğ1 : un geste, confirmé par l’indexeur ; le dernier fait foi', async ({ page, browser }) => {
// The chain is waited for: the server reads the indexer every 10 seconds.
test.setTimeout(90_000);
await signIn(page, 'Chiara'); await signIn(page, 'Chiara');
await wallet(page, [ALICE]); await wallet(page, [ALICE]);
await page.goto(DOC); await page.goto(DOC);
const { control } = await chain(page); const { control } = await chain(page);
await expect(page.getByRole('button', { name: /^Voter en lot/ })).toBeVisible();
await shot(page, '0-entete-voter-en-lot');
// The basket: two articles in force, for, in one transaction. // The basket: two articles in force, for, in one transaction.
await page.getByRole('button', { name: /^Voter en lot/ }).click(); await page.getByRole('button', { name: /^Voter en lot/ }).click();
const panel = page.locator('aside.panel'); const panel = page.locator('aside.panel');
@@ -144,12 +144,14 @@
· <button class="linkish" type="button" onclick={() => openPanel({ unitId: null, proposalId: null, tab: 'settings' })}>{t('settings.title')}</button> · <button class="linkish" type="button" onclick={() => openPanel({ unitId: null, proposalId: null, tab: 'settings' })}>{t('settings.title')}</button>
</p> </p>
<div class="controls"> {#if canVote}
{#if canVote} <div class="basket-row">
<button class="btn small basket-btn" type="button" onclick={() => openPanel({ unitId: null, proposalId: null, tab: 'basket' })}> <button class="btn small basket-btn" type="button" onclick={() => openPanel({ unitId: null, proposalId: null, tab: 'basket' })}>
{basket.size ? t('doc.basket.count', { n: basket.size }) : t('doc.basket')} {basket.size ? t('doc.basket.count', { n: basket.size }) : t('doc.basket')}
</button> </button>
{/if} </div>
{/if}
<div class="controls">
<div class="seg" role="radiogroup" aria-label={t('doc.view.label')}> <div class="seg" role="radiogroup" aria-label={t('doc.view.label')}>
{#each VIEWS as v (v)} {#each VIEWS as v (v)}
<button type="button" role="radio" aria-checked={doc.mode === v} class:on={doc.mode === v} onclick={() => doc.setMode(v)}>{t(`doc.view.${v}`)}</button> <button type="button" role="radio" aria-checked={doc.mode === v} class:on={doc.mode === v} onclick={() => doc.setMode(v)}>{t(`doc.view.${v}`)}</button>
@@ -306,10 +308,13 @@
justify-content: space-between; justify-content: space-between;
margin-top: 1.6rem; margin-top: 1.6rem;
} }
.basket-row {
margin-top: 1.4rem;
}
.basket-row + .controls {
margin-top: 0.8rem;
}
.basket-btn { .basket-btn {
flex-basis: 100%;
justify-self: start;
max-width: max-content;
background: var(--water); background: var(--water);
color: var(--on-water); color: var(--on-water);
} }