@model NamesLibraryViewModel @{ ViewData["Title"] = $"Names Library - {Model.Project.ProjectName}"; ViewData["ProjectSection"] = "Names"; var filter = Model.Filter; var previousPage = Math.Max(1, filter.Page - 1); var nextPage = Math.Min(Model.TotalPages, filter.Page + 1); var genderPreset = (filter.GenderPreference, filter.GenderThreshold) switch { ("Female", >= 0.9m) => "female-very-strong", ("Female", >= 0.7m) => "female-strong", ("Female", _) => "female-mostly", ("Male", >= 0.9m) => "male-very-strong", ("Male", >= 0.7m) => "male-strong", ("Male", _) => "male-mostly", ("Mixed", _) => "mixed-balanced", _ => string.Empty }; string GenderLabel(NameSearchResult row) { if (!row.FemaleWeight.HasValue || !row.MaleWeight.HasValue) { return "No profile"; } if (row.FemaleWeight >= 0.7m) { return "strong female prior"; } if (row.MaleWeight >= 0.7m) { return "strong male prior"; } return "mixed prior"; } string EraLabel(NameSearchResult row) => row.BirthYearFrom.HasValue && row.BirthYearTo.HasValue ? $"established for {row.BirthYearFrom}-{row.BirthYearTo}" : "no era profile"; }

Characters

Names Library

Search established given-name forms with era, locale and current-project usage context.

Results

@Model.TotalRows.ToString("N0") names
@if (!Model.Results.Any()) {

No matching names found.

} else {
@foreach (var row in Model.Results) { }
Name Profile Related forms Current use
@row.DisplayName
@row.NameType@if (row.IsWordAmbiguous){ · ambiguous word}
@GenderLabel(row); @EraLabel(row)
@row.LocaleDisplayName · usage @row.UsageWeight?.ToString("0.000") · confidence @row.Confidence?.ToString("0.000")
@(string.IsNullOrWhiteSpace(row.RelatedForms) ? "None listed" : row.RelatedForms) @if (row.UsedCount > 0) { Already used
@row.UsedSummary
} else { Unused here }
Previous Page @filter.Page of @Model.TotalPages Next
}
@section Scripts { }