Use lettered tabs (A1/A2, B1/B2) for swap group options
This commit is contained in:
@@ -74,8 +74,6 @@
|
|||||||
.room-label { font-weight: bold; font-size: 0.8rem; margin-bottom: 0.2rem; }
|
.room-label { font-weight: bold; font-size: 0.8rem; margin-bottom: 0.2rem; }
|
||||||
.solver-score { font-size: 0.8rem; margin-top: 0.3rem; color: var(--wa-color-neutral-500); }
|
.solver-score { font-size: 0.8rem; margin-top: 0.3rem; color: var(--wa-color-neutral-500); }
|
||||||
.swap-group { border-left: 2px solid var(--wa-color-brand-50); padding-left: 0.5rem; margin-bottom: 0.5rem; }
|
.swap-group { border-left: 2px solid var(--wa-color-brand-50); padding-left: 0.5rem; margin-bottom: 0.5rem; }
|
||||||
.swap-group-nav { display: flex; align-items: center; gap: 0.3rem; margin-bottom: 0.3rem; }
|
|
||||||
.swap-group-label { font-size: 0.8rem; color: var(--wa-color-neutral-500); min-width: 3rem; text-align: center; }
|
|
||||||
.divider { border: none; border-top: 1px solid #909090; margin: 0.75rem 0; }
|
.divider { border: none; border-top: 1px solid #909090; margin: 0.75rem 0; }
|
||||||
.pref-rows { display: grid; grid-template-columns: auto 1fr; }
|
.pref-rows { display: grid; grid-template-columns: auto 1fr; }
|
||||||
.pref-row { display: grid; grid-template-columns: subgrid; grid-column: 1 / -1; align-items: center; gap: 0.5rem; padding: 0.3rem 0.4rem; }
|
.pref-row { display: grid; grid-template-columns: subgrid; grid-column: 1 / -1; align-items: center; gap: 0.5rem; padding: 0.3rem 0.4rem; }
|
||||||
|
|||||||
@@ -541,55 +541,33 @@ document.getElementById('solve-btn').addEventListener('click', async () => {
|
|||||||
renderRoomCard(room, container, roomNum++, true);
|
renderRoomCard(room, container, roomNum++, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const group of swapGroups) {
|
for (let gi = 0; gi < swapGroups.length; gi++) {
|
||||||
|
const group = swapGroups[gi];
|
||||||
|
const prefix = String.fromCharCode('A'.charCodeAt(0) + gi);
|
||||||
const section = document.createElement('div');
|
const section = document.createElement('div');
|
||||||
section.className = 'swap-group';
|
section.className = 'swap-group';
|
||||||
|
|
||||||
let current = 0;
|
|
||||||
const roomsDiv = document.createElement('div');
|
|
||||||
const baseRoomNum = roomNum;
|
const baseRoomNum = roomNum;
|
||||||
|
|
||||||
const render = () => {
|
const tabGroup = document.createElement('wa-tab-group');
|
||||||
roomsDiv.innerHTML = '';
|
for (let ci = 0; ci < group.configs.length; ci++) {
|
||||||
let rn = baseRoomNum;
|
const tab = document.createElement('wa-tab');
|
||||||
for (const room of group.configs[current]) {
|
tab.slot = 'nav';
|
||||||
renderRoomCard(room, roomsDiv, rn++, false);
|
tab.panel = 'sg-' + gi + '-' + ci;
|
||||||
|
tab.textContent = prefix + (ci + 1);
|
||||||
|
tabGroup.appendChild(tab);
|
||||||
|
}
|
||||||
|
for (let ci = 0; ci < group.configs.length; ci++) {
|
||||||
|
const panel = document.createElement('wa-tab-panel');
|
||||||
|
panel.name = 'sg-' + gi + '-' + ci;
|
||||||
|
let rn = baseRoomNum;
|
||||||
|
for (const room of group.configs[ci]) {
|
||||||
|
renderRoomCard(room, panel, rn++, false);
|
||||||
|
}
|
||||||
|
tabGroup.appendChild(panel);
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
const nav = document.createElement('div');
|
section.appendChild(tabGroup);
|
||||||
nav.className = 'swap-group-nav';
|
|
||||||
const prevBtn = document.createElement('wa-button');
|
|
||||||
prevBtn.size = 'small';
|
|
||||||
prevBtn.variant = 'text';
|
|
||||||
prevBtn.textContent = '\u25c0';
|
|
||||||
const lbl = document.createElement('span');
|
|
||||||
lbl.className = 'swap-group-label';
|
|
||||||
lbl.textContent = '1 of ' + group.configs.length;
|
|
||||||
const nextBtn = document.createElement('wa-button');
|
|
||||||
nextBtn.size = 'small';
|
|
||||||
nextBtn.variant = 'text';
|
|
||||||
nextBtn.textContent = '\u25b6';
|
|
||||||
|
|
||||||
prevBtn.addEventListener('click', () => {
|
|
||||||
current = (current - 1 + group.configs.length) % group.configs.length;
|
|
||||||
lbl.textContent = (current + 1) + ' of ' + group.configs.length;
|
|
||||||
render();
|
|
||||||
});
|
|
||||||
nextBtn.addEventListener('click', () => {
|
|
||||||
current = (current + 1) % group.configs.length;
|
|
||||||
lbl.textContent = (current + 1) + ' of ' + group.configs.length;
|
|
||||||
render();
|
|
||||||
});
|
|
||||||
|
|
||||||
nav.appendChild(prevBtn);
|
|
||||||
nav.appendChild(lbl);
|
|
||||||
nav.appendChild(nextBtn);
|
|
||||||
section.appendChild(nav);
|
|
||||||
section.appendChild(roomsDiv);
|
|
||||||
container.appendChild(section);
|
container.appendChild(section);
|
||||||
|
|
||||||
render();
|
|
||||||
roomNum += group.configs[0].length;
|
roomNum += group.configs[0].length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user