The league has its court: the tournament setup shows the home venue, not a choice
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d4780de76d
commit
041827c4dc
3 files changed
+24
-4
No files matched your search
@@ -504,6 +504,13 @@ Two more from Oliver's screenshots:
|
||||
grey; the band's top rung wears the red border, it is the final. Every other mode keeps the
|
||||
player block (main.buildLeaguePanel).
|
||||
- **The ribbon grew** (13px type, taller band), per his call.
|
||||
- **The court section stops pretending on the league modes** (his catch: "eine Liga hat einen
|
||||
festen Court — eigentlich sollte gar keine Courtauswahl da sein" — right; start() had forced
|
||||
the venue all along while the list still offered a pick). On zombie/cup the section reads
|
||||
"02 · HOME COURT · SET BY YOUR LEAGUE" and shows exactly one ringed row, the league's court;
|
||||
the click handler refuses there. One authoritative loop in syncSetup paints on/lock/display for
|
||||
both faces — the first cut had the league filter ABOVE the generic repaint, which promptly
|
||||
undid it.
|
||||
|
||||
## Session log: THE LEAGUES — the polish round: the ribbon, the glow, the count-up (2026-08-29, same day, STAGING ONLY)
|
||||
|
||||
|
||||
+4
-2
@@ -352,6 +352,8 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
|
||||
.lgFoe.un i { color: var(--dim); }
|
||||
/* the band's top rung is the final — it wears the door's own red */
|
||||
.lgFoe.fin { border-color: var(--red); }
|
||||
/* league modes: the venue is the league's own and not a choice — one row, no tap */
|
||||
#courtList.fixed .court { cursor: default; }
|
||||
/* the WAY-UP RIBBON, horizontal (Oliver's call after two diagonal cuts — a rotated pixel font
|
||||
was the one anti-aliased thing in the menu): a red band running in from OVER the left border,
|
||||
dissolving rightward through a real PIXEL FADE — an inline-SVG mask of 6px cells thresholded
|
||||
@@ -721,7 +723,7 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
|
||||
</div>
|
||||
<div id="lgFoes"></div>
|
||||
</div>
|
||||
<h3>02 · COURT</h3>
|
||||
<h3 id="s02">02 · COURT</h3>
|
||||
<div id="courtList"></div>
|
||||
<div class="foot">
|
||||
<p id="sSum"></p>
|
||||
@@ -918,6 +920,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="src/main.js?v=323"></script>
|
||||
<script type="module" src="src/main.js?v=324"></script>
|
||||
</body>
|
||||
</html>
|
||||
+13
-2
@@ -342,11 +342,21 @@ function syncSetup() {
|
||||
document.getElementById('s01').textContent = leagueMode ? '01 · YOUR LEAGUE' : '01 · PLAYER';
|
||||
if (leagueMode) buildLeaguePanel();
|
||||
if (!courtUnlocked(picked)) picked = leagueOf(profile.prof.lg).court;
|
||||
// ...and the COURT section stops pretending to be a choice on the league modes (Oliver: a
|
||||
// league HAS its court — start() has forced it all along): only the league's own row shows,
|
||||
// ringed, as the venue. Every other mode gets the full pickable list. This runs AFTER the
|
||||
// generic repaint below would, so it has the last word on .on/.lock.
|
||||
const homeCourt = leagueOf(profile.prof.lg).court;
|
||||
document.getElementById('s02').innerHTML = leagueMode
|
||||
? '02 · HOME COURT<span>SET BY YOUR LEAGUE</span>' : '02 · COURT';
|
||||
courtList.classList.toggle('fixed', leagueMode);
|
||||
for (const el of courtList.children) {
|
||||
const c = COURTS.find(x => x.id === el.dataset.id), l = courtLeague(el.dataset.id);
|
||||
const open = courtUnlocked(el.dataset.id);
|
||||
el.classList.toggle('lock', !open);
|
||||
el.classList.toggle('on', open && el.dataset.id === picked);
|
||||
el.classList.toggle('lock', !open && !leagueMode);
|
||||
el.classList.toggle('on', leagueMode ? el.dataset.id === homeCourt
|
||||
: open && el.dataset.id === picked);
|
||||
el.style.display = leagueMode && el.dataset.id !== homeCourt ? 'none' : '';
|
||||
// the sub line carries the lock and names the price — the tile stays visible, as a goal should
|
||||
el.querySelector('i').textContent = open ? c.sub : 'LOCKED — REACH ' + l.name;
|
||||
}
|
||||
@@ -430,6 +440,7 @@ for (const c of COURTS) {
|
||||
// Tapping a tile SELECTS it and nothing more. It used to start the match on the spot, which gave
|
||||
// you no way to look at the three of them and no way back out of the screen.
|
||||
b.addEventListener('click', () => {
|
||||
if (pickedMode === 'zombie' || pickedMode === 'cup') return; // the league picks the venue
|
||||
if (!courtUnlocked(c.id)) return; // locked: the row itself says which league opens it
|
||||
picked = c.id;
|
||||
for (const el of courtList.children) el.classList.toggle('on', el === b);
|
||||
|
||||
Reference in new issue
Block a user