@model StoryCalendarViewModel @using System.Globalization @{ ViewData["Title"] = $"Calendar - {Model.Project.ProjectName}"; ViewData["ProjectSection"] = "Calendar"; var selectedMonthValue = Model.SelectedMonth?.ToString("yyyy-MM", CultureInfo.InvariantCulture); var selectedDateValue = Model.SelectedDate?.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); var showBookLabels = !Model.SelectedBookID.HasValue; var weekdays = new[] { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; }

Story time

Calendar

@Model.StoryRangeLabel

@Model.SceneCount dated scenes @Model.ActiveStoryDayCount story days @Model.UnplacedScenes.Count unplaced
@if (!Model.HasDatedScenes) {

No dated scenes yet

Scenes will appear here once canonical scene chronology has a resolved start date.

} else {
Previous month Next month @if (Model.FirstStoryMonth.HasValue) { First dated scene }
@if (Model.PreviousStoryMonth.HasValue) { Previous story month } @if (Model.NextStoryMonth.HasValue) { Next story month }
@Model.SelectedMonthLabel
@foreach (var weekday in weekdays) {
@weekday
}
@foreach (var week in Model.Weeks) { @foreach (var day in week.Days) { var visibleScenes = day.Scenes.Take(3).ToList(); var hiddenCount = Math.Max(0, day.Scenes.Count - visibleScenes.Count); @day.DayNumber @foreach (var scene in visibleScenes) { @if (showBookLabels) { @scene.BookLabel } @scene.SceneLabel @scene.Title } @if (hiddenCount > 0) { + @hiddenCount more } } }
}
Unplaced scenes
@if (!Model.UnplacedScenes.Any()) {

All scenes in this scope have resolved story dates.

} else {
@foreach (var scene in Model.UnplacedScenes) {
@scene.Title @scene.BookTitle · Chapter @scene.ChapterNumber:g · Scene @scene.SceneNumber:g @if (!string.IsNullOrWhiteSpace(scene.RelativeTimeText)) { @scene.RelativeTimeText }
Open scene
}
}