(u, flags)
| 9917 | } |
| 9918 | |
| 9919 | function flagRow(u, flags) { |
| 9920 | const f = flags[u.username] || {}; |
| 9921 | const isAdmin = isAdminUser(u); |
| 9922 | |
| 9923 | const disabledAttr = isAdmin ? "disabled data-admin='1' title='Admin: full access'" : ""; |
| 9924 | const note = isAdmin ? " <span class='muted'>(Admin)</span>" : ""; |
| 9925 | |
| 9926 | return ` |
| 9927 | <tr data-username="${u.username}" ${isAdmin ? "data-admin='1'" : ""}> |
| 9928 | <td><strong>${u.username}</strong>${note}</td> |
| 9929 | <td style="text-align:center;"><input type="checkbox" data-flag="readOnly" ${f.readOnly ? "checked" : ""} ${disabledAttr}></td> |
| 9930 | <td style="text-align:center;"><input type="checkbox" data-flag="disableUpload" ${f.disableUpload ? "checked" : ""} ${disabledAttr}></td> |
| 9931 | <td style="text-align:center;"><input type="checkbox" data-flag="canShare" ${f.canShare ? "checked" : ""} ${disabledAttr}></td> |
| 9932 | <td style="text-align:center;"><input type="checkbox" data-flag="bypassOwnership" ${f.bypassOwnership ? "checked" : ""} ${disabledAttr}></td> |
| 9933 | </tr> |
| 9934 | `; |
| 9935 | } |
| 9936 | |
| 9937 | export async function openUserFlagsModal() { |
| 9938 | const isDark = document.body.classList.contains("dark-mode"); |
no test coverage detected