MCPcopy Create free account
hub / github.com/error311/FileRise / refreshInheritance

Function refreshInheritance

public/js/adminFolderAccess.js:444–527  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

442 }
443
444 function refreshInheritance() {
445 const rows = qsa(list, '.folder-access-row').sort((a, b) => (a.dataset.folder || '').length - (b.dataset.folder || '').length);
446 const managedPrefixes = new Set();
447 const inheritPrefixes = new Set();
448 const safeFolderSelector = (folder) => {
449 return `.folder-access-row[data-folder="${escapeFolderSelectorValue(folder)}"]`;
450 };
451 rows.forEach(row => {
452 if (row.dataset.admin === '1') {
453 row.classList.add('admin-locked-row');
454 qsa(row, 'input[type="checkbox"]').forEach(cb => cb.disabled = true);
455 const note = row.querySelector('.inherit-flag-note');
456 if (note) {
457 note.style.display = 'inline-flex';
458 note.textContent = tf('admin_full_access', 'Admin: full access (not editable)');
459 note.classList.add('pill-note-strong');
460 }
461 return;
462 }
463 resetRowIfInheritedOnly(row);
464 const folder = row.dataset.folder || "";
465 const hasExplicit = row.dataset.explicit === '1';
466 const manage = qs(row, 'input[data-cap="manage"]');
467 if (manage && manage.checked) managedPrefixes.add(folder);
468 if (row.dataset.inherit === '1') inheritPrefixes.add(folder);
469 let inheritedFrom = null;
470 for (const p of managedPrefixes) {
471 if (p && folder !== p && folder.startsWith(p + '/')) { inheritedFrom = p; break; }
472 }
473 if (inheritedFrom && !hasExplicit) {
474 const v = qs(row, 'input[data-cap="view"]');
475 const w = qs(row, 'input[data-cap="write"]');
476 const vo = qs(row, 'input[data-cap="viewOwn"]');
477 if (v) v.checked = true;
478 if (w) w.checked = true;
479 ['create', 'upload', 'edit', 'rename', 'copy', 'delete', 'extract', 'shareFile', 'shareFolder']
480 .forEach(c => { const cb = qs(row, `input[data-cap="${c}"]`); if (cb) cb.checked = true; });
481 const tag = row.querySelector('.inherited-tag');
482 if (tag) tag.textContent = `(${tf('inherited', 'inherited')} ${tf('from', 'from')} ${inheritedFrom})`;
483 } else {
484 setRowDisabled(row, false);
485 }
486 // Show “inherit flag” hint when an ancestor has inherit enabled
487 let inheritFrom = null;
488 for (const p of inheritPrefixes) {
489 if (p && folder !== p && folder.startsWith(p + '/')) { inheritFrom = p; break; }
490 }
491 if (inheritFrom && !hasExplicit) {
492 const parentRow = list.querySelector(safeFolderSelector(inheritFrom));
493 if (parentRow) {
494 ['view','viewOwn','manage','create','upload','edit','rename','copy','move','delete','extract','shareFile','shareFolder','write','share'].forEach(cap => {
495 const src = parentRow.querySelector(`input[data-cap="${cap}"]`);
496 const dest = row.querySelector(`input[data-cap="${cap}"]`);
497 if (src && dest) {
498 dest.checked = src.checked;
499 }
500 });
501 }

Callers 4

cascadeManageFunction · 0.85
wireRowFunction · 0.85
appendChunkFunction · 0.85
renderFolderGrantsUIFunction · 0.85

Calls 7

resetRowIfInheritedOnlyFunction · 0.85
setRowDisabledFunction · 0.85
safeFolderSelectorFunction · 0.85
qsaFunction · 0.70
tfFunction · 0.70
qsFunction · 0.70
enforceShareFolderRuleFunction · 0.70

Tested by

no test coverage detected