mirror of
https://gitee.com/ant-design-blazor/ant-design-blazor.git
synced 2024-12-04 21:17:36 +08:00
9fa391449a
* style: update editorconfig - update editorconfig encoding to utf8 - add CA1852 and IDE0005 rules * style: apply dotnet-format * style: add IDE0040 rule * style: apply dotnet-format * refactor: sealed SimpleEmbeddedJsonLocalizerFactory * style: add style rule for modifiers * fix: resolve dotnet-format unmerged issue * fix: add back translation --------- Co-authored-by: James Yeung <shunjiey@hotmail.com>
174 lines
5.6 KiB
C#
174 lines
5.6 KiB
C#
// Licensed to the .NET Foundation under one or more agreements.
|
|
// The .NET Foundation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using AntDesign.Docs.Services;
|
|
using AntDesign.Docs.Shared;
|
|
using AntDesign.Extensions.Localization;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Components.Routing;
|
|
using Microsoft.Extensions.Localization;
|
|
|
|
namespace AntDesign.Docs.Pages
|
|
{
|
|
public partial class Components : ComponentBase, IDisposable
|
|
{
|
|
[Parameter]
|
|
public string Locale { get; set; }
|
|
[Parameter]
|
|
public string Name { get; set; }
|
|
|
|
[Inject]
|
|
private DemoService DemoService { get; set; }
|
|
|
|
[Inject]
|
|
private ILocalizationService LocalizationService { get; set; }
|
|
|
|
[Inject]
|
|
private IStringLocalizer Localizer { get; set; }
|
|
|
|
[Inject]
|
|
private NavigationManager NavigationManager { get; set; }
|
|
|
|
[CascadingParameter]
|
|
public MainLayout MainLayout { get; set; }
|
|
|
|
private DemoComponent _demoComponent;
|
|
|
|
private bool _expanded;
|
|
|
|
private bool _expandAllCode;
|
|
|
|
private string CurrentLanguage => LocalizationService.CurrentCulture.Name;
|
|
|
|
private string _filePath;
|
|
|
|
private List<string> _filePaths;
|
|
|
|
private bool _rendered;
|
|
|
|
private bool _changed = true;
|
|
|
|
private string EditUrl => $"https://github.com/ant-design-blazor/ant-design-blazor/edit/master/{_filePath}";
|
|
|
|
private List<DemoItem> _demos = [];
|
|
|
|
private (string Name, string Title)[] _anchors = [];
|
|
|
|
private string _currentPageName;
|
|
private string _currentLocale;
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
LocalizationService.LanguageChanged += OnLanguageChanged;
|
|
NavigationManager.LocationChanged += OnLocationChanged;
|
|
}
|
|
|
|
private void OnLanguageChanged(object sender, CultureInfo args)
|
|
{
|
|
if (!string.IsNullOrEmpty(Name))
|
|
{
|
|
_changed = true;
|
|
InvokeAsync(StateHasChanged);
|
|
}
|
|
}
|
|
|
|
private void OnLocationChanged(object sender, LocationChangedEventArgs args)
|
|
{
|
|
_changed = true;
|
|
InvokeAsync(StateHasChanged);
|
|
}
|
|
|
|
protected override void OnAfterRender(bool firstRender)
|
|
{
|
|
if (firstRender)
|
|
{
|
|
_rendered = true;
|
|
StateHasChanged();
|
|
return;
|
|
}
|
|
|
|
if (_rendered && _changed)
|
|
{
|
|
_changed = false;
|
|
_ = HandleNavigate();
|
|
}
|
|
}
|
|
|
|
private async Task HandleNavigate()
|
|
{
|
|
var fullPageName = NavigationManager.ToBaseRelativePath(NavigationManager.Uri);
|
|
fullPageName = fullPageName.IndexOf('/') > 0 ? fullPageName.Substring(fullPageName.IndexOf('/') + 1) : fullPageName;
|
|
fullPageName = fullPageName.IndexOf('#') > 0 ? fullPageName.Substring(0, fullPageName.IndexOf('#')) : fullPageName;
|
|
if (fullPageName.StartsWith("docs"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (_currentPageName == fullPageName && _currentLocale == Locale)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_currentPageName = fullPageName;
|
|
_currentLocale = Locale;
|
|
|
|
if (fullPageName.Split("/").Length != 2)
|
|
{
|
|
var menus = await DemoService.GetMenuAsync();
|
|
var current = menus.FirstOrDefault(x => x.Url == fullPageName.ToLowerInvariant());
|
|
if (current != null)
|
|
{
|
|
NavigationManager.NavigateTo($"{CurrentLanguage}/{current.Children[0].Children[0].Url}");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_demoComponent = await DemoService.GetComponentAsync($"{fullPageName}");
|
|
StateHasChanged();
|
|
|
|
_filePath = $"site/AntDesign.Docs/Demos/Components/{_demoComponent?.Title}/doc/index.{CurrentLanguage}.md";
|
|
await LoadDemos(_currentPageName);
|
|
await MainLayout.ChangePrevNextNav(Name);
|
|
|
|
if (NavigationManager.Uri.Contains("#"))
|
|
{
|
|
NavigationManager.NavigateTo(NavigationManager.Uri);
|
|
}
|
|
}
|
|
}
|
|
|
|
private async Task LoadDemos(string pageName)
|
|
{
|
|
var showDemos = _demoComponent.DemoList?.Where(x => !x.Debug && !x.Docs.HasValue).OrderBy(x => x.Order) ?? Enumerable.Empty<DemoItem>();
|
|
_anchors = showDemos.Select(x => (x.Name, x.Title)).ToArray();
|
|
_demos = [];
|
|
_filePaths = new() { _filePath };
|
|
foreach (var item in showDemos)
|
|
{
|
|
// compoennt is changed
|
|
if (pageName != _currentPageName)
|
|
{
|
|
return;
|
|
}
|
|
_filePaths.Add($"site/AntDesign.Docs/Demos/Components/{_demoComponent?.Title}/demo/{item.Name}.md");
|
|
_filePaths.Add($"site/AntDesign.Docs/{item.Type.Replace(".", "/")}.razor");
|
|
_demos.Add(item);
|
|
StateHasChanged();
|
|
await Task.Delay(100);
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
LocalizationService.LanguageChanged -= OnLanguageChanged;
|
|
NavigationManager.LocationChanged -= OnLocationChanged;
|
|
}
|
|
}
|
|
}
|