Browse Source

Show error and redirect when project or document not found

pull/3641/head
liangshiwei 7 years ago
parent
commit
f8b314f4ab
  1. 1
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json
  2. 3
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json
  3. 38
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml
  4. 17
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs
  5. 31
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js
  6. 15
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/DocumentNotFoundComponent/DocumentNotFoundPageModel.cs
  7. 26
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/DocumentNotFoundComponent/DocumentNotFoundViewComponent.cs
  8. 11
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/Default.cshtml
  9. 11
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/ErrorPageModel.cs
  10. 14
      modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/ErrorViewComponent.cs

1
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json

@ -14,6 +14,7 @@
"Projects": "Project(s)", "Projects": "Project(s)",
"NoProjectWarning": "There are no projects yet!", "NoProjectWarning": "There are no projects yet!",
"DocumentNotFound": "Oops, the requested document was not found!", "DocumentNotFound": "Oops, the requested document was not found!",
"ProjectNotFound": "Oops, the requested project was not found!",
"NavigationDocumentNotFound": "This version does not have a navigation document!", "NavigationDocumentNotFound": "This version does not have a navigation document!",
"DocumentNotFoundInSelectedLanguage": "Document in the language you wanted is not found. Document in the default language is shown.", "DocumentNotFoundInSelectedLanguage": "Document in the language you wanted is not found. Document in the default language is shown.",
"FilterTopics": "Filter topics", "FilterTopics": "Filter topics",

3
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/zh-Hans.json

@ -1,6 +1,6 @@
{ {
"culture": "zh-Hans", "culture": "zh-Hans",
"texts": { "texts": {
"Documents": "文档", "Documents": "文档",
"BackToWebsite": "返回主网站", "BackToWebsite": "返回主网站",
"Contributors": "贡献者", "Contributors": "贡献者",
@ -14,6 +14,7 @@
"Projects": "项目", "Projects": "项目",
"NoProjectWarning": "还没有项目!", "NoProjectWarning": "还没有项目!",
"DocumentNotFound": "找不到请求的文档!", "DocumentNotFound": "找不到请求的文档!",
"ProjectNotFound": "找不到請求的項目!",
"NavigationDocumentNotFound": "这个版本没有导航文件!", "NavigationDocumentNotFound": "这个版本没有导航文件!",
"DocumentNotFoundInSelectedLanguage": "本文档不适用于所选语言, 将以默认语言显示文档.", "DocumentNotFoundInSelectedLanguage": "本文档不适用于所选语言, 将以默认语言显示文档.",
"FilterTopics": "过滤主题", "FilterTopics": "过滤主题",

38
modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml

@ -5,12 +5,12 @@
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Clipboard @using Volo.Abp.AspNetCore.Mvc.UI.Packages.Clipboard
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.MalihuCustomScrollbar @using Volo.Abp.AspNetCore.Mvc.UI.Packages.MalihuCustomScrollbar
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Popper @using Volo.Abp.AspNetCore.Mvc.UI.Packages.Popper
@using Volo.Docs.Pages.Documents.Shared.DocumentNotFoundComponent
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Prismjs @using Volo.Abp.AspNetCore.Mvc.UI.Packages.Prismjs
@using Volo.Abp.AspNetCore.Mvc.UI.Theming @using Volo.Abp.AspNetCore.Mvc.UI.Theming
@using Volo.Docs @using Volo.Docs
@using Volo.Docs.Localization @using Volo.Docs.Localization
@using Volo.Docs.Pages.Documents.Project @using Volo.Docs.Pages.Documents.Project
@using Volo.Docs.Pages.Documents.Shared.ErrorComponent
@inject IThemeManager ThemeManager @inject IThemeManager ThemeManager
@inject IPageLayout PageLayout @inject IPageLayout PageLayout
@inject IHtmlLocalizer<DocsResource> L @inject IHtmlLocalizer<DocsResource> L
@ -41,7 +41,7 @@
<abp-script src="/Pages/Documents/Project/index.js" /> <abp-script src="/Pages/Documents/Project/index.js" />
</abp-script-bundle> </abp-script-bundle>
} }
@if (Model.DocumentFound) @if (Model.LoadSuccess)
{ {
<div class="docs-page" data-spy="scroll" data-target="#docs-sticky-index"> <div class="docs-page" data-spy="scroll" data-target="#docs-sticky-index">
<div class="row justify-content-end"> <div class="row justify-content-end">
@ -348,14 +348,30 @@
} }
else else
{ {
@(await Component.InvokeAsync<DocumentNotFoundViewComponent>(new if (!Model.DocumentFound)
{ {
model = new DocumentNotFoundPageModel @(await Component.InvokeAsync<ErrorViewComponent>(new
{ {
ProjectName = Model.ProjectName, model = new ErrorPageModel
DocumentName = Model.DocumentName, {
LanguageCode = Model.LanguageCode, RedirectUrl = Model.DocumentsUrlPrefix + Model.LanguageCode + "/" + Model.ProjectName + "/"
Version = Model.Version, + (Model.LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Model.Version),
} ErrorCode = "404",
})) ErrorMessage = L.GetString("DocumentNotFound")
}
}))
}
if (!Model.EntityFound)
{
@(await Component.InvokeAsync<ErrorViewComponent>(new
{
model = new ErrorPageModel
{
RedirectUrl = Model.DocumentsUrlPrefix,
ErrorCode = "404",
ErrorMessage = L.GetString("ProjectNotFound")
}
}))
}
} }

17
modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs

@ -7,6 +7,7 @@ using System.Threading.Tasks;
using System.Web; using System.Web;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Extensions.Localization;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
@ -33,6 +34,10 @@ namespace Volo.Docs.Pages.Documents.Project
public string LanguageCode { get; set; } public string LanguageCode { get; set; }
public bool DocumentFound { get; set; } = true; public bool DocumentFound { get; set; } = true;
public bool EntityFound { get; set; } = true;
public bool LoadSuccess => DocumentFound && EntityFound;
public string DefaultLanguageCode { get; set; } public string DefaultLanguageCode { get; set; }
@ -100,9 +105,7 @@ namespace Volo.Docs.Pages.Documents.Project
Logger.LogWarning(exception.Message); Logger.LogWarning(exception.Message);
DocumentFound = false; DocumentFound = false;
var url = DocumentsUrlPrefix + LanguageCode + "/" + ProjectName + "/" return Page();
+ (LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Version);
return Redirect(url);
} }
} }
@ -119,7 +122,8 @@ namespace Volo.Docs.Pages.Documents.Project
catch (EntityNotFoundException e) catch (EntityNotFoundException e)
{ {
Logger.LogWarning(e.Message); Logger.LogWarning(e.Message);
return Redirect(DocumentsUrlPrefix); EntityFound = false;
return Page();
} }
if (ShowProjectsCombobox) if (ShowProjectsCombobox)
@ -596,6 +600,11 @@ namespace Volo.Docs.Pages.Documents.Project
public string GetDescription() public string GetDescription()
{ {
if (Document == null || Document.Content.IsNullOrWhiteSpace())
{
return null;
}
var firstParagraph = new Regex(@"<p>(.*?)</p>", RegexOptions.IgnoreCase); var firstParagraph = new Regex(@"<p>(.*?)</p>", RegexOptions.IgnoreCase);
var match = firstParagraph.Match(Document.Content); var match = firstParagraph.Match(Document.Content);
if (!match.Success) if (!match.Success)

31
modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js

@ -297,17 +297,32 @@
$("#crawler_link").html(html); $("#crawler_link").html(html);
}; };
initNavigationFilter("sidebar-scroll"); var errorPageRedirect = function(){
var second = 3;
initAnchorTags(".docs-page .docs-body"); var close = setInterval(()=>{
second--;
$(".seconds").text(`(${second})`)
if(second===0){
clearInterval(close);
$(".redirect")[0].click();
}
},1000)
}
var loadSuccess = $(".docs-page").length!==0;
if(loadSuccess === true){
initNavigationFilter("sidebar-scroll");
initSocialShareLinks(); initAnchorTags(".docs-page .docs-body");
initSections(); initSocialShareLinks();
initCrawlerLinks(); initSections();
initCrawlerLinks();
}else{
errorPageRedirect();
}
}); });
})(jQuery); })(jQuery);

15
modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/DocumentNotFoundComponent/DocumentNotFoundPageModel.cs

@ -1,15 +0,0 @@
namespace Volo.Docs.Pages.Documents.Shared.DocumentNotFoundComponent
{
public class DocumentNotFoundPageModel
{
public string ProjectName { get; set; }
public string LanguageCode { get; set; }
public string Version { get; set; }
public string DocumentName { get; set; }
public string DocumentsUrlPrefix { get; set; }
}
}

26
modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/DocumentNotFoundComponent/DocumentNotFoundViewComponent.cs

@ -1,26 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc;
namespace Volo.Docs.Pages.Documents.Shared.DocumentNotFoundComponent
{
public class DocumentNotFoundViewComponent : AbpViewComponent
{
private readonly DocsUiOptions _options;
public DocumentNotFoundViewComponent(IOptions<DocsUiOptions> options)
{
_options = options.Value;
}
public IViewComponentResult Invoke(DocumentNotFoundPageModel model, string defaultErrorMessageKey)
{
model.DocumentsUrlPrefix = _options.RoutePrefix;
return View("~/Pages/Documents/Shared/DocumentNotFoundComponent/Default.cshtml", model);
}
}
}

11
modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/DocumentNotFoundComponent/Default.cshtml → modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/Default.cshtml

@ -1,16 +1,15 @@
@using Volo.Docs.Pages.Documents.Shared.DocumentNotFoundComponent @model Volo.Docs.Pages.Documents.Shared.ErrorComponent.ErrorPageModel
@model DocumentNotFoundPageModel
@{ @{
} }
<div class="row position-relative vh-100" style="background: #e8e8e8;"> <div class="row position-relative vh-100" style="background: #e8e8e8;">
<div class="center"> <div class="center">
<span class="notfound-404">404</span> <span class="notfound-404">@Model.ErrorCode</span>
<h1> <h1>
<strong>"@Model.DocumentName"</strong> not found in <strong>@Model.ProjectName</strong> documents, with <strong>@Model.Version</strong> version and <strong>@Model.LanguageCode</strong> language. @Model.ErrorMessage
</h1> </h1>
<br /> <br />
<a href="@(Model.DocumentsUrlPrefix + Model.LanguageCode + "/" +Model.ProjectName + "/" + Model.Version)" class="btn btn-primary px-4"> <a href="@(Model.RedirectUrl)" class="btn btn-primary px-4 redirect">
Go Back Go Back <span class="seconds">(3)</span>
</a> </a>
</div> </div>
</div> </div>

11
modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/ErrorPageModel.cs

@ -0,0 +1,11 @@
namespace Volo.Docs.Pages.Documents.Shared.ErrorComponent
{
public class ErrorPageModel
{
public string ErrorMessage { get; set; }
public string ErrorCode { get; set; }
public string RedirectUrl { get; set; }
}
}

14
modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/ErrorViewComponent.cs

@ -0,0 +1,14 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc;
namespace Volo.Docs.Pages.Documents.Shared.ErrorComponent
{
public class ErrorViewComponent : AbpViewComponent
{
public IViewComponentResult Invoke(ErrorPageModel model)
{
return View("~/Pages/Documents/Shared/ErrorComponent/Default.cshtml", model);
}
}
}
Loading…
Cancel
Save