|
64 | 64 | } |
65 | 65 |
|
66 | 66 | function getBodyCellClasses(contestId: string, taskIndex: string): string { |
67 | | - const baseClasses = 'w-1/2 xs:w-1/3 sm:w-1/4 md:w-1/5 lg:w-1/6 px-1 py-1 border'; |
| 67 | + const baseClasses = |
| 68 | + 'w-1/2 xs:w-1/3 sm:w-1/4 md:w-1/5 lg:w-1/6 px-1 py-1 border hover:brightness-125 transition-all'; |
68 | 69 | const backgroundColor = getBackgroundColor(taskTable[contestId][taskIndex]); |
69 | 70 |
|
70 | 71 | return `${baseClasses} ${backgroundColor}`; |
|
100 | 101 | </Heading> |
101 | 102 |
|
102 | 103 | <!-- TODO: ページネーションを実装 --> |
| 104 | +<!-- TODO: ヘッダーを固定できるようにする。--> |
| 105 | +<!-- HACK: Flowbite と tailwindcss の相性が悪いのかもしれない。tailwindcss のクラス指定、raw HTML & CSS を試したが、いずれも実現できず。 --> |
103 | 106 | <!-- See: --> |
104 | 107 | <!-- https://github.com/kenkoooo/AtCoderProblems/blob/master/atcoder-problems-frontend/src/pages/TablePage/AtCoderRegularTable.tsx --> |
105 | 108 | <!-- https://github.com/birdou/atcoder-blogs/blob/main/app/atcoder-blogs-frontend/src/pages/BlogTablePage/BlogTablePage.tsx --> |
106 | | -<div class="container w-full overflow-auto border rounded-md"> |
107 | | - <Table shadow id="task-table" class="text-md table-fixed" aria-label="Task table"> |
108 | | - <TableHead class="text-sm bg-gray-100"> |
109 | | - <TableHeadCell class="w-full xl:w-16 px-2 text-center border" scope="col"> |
110 | | - Round |
111 | | - </TableHeadCell> |
112 | | - |
113 | | - {#if taskTableHeaderIds.length} |
114 | | - {#each taskTableHeaderIds as taskTableHeaderId} |
115 | | - <TableHeadCell class="text-center border" scope="col">{taskTableHeaderId}</TableHeadCell> |
116 | | - {/each} |
117 | | - {/if} |
118 | | - </TableHead> |
119 | | - |
120 | | - <TableBody class="divide-y"> |
121 | | - {#if contestIds.length && taskTableHeaderIds.length} |
122 | | - {#each contestIds as contestId} |
123 | | - <TableBodyRow class="flex flex-wrap xl:table-row"> |
124 | | - <TableBodyCell class="w-full xl:w-16 truncate px-2 py-2 text-center border"> |
125 | | - {getContestRoundLabel(provider, contestId)} |
126 | | - </TableBodyCell> |
127 | | - |
128 | | - {#each taskTableHeaderIds as taskTableHeaderId} |
129 | | - <TableBodyCell |
130 | | - id={contestId + '-' + taskTableHeaderId} |
131 | | - class={getBodyCellClasses(contestId, taskTableHeaderId)} |
132 | | - > |
133 | | - {#if taskTable[contestId][taskTableHeaderId]} |
134 | | - <TaskTableBodyCell |
135 | | - taskResult={taskTable[contestId][taskTableHeaderId]} |
136 | | - {isLoggedIn} |
137 | | - onClick={() => openModal(taskTable[contestId][taskTableHeaderId])} |
138 | | - /> |
139 | | - {/if} |
| 109 | +<!-- https://tailwindcss.com/docs/position#sticky-positioning-elements --> |
| 110 | +<div class="container w-full overflow-hidden rounded-md border border-gray-100 shadow-sm"> |
| 111 | + <div class="w-full overflow-auto"> |
| 112 | + <Table id="task-table" class="text-md table-fixed w-full" aria-label="Task table"> |
| 113 | + <TableHead class="text-sm bg-gray-100"> |
| 114 | + <TableHeadCell class="w-full xl:w-16 px-2 text-center border" scope="col"> |
| 115 | + Round |
| 116 | + </TableHeadCell> |
| 117 | + |
| 118 | + {#if taskTableHeaderIds.length} |
| 119 | + {#each taskTableHeaderIds as taskTableHeaderId} |
| 120 | + <TableHeadCell class="text-center border" scope="col">{taskTableHeaderId}</TableHeadCell |
| 121 | + > |
| 122 | + {/each} |
| 123 | + {/if} |
| 124 | + </TableHead> |
| 125 | + |
| 126 | + <TableBody class="divide-y"> |
| 127 | + {#if contestIds.length && taskTableHeaderIds.length} |
| 128 | + {#each contestIds as contestId} |
| 129 | + <TableBodyRow class="flex flex-wrap xl:table-row"> |
| 130 | + <TableBodyCell class="w-full xl:w-16 truncate px-2 py-2 text-center border"> |
| 131 | + {getContestRoundLabel(provider, contestId)} |
140 | 132 | </TableBodyCell> |
141 | | - {/each} |
142 | | - </TableBodyRow> |
143 | | - {/each} |
144 | | - {/if} |
145 | | - </TableBody> |
146 | | - </Table> |
| 133 | + |
| 134 | + {#each taskTableHeaderIds as taskTableHeaderId} |
| 135 | + <TableBodyCell |
| 136 | + id={contestId + '-' + taskTableHeaderId} |
| 137 | + class={getBodyCellClasses(contestId, taskTableHeaderId)} |
| 138 | + > |
| 139 | + {#if taskTable[contestId][taskTableHeaderId]} |
| 140 | + <TaskTableBodyCell |
| 141 | + taskResult={taskTable[contestId][taskTableHeaderId]} |
| 142 | + {isLoggedIn} |
| 143 | + onClick={() => openModal(taskTable[contestId][taskTableHeaderId])} |
| 144 | + /> |
| 145 | + {/if} |
| 146 | + </TableBodyCell> |
| 147 | + {/each} |
| 148 | + </TableBodyRow> |
| 149 | + {/each} |
| 150 | + {/if} |
| 151 | + </TableBody> |
| 152 | + </Table> |
| 153 | + </div> |
147 | 154 | </div> |
148 | 155 |
|
149 | 156 | <UpdatingModal bind:this={updatingModal} {isLoggedIn} /> |
0 commit comments