Quick Fix - Move Word Companion Suggestions to a Dedicated Scene Inspector Panel

This commit is contained in:
Nick Beckley 2026-06-28 22:09:44 +01:00
parent c8ae73a954
commit 749b671834

View File

@ -69,10 +69,101 @@
} }
</section> </section>
@if (Model.CharacterSuggestions.Any() || Model.AssetSuggestions.Any())
{
<section class="inspector-section word-companion-suggestion-section" data-section-title="Word Companion Suggestions" data-section-id="inspector-word-companion-suggestions">
<h3>Word Companion Suggestions</h3>
@if (TempData["SceneCharacterSuggestionError"] is string suggestionError)
{
<p class="text-danger form-helper-message">@suggestionError</p>
}
@if (TempData["SceneAssetSuggestionError"] is string assetSuggestionError)
{
<p class="text-danger form-helper-message">@assetSuggestionError</p>
}
<div class="word-companion-suggestion-panel">
<div class="word-companion-suggestion-list">
@if (Model.CharacterSuggestions.Any())
{
<h4 class="inspector-subheading">Characters</h4>
@foreach (var suggestion in Model.CharacterSuggestions)
{
<article class="word-companion-suggestion-item">
<div>
<strong>@suggestion.CharacterName</strong>
<span class="muted">@suggestion.Confidence confidence</span>
@if (!string.IsNullOrWhiteSpace(suggestion.Reason))
{
<span class="muted">@suggestion.Reason</span>
}
<span class="muted">Detected @suggestion.DetectedUtc.ToLocalTime().ToString("d MMM yyyy HH:mm")</span>
</div>
<div class="character-appearance-actions">
<form asp-controller="Scenes" asp-action="AcceptCharacterSuggestion" method="post">
<input type="hidden" name="id" value="@suggestion.SceneCharacterSuggestionID" />
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="projectId" value="@Model.ReturnProjectID" />
<input type="hidden" name="bookId" value="@Model.ReturnBookID" />
<button class="btn btn-outline-primary btn-sm" type="submit">Accept</button>
</form>
<form asp-controller="Scenes" asp-action="RejectCharacterSuggestion" method="post">
<input type="hidden" name="id" value="@suggestion.SceneCharacterSuggestionID" />
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="projectId" value="@Model.ReturnProjectID" />
<input type="hidden" name="bookId" value="@Model.ReturnBookID" />
<button class="btn btn-outline-secondary btn-sm" type="submit">Reject</button>
</form>
</div>
</article>
}
}
@if (Model.AssetSuggestions.Any())
{
<h4 class="inspector-subheading">Assets</h4>
@foreach (var suggestion in Model.AssetSuggestions)
{
<article class="word-companion-suggestion-item">
<div>
<strong>@suggestion.AssetName</strong>
<span class="muted">@suggestion.Confidence confidence</span>
@if (!string.IsNullOrWhiteSpace(suggestion.Reason))
{
<span class="muted">@suggestion.Reason</span>
}
<span class="muted">Detected @suggestion.DetectedUtc.ToLocalTime().ToString("d MMM yyyy HH:mm")</span>
</div>
<div class="character-appearance-actions">
<form asp-controller="Scenes" asp-action="AcceptAssetSuggestion" method="post">
<input type="hidden" name="id" value="@suggestion.SceneAssetSuggestionID" />
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="projectId" value="@Model.ReturnProjectID" />
<input type="hidden" name="bookId" value="@Model.ReturnBookID" />
<button class="btn btn-outline-primary btn-sm" type="submit">Accept</button>
</form>
<form asp-controller="Scenes" asp-action="RejectAssetSuggestion" method="post">
<input type="hidden" name="id" value="@suggestion.SceneAssetSuggestionID" />
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="projectId" value="@Model.ReturnProjectID" />
<input type="hidden" name="bookId" value="@Model.ReturnBookID" />
<button class="btn btn-outline-secondary btn-sm" type="submit">Reject</button>
</form>
</div>
</article>
}
}
</div>
</div>
</section>
}
<div class="inspector-quick-nav" data-inspector-nav> <div class="inspector-quick-nav" data-inspector-nav>
<input class="form-control form-control-sm inspector-search" type="search" placeholder="Find in scene..." data-inspector-search /> <input class="form-control form-control-sm inspector-search" type="search" placeholder="Find in scene..." data-inspector-search />
<div class="inspector-nav-links"> <div class="inspector-nav-links">
<a href="#inspector-overview">Overview</a> <a href="#inspector-overview">Overview</a>
@if (Model.CharacterSuggestions.Any() || Model.AssetSuggestions.Any())
{
<a href="#inspector-word-companion-suggestions">Word Companion</a>
}
<a href="#inspector-timing">Time</a> <a href="#inspector-timing">Time</a>
<a href="#inspector-purpose">Purpose</a> <a href="#inspector-purpose">Purpose</a>
@ -361,90 +452,6 @@
<!-- Characters --> <!-- Characters -->
<section class="inspector-section character-section" data-section-title="Characters" data-section-id="inspector-characters"> <section class="inspector-section character-section" data-section-title="Characters" data-section-id="inspector-characters">
<h3>Characters <help-icon key="sceneInspector.characters" /></h3> <h3>Characters <help-icon key="sceneInspector.characters" /></h3>
@if (Model.CharacterSuggestions.Any() || Model.AssetSuggestions.Any())
{
<div class="word-companion-suggestion-panel">
<h4 class="inspector-subheading">Word Companion Suggestions</h4>
@if (TempData["SceneCharacterSuggestionError"] is string suggestionError)
{
<p class="text-danger form-helper-message">@suggestionError</p>
}
@if (TempData["SceneAssetSuggestionError"] is string assetSuggestionError)
{
<p class="text-danger form-helper-message">@assetSuggestionError</p>
}
<div class="word-companion-suggestion-list">
@if (Model.CharacterSuggestions.Any())
{
<h5 class="inspector-subheading">Characters</h5>
@foreach (var suggestion in Model.CharacterSuggestions)
{
<article class="word-companion-suggestion-item">
<div>
<strong>@suggestion.CharacterName</strong>
<span class="muted">@suggestion.Confidence confidence</span>
@if (!string.IsNullOrWhiteSpace(suggestion.Reason))
{
<span class="muted">@suggestion.Reason</span>
}
<span class="muted">Detected @suggestion.DetectedUtc.ToLocalTime().ToString("d MMM yyyy HH:mm")</span>
</div>
<div class="character-appearance-actions">
<form asp-controller="Scenes" asp-action="AcceptCharacterSuggestion" method="post">
<input type="hidden" name="id" value="@suggestion.SceneCharacterSuggestionID" />
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="projectId" value="@Model.ReturnProjectID" />
<input type="hidden" name="bookId" value="@Model.ReturnBookID" />
<button class="btn btn-outline-primary btn-sm" type="submit">Accept</button>
</form>
<form asp-controller="Scenes" asp-action="RejectCharacterSuggestion" method="post">
<input type="hidden" name="id" value="@suggestion.SceneCharacterSuggestionID" />
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="projectId" value="@Model.ReturnProjectID" />
<input type="hidden" name="bookId" value="@Model.ReturnBookID" />
<button class="btn btn-outline-secondary btn-sm" type="submit">Reject</button>
</form>
</div>
</article>
}
}
@if (Model.AssetSuggestions.Any())
{
<h5 class="inspector-subheading">Assets</h5>
@foreach (var suggestion in Model.AssetSuggestions)
{
<article class="word-companion-suggestion-item">
<div>
<strong>@suggestion.AssetName</strong>
<span class="muted">@suggestion.Confidence confidence</span>
@if (!string.IsNullOrWhiteSpace(suggestion.Reason))
{
<span class="muted">@suggestion.Reason</span>
}
<span class="muted">Detected @suggestion.DetectedUtc.ToLocalTime().ToString("d MMM yyyy HH:mm")</span>
</div>
<div class="character-appearance-actions">
<form asp-controller="Scenes" asp-action="AcceptAssetSuggestion" method="post">
<input type="hidden" name="id" value="@suggestion.SceneAssetSuggestionID" />
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="projectId" value="@Model.ReturnProjectID" />
<input type="hidden" name="bookId" value="@Model.ReturnBookID" />
<button class="btn btn-outline-primary btn-sm" type="submit">Accept</button>
</form>
<form asp-controller="Scenes" asp-action="RejectAssetSuggestion" method="post">
<input type="hidden" name="id" value="@suggestion.SceneAssetSuggestionID" />
<input type="hidden" name="sceneId" value="@Model.SceneID" />
<input type="hidden" name="projectId" value="@Model.ReturnProjectID" />
<input type="hidden" name="bookId" value="@Model.ReturnBookID" />
<button class="btn btn-outline-secondary btn-sm" type="submit">Reject</button>
</form>
</div>
</article>
}
}
</div>
</div>
}
@if (!Model.SceneCharacters.Any()) @if (!Model.SceneCharacters.Any())
{ {
<p class="muted">No characters attached to this scene yet. Add the people who appear, are mentioned, or meaningfully affect the scene.</p> <p class="muted">No characters attached to this scene yet. Add the people who appear, are mentioned, or meaningfully affect the scene.</p>