Merge branch 'main' of https://git.azuze.fr/kawa/SharepointToolbox-Web
This commit is contained in:
@@ -31,7 +31,7 @@
|
||||
</div>
|
||||
<div class="data-table-wrap" style="max-height:200px;overflow-y:auto">
|
||||
<table class="data-table">
|
||||
<thead><tr><th>@T["report.col.group"]</th><th>@T["bulkmembers.email"]</th><th>@T["bulkmembers.role"]</th><th>@T["bulkmembers.status"]</th></tr></thead>
|
||||
<thead><tr><th>@T["report.col.group"]<HelpTip Text="@T["help.spGroup"]" Wide="true" /></th><th>@T["bulkmembers.email"]</th><th>@T["bulkmembers.role"]<HelpTip Text="@T["help.spRole"]" Wide="true" /></th><th>@T["bulkmembers.status"]</th></tr></thead>
|
||||
<tbody>
|
||||
@foreach (var row in _rows.Take(50))
|
||||
{
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
<div class="card">
|
||||
<div class="form-group">
|
||||
<label class="form-label">@T["bulksites.adminurl"]</label>
|
||||
<label class="form-label">@T["bulksites.adminurl"]<HelpTip Text="@T["help.adminUrl"]" Wide="true" /></label>
|
||||
<input class="form-input" @bind="_adminUrl" placeholder="https://contoso-admin.sharepoint.com" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
@@ -31,7 +31,7 @@
|
||||
<div class="alert alert-info mt-8">@string.Format(T["bulksites.validcount"], _rows.Count(r => r.IsValid), _rows.Count(r => !r.IsValid))</div>
|
||||
<div class="data-table-wrap" style="max-height:200px;overflow-y:auto">
|
||||
<table class="data-table">
|
||||
<thead><tr><th>@T["bulksites.name"]</th><th>@T["bulksites.type"]</th><th>@T["bulksites.alias"]</th><th>@T["bulksites.col.status"]</th></tr></thead>
|
||||
<thead><tr><th>@T["bulksites.name"]</th><th>@T["bulksites.type"]<HelpTip Text="@T["help.siteType"]" Wide="true" /></th><th>@T["bulksites.alias"]<HelpTip Text="@T["help.siteAlias"]" Wide="true" /></th><th>@T["bulksites.col.status"]</th></tr></thead>
|
||||
<tbody>
|
||||
@foreach (var row in _rows.Take(50))
|
||||
{
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group" style="display:flex;align-items:center;padding-top:20px">
|
||||
<label><input type="checkbox" @bind="_includeSourceFolder" /> @T["transfer.chk.include_source_short"]</label>
|
||||
<label><input type="checkbox" @bind="_includeSourceFolder" /> @T["transfer.chk.include_source_short"]<HelpTip Text="@T["transfer.chk.include_source.tooltip"]" Wide="true" /></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-row mt-8">
|
||||
|
||||
@@ -24,9 +24,9 @@
|
||||
<input class="form-input" type="number" @bind="_folderDepth" min="0" max="999" style="width:80px" />
|
||||
</div>
|
||||
<div class="form-group" style="display:flex;align-items:center;gap:16px;padding-top:20px">
|
||||
<label><input type="checkbox" @bind="_includeInherited" /> @T["chk.inherited.perms"]</label>
|
||||
<label><input type="checkbox" @bind="_includeInherited" /> @T["chk.inherited.perms"]<HelpTip Text="@T["help.inheritedPerms"]" /></label>
|
||||
<label><input type="checkbox" @bind="_scanFolders" /> @T["chk.scan.folders"]</label>
|
||||
<label><input type="checkbox" @bind="_includeSubsites" /> @T["chk.include.subsites"]</label>
|
||||
<label><input type="checkbox" @bind="_includeSubsites" /> @T["chk.include.subsites"]<HelpTip Text="@T["help.subsites"]" /></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-row mt-8">
|
||||
@@ -63,8 +63,8 @@
|
||||
<th>@T["directory.col.type"]</th>
|
||||
<th>@T["report.col.title"]</th>
|
||||
<th>@T["perm.col.users"]</th>
|
||||
<th>@T["perm.col.permission"]</th>
|
||||
<th>@T["report.col.granted_through"]</th>
|
||||
<th>@T["perm.col.permission"]<HelpTip Text="@T["help.permissionLevel"]" /></th>
|
||||
<th>@T["report.col.granted_through"]<HelpTip Text="@T["help.grantedThrough"]" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label class="form-label">@T["lbl.regex"]</label>
|
||||
<label class="form-label">@T["lbl.regex"]<HelpTip Text="@T["help.regex"]" Wide="true" /></label>
|
||||
<input class="form-input" @bind="_regex" placeholder="@T["ph.regex"]" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
||||
@@ -27,9 +27,9 @@
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group" style="display:flex;align-items:center;gap:16px;padding-top:20px">
|
||||
<label><input type="checkbox" @bind="_includeSubsites" /> @T["chk.include.subsites"]</label>
|
||||
<label><input type="checkbox" @bind="_includeHidden" /> @T["stor.chk.include_hidden_libs"]</label>
|
||||
<label><input type="checkbox" @bind="_includeRecycleBin" /> @T["stor.chk.include_recycle_bin"]</label>
|
||||
<label><input type="checkbox" @bind="_includeSubsites" /> @T["chk.include.subsites"]<HelpTip Text="@T["help.subsites"]" /></label>
|
||||
<label><input type="checkbox" @bind="_includeHidden" /> @T["stor.chk.include_hidden_libs"]<HelpTip Text="@T["help.hiddenLibs"]" /></label>
|
||||
<label><input type="checkbox" @bind="_includeRecycleBin" /> @T["stor.chk.include_recycle_bin"]<HelpTip Text="@T["help.recycleBin"]" /></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-row mt-8">
|
||||
@@ -62,7 +62,7 @@
|
||||
<th>@T["stor.col.site"]</th>
|
||||
<th class="num">@T["stor.col.files"]</th>
|
||||
<th class="num">@T["stor.col.total_mb"]</th>
|
||||
<th class="num">@T["stor.col.versions_mb"]</th>
|
||||
<th class="num">@T["stor.col.versions_mb"]<HelpTip Text="@T["help.versionStorage"]" /></th>
|
||||
<th>@T["stor.col.lastmod"]</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -17,16 +17,16 @@
|
||||
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">
|
||||
<div class="card">
|
||||
<div class="card-title">@T["templates.capture"]</div>
|
||||
<div class="card-title">@T["templates.capture"]<HelpTip Text="@T["help.templateCapture"]" Wide="true" /></div>
|
||||
<SitePicker Profile="Session.CurrentProfile!" @bind-SelectedSites="_captureSites" Single="true" />
|
||||
<div class="form-group mt-8">
|
||||
<label class="form-label">@T["templates.name"]</label>
|
||||
<input class="form-input" @bind="_captureName" placeholder="@T["templates.name.placeholder"]" />
|
||||
</div>
|
||||
<div class="flex-row" style="flex-wrap:wrap">
|
||||
<label><input type="checkbox" @bind="_capLibraries" /> @T["templates.opt.libraries"]</label>
|
||||
<label><input type="checkbox" @bind="_capLibraries" /> @T["templates.opt.libraries"]<HelpTip Text="@T["help.library"]" /></label>
|
||||
<label><input type="checkbox" @bind="_capFolders" /> @T["templates.opt.folders"]</label>
|
||||
<label><input type="checkbox" @bind="_capGroups" /> @T["templates.opt.permissions"]</label>
|
||||
<label><input type="checkbox" @bind="_capGroups" /> @T["templates.opt.permissions"]<HelpTip Text="@T["help.permissionGroups"]" Wide="true" /></label>
|
||||
</div>
|
||||
<button class="btn btn-primary mt-8" @onclick="CaptureTemplate" disabled="@_running">
|
||||
@(_running ? T["templates.btn.capturing"] : T["templates.btn.capture"])
|
||||
@@ -48,11 +48,11 @@
|
||||
<input class="form-input" @bind="_newTitle" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label">@T["templates.newalias"]</label>
|
||||
<label class="form-label">@T["templates.newalias"]<HelpTip Text="@T["help.siteAlias"]" Wide="true" /></label>
|
||||
<input class="form-input" @bind="_newAlias" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-label">@T["templates.adminurl"]</label>
|
||||
<label class="form-label">@T["templates.adminurl"]<HelpTip Text="@T["help.adminUrl"]" Wide="true" /></label>
|
||||
<input class="form-input" @bind="_adminUrl" placeholder="https://contoso-admin.sharepoint.com" />
|
||||
</div>
|
||||
<button class="btn btn-primary" @onclick="ApplyTemplate" disabled="@_running">
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<div class="flex-row">
|
||||
<label class="form-label" style="margin:0">@T["audit.lbl.users"]</label>
|
||||
<div class="spacer"></div>
|
||||
<label style="font-weight:normal"><input type="checkbox" @bind="_includeGuests" /> @T["directory.chk.guests"]</label>
|
||||
<label style="font-weight:normal"><input type="checkbox" @bind="_includeGuests" /> @T["directory.chk.guests"]<HelpTip Text="@T["help.guests"]" Wide="true" /></label>
|
||||
<button class="btn btn-secondary btn-sm" @onclick="LoadUsers" disabled="@_loadingUsers">
|
||||
@(_loadingUsers ? string.Format(T["audit.btn.loading"], _loadCount) : T["audit.btn.loadUsers"])
|
||||
</button>
|
||||
@@ -58,9 +58,9 @@
|
||||
<SitePicker Profile="Session.CurrentProfile!" @bind-SelectedSites="_sites" />
|
||||
<div class="form-row">
|
||||
<div class="form-group" style="display:flex;align-items:center;gap:16px;padding-top:20px">
|
||||
<label><input type="checkbox" @bind="_includeInherited" /> @T["audit.chk.includeInherited"]</label>
|
||||
<label><input type="checkbox" @bind="_includeInherited" /> @T["audit.chk.includeInherited"]<HelpTip Text="@T["help.inheritedPerms"]" /></label>
|
||||
<label><input type="checkbox" @bind="_scanFolders" /> @T["chk.scan.folders"]</label>
|
||||
<label><input type="checkbox" @bind="_includeSubsites" /> @T["chk.include.subsites"]</label>
|
||||
<label><input type="checkbox" @bind="_includeSubsites" /> @T["chk.include.subsites"]<HelpTip Text="@T["help.subsites"]" /></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-row mt-8">
|
||||
@@ -85,7 +85,7 @@
|
||||
</div>
|
||||
<div class="data-table-wrap">
|
||||
<table class="data-table">
|
||||
<thead><tr><th>@T["report.col.user"]</th><th>@T["report.col.site"]</th><th>@T["report.col.object"]</th><th>@T["audit.col.permission"]</th><th>@T["report.col.access_type"]</th><th>@T["report.col.granted_through"]</th></tr></thead>
|
||||
<thead><tr><th>@T["report.col.user"]</th><th>@T["report.col.site"]</th><th>@T["report.col.object"]</th><th>@T["audit.col.permission"]<HelpTip Text="@T["help.permissionLevel"]" /></th><th>@T["report.col.access_type"]<HelpTip Text="@T["help.accessType"]" Wide="true" /></th><th>@T["report.col.granted_through"]<HelpTip Text="@T["help.grantedThrough"]" /></th></tr></thead>
|
||||
<tbody>
|
||||
@foreach (var r in _results.Take(500))
|
||||
{
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
<div class="card">
|
||||
<div class="flex-row">
|
||||
<label><input type="checkbox" @bind="_includeGuests" /> @T["directory.chk.guests"]</label>
|
||||
<label><input type="checkbox" @bind="_includeGuests" /> @T["directory.chk.guests"]<HelpTip Text="@T["help.guests"]" Wide="true" /></label>
|
||||
<button class="btn btn-primary" @onclick="LoadUsers" disabled="@_running">
|
||||
@(_running ? string.Format(T["directory.btn.loading"], _loadCount) : T["directory.btn.loadUsers"])
|
||||
</button>
|
||||
@@ -32,7 +32,7 @@
|
||||
</div>
|
||||
<div class="data-table-wrap">
|
||||
<table class="data-table">
|
||||
<thead><tr><th>@T["directory.col.name"]</th><th>@T["directory.col.upn"]</th><th>@T["directory.col.department"]</th><th>@T["directory.col.jobtitle"]</th><th>@T["directory.col.type"]</th></tr></thead>
|
||||
<thead><tr><th>@T["directory.col.name"]</th><th>@T["directory.col.upn"]<HelpTip Text="@T["help.upn"]" Wide="true" /></th><th>@T["directory.col.department"]</th><th>@T["directory.col.jobtitle"]</th><th>@T["directory.col.type"]<HelpTip Text="@T["help.userType"]" Wide="true" /></th></tr></thead>
|
||||
<tbody>
|
||||
@foreach (var u in FilteredUsers.Take(500))
|
||||
{
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
@if (_libraries.Count > 0)
|
||||
{
|
||||
<div class="form-group mt-8">
|
||||
<label class="form-label">@T["versions.lbl.libsNoneAll"]</label>
|
||||
<label class="form-label">@T["versions.lbl.libsNoneAll"]<HelpTip Text="@T["help.library"]" /></label>
|
||||
<div style="max-height:200px;overflow-y:auto;border:1px solid var(--border);border-radius:4px;padding:4px">
|
||||
@foreach (var lib in _libraries)
|
||||
{
|
||||
@@ -39,11 +39,11 @@
|
||||
}
|
||||
<div class="form-row mt-8">
|
||||
<div class="form-group" style="flex:0 0 auto">
|
||||
<label class="form-label">@T["versions.lbl.keepLastN"]</label>
|
||||
<label class="form-label">@T["versions.lbl.keepLastN"]<HelpTip Text="@T["help.keepVersions"]" Wide="true" /></label>
|
||||
<input class="form-input" type="number" @bind="_keepLast" min="0" max="999" style="width:80px" />
|
||||
</div>
|
||||
<div class="form-group" style="display:flex;align-items:center;padding-top:20px">
|
||||
<label><input type="checkbox" @bind="_keepFirst" /> @T["versions.chk.keepFirstShort"]</label>
|
||||
<label><input type="checkbox" @bind="_keepFirst" /> @T["versions.chk.keepFirstShort"]<HelpTip Text="@T["help.keepFirst"]" /></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-row mt-8">
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
@* Clickable "?" button that reveals an explanatory tooltip. Use to demystify SharePoint
|
||||
jargon for users with limited SharePoint knowledge. Pass the explanation via Text
|
||||
(typically a localized string: <HelpTip Text="@T["some.help"]" />). Click toggles the
|
||||
bubble; it closes on a second click or when focus leaves the button. *@
|
||||
|
||||
@if (!string.IsNullOrWhiteSpace(Text))
|
||||
{
|
||||
<span class="help-tip @(Wide ? "help-tip-wide" : "") @(_open ? "open" : "")">
|
||||
<button type="button" class="help-tip-mark" @onclick="Toggle" @onclick:stopPropagation="true"
|
||||
@onclick:preventDefault="true" @onfocusout="Close"
|
||||
aria-label="@Text" aria-expanded="@_open" title="@Text">?</button>
|
||||
<span class="help-tip-bubble" role="tooltip">@Text</span>
|
||||
</span>
|
||||
}
|
||||
|
||||
@code {
|
||||
/// <summary>The explanation shown inside the tooltip bubble.</summary>
|
||||
[Parameter] public string? Text { get; set; }
|
||||
|
||||
/// <summary>Use a wider bubble for longer explanations.</summary>
|
||||
[Parameter] public bool Wide { get; set; }
|
||||
|
||||
private bool _open;
|
||||
|
||||
private void Toggle() => _open = !_open;
|
||||
|
||||
// Delay the close so a click that moves focus off the button still toggles cleanly,
|
||||
// and so the bubble doesn't vanish before a click on it registers.
|
||||
private async Task Close()
|
||||
{
|
||||
await Task.Delay(150);
|
||||
_open = false;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
@* Library name field with a picker: type a title, or click Browse to load and
|
||||
choose from the libraries on the selected site. *@
|
||||
<div class="form-group library-picker">
|
||||
<label class="form-label">@Label</label>
|
||||
<label class="form-label">@Label<HelpTip Text="@T["help.library"]" /></label>
|
||||
<div class="flex-row" style="gap:8px;align-items:stretch">
|
||||
<input class="form-input" style="flex:1"
|
||||
placeholder="@Placeholder"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="site-picker">
|
||||
<div class="flex-row" style="gap:8px;align-items:flex-end">
|
||||
<div class="form-group" style="flex:1">
|
||||
<label class="form-label">@(Single ? T["sitepicker.label.site"] : T["sitepicker.label.sites"])</label>
|
||||
<label class="form-label">@(Single ? T["sitepicker.label.site"] : T["sitepicker.label.sites"])<HelpTip Text="@T["sitepicker.help.site"]" /></label>
|
||||
<input class="form-input" @bind="_filter" @bind:event="oninput" placeholder="@T["sitepicker.ph.filter"]" />
|
||||
</div>
|
||||
<button class="btn btn-secondary" @onclick="LoadSites" disabled="@_loading">
|
||||
|
||||
@@ -1863,4 +1863,28 @@ Cet onglet fait l'inverse : vous sélectionnez un ou plusieurs utilisateurs et i
|
||||
<data name="writeguard.readonly.emphasis" xml:space="preserve">
|
||||
<value>lecture seule</value>
|
||||
</data>
|
||||
<!-- Infobulles HelpTip : explications en langage clair du jargon SharePoint -->
|
||||
<data name="sitepicker.help.site" xml:space="preserve"><value>Un site SharePoint est un conteneur (avec sa propre adresse) regroupant des bibliothèques de documents, des listes et des permissions — par exemple un espace d'équipe ou de projet.</value></data>
|
||||
<data name="help.library" xml:space="preserve"><value>Une bibliothèque de documents est un conteneur SharePoint pour stocker des fichiers, avec historique des versions, métadonnées et permissions propres — comme un dossier partagé intelligent.</value></data>
|
||||
<data name="help.inheritedPerms" xml:space="preserve"><value>Les permissions héritées sont transmises automatiquement depuis le site ou dossier parent. Incluez-les pour voir les accès obtenus indirectement, pas seulement ceux définis ici.</value></data>
|
||||
<data name="help.subsites" xml:space="preserve"><value>Les sous-sites sont des sites imbriqués sous le site sélectionné. Activez pour les inclure aussi dans l'opération.</value></data>
|
||||
<data name="help.permissionLevel" xml:space="preserve"><value>Un niveau d'autorisation est un ensemble nommé de droits (par ex. Contrôle total, Modifier, Lecture) définissant ce qu'un utilisateur peut faire.</value></data>
|
||||
<data name="help.grantedThrough" xml:space="preserve"><value>Indique comment l'accès a été obtenu : accordé directement à l'utilisateur, ou via un groupe SharePoint ou Microsoft 365 auquel il appartient.</value></data>
|
||||
<data name="help.hiddenLibs" xml:space="preserve"><value>Les bibliothèques masquées/système sont utilisées en interne par SharePoint et n'apparaissent pas dans la navigation normale. Incluez-les pour une vue complète du stockage.</value></data>
|
||||
<data name="help.recycleBin" xml:space="preserve"><value>La corbeille conserve temporairement les éléments supprimés avant leur suppression définitive. Leur taille compte encore dans le stockage tant qu'ils ne sont pas purgés.</value></data>
|
||||
<data name="help.versionStorage" xml:space="preserve"><value>Espace occupé par les anciennes versions enregistrées des fichiers. SharePoint conserve un historique de chaque fichier, et ces copies consomment du stockage.</value></data>
|
||||
<data name="help.keepVersions" xml:space="preserve"><value>Nombre de versions les plus récentes à conserver pour chaque fichier. Les versions plus anciennes au-delà de ce nombre sont supprimées pour libérer de l'espace.</value></data>
|
||||
<data name="help.keepFirst" xml:space="preserve"><value>Conserver aussi la toute première version (originale) de chaque fichier — utile pour la traçabilité — même en supprimant les autres anciennes versions.</value></data>
|
||||
<data name="help.spGroup" xml:space="preserve"><value>Un groupe SharePoint est un ensemble nommé d'utilisateurs auquel les permissions sont attribuées (par ex. Propriétaires, Membres, Visiteurs du site).</value></data>
|
||||
<data name="help.spRole" xml:space="preserve"><value>Le rôle / niveau d'autorisation donné à l'utilisateur dans le groupe : Propriétaire (contrôle total), Membre (modification) ou Visiteur (lecture).</value></data>
|
||||
<data name="help.adminUrl" xml:space="preserve"><value>L'URL du centre d'administration SharePoint (par ex. https://contoso-admin.sharepoint.com). Requise pour créer ou gérer des sites à l'échelle du tenant.</value></data>
|
||||
<data name="help.siteType" xml:space="preserve"><value>Le modèle de site : un site d'équipe pour la collaboration de groupe, ou un site de communication pour diffuser du contenu à de nombreux lecteurs.</value></data>
|
||||
<data name="help.siteAlias" xml:space="preserve"><value>Le nom court et compatible URL du site, utilisé dans son adresse (par ex. « marketing » dans /sites/marketing) et son groupe Microsoft 365.</value></data>
|
||||
<data name="help.regex" xml:space="preserve"><value>Une expression régulière : un motif avancé pour rechercher des noms de fichiers (par ex. ^Facture.*\.pdf$). Laissez vide pour tout inclure.</value></data>
|
||||
<data name="help.guests" xml:space="preserve"><value>Les invités sont des utilisateurs externes, hors de votre organisation, à qui un accès a été accordé. Activez pour les inclure.</value></data>
|
||||
<data name="help.accessType" xml:space="preserve"><value>Comment l'utilisateur atteint l'élément : par permissions directes, appartenance à un groupe, ou héritage d'un parent.</value></data>
|
||||
<data name="help.upn" xml:space="preserve"><value>User Principal Name (UPN) — l'identifiant de connexion unique de l'utilisateur dans Entra ID (Azure AD), généralement au format e-mail.</value></data>
|
||||
<data name="help.userType" xml:space="preserve"><value>Membre = un compte interne à votre organisation ; Invité = un utilisateur externe invité d'une autre organisation.</value></data>
|
||||
<data name="help.templateCapture" xml:space="preserve"><value>La capture enregistre la structure d'un site (bibliothèques, dossiers, groupes de permissions) comme modèle réutilisable pour créer de nouveaux sites.</value></data>
|
||||
<data name="help.permissionGroups" xml:space="preserve"><value>Les groupes de permissions du site (Propriétaires, Membres, Visiteurs) et leurs membres, afin de recréer la même configuration d'accès.</value></data>
|
||||
</root>
|
||||
|
||||
@@ -1863,4 +1863,28 @@ This tab does the reverse: you select one or more users and it finds every objec
|
||||
<data name="writeguard.readonly.emphasis" xml:space="preserve">
|
||||
<value>read-only</value>
|
||||
</data>
|
||||
<!-- HelpTip explanations: plain-language hints for SharePoint jargon -->
|
||||
<data name="sitepicker.help.site" xml:space="preserve"><value>A SharePoint site is a container (with its own address) that holds document libraries, lists and permissions — for example a team or project workspace.</value></data>
|
||||
<data name="help.library" xml:space="preserve"><value>A document library is a SharePoint container for storing files, with version history, metadata and its own permissions — like a smart shared folder.</value></data>
|
||||
<data name="help.inheritedPerms" xml:space="preserve"><value>Inherited permissions are passed down automatically from the parent site or folder. Include them to see access users get indirectly, not just access set directly here.</value></data>
|
||||
<data name="help.subsites" xml:space="preserve"><value>Subsites are sites nested under the selected site. Enable to include them in the operation as well.</value></data>
|
||||
<data name="help.permissionLevel" xml:space="preserve"><value>A permission level is a named bundle of rights (e.g. Full Control, Edit, Read) that defines what a user is allowed to do.</value></data>
|
||||
<data name="help.grantedThrough" xml:space="preserve"><value>Shows how the access was obtained: granted directly to the user, or via a SharePoint or Microsoft 365 group they belong to.</value></data>
|
||||
<data name="help.hiddenLibs" xml:space="preserve"><value>Hidden/system libraries are used internally by SharePoint and don't appear in normal navigation. Include them for a complete storage picture.</value></data>
|
||||
<data name="help.recycleBin" xml:space="preserve"><value>The recycle bin holds deleted items temporarily before final removal. Their size still counts against storage until purged.</value></data>
|
||||
<data name="help.versionStorage" xml:space="preserve"><value>Space used by older saved versions of files. SharePoint keeps a history of each file, and those copies consume storage.</value></data>
|
||||
<data name="help.keepVersions" xml:space="preserve"><value>How many of the most recent versions of each file to keep. Older versions beyond this number are deleted to free storage.</value></data>
|
||||
<data name="help.keepFirst" xml:space="preserve"><value>Also preserve the very first (original) version of each file — useful for audit trails — even when deleting other old versions.</value></data>
|
||||
<data name="help.spGroup" xml:space="preserve"><value>A SharePoint group is a named collection of users that permissions are assigned to (e.g. Site Owners, Members, Visitors).</value></data>
|
||||
<data name="help.spRole" xml:space="preserve"><value>The role / permission level given to the user in the group: Owner (full control), Member (edit) or Visitor (read).</value></data>
|
||||
<data name="help.adminUrl" xml:space="preserve"><value>The SharePoint admin center URL (e.g. https://contoso-admin.sharepoint.com). Required to create or manage sites across the whole tenant.</value></data>
|
||||
<data name="help.siteType" xml:space="preserve"><value>The site template: a Team site for group collaboration, or a Communication site for broadcasting content to many readers.</value></data>
|
||||
<data name="help.siteAlias" xml:space="preserve"><value>The short, URL-friendly name for the site, used in its address (e.g. 'marketing' in /sites/marketing) and its Microsoft 365 group.</value></data>
|
||||
<data name="help.regex" xml:space="preserve"><value>A regular expression: an advanced pattern for matching file names (e.g. ^Invoice.*\.pdf$). Leave blank to match everything.</value></data>
|
||||
<data name="help.guests" xml:space="preserve"><value>Guests are external users from outside your organization who have been granted access. Enable to include them.</value></data>
|
||||
<data name="help.accessType" xml:space="preserve"><value>How the user reaches the item: through direct permissions, group membership, or inherited from a parent.</value></data>
|
||||
<data name="help.upn" xml:space="preserve"><value>User Principal Name — the unique sign-in identifier for the user in Entra ID (Azure AD), usually in email format.</value></data>
|
||||
<data name="help.userType" xml:space="preserve"><value>Member = an account inside your organization; Guest = an external user invited from another organization.</value></data>
|
||||
<data name="help.templateCapture" xml:space="preserve"><value>Capturing saves a site's structure (libraries, folders, permission groups) as a reusable template you can later apply to create new sites.</value></data>
|
||||
<data name="help.permissionGroups" xml:space="preserve"><value>The site's permission groups (Owners, Members, Visitors) and their members, so the same access setup can be recreated.</value></data>
|
||||
</root>
|
||||
|
||||
@@ -382,5 +382,76 @@ body {
|
||||
.folder-node { display: flex; flex-direction: column; gap: 6px; }
|
||||
.folder-node .folder-node { border-left: 1px solid var(--border); padding-left: 6px; }
|
||||
|
||||
/* ── HelpTip ("?" badge + hover tooltip explaining SharePoint jargon) ── */
|
||||
.help-tip {
|
||||
position: relative;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
vertical-align: middle;
|
||||
margin-left: 5px;
|
||||
cursor: help;
|
||||
outline: none;
|
||||
}
|
||||
.help-tip-mark {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 16px; height: 16px;
|
||||
padding: 0; margin: 0;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
background: var(--accent-soft);
|
||||
color: var(--accent);
|
||||
font-size: 10px; font-weight: 700;
|
||||
font-family: var(--font, inherit);
|
||||
line-height: 1;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
.help-tip-mark:hover,
|
||||
.help-tip.open .help-tip-mark { background: var(--accent); color: #fff; }
|
||||
.help-tip-mark:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
|
||||
.help-tip-bubble {
|
||||
position: absolute;
|
||||
bottom: calc(100% + 8px);
|
||||
left: -8px;
|
||||
transform: translateY(4px);
|
||||
z-index: 60;
|
||||
width: max-content;
|
||||
max-width: 280px;
|
||||
padding: 8px 10px;
|
||||
border-radius: var(--radius-md);
|
||||
background: var(--card-bg);
|
||||
color: var(--text);
|
||||
border: 1px solid var(--border);
|
||||
box-shadow: var(--shadow-card);
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
line-height: 1.45;
|
||||
text-align: left;
|
||||
text-transform: none;
|
||||
letter-spacing: normal;
|
||||
white-space: normal;
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
pointer-events: none;
|
||||
transition: opacity .12s ease, transform .12s ease;
|
||||
}
|
||||
.help-tip-wide .help-tip-bubble { max-width: 340px; }
|
||||
.help-tip-bubble::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 12px;
|
||||
border: 5px solid transparent;
|
||||
border-top-color: var(--border);
|
||||
}
|
||||
.help-tip.open .help-tip-bubble {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
/* ── Theme (light-only palette; System resolves via JS) ── */
|
||||
[data-theme="light"] { color-scheme: light; }
|
||||
|
||||
Reference in New Issue
Block a user