mirror of https://github.com/abpframework/abp.git
csharpabpc-sharpframeworkblazoraspnet-coredotnet-coreaspnetcorearchitecturesaasdomain-driven-designangularmulti-tenancy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
7.1 KiB
167 lines
7.1 KiB
@page
|
|
|
|
@using Volo.Abp.Data
|
|
@using Volo.CmsKit.Public.Blogs
|
|
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPostComment
|
|
@using Volo.CmsKit.Public.Web.Pages
|
|
@using Volo.Abp.GlobalFeatures
|
|
@using Volo.CmsKit.GlobalFeatures
|
|
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection
|
|
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating
|
|
@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags
|
|
@using Volo.CmsKit.Web.Renderers
|
|
@using Volo.Abp.AspNetCore.Mvc.UI.Packages.HighlightJs
|
|
@using Volo.CmsKit.Contents
|
|
|
|
@inherits CmsKitPublicPageBase
|
|
|
|
@model Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Blogs.BlogPostModel
|
|
|
|
@inject IMarkdownToHtmlRenderer MarkdownRenderer
|
|
|
|
|
|
@{
|
|
string dummyImageSource = "https://dummyimage.com/1280x720/a3a3a3/fff.png?text=" + Model.ViewModel.Title;
|
|
var isScrollIndexEnabled = GlobalFeatureManager.Instance.IsEnabled<BlogPostScrollIndexFeature>() && Model.BlogPostScrollIndexFeature?.IsEnabled == true;
|
|
}
|
|
|
|
@section styles{
|
|
@if (isScrollIndexEnabled)
|
|
{
|
|
<abp-abp-style-bundle>
|
|
<abp-style src="/Pages/Public/CmsKit/Blogs/bootstrap-toc.css" />
|
|
</abp-abp-style-bundle>
|
|
}
|
|
<abp-abp-style-bundle>
|
|
<abp-style src="/Pages/Public/CmsKit/Blogs/blogPost.css" />
|
|
<abp-style type="typeof(HighlightJsStyleContributor)" />
|
|
</abp-abp-style-bundle>
|
|
}
|
|
|
|
@section scripts{
|
|
@if (isScrollIndexEnabled)
|
|
{
|
|
<abp-script-bundle>
|
|
<abp-style src="/Pages/Public/CmsKit/Blogs/bootstrap-toc.js" />
|
|
<abp-script src="/Pages/Public/CmsKit/Blogs/blogpost-scroll-index.js" />
|
|
</abp-script-bundle>
|
|
}
|
|
|
|
<abp-script-bundle>
|
|
<abp-script type="typeof(HighlightJsScriptContributor)" />
|
|
<abp-script src="/Pages/Public/CmsKit/highlightOnLoad.js" />
|
|
</abp-script-bundle>
|
|
}
|
|
|
|
|
|
<div class="row">
|
|
<div @Html.Raw(isScrollIndexEnabled ? "class=\"col-md-10 col-sm-12\"" : "class=\"col-md-12\"")>
|
|
<abp-card class="mb-4">
|
|
<img src="/api/cms-kit/media/@Model.ViewModel.CoverImageMediaId" class="card-img-top" onerror="this.src='@dummyImageSource'" />
|
|
<abp-card-body>
|
|
<abp-row>
|
|
<div class="col-lg-8 col-md-10 mx-auto pb-4">
|
|
<h1 class="mt-lg-4 mt-md-3">@Model.ViewModel.Title</h1>
|
|
<p class="mb-lg-5 mb-md-3">
|
|
<a href="/blogs/@Model.BlogSlug?authorId=@Model.ViewModel.Author.Id">
|
|
<span class="font-weight-bold">@@@Model.ViewModel.Author?.UserName</span>
|
|
</a>
|
|
<small style="opacity:.65;">@Model.ViewModel.CreationTime</small>
|
|
</p>
|
|
@foreach (var contentFragment in Model.ViewModel.ContentFragments)
|
|
{
|
|
if (contentFragment.Type == ContentConsts.Markdown)
|
|
{
|
|
@Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty<string>("Content"), allowHtmlTags: true, preventXSS: true))
|
|
}
|
|
else if (contentFragment.Type == ContentConsts.Widget)
|
|
{
|
|
@await Component.InvokeAsync(contentFragment.GetProperty<string>("Type"), contentFragment.ExtraProperties.ConvertToDynamicObject())
|
|
}
|
|
}
|
|
<p class="mb-3">
|
|
@if (Model.ViewModel.LastModificationTime != null)
|
|
{
|
|
<small style="opacity:.65;">@L["LastModification"].Value : @Model.ViewModel.LastModificationTime</small>
|
|
}
|
|
</p>
|
|
<hr />
|
|
|
|
@if (GlobalFeatureManager.Instance.IsEnabled<TagsFeature>())
|
|
{
|
|
if (Model.TagsFeature?.IsEnabled == true)
|
|
{
|
|
@await Component.InvokeAsync(typeof(TagViewComponent), new
|
|
{
|
|
entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType,
|
|
entityId = Model.ViewModel.Id.ToString(),
|
|
urlFormat = $"/blogs/{Model.BlogSlug}?tagId={{TagId}}"
|
|
})
|
|
}
|
|
}
|
|
</div>
|
|
</abp-row>
|
|
|
|
<abp-row class="row">
|
|
<abp-column size-lg="_6" size-md="_12">
|
|
@if (GlobalFeatureManager.Instance.IsEnabled<ReactionsFeature>())
|
|
{
|
|
if (Model.ReactionsFeature?.IsEnabled == true)
|
|
{
|
|
@await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new
|
|
{
|
|
entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType,
|
|
entityId = Model.ViewModel.Id.ToString()
|
|
})
|
|
}
|
|
}
|
|
</abp-column>
|
|
<abp-column size-lg="_6" size-md="_12">
|
|
@if (GlobalFeatureManager.Instance.IsEnabled<RatingsFeature>())
|
|
{
|
|
if (Model.RatingsFeature?.IsEnabled == true)
|
|
{
|
|
@await Component.InvokeAsync(typeof(RatingViewComponent), new
|
|
{
|
|
entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType,
|
|
entityId = Model.ViewModel.Id.ToString()
|
|
})
|
|
}
|
|
}
|
|
</abp-column>
|
|
</abp-row>
|
|
</abp-card-body>
|
|
</abp-card>
|
|
</div>
|
|
@if (isScrollIndexEnabled)
|
|
{
|
|
<div class="col-md-2 d-sm-none d-md-block">
|
|
<div id="scroll-index" class="docs-inner-anchors mt-2">
|
|
<h5>@L["InThisDocument"]</h5>
|
|
<nav id="blog-post-sticky-index" class="navbar index-scroll pt-0">
|
|
</nav>
|
|
|
|
<div class="row">
|
|
<div class="col p-0 py-3">
|
|
<a href="#" class="scroll-top-btn">
|
|
<i class="fa fa-chevron-up"></i> @L["GoToTop"]
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
</div>
|
|
|
|
@if (GlobalFeatureManager.Instance.IsEnabled<CommentsFeature>())
|
|
{
|
|
if (Model.CommentsFeature?.IsEnabled == true)
|
|
{
|
|
@await Component.InvokeAsync(typeof(DefaultBlogPostCommentViewComponent), new
|
|
{
|
|
entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType,
|
|
entityId = Model.ViewModel.Id.ToString()
|
|
})
|
|
}
|
|
}
|