private void AddRecipeCards() { string[] categoryNames = Locate.GetCategoriesInDisplayOrder(); string[] plottableCategories = categoryNames.Where(x => x.StartsWith("Plottable:")).ToArray(); string[] nonPlottableCategories = categoryNames.Where(x => !x.StartsWith("Plottable:")).ToArray(); AddHeading("Cookbook Recipes", 2); Add($"<strong>Concepts:</strong> " + string.Join(", ", nonPlottableCategories.Select(x => $"<a href='#{Sanitize(x)}'>{x}</a>"))); Add($"<strong>Plottables:</strong> " + string.Join(", ", plottableCategories.Select(x => $"<a href='#{Sanitize(x)}'>{x.Split(':')[1]}</a>"))); AddSpacer(); foreach (string categoryName in categoryNames) { AddHeading(categoryName, 2); Add("<div class='row'>"); foreach (IRecipe recipe in Locate.GetRecipes(categoryName)) { AddRecipeCard(recipe); } Add("</div>"); AddSpacer(); } }