(principal, container, folders, grants)
| 240 | } |
| 241 | |
| 242 | function renderFolderGrantsUI(principal, container, folders, grants) { |
| 243 | if (!Array.isArray(folders) || !container) return; |
| 244 | |
| 245 | const grantsMap = (grants && typeof grants === 'object' && !Array.isArray(grants)) ? grants : {}; |
| 246 | |
| 247 | // Preserve original grants map for save, including entries we may not render |
| 248 | container.__grantsFallback = grantsMap; |
| 249 | |
| 250 | const isAdmin = |
| 251 | principal === "admin" || |
| 252 | String(principal).toLowerCase() === "admin" || |
| 253 | (grantsMap && grantsMap.__isAdmin); |
| 254 | |
| 255 | const toolbar = document.createElement('div'); |
| 256 | toolbar.className = 'folder-access-toolbar'; |
| 257 | toolbar.innerHTML = ` |
| 258 | <strong>${t("folder_access")}</strong> |
| 259 | <input type="text" class="form-control form-control-sm" placeholder="${t("filter_folders")}" style="max-width:220px;"> |
| 260 | <div class="form-check form-check-inline"> |
| 261 | <label class="form-check-label"> |
| 262 | <input type="checkbox" class="form-check-input" data-bulk="view" ${isAdmin ? 'disabled data-hard-disabled="1"' : ''}> |
| 263 | ${t("view_all")} |
| 264 | </label> |
| 265 | </div> |
| 266 | <div class="form-check form-check-inline"> |
| 267 | <label class="form-check-label"> |
| 268 | <input type="checkbox" class="form-check-input" data-bulk="viewOwn" ${isAdmin ? 'disabled data-hard-disabled="1"' : ''}> |
| 269 | ${t("view_own")} |
| 270 | </label> |
| 271 | </div> |
| 272 | <div class="form-check form-check-inline"> |
| 273 | <label class="form-check-label"> |
| 274 | <input type="checkbox" class="form-check-input" data-bulk="write" ${isAdmin ? 'disabled data-hard-disabled="1"' : ''}> |
| 275 | ${t("write")} |
| 276 | </label> |
| 277 | </div> |
| 278 | <div class="form-check form-check-inline"> |
| 279 | <label class="form-check-label"> |
| 280 | <input type="checkbox" class="form-check-input" data-bulk="share" ${isAdmin ? 'disabled data-hard-disabled="1"' : ''}> |
| 281 | ${t("share")} |
| 282 | </label> |
| 283 | </div> |
| 284 | <div class="form-check form-check-inline"> |
| 285 | <label class="form-check-label"> |
| 286 | <input type="checkbox" class="form-check-input" data-bulk="manage" ${isAdmin ? 'disabled data-hard-disabled="1"' : ''}> |
| 287 | ${t("manage")} |
| 288 | </label> |
| 289 | </div> |
| 290 | `; |
| 291 | |
| 292 | const list = document.createElement('div'); |
| 293 | list.className = 'folder-access-list'; |
| 294 | |
| 295 | const headerHtml = ` |
| 296 | <div class="folder-access-header row text-muted" style="font-size:12px; font-weight:600; margin-bottom:4px; display:none;"> |
| 297 | <div class="col-sm-3">${t("folder")}</div> |
| 298 | <div class="col-sm-9">${t("permissions")}</div> |
| 299 | </div> |
no test coverage detected