PlotDirector Phase 17L - Word Companion Suggestions Migration
This commit is contained in:
parent
c54da61524
commit
0020ad37d7
@ -151,6 +151,15 @@ public sealed class ScenesController(
|
|||||||
: PartialView("~/Views/Shared/SceneInspectorV2/_SceneCharacterAttributesEditor.cshtml", model);
|
: PartialView("~/Views/Shared/SceneInspectorV2/_SceneCharacterAttributesEditor.cshtml", model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public async Task<IActionResult> SceneSuggestionsEditor(int sceneId)
|
||||||
|
{
|
||||||
|
var model = await scenes.GetEditAsync(sceneId);
|
||||||
|
return model is null
|
||||||
|
? NotFound()
|
||||||
|
: PartialView("~/Views/Shared/SceneInspectorV2/_SceneSuggestionsEditor.cshtml", model);
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<IActionResult> SceneLocationsEditor(int sceneId)
|
public async Task<IActionResult> SceneLocationsEditor(int sceneId)
|
||||||
{
|
{
|
||||||
@ -967,9 +976,18 @@ public sealed class ScenesController(
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await characters.AcceptSceneCharacterSuggestionAsync(id);
|
await characters.AcceptSceneCharacterSuggestionAsync(id);
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return await SceneSuggestionsRefreshJsonAsync(sceneId, refreshPeople: true, refreshWorld: false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException ex)
|
catch (InvalidOperationException ex)
|
||||||
{
|
{
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return BadRequest(new { success = false, message = ex.Message });
|
||||||
|
}
|
||||||
|
|
||||||
TempData["SceneCharacterSuggestionError"] = ex.Message;
|
TempData["SceneCharacterSuggestionError"] = ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -983,9 +1001,18 @@ public sealed class ScenesController(
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await characters.RejectSceneCharacterSuggestionAsync(id);
|
await characters.RejectSceneCharacterSuggestionAsync(id);
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return await SceneSuggestionsRefreshJsonAsync(sceneId, refreshPeople: true, refreshWorld: false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException ex)
|
catch (InvalidOperationException ex)
|
||||||
{
|
{
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return BadRequest(new { success = false, message = ex.Message });
|
||||||
|
}
|
||||||
|
|
||||||
TempData["SceneCharacterSuggestionError"] = ex.Message;
|
TempData["SceneCharacterSuggestionError"] = ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -999,9 +1026,18 @@ public sealed class ScenesController(
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await assets.AcceptSceneAssetSuggestionAsync(id);
|
await assets.AcceptSceneAssetSuggestionAsync(id);
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return await SceneSuggestionsRefreshJsonAsync(sceneId, refreshPeople: true, refreshWorld: true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException ex)
|
catch (InvalidOperationException ex)
|
||||||
{
|
{
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return BadRequest(new { success = false, message = ex.Message });
|
||||||
|
}
|
||||||
|
|
||||||
TempData["SceneAssetSuggestionError"] = ex.Message;
|
TempData["SceneAssetSuggestionError"] = ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1015,9 +1051,18 @@ public sealed class ScenesController(
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await assets.RejectSceneAssetSuggestionAsync(id);
|
await assets.RejectSceneAssetSuggestionAsync(id);
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return await SceneSuggestionsRefreshJsonAsync(sceneId, refreshPeople: true, refreshWorld: true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException ex)
|
catch (InvalidOperationException ex)
|
||||||
{
|
{
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return BadRequest(new { success = false, message = ex.Message });
|
||||||
|
}
|
||||||
|
|
||||||
TempData["SceneAssetSuggestionError"] = ex.Message;
|
TempData["SceneAssetSuggestionError"] = ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1031,9 +1076,18 @@ public sealed class ScenesController(
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await locations.AcceptSceneLocationSuggestionAsync(id);
|
await locations.AcceptSceneLocationSuggestionAsync(id);
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return await SceneSuggestionsRefreshJsonAsync(sceneId, refreshPeople: true, refreshWorld: true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException ex)
|
catch (InvalidOperationException ex)
|
||||||
{
|
{
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return BadRequest(new { success = false, message = ex.Message });
|
||||||
|
}
|
||||||
|
|
||||||
TempData["SceneLocationSuggestionError"] = ex.Message;
|
TempData["SceneLocationSuggestionError"] = ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1047,9 +1101,18 @@ public sealed class ScenesController(
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await locations.RejectSceneLocationSuggestionAsync(id);
|
await locations.RejectSceneLocationSuggestionAsync(id);
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return await SceneSuggestionsRefreshJsonAsync(sceneId, refreshPeople: true, refreshWorld: true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException ex)
|
catch (InvalidOperationException ex)
|
||||||
{
|
{
|
||||||
|
if (IsAjaxRequest())
|
||||||
|
{
|
||||||
|
return BadRequest(new { success = false, message = ex.Message });
|
||||||
|
}
|
||||||
|
|
||||||
TempData["SceneLocationSuggestionError"] = ex.Message;
|
TempData["SceneLocationSuggestionError"] = ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1528,6 +1591,44 @@ public sealed class ScenesController(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<IActionResult> SceneSuggestionsRefreshJsonAsync(int sceneId, bool refreshPeople, bool refreshWorld)
|
||||||
|
{
|
||||||
|
var updated = await scenes.GetEditAsync(sceneId);
|
||||||
|
if (updated is null)
|
||||||
|
{
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
|
||||||
|
var html = new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
["health"] = await RenderPartialViewToStringAsync("~/Views/Shared/SceneInspectorV2/_SceneInspectorHealthStrip.cshtml", updated)
|
||||||
|
};
|
||||||
|
|
||||||
|
if (refreshPeople)
|
||||||
|
{
|
||||||
|
html["people"] = await RenderPartialViewToStringAsync("~/Views/Shared/SceneInspectorV2/_ScenePeopleCard.cshtml", updated);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (refreshWorld)
|
||||||
|
{
|
||||||
|
html["world"] = await RenderPartialViewToStringAsync("~/Views/Shared/SceneInspectorV2/_SceneWorldCard.cshtml", updated);
|
||||||
|
}
|
||||||
|
|
||||||
|
var primaryLocationName = updated.LocationOptions.FirstOrDefault(x => x.Value == updated.PrimaryLocationID?.ToString())?.Text?.Trim();
|
||||||
|
|
||||||
|
return Json(new
|
||||||
|
{
|
||||||
|
success = true,
|
||||||
|
html,
|
||||||
|
editorHtml = await RenderPartialViewToStringAsync("~/Views/Shared/SceneInspectorV2/_SceneSuggestionsEditor.cshtml", updated),
|
||||||
|
scene = new
|
||||||
|
{
|
||||||
|
updated.SceneID,
|
||||||
|
PrimaryLocationName = primaryLocationName ?? "No location"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private async Task<IActionResult> ScenePeopleContinuityRefreshJsonAsync(int sceneId)
|
private async Task<IActionResult> ScenePeopleContinuityRefreshJsonAsync(int sceneId)
|
||||||
{
|
{
|
||||||
var updated = await scenes.GetEditAsync(sceneId);
|
var updated = await scenes.GetEditAsync(sceneId);
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
@{
|
@{
|
||||||
var povCharacterId = Model.POVCharacterID
|
var povCharacterId = Model.POVCharacterID
|
||||||
?? Model.SceneCharacters.FirstOrDefault(x => x.RoleInSceneTypeName?.Contains("POV", StringComparison.OrdinalIgnoreCase) == true)?.CharacterID;
|
?? Model.SceneCharacters.FirstOrDefault(x => x.RoleInSceneTypeName?.Contains("POV", StringComparison.OrdinalIgnoreCase) == true)?.CharacterID;
|
||||||
|
var suggestionCount = Model.CharacterSuggestions.Count + Model.AssetSuggestions.Count + Model.LocationSuggestions.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
<article class="scene-inspector-v2-card" data-scene-summary-part="people">
|
<article class="scene-inspector-v2-card" data-scene-summary-part="people">
|
||||||
@ -53,11 +54,16 @@
|
|||||||
<span>Attribute changes</span>
|
<span>Attribute changes</span>
|
||||||
<strong>@Model.CharacterAttributeEvents.Count</strong>
|
<strong>@Model.CharacterAttributeEvents.Count</strong>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="@(suggestionCount > 0 ? "attention" : "")">
|
||||||
|
<span>Suggestions</span>
|
||||||
|
<strong>@suggestionCount</strong>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="scene-inspector-v2-actions">
|
<div class="scene-inspector-v2-actions">
|
||||||
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="characters" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneCharactersEditor", "Scenes", new { sceneId = Model.SceneID })">Manage characters</button>
|
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="characters" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneCharactersEditor", "Scenes", new { sceneId = Model.SceneID })">Manage characters</button>
|
||||||
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="attributes" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneCharacterAttributesEditor", "Scenes", new { sceneId = Model.SceneID })">Manage attributes</button>
|
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="attributes" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneCharacterAttributesEditor", "Scenes", new { sceneId = Model.SceneID })">Manage attributes</button>
|
||||||
|
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="suggestions" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneSuggestionsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage suggestions</button>
|
||||||
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="knowledge" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneKnowledgeEditor", "Scenes", new { sceneId = Model.SceneID })">Manage knowledge</button>
|
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="knowledge" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneKnowledgeEditor", "Scenes", new { sceneId = Model.SceneID })">Manage knowledge</button>
|
||||||
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="relationships" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneRelationshipsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage relationships</button>
|
<button type="button" class="btn btn-sm btn-outline-primary" data-scene-editor="relationships" data-scene-id="@Model.SceneID" data-scene-editor-url="@Url.Action("SceneRelationshipsEditor", "Scenes", new { sceneId = Model.SceneID })">Manage relationships</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -0,0 +1,192 @@
|
|||||||
|
@model SceneEditViewModel
|
||||||
|
@{
|
||||||
|
var totalSuggestions = Model.CharacterSuggestions.Count + Model.AssetSuggestions.Count + Model.LocationSuggestions.Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
<div class="scene-inspector-editor-form">
|
||||||
|
<div class="scene-inspector-editor-fields">
|
||||||
|
<section class="scene-structure-editor-section">
|
||||||
|
<div class="scene-structure-editor-heading">
|
||||||
|
<span>Word Companion suggestions</span>
|
||||||
|
<strong>@totalSuggestions</strong>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (totalSuggestions == 0)
|
||||||
|
{
|
||||||
|
<p class="muted">No pending Word Companion suggestions for this scene.</p>
|
||||||
|
}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="scene-structure-editor-section">
|
||||||
|
<div class="scene-structure-editor-heading">
|
||||||
|
<span>Character suggestions</span>
|
||||||
|
<strong>@Model.CharacterSuggestions.Count</strong>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (!Model.CharacterSuggestions.Any())
|
||||||
|
{
|
||||||
|
<p class="muted">No pending character suggestions.</p>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<div class="scene-structure-editor-list">
|
||||||
|
@foreach (var suggestion in Model.CharacterSuggestions)
|
||||||
|
{
|
||||||
|
<article class="scene-structure-editor-card">
|
||||||
|
<div class="scene-structure-card-header">
|
||||||
|
<div>
|
||||||
|
<h4>@suggestion.CharacterName</h4>
|
||||||
|
<p>@suggestion.Confidence confidence</p>
|
||||||
|
</div>
|
||||||
|
<span class="scene-structure-marker">Character</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (!string.IsNullOrWhiteSpace(suggestion.Reason))
|
||||||
|
{
|
||||||
|
<p>@suggestion.Reason</p>
|
||||||
|
}
|
||||||
|
<p class="muted">Detected @suggestion.DetectedUtc.ToLocalTime().ToString("d MMM yyyy HH:mm")</p>
|
||||||
|
|
||||||
|
<div class="scene-structure-action-row">
|
||||||
|
<form asp-controller="Scenes" asp-action="AcceptCharacterSuggestion" method="post" class="scene-structure-delete-form" data-scene-editor-form>
|
||||||
|
@Html.AntiForgeryToken()
|
||||||
|
<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" />
|
||||||
|
<div class="scene-inspector-editor-error" data-scene-editor-error hidden></div>
|
||||||
|
<button class="btn btn-sm btn-primary" type="submit" data-scene-editor-save>Accept</button>
|
||||||
|
</form>
|
||||||
|
<form asp-controller="Scenes" asp-action="RejectCharacterSuggestion" method="post" class="scene-structure-delete-form" data-scene-editor-form>
|
||||||
|
@Html.AntiForgeryToken()
|
||||||
|
<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" />
|
||||||
|
<div class="scene-inspector-editor-error" data-scene-editor-error hidden></div>
|
||||||
|
<button class="btn btn-sm btn-outline-secondary" type="submit" data-scene-editor-save>Reject</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="scene-structure-editor-section">
|
||||||
|
<div class="scene-structure-editor-heading">
|
||||||
|
<span>Asset suggestions</span>
|
||||||
|
<strong>@Model.AssetSuggestions.Count</strong>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (!Model.AssetSuggestions.Any())
|
||||||
|
{
|
||||||
|
<p class="muted">No pending asset suggestions.</p>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<div class="scene-structure-editor-list">
|
||||||
|
@foreach (var suggestion in Model.AssetSuggestions)
|
||||||
|
{
|
||||||
|
<article class="scene-structure-editor-card">
|
||||||
|
<div class="scene-structure-card-header">
|
||||||
|
<div>
|
||||||
|
<h4>@suggestion.AssetName</h4>
|
||||||
|
<p>@suggestion.Confidence confidence</p>
|
||||||
|
</div>
|
||||||
|
<span class="scene-structure-marker">Asset</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (!string.IsNullOrWhiteSpace(suggestion.Reason))
|
||||||
|
{
|
||||||
|
<p>@suggestion.Reason</p>
|
||||||
|
}
|
||||||
|
<p class="muted">Detected @suggestion.DetectedUtc.ToLocalTime().ToString("d MMM yyyy HH:mm")</p>
|
||||||
|
|
||||||
|
<div class="scene-structure-action-row">
|
||||||
|
<form asp-controller="Scenes" asp-action="AcceptAssetSuggestion" method="post" class="scene-structure-delete-form" data-scene-editor-form>
|
||||||
|
@Html.AntiForgeryToken()
|
||||||
|
<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" />
|
||||||
|
<div class="scene-inspector-editor-error" data-scene-editor-error hidden></div>
|
||||||
|
<button class="btn btn-sm btn-primary" type="submit" data-scene-editor-save>Accept</button>
|
||||||
|
</form>
|
||||||
|
<form asp-controller="Scenes" asp-action="RejectAssetSuggestion" method="post" class="scene-structure-delete-form" data-scene-editor-form>
|
||||||
|
@Html.AntiForgeryToken()
|
||||||
|
<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" />
|
||||||
|
<div class="scene-inspector-editor-error" data-scene-editor-error hidden></div>
|
||||||
|
<button class="btn btn-sm btn-outline-secondary" type="submit" data-scene-editor-save>Reject</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="scene-structure-editor-section">
|
||||||
|
<div class="scene-structure-editor-heading">
|
||||||
|
<span>Location suggestions</span>
|
||||||
|
<strong>@Model.LocationSuggestions.Count</strong>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (!Model.LocationSuggestions.Any())
|
||||||
|
{
|
||||||
|
<p class="muted">No pending location suggestions.</p>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<div class="scene-structure-editor-list">
|
||||||
|
@foreach (var suggestion in Model.LocationSuggestions)
|
||||||
|
{
|
||||||
|
<article class="scene-structure-editor-card">
|
||||||
|
<div class="scene-structure-card-header">
|
||||||
|
<div>
|
||||||
|
<h4>@(!string.IsNullOrWhiteSpace(suggestion.LocationPath) ? suggestion.LocationPath : suggestion.LocationName)</h4>
|
||||||
|
<p>@suggestion.Confidence confidence</p>
|
||||||
|
</div>
|
||||||
|
<span class="scene-structure-marker">Location</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if (!string.IsNullOrWhiteSpace(suggestion.Reason))
|
||||||
|
{
|
||||||
|
<p>@suggestion.Reason</p>
|
||||||
|
}
|
||||||
|
<p class="muted">Detected @suggestion.DetectedUtc.ToLocalTime().ToString("d MMM yyyy HH:mm")</p>
|
||||||
|
|
||||||
|
<div class="scene-structure-action-row">
|
||||||
|
<form asp-controller="Scenes" asp-action="AcceptLocationSuggestion" method="post" class="scene-structure-delete-form" data-scene-editor-form>
|
||||||
|
@Html.AntiForgeryToken()
|
||||||
|
<input type="hidden" name="id" value="@suggestion.SceneLocationSuggestionID" />
|
||||||
|
<input type="hidden" name="sceneId" value="@Model.SceneID" />
|
||||||
|
<input type="hidden" name="projectId" value="@Model.ReturnProjectID" />
|
||||||
|
<input type="hidden" name="bookId" value="@Model.ReturnBookID" />
|
||||||
|
<div class="scene-inspector-editor-error" data-scene-editor-error hidden></div>
|
||||||
|
<button class="btn btn-sm btn-primary" type="submit" data-scene-editor-save>Accept</button>
|
||||||
|
</form>
|
||||||
|
<form asp-controller="Scenes" asp-action="RejectLocationSuggestion" method="post" class="scene-structure-delete-form" data-scene-editor-form>
|
||||||
|
@Html.AntiForgeryToken()
|
||||||
|
<input type="hidden" name="id" value="@suggestion.SceneLocationSuggestionID" />
|
||||||
|
<input type="hidden" name="sceneId" value="@Model.SceneID" />
|
||||||
|
<input type="hidden" name="projectId" value="@Model.ReturnProjectID" />
|
||||||
|
<input type="hidden" name="bookId" value="@Model.ReturnBookID" />
|
||||||
|
<div class="scene-inspector-editor-error" data-scene-editor-error hidden></div>
|
||||||
|
<button class="btn btn-sm btn-outline-secondary" type="submit" data-scene-editor-save>Reject</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="scene-inspector-editor-footer">
|
||||||
|
<button type="button" class="btn btn-sm btn-outline-secondary" data-scene-editor-close>Close</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -7,6 +7,7 @@
|
|||||||
dependencies: "Manage dependencies",
|
dependencies: "Manage dependencies",
|
||||||
characters: "Manage characters",
|
characters: "Manage characters",
|
||||||
attributes: "Manage attributes",
|
attributes: "Manage attributes",
|
||||||
|
suggestions: "Manage suggestions",
|
||||||
knowledge: "Manage knowledge",
|
knowledge: "Manage knowledge",
|
||||||
relationships: "Manage relationships",
|
relationships: "Manage relationships",
|
||||||
locations: "Manage locations",
|
locations: "Manage locations",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user