172 lines
8.9 KiB
Plaintext
172 lines
8.9 KiB
Plaintext
@model CharacterDetailViewModel
|
|
@{
|
|
ViewData["Title"] = Model.Character.CharacterName;
|
|
var firstAppearance = Model.Appearances.FirstOrDefault();
|
|
}
|
|
|
|
<nav class="breadcrumb-trail" aria-label="Breadcrumb">
|
|
<a asp-controller="Projects" asp-action="Index">Projects</a>
|
|
<a asp-controller="Projects" asp-action="Details" asp-route-id="@Model.Project.ProjectID">@Model.Project.ProjectName</a>
|
|
<a asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Characters</a>
|
|
<span>@Model.Character.CharacterName</span>
|
|
</nav>
|
|
|
|
<section class="context-header">
|
|
<div class="context-title">
|
|
<span class="eyebrow">Project context</span>
|
|
<strong>@Model.Project.ProjectName</strong>
|
|
</div>
|
|
<nav class="context-nav" aria-label="Project navigation">
|
|
<a asp-controller="Timeline" asp-action="Index" asp-route-ProjectID="@Model.Project.ProjectID" asp-route-SelectedSceneID="@firstAppearance?.SceneID" asp-route-FocusType="character" asp-route-FocusID="@Model.Character.CharacterID">Show on timeline</a>
|
|
<a asp-controller="Analytics" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Story health</a>
|
|
<a asp-controller="Warnings" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Warnings</a>
|
|
<a asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Characters</a>
|
|
</nav>
|
|
</section>
|
|
|
|
<div class="page-heading">
|
|
<div>
|
|
<p class="eyebrow">Character</p>
|
|
<h1>@Model.Character.CharacterName</h1>
|
|
<p class="lead-text">@Model.Character.DefaultDescription</p>
|
|
</div>
|
|
<div class="button-row">
|
|
<a class="btn btn-outline-secondary" asp-action="Index" asp-route-projectId="@Model.Project.ProjectID">Characters</a>
|
|
<a class="btn btn-outline-secondary" asp-controller="Timeline" asp-action="Index" asp-route-ProjectID="@Model.Project.ProjectID" asp-route-SelectedSceneID="@firstAppearance?.SceneID" asp-route-FocusType="character" asp-route-FocusID="@Model.Character.CharacterID">Back to timeline</a>
|
|
<a class="btn btn-outline-primary" asp-controller="Dynamics" asp-action="Character" asp-route-id="@Model.Character.CharacterID">Character arc</a>
|
|
<a class="btn btn-outline-primary" asp-controller="Dynamics" asp-action="Knowledge" asp-route-id="@Model.Character.CharacterID">Knowledge timeline</a>
|
|
<a class="btn btn-outline-primary" asp-controller="Exports" asp-action="Character" asp-route-id="@Model.Character.CharacterID">Export character</a>
|
|
<a class="btn btn-outline-secondary" asp-controller="Exports" asp-action="Character" asp-route-id="@Model.Character.CharacterID" asp-route-format="markdown">Markdown</a>
|
|
<a class="btn btn-outline-primary" asp-action="Edit" asp-route-id="@Model.Character.CharacterID">Edit character</a>
|
|
<form asp-action="Archive" method="post" class="archive-button-form" data-confirm-message="Archive this character? This will hide it from active lists and timelines, but the data will be kept and can be restored later.">
|
|
<input type="hidden" name="id" value="@Model.Character.CharacterID" />
|
|
<input type="hidden" name="projectId" value="@Model.Project.ProjectID" />
|
|
<button class="btn btn-outline-danger" type="submit">Archive Character</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<section class="asset-detail-grid">
|
|
<article class="plain-card">
|
|
<h2>Profile</h2>
|
|
<p><strong>Short name:</strong> @Model.Character.ShortName</p>
|
|
<p><strong>Sex:</strong> @Model.Character.Sex</p>
|
|
<p><strong>Age:</strong> @Model.DisplayAge</p>
|
|
<p><strong>Height:</strong> @Model.Character.Height</p>
|
|
<p><strong>Eye colour:</strong> @Model.Character.EyeColour</p>
|
|
</article>
|
|
<article class="plain-card">
|
|
<h2>Relationships</h2>
|
|
@if (!Model.Relationships.Any())
|
|
{
|
|
<p class="muted">No relationships yet.</p>
|
|
}
|
|
else
|
|
{
|
|
<div class="asset-mini-list">
|
|
@foreach (var relationship in Model.Relationships)
|
|
{
|
|
<div class="asset-mini-item">
|
|
<strong>@relationship.CharacterAName -> @relationship.CharacterBName</strong>
|
|
<span>@relationship.RelationshipTypeName</span>
|
|
<a asp-controller="Dynamics" asp-action="Relationship" asp-route-id="@relationship.CharacterRelationshipID">Evolution</a>
|
|
<form asp-action="ArchiveRelationship" method="post" class="archive-button-form" data-confirm-message="Archive this relationship? This will hide it from active lists and timelines, but the data will be kept and can be restored later.">
|
|
<input type="hidden" name="id" value="@relationship.CharacterRelationshipID" />
|
|
<input type="hidden" name="characterId" value="@Model.Character.CharacterID" />
|
|
<button class="btn btn-outline-danger btn-sm" type="submit">Archive</button>
|
|
</form>
|
|
</div>
|
|
}
|
|
</div>
|
|
}
|
|
</article>
|
|
</section>
|
|
|
|
<section class="list-section mt-3">
|
|
<h2>Scene appearances</h2>
|
|
@if (!Model.Appearances.Any())
|
|
{
|
|
<p class="muted">No scene appearances yet.</p>
|
|
}
|
|
else
|
|
{
|
|
<div class="asset-mini-list">
|
|
@foreach (var appearance in Model.Appearances)
|
|
{
|
|
<div class="asset-mini-item">
|
|
<strong>@appearance.BookTitle / Ch @appearance.ChapterNumber / Scene @appearance.SceneNumber: @appearance.SceneTitle</strong>
|
|
<span>@appearance.RoleInSceneTypeName / @appearance.PresenceTypeName</span>
|
|
<span>@appearance.OutfitDescription @appearance.PhysicalCondition @appearance.EmotionalState</span>
|
|
<a asp-controller="Timeline" asp-action="Index" asp-route-ProjectID="@Model.Project.ProjectID" asp-route-SelectedSceneID="@appearance.SceneID" asp-route-FocusType="character" asp-route-FocusID="@Model.Character.CharacterID">Open in timeline</a>
|
|
</div>
|
|
}
|
|
</div>
|
|
}
|
|
</section>
|
|
|
|
<section class="list-section mt-3">
|
|
<h2>Attribute history</h2>
|
|
@if (!Model.AttributeEvents.Any())
|
|
{
|
|
<p class="muted">No attribute events yet.</p>
|
|
}
|
|
else
|
|
{
|
|
<div class="asset-mini-list">
|
|
@foreach (var item in Model.AttributeEvents)
|
|
{
|
|
<div class="asset-mini-item">
|
|
<strong>@item.AttributeName: @item.AttributeValue</strong>
|
|
<span>@item.BookTitle / Ch @item.ChapterNumber / Scene @item.SceneNumber: @item.SceneTitle</span>
|
|
<span>@item.Description</span>
|
|
<a asp-controller="Timeline" asp-action="Index" asp-route-ProjectID="@Model.Project.ProjectID" asp-route-SelectedSceneID="@item.SceneID" asp-route-FocusType="character" asp-route-FocusID="@Model.Character.CharacterID">Open in timeline</a>
|
|
</div>
|
|
}
|
|
</div>
|
|
}
|
|
</section>
|
|
|
|
<section class="list-section mt-3">
|
|
<h2>Knowledge</h2>
|
|
@if (!Model.KnowledgeItems.Any())
|
|
{
|
|
<p class="muted">No knowledge entries yet.</p>
|
|
}
|
|
else
|
|
{
|
|
<div class="asset-mini-list">
|
|
@foreach (var item in Model.KnowledgeItems)
|
|
{
|
|
<div class="asset-mini-item">
|
|
<strong>@item.KnowledgeStateName: @(item.AssetName ?? item.ThreadTitle)</strong>
|
|
<span>@item.BookTitle / Ch @item.ChapterNumber / Scene @item.SceneNumber: @item.SceneTitle</span>
|
|
<span>@item.Description</span>
|
|
<a asp-controller="Timeline" asp-action="Index" asp-route-ProjectID="@Model.Project.ProjectID" asp-route-SelectedSceneID="@item.SceneID" asp-route-FocusType="character" asp-route-FocusID="@Model.Character.CharacterID">Open in timeline</a>
|
|
</div>
|
|
}
|
|
</div>
|
|
}
|
|
</section>
|
|
|
|
<section class="list-section mt-3">
|
|
<h2>Relationship events</h2>
|
|
@if (!Model.RelationshipEvents.Any())
|
|
{
|
|
<p class="muted">No relationship events yet.</p>
|
|
}
|
|
else
|
|
{
|
|
<div class="asset-mini-list">
|
|
@foreach (var item in Model.RelationshipEvents)
|
|
{
|
|
<div class="asset-mini-item">
|
|
<strong>@item.CharacterAName -> @item.CharacterBName: @item.RelationshipStateName</strong>
|
|
<span>@item.BookTitle / Ch @item.ChapterNumber / Scene @item.SceneNumber: @item.SceneTitle</span>
|
|
<span>Intensity @item.Intensity. @item.Description</span>
|
|
<a asp-controller="Timeline" asp-action="Index" asp-route-ProjectID="@Model.Project.ProjectID" asp-route-SelectedSceneID="@item.SceneID" asp-route-FocusType="character" asp-route-FocusID="@Model.Character.CharacterID">Open in timeline</a>
|
|
</div>
|
|
}
|
|
</div>
|
|
}
|
|
</section>
|