|
1 | 1 | @page "/wiki/{project}/{route?}" |
2 | 2 | @using Markdig |
3 | | -@using Markdig.SyntaxHighlighting |
| 3 | +@using Markdig.Prism |
4 | 4 | @using Web.Services |
| 5 | + |
5 | 6 | @inject HttpClient Http |
6 | 7 | @inject ProjectsService Projects |
7 | 8 |
|
|
23 | 24 | } |
24 | 25 | else |
25 | 26 | { |
26 | | - @if (mdSource != null) |
27 | | - { |
28 | | - @((MarkupString) mdSource) |
29 | | - } |
30 | | - else |
31 | | - { |
32 | | - <p>Route not found; please check the URL and try again, or <a href="/wiki">go back to the wiki root</a>.</p> |
33 | | - } |
| 27 | + <div class="wiki-page"> |
| 28 | + <nav class="wiki-nav"> |
| 29 | + <ul> |
| 30 | + @foreach (var p in ProjectPages.OrderBy(x => x.Slug)) |
| 31 | + { |
| 32 | + <li><a href="/wiki/@Project/@p.Slug">@PrettyPageTitle(p)</a></li> |
| 33 | + } |
| 34 | + </ul> |
| 35 | + </nav> |
| 36 | + |
| 37 | + <main class="wiki-main"> |
| 38 | + @if (mdSource != null) |
| 39 | + { |
| 40 | + <Web.Components.Markdown Content="@mdSource" /> |
| 41 | + } |
| 42 | + else |
| 43 | + { |
| 44 | + <p>Route not found; please check the URL and try again, or <a href="/wiki">go back to the wiki root</a>.</p> |
| 45 | + } |
| 46 | + </main> |
| 47 | + </div> |
34 | 48 | } |
35 | 49 | } |
36 | 50 |
|
|
41 | 55 | [Parameter] |
42 | 56 | public string? Route { get; set; } |
43 | 57 |
|
| 58 | + public ICollection<ProjectsService.WikiPage> ProjectPages { get; set; } = Array.Empty<ProjectsService.WikiPage>(); |
| 59 | + |
44 | 60 | public string? mdSource; |
45 | 61 |
|
46 | 62 | public bool IsErrored = false; |
|
52 | 68 | if (string.IsNullOrWhiteSpace(Route)) |
53 | 69 | Route = "home"; |
54 | 70 |
|
55 | | - if(string.IsNullOrEmpty(Project)) |
| 71 | + if (string.IsNullOrEmpty(Project)) |
56 | 72 | { |
57 | 73 | IsErrored = true; |
58 | 74 | IsLoading = false; |
|
61 | 77 | } |
62 | 78 |
|
63 | 79 | var projList = await Projects.GetProjectSlugs(); |
64 | | - if(!projList.Contains(Project, StringComparer.InvariantCultureIgnoreCase)) |
| 80 | + if (!projList.Contains(Project, StringComparer.InvariantCultureIgnoreCase)) |
65 | 81 | { |
66 | 82 | IsErrored = true; |
67 | 83 | IsLoading = false; |
|
71 | 87 |
|
72 | 88 | if (!string.IsNullOrEmpty(Project) && !string.IsNullOrEmpty(Route)) |
73 | 89 | { |
74 | | - var source = $"wiki-pages/{Project}/{Route}.md"; |
75 | | - var sourceStr = await Http.GetAsync(source); |
76 | | - if (sourceStr.IsSuccessStatusCode) |
| 90 | + this.ProjectPages = await Projects.GetPagesForProject(Project.ToLower()); |
| 91 | + if (ProjectPages.Count == 0) |
| 92 | + { |
| 93 | + IsErrored = true; |
| 94 | + CustomError = "Requested page not found."; |
| 95 | + } |
| 96 | + else |
77 | 97 | { |
78 | | - var pl = new Markdig.MarkdownPipelineBuilder() |
79 | | - .UseAdvancedExtensions() |
80 | | - .UseSyntaxHighlighting() |
81 | | - .Build(); |
| 98 | + var source = ProjectPages.Where(x => x.Slug.Equals(Route, StringComparison.InvariantCultureIgnoreCase)).ToArray(); |
| 99 | + if (source.Length == 0) |
| 100 | + { |
| 101 | + IsErrored = true; |
| 102 | + CustomError = "Requested page not found."; |
| 103 | + } |
| 104 | + else |
| 105 | + { |
| 106 | + var sourceStr = await Http.GetAsync($"wiki-pages/{Project}/{source[0].Original}"); |
| 107 | + if (sourceStr.IsSuccessStatusCode) |
| 108 | + { |
| 109 | + var pl = new Markdig.MarkdownPipelineBuilder() |
| 110 | + .UseAdvancedExtensions() |
| 111 | + .UsePrism() |
| 112 | + .Build(); |
82 | 113 |
|
83 | | - var mdSourceStr = await sourceStr.Content.ReadAsStringAsync(); |
84 | | - mdSource = Markdown.ToHtml(mdSourceStr, pl); |
| 114 | + var mdSourceStr = await sourceStr.Content.ReadAsStringAsync(); |
| 115 | + mdSource = Markdig.Markdown.ToHtml(mdSourceStr, pl); |
| 116 | + } |
| 117 | + } |
85 | 118 | } |
86 | 119 |
|
87 | 120 | IsLoading = false; |
|
92 | 125 | IsLoading = false; |
93 | 126 | } |
94 | 127 | } |
| 128 | + |
| 129 | + public string PrettyPageTitle(ProjectsService.WikiPage page) |
| 130 | + { |
| 131 | + var or = page.Original; |
| 132 | + return or.Replace('-', ' ').Substring(0, or.Length - 3); |
| 133 | + } |
95 | 134 | } |
0 commit comments