Browse Source

Merge pull request #17681 from abpframework/cmskit-content-rendering

CmsKit - PreventXSS Enhancement
pull/17702/head
Engincan VESKE 3 years ago
committed by GitHub
parent
commit
54fb4165e8
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/DefaultContentDto.cs
  2. 8
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContent.cs
  3. 4
      modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewViewComponent.cs
  4. 2
      modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml
  5. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogConsts.cs
  6. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogPostScrollIndexFeature.cs
  7. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json
  8. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json
  9. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json
  10. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json
  11. 451
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  12. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json
  13. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fa.json
  14. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json
  15. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json
  16. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json
  17. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json
  18. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json
  19. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json
  20. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json
  21. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json
  22. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json
  23. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json
  24. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json
  25. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json
  26. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json
  27. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json
  28. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json
  29. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json
  30. 1
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json
  31. 15
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/DefaultBlogFeatureProvider.cs
  32. 2
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml
  33. 24
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml
  34. 4
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs
  35. 23
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml

8
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/DefaultContentDto.cs

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using JetBrains.Annotations;
namespace Volo.CmsKit.Contents; namespace Volo.CmsKit.Contents;
@ -7,4 +8,11 @@ namespace Volo.CmsKit.Contents;
public class DefaultContentDto : IContent public class DefaultContentDto : IContent
{ {
public List<ContentFragment> ContentFragments { get; set; } public List<ContentFragment> ContentFragments { get; set; }
public bool AllowHtmlTags { get; set; } = true;
public bool PreventXSS { get; set; } = true;
[CanBeNull]
public string ReferralLink { get; set; } = null;
} }

8
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContent.cs

@ -4,5 +4,11 @@ namespace Volo.CmsKit.Contents;
public interface IContent public interface IContent
{ {
public List<ContentFragment> ContentFragments { get; set; } List<ContentFragment> ContentFragments { get; set; }
bool AllowHtmlTags { get; set; }
bool PreventXSS { get; set; }
string ReferralLink { get; set; }
} }

4
modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewViewComponent.cs

@ -25,7 +25,9 @@ public class ContentPreviewViewComponent : AbpViewComponent
return View("~/Pages/CmsKit/Components/ContentPreview/Default.cshtml", new DefaultContentDto return View("~/Pages/CmsKit/Components/ContentPreview/Default.cshtml", new DefaultContentDto
{ {
ContentFragments = fragments ContentFragments = fragments,
AllowHtmlTags = true,
PreventXSS = false
}); });
} }
} }

2
modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml

@ -14,7 +14,7 @@
{ {
if (contentFragment.Type == ContentConsts.Markdown) if (contentFragment.Type == ContentConsts.Markdown)
{ {
@Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty<string>("Content"))) @Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty<string>("Content"), Model.ContentDto.AllowHtmlTags, Model.ContentDto.PreventXSS, Model.ContentDto.ReferralLink))
} }
else if (contentFragment.Type == ContentConsts.Widget) else if (contentFragment.Type == ContentConsts.Widget)
{ {

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogConsts.cs

@ -3,5 +3,8 @@
public class BlogConsts public class BlogConsts
{ {
public static int MaxNameLength { get; set; } = 64; public static int MaxNameLength { get; set; } = 64;
public static int MaxSlugLength { get; set; } = 64; public static int MaxSlugLength { get; set; } = 64;
public const string PreventXssFeatureName = "CmsKit.BlogPost.PreventXssFeature";
} }

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogPostScrollIndexFeature.cs

@ -3,7 +3,6 @@ using Volo.Abp.GlobalFeatures;
namespace Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit.GlobalFeatures;
[GlobalFeatureName(Name)] [GlobalFeatureName(Name)]
public class BlogPostScrollIndexFeature : GlobalFeature public class BlogPostScrollIndexFeature : GlobalFeature
{ {

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "التقييمات", "CmsKit.Ratings": "التقييمات",
"CmsKit.Reactions": "تفاعلات", "CmsKit.Reactions": "تفاعلات",
"CmsKit.Tags": "العلامات", "CmsKit.Tags": "العلامات",
"CmsKit.BlogPost.PreventXssFeature": "منع XSS",
"CmsKit:0002": "المحتوى موجود بالفعل!", "CmsKit:0002": "المحتوى موجود بالفعل!",
"CmsKit:0003": "الكيان {0} غير قابل للعلامة.", "CmsKit:0003": "الكيان {0} غير قابل للعلامة.",
"CmsKit:Blog:0001": "slug المحدد ({Slug}) موجود بالفعل!", "CmsKit:Blog:0001": "slug المحدد ({Slug}) موجود بالفعل!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Hodnocení", "CmsKit.Ratings": "Hodnocení",
"CmsKit.Reactions": "Reakce", "CmsKit.Reactions": "Reakce",
"CmsKit.Tags": "Tagy", "CmsKit.Tags": "Tagy",
"CmsKit.BlogPost.PreventXssFeature": "Zabraňte XSS",
"CmsKit:0002": "Obsah již existuje!", "CmsKit:0002": "Obsah již existuje!",
"CmsKit:0003": "Entitu {0} nelze označit.", "CmsKit:0003": "Entitu {0} nelze označit.",
"CmsKit:Blog:0001": "Daný slimák ({Slug}) již existuje!", "CmsKit:Blog:0001": "Daný slimák ({Slug}) již existuje!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Bewertungen", "CmsKit.Ratings": "Bewertungen",
"CmsKit.Reactions": "Reaktionen", "CmsKit.Reactions": "Reaktionen",
"CmsKit.Tags": "Stichworte", "CmsKit.Tags": "Stichworte",
"CmsKit.BlogPost.PreventXssFeature": "XSS-Prävention",
"CmsKit:0002": "Inhalt ist bereits vorhanden!", "CmsKit:0002": "Inhalt ist bereits vorhanden!",
"CmsKit:0003": "Die Entität {0} kann nicht mit Tags versehen werden.", "CmsKit:0003": "Die Entität {0} kann nicht mit Tags versehen werden.",
"CmsKit:Blog:0001": "Die angegebene Schnecke ({Slug}) existiert bereits!", "CmsKit:Blog:0001": "Die angegebene Schnecke ({Slug}) existiert bereits!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Βαθμολογία", "CmsKit.Ratings": "Βαθμολογία",
"CmsKit.Reactions": "Αντιδράσεις", "CmsKit.Reactions": "Αντιδράσεις",
"CmsKit.Tags": "Ετικέτες", "CmsKit.Tags": "Ετικέτες",
"CmsKit.BlogPost.PreventXssFeature": "Αποτροπή XSS",
"CmsKit:0002": "Το περιεχόμενο υπάρχει ήδη!", "CmsKit:0002": "Το περιεχόμενο υπάρχει ήδη!",
"CmsKit:0003": "Η οντότητα {0} δεν μπορεί να επισημανθεί.", "CmsKit:0003": "Η οντότητα {0} δεν μπορεί να επισημανθεί.",
"CmsKit:Blog:0001": "Το δεδομένο slug ({Slug}) υπάρχει ήδη!", "CmsKit:Blog:0001": "Το δεδομένο slug ({Slug}) υπάρχει ήδη!",

451
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json

@ -1,228 +1,229 @@
{ {
"culture": "en", "culture": "en",
"texts": { "texts": {
"AddSubMenuItem": "Add Sub Menu Item", "AddSubMenuItem": "Add Sub Menu Item",
"AreYouSure": "Are You Sure?", "AreYouSure": "Are You Sure?",
"BlogDeletionConfirmationMessage": "The blog '{0}' will be deleted. Are you sure?", "BlogDeletionConfirmationMessage": "The blog '{0}' will be deleted. Are you sure?",
"BlogFeatureNotAvailable": "This feature is not available now. Enable with 'GlobalFeatureManager' to use it.", "BlogFeatureNotAvailable": "This feature is not available now. Enable with 'GlobalFeatureManager' to use it.",
"BlogId": "Blog", "BlogId": "Blog",
"BlogPostDeletionConfirmationMessage": "The blog post '{0}' will be deleted. Are you sure?", "BlogPostDeletionConfirmationMessage": "The blog post '{0}' will be deleted. Are you sure?",
"BlogPosts": "Blog Posts", "BlogPosts": "Blog Posts",
"Blogs": "Blogs", "Blogs": "Blogs",
"ChoosePreference": "Choose Preference...", "ChoosePreference": "Choose Preference...",
"Cms": "CMS", "Cms": "CMS",
"CmsKit.Comments": "Comments", "CmsKit.Comments": "Comments",
"CmsKit.Ratings": "Ratings", "CmsKit.Ratings": "Ratings",
"CmsKit.Reactions": "Reactions", "CmsKit.Reactions": "Reactions",
"CmsKit.Tags": "Tags", "CmsKit.Tags": "Tags",
"CmsKit:0002": "Content already exists!", "CmsKit:0002": "Content already exists!",
"CmsKit:0003": "The entity {0} is not taggable.", "CmsKit:0003": "The entity {0} is not taggable.",
"CmsKit:Blog:0001": "The given slug ({Slug}) already exists!", "CmsKit:Blog:0001": "The given slug ({Slug}) already exists!",
"CmsKit:BlogPost:0001": "The given slug already exists!", "CmsKit:BlogPost:0001": "The given slug already exists!",
"CmsKit:Comments:0001": "The entity {EntityType} is not commentable.", "CmsKit:Comments:0001": "The entity {EntityType} is not commentable.",
"CmsKit:Media:0001": "'{Name}' is not a valid media name.", "CmsKit:Media:0001": "'{Name}' is not a valid media name.",
"CmsKit:Media:0002": "The entity can't have media.", "CmsKit:Media:0002": "The entity can't have media.",
"CmsKit:Page:0001": "The given url ({Slug}) already exists. Please try with different url.", "CmsKit:Page:0001": "The given url ({Slug}) already exists. Please try with different url.",
"CmsKit:Rating:0001": "The entity {EntityType} can't be rated.", "CmsKit:Rating:0001": "The entity {EntityType} can't be rated.",
"CmsKit:Reaction:0001": "The entity {EntityType} can't have reactions.", "CmsKit:Reaction:0001": "The entity {EntityType} can't have reactions.",
"CmsKit:Tag:0002": "The entity is not taggable!", "CmsKit:Tag:0002": "The entity is not taggable!",
"CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.", "CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.",
"CommentDeletionConfirmationMessage": "This comment and all replies will be deleted!", "CommentDeletionConfirmationMessage": "This comment and all replies will be deleted!",
"Comments": "Comments", "Comments": "Comments",
"Content": "Content", "Content": "Content",
"ContentDeletionConfirmationMessage": "Are you sure to delete this content?", "ContentDeletionConfirmationMessage": "Are you sure to delete this content?",
"Contents": "Contents", "Contents": "Contents",
"CoverImage": "Cover Image", "CoverImage": "Cover Image",
"CreateBlogPostPage": "New Blog Post", "CreateBlogPostPage": "New Blog Post",
"CreationTime": "Creation Time", "CreationTime": "Creation Time",
"Delete": "Delete", "Delete": "Delete",
"Detail": "Detail", "Detail": "Detail",
"Details": "Details", "Details": "Details",
"DisplayName": "Display Name", "DisplayName": "Display Name",
"DoYouPreferAdditionalEmails": "Do you prefer additional emails?", "DoYouPreferAdditionalEmails": "Do you prefer additional emails?",
"Edit": "Edit", "Edit": "Edit",
"EndDate": "End Date", "EndDate": "End Date",
"EntityId": "Entity Id", "EntityId": "Entity Id",
"EntityType": "Entity Type", "EntityType": "Entity Type",
"ExportCSV": "Export CSV", "ExportCSV": "Export CSV",
"Features": "Features", "Features": "Features",
"GenericDeletionConfirmationMessage": "Are you sure to delete '{0}'?", "GenericDeletionConfirmationMessage": "Are you sure to delete '{0}'?",
"IsActive": "Active", "IsActive": "Active",
"LastModification": "Last Modification", "LastModification": "Last Modification",
"LastModificationTime": "Last Modification Time", "LastModificationTime": "Last Modification Time",
"LoginToAddComment": "Login to add comment", "LoginToAddComment": "Login to add comment",
"LoginToRate": "Login to rate", "LoginToRate": "Login to rate",
"LoginToReact": "Login to react", "LoginToReact": "Login to react",
"LoginToReply": "Login to reply", "LoginToReply": "Login to reply",
"MainMenu": "Main Menu", "MainMenu": "Main Menu",
"MakeMainMenu": "Make Main Menu", "MakeMainMenu": "Make Main Menu",
"Menu:CMS": "CMS", "Menu:CMS": "CMS",
"Menus": "Menus", "Menus": "Menus",
"MenuDeletionConfirmationMessage": "The menu '{0}' will be deleted. Are you sure?", "MenuDeletionConfirmationMessage": "The menu '{0}' will be deleted. Are you sure?",
"MenuItemDeletionConfirmationMessage": "Are sure to delete this menu item?", "MenuItemDeletionConfirmationMessage": "Are sure to delete this menu item?",
"MenuItemMoveConfirmMessage": "Are you sure you want to move '{0}' under '{1}'?", "MenuItemMoveConfirmMessage": "Are you sure you want to move '{0}' under '{1}'?",
"MenuItems": "Menu Items", "MenuItems": "Menu Items",
"Message": "Message", "Message": "Message",
"MessageDeletionConfirmationMessage": "This comment will be deleted completely.", "MessageDeletionConfirmationMessage": "This comment will be deleted completely.",
"NewBlog": "New Blog", "NewBlog": "New Blog",
"NewBlogPost": "New Blog Post", "NewBlogPost": "New Blog Post",
"NewMenu": "New Menu", "NewMenu": "New Menu",
"NewMenuItem": "New Root Menu Item", "NewMenuItem": "New Root Menu Item",
"NewPage": "New Page", "NewPage": "New Page",
"NewTag": "New Tag", "NewTag": "New Tag",
"NoMenuItems": "There is no menu item yet!", "NoMenuItems": "There is no menu item yet!",
"OK": "OK", "OK": "OK",
"PageDeletionConfirmationMessage": "Are you sure to delete this page?", "PageDeletionConfirmationMessage": "Are you sure to delete this page?",
"PageId": "Page", "PageId": "Page",
"Pages": "Pages", "Pages": "Pages",
"PageSlugInformation": "Slug is used on url. Your url will be '/{{slug}}'.", "PageSlugInformation": "Slug is used on url. Your url will be '/{{slug}}'.",
"Permission:BlogManagement": "Blog Management", "Permission:BlogManagement": "Blog Management",
"Permission:BlogManagement.Create": "Create", "Permission:BlogManagement.Create": "Create",
"Permission:BlogManagement.Delete": "Delete", "Permission:BlogManagement.Delete": "Delete",
"Permission:BlogManagement.Features": "Features", "Permission:BlogManagement.Features": "Features",
"Permission:BlogManagement.Update": "Update", "Permission:BlogManagement.Update": "Update",
"Permission:BlogPostManagement": "Blog Post Management", "Permission:BlogPostManagement": "Blog Post Management",
"Permission:BlogPostManagement.Create": "Create", "Permission:BlogPostManagement.Create": "Create",
"Permission:BlogPostManagement.Delete": "Delete", "Permission:BlogPostManagement.Delete": "Delete",
"Permission:BlogPostManagement.Update": "Update", "Permission:BlogPostManagement.Update": "Update",
"Permission:BlogPostManagement.Publish": "Publish", "Permission:BlogPostManagement.Publish": "Publish",
"Permission:CmsKit": "CmsKit Admin", "Permission:CmsKit": "CmsKit Admin",
"Permission:Comments": "Comment Management", "Permission:Comments": "Comment Management",
"Permission:Comments.Delete": "Delete", "Permission:Comments.Delete": "Delete",
"Permission:Contents": "Content Management", "Permission:Contents": "Content Management",
"Permission:Contents.Create": "Create Content", "Permission:Contents.Create": "Create Content",
"Permission:Contents.Delete": "Delete Content", "Permission:Contents.Delete": "Delete Content",
"Permission:Contents.Update": "Update Content", "Permission:Contents.Update": "Update Content",
"Permission:MediaDescriptorManagement": "Media Management", "Permission:MediaDescriptorManagement": "Media Management",
"Permission:MediaDescriptorManagement:Create": "Create", "Permission:MediaDescriptorManagement:Create": "Create",
"Permission:MediaDescriptorManagement:Delete": "Delete", "Permission:MediaDescriptorManagement:Delete": "Delete",
"Permission:MenuItemManagement": "Menu Item Management", "Permission:MenuItemManagement": "Menu Item Management",
"Permission:MenuItemManagement.Create": "Create", "Permission:MenuItemManagement.Create": "Create",
"Permission:MenuItemManagement.Delete": "Delete", "Permission:MenuItemManagement.Delete": "Delete",
"Permission:MenuItemManagement.Update": "Update", "Permission:MenuItemManagement.Update": "Update",
"Permission:MenuManagement": "Menu Management", "Permission:MenuManagement": "Menu Management",
"Permission:MenuManagement.Create": "Create", "Permission:MenuManagement.Create": "Create",
"Permission:MenuManagement.Delete": "Delete", "Permission:MenuManagement.Delete": "Delete",
"Permission:MenuManagement.Update": "Update", "Permission:MenuManagement.Update": "Update",
"Permission:Menus": "Menu Management", "Permission:Menus": "Menu Management",
"Permission:Menus.Create": "Create", "Permission:Menus.Create": "Create",
"Permission:Menus.Delete": "Delete", "Permission:Menus.Delete": "Delete",
"Permission:Menus.Update": "Update", "Permission:Menus.Update": "Update",
"Permission:PageManagement": "Page Management", "Permission:PageManagement": "Page Management",
"Permission:PageManagement:Create": "Create", "Permission:PageManagement:Create": "Create",
"Permission:PageManagement:Delete": "Delete", "Permission:PageManagement:Delete": "Delete",
"Permission:PageManagement:Update": "Update", "Permission:PageManagement:Update": "Update",
"Permission:PageManagement:SetAsHomePage": "Set As Home Page", "Permission:PageManagement:SetAsHomePage": "Set As Home Page",
"Permission:TagManagement": "Tag Management", "Permission:TagManagement": "Tag Management",
"Permission:TagManagement.Create": "Create", "Permission:TagManagement.Create": "Create",
"Permission:TagManagement.Delete": "Delete", "Permission:TagManagement.Delete": "Delete",
"Permission:TagManagement.Update": "Update", "Permission:TagManagement.Update": "Update",
"Permission:GlobalResources": "Global Resources", "Permission:GlobalResources": "Global Resources",
"Permission:CmsKitPublic": "CmsKit Public", "Permission:CmsKitPublic": "CmsKit Public",
"Permission:Comments.DeleteAll": "Delete All", "Permission:Comments.DeleteAll": "Delete All",
"PickYourReaction": "Pick your reaction", "PickYourReaction": "Pick your reaction",
"Rating": "Rating", "Rating": "Rating",
"RatingUndoMessage": "Your rating will be undo.", "RatingUndoMessage": "Your rating will be undo.",
"Reactions": "Reactions", "Reactions": "Reactions",
"Read": "Read", "Read": "Read",
"RepliesToThisComment": "Replies to this comment", "RepliesToThisComment": "Replies to this comment",
"Reply": "Reply", "Reply": "Reply",
"ReplyTo": "Reply to", "ReplyTo": "Reply to",
"SamplePageMessage": "A sample page for the Pro module", "SamplePageMessage": "A sample page for the Pro module",
"SaveChanges": "Save Changes", "SaveChanges": "Save Changes",
"Script": "Script", "Script": "Script",
"SelectAll": "Select All", "SelectAll": "Select All",
"Send": "Send", "Send": "Send",
"SendMessage": "Send Message", "SendMessage": "Send Message",
"SelectedAuthor": "Author", "SelectedAuthor": "Author",
"ShortDescription": "Short description", "ShortDescription": "Short description",
"Slug": "Slug", "Slug": "Slug",
"Source": "Source", "Source": "Source",
"SourceUrl": "Source Url", "SourceUrl": "Source Url",
"Star": "Star", "Star": "Star",
"StartDate": "Start Date", "StartDate": "Start Date",
"Style": "Style", "Style": "Style",
"Subject": "Subject", "Subject": "Subject",
"SubjectPlaceholder": "Please type a subject", "SubjectPlaceholder": "Please type a subject",
"Submit": "Submit", "Submit": "Submit",
"Subscribe": "Subscribe", "Subscribe": "Subscribe",
"SuccessfullySaved": "Successfully saved!", "SuccessfullySaved": "Successfully saved!",
"TagDeletionConfirmationMessage": "Are you sure to delete '{0}' tag?", "TagDeletionConfirmationMessage": "Are you sure to delete '{0}' tag?",
"Tags": "Tags", "Tags": "Tags",
"Text": "Text", "Text": "Text",
"ThankYou": "Thank you", "ThankYou": "Thank you",
"Title": "Title", "Title": "Title",
"Undo": "Undo", "Undo": "Undo",
"Update": "Update", "Update": "Update",
"UpdatePreferenceSuccessMessage": "Your preferences have been saved.", "UpdatePreferenceSuccessMessage": "Your preferences have been saved.",
"UpdateYourEmailPreferences": "Update your email preferences", "UpdateYourEmailPreferences": "Update your email preferences",
"UnMakeMainMenu": "Unmake Main Menu", "UnMakeMainMenu": "Unmake Main Menu",
"UploadFailedMessage": "Upload failed.", "UploadFailedMessage": "Upload failed.",
"UserId": "User Id", "UserId": "User Id",
"Username": "Username", "Username": "Username",
"YourComment": "Your comment", "YourComment": "Your comment",
"YourEmailAddress": "Your e-mail address", "YourEmailAddress": "Your e-mail address",
"YourFullName": "Your full name", "YourFullName": "Your full name",
"YourMessage": "Your Message", "YourMessage": "Your Message",
"YourReply": "Your reply", "YourReply": "Your reply",
"MarkdownSupported": "<a href=\"https://www.markdownguide.org/basic-syntax/\">Markdown</a> supported.", "MarkdownSupported": "<a href=\"https://www.markdownguide.org/basic-syntax/\">Markdown</a> supported.",
"GlobalResources": "Global Resources", "GlobalResources": "Global Resources",
"SavedSuccessfully": "Saved successfully", "SavedSuccessfully": "Saved successfully",
"CmsKit.BlogPost.Status.0": "Draft", "CmsKit.BlogPost.Status.0": "Draft",
"CmsKit.BlogPost.Status.1": "Published", "CmsKit.BlogPost.Status.1": "Published",
"CmsKit.BlogPost.Status.2": "Waiting for review", "CmsKit.BlogPost.Status.2": "Waiting for review",
"BlogPostPublishConfirmationMessage": "Are you sure to publish the blog post \"{0}\"?", "BlogPostPublishConfirmationMessage": "Are you sure to publish the blog post \"{0}\"?",
"SuccessfullyPublished": "Successfully published!", "SuccessfullyPublished": "Successfully published!",
"Draft": "Draft", "Draft": "Draft",
"Publish": "Publish", "Publish": "Publish",
"BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?", "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?",
"BlogPostSendToReviewConfirmationMessage": "Are you sure to send the blog post \"{0}\" to admin review for publishing?", "BlogPostSendToReviewConfirmationMessage": "Are you sure to send the blog post \"{0}\" to admin review for publishing?",
"SaveAsDraft": "Save as draft", "SaveAsDraft": "Save as draft",
"SendToReview": "Send to review", "SendToReview": "Send to review",
"SendToReviewToPublish": "Send to review to publish", "SendToReviewToPublish": "Send to review to publish",
"BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing.", "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing.",
"HasBlogPostWaitingForReviewMessage": "You have a blog post waiting for review. Click to list.", "HasBlogPostWaitingForReviewMessage": "You have a blog post waiting for review. Click to list.",
"SelectAStatus": "Select a status", "SelectAStatus": "Select a status",
"Status": "Status", "Status": "Status",
"CmsKit.BlogPost.ScrollIndex": "Quick navigation bar in blog posts", "CmsKit.BlogPost.ScrollIndex": "Quick navigation bar in blog posts",
"Add": "Add", "CmsKit.BlogPost.PreventXssFeature": "Prevent XSS",
"AddWidget": "Add Widget", "Add": "Add",
"PleaseConfigureWidgets": "Please configure widgets", "AddWidget": "Add Widget",
"SelectAnAuthor": "Select an Author", "PleaseConfigureWidgets": "Please configure widgets",
"InThisDocument": "In This Document", "SelectAnAuthor": "Select an Author",
"GoToTop": "Go To Top", "InThisDocument": "In This Document",
"SetAsHomePage": "Change Home Page Status", "GoToTop": "Go To Top",
"CompletedSettingAsHomePage": "Set as home page", "SetAsHomePage": "Change Home Page Status",
"IsHomePage": "Is Home Page", "CompletedSettingAsHomePage": "Set as home page",
"RemovedSettingAsHomePage": "Removed setting the home page", "IsHomePage": "Is Home Page",
"Feature:CmsKitGroup": "Cms Kit", "RemovedSettingAsHomePage": "Removed setting the home page",
"Feature:BlogEnable": "Blogpost", "Feature:CmsKitGroup": "Cms Kit",
"Feature:BlogEnableDescription": "CMS Kit's blogpost system that allows create blogs and posts dynamically in the application.", "Feature:BlogEnable": "Blogpost",
"Feature:CommentEnable": "Commenting", "Feature:BlogEnableDescription": "CMS Kit's blogpost system that allows create blogs and posts dynamically in the application.",
"Feature:CommentEnableDescription": "CMS Kit's comment system allows commenting on entities such as BlogPost.", "Feature:CommentEnable": "Commenting",
"Feature:GlobalResourceEnable": "Global resourcing", "Feature:CommentEnableDescription": "CMS Kit's comment system allows commenting on entities such as BlogPost.",
"Feature:GlobalResourceEnableDescription": "CMS Kit's global resoruces feature that allows managing global styles & scripts.", "Feature:GlobalResourceEnable": "Global resourcing",
"Feature:MenuEnable": "Menu", "Feature:GlobalResourceEnableDescription": "CMS Kit's global resoruces feature that allows managing global styles & scripts.",
"Feature:MenuEnableDescription": "CMS Kit's dynamic menu system that allows adding/removing application menus dynamically.", "Feature:MenuEnable": "Menu",
"Feature:PageEnable": "Paging", "Feature:MenuEnableDescription": "CMS Kit's dynamic menu system that allows adding/removing application menus dynamically.",
"Feature:PageEnableDescription": "CMS Kit's page system that allows creating static pages with specific URL.", "Feature:PageEnable": "Paging",
"Feature:RatingEnable": "Rating", "Feature:PageEnableDescription": "CMS Kit's page system that allows creating static pages with specific URL.",
"Feature:RatingEnableDescription": "CMS Kit's rating system that allows users to rate entities such as BlogPost.", "Feature:RatingEnable": "Rating",
"Feature:ReactionEnable": "Reaction", "Feature:RatingEnableDescription": "CMS Kit's rating system that allows users to rate entities such as BlogPost.",
"Feature:ReactionEnableDescription": "CMS Kit's reaction system that allows users to send reactions to entities such as BlogPost, Comments, etc.", "Feature:ReactionEnable": "Reaction",
"Feature:TagEnable": "Taging", "Feature:ReactionEnableDescription": "CMS Kit's reaction system that allows users to send reactions to entities such as BlogPost, Comments, etc.",
"Feature:TagEnableDescription": "CMS Kit's tag system that allows tagging entities such as BlogPost.", "Feature:TagEnable": "Taging",
"DeleteBlogPostMessage": "The blog will be deleted. Are you sure?", "Feature:TagEnableDescription": "CMS Kit's tag system that allows tagging entities such as BlogPost.",
"CaptchaCode": "Captcha code", "DeleteBlogPostMessage": "The blog will be deleted. Are you sure?",
"CommentTextRequired": "Comment is required", "CaptchaCode": "Captcha code",
"CaptchaCodeErrorMessage": "The answer you entered for the CAPTCHA was not correct. Please try again", "CommentTextRequired": "Comment is required",
"CaptchaCodeMissingMessage": "The captcha code is missing!", "CaptchaCodeErrorMessage": "The answer you entered for the CAPTCHA was not correct. Please try again",
"UnAllowedExternalUrlMessage": "You included an unallowed external URL. Please try again without the external URL.", "CaptchaCodeMissingMessage": "The captcha code is missing!",
"URL": "URL", "UnAllowedExternalUrlMessage": "You included an unallowed external URL. Please try again without the external URL.",
"PopularTags": "Popular Tags", "URL": "URL",
"RemoveCoverImageConfirmationMessage": "Are you sure you want to remove the cover image?", "PopularTags": "Popular Tags",
"RemoveCoverImage": "Remove cover image", "RemoveCoverImageConfirmationMessage": "Are you sure you want to remove the cover image?",
"CssClass": "CSS Class", "RemoveCoverImage": "Remove cover image",
"TagsHelpText": "Tags should be comma-separated (e.g.: tag1, tag2, tag3)" "CssClass": "CSS Class",
} "TagsHelpText": "Tags should be comma-separated (e.g.: tag1, tag2, tag3)"
}
} }

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Calificaciones", "CmsKit.Ratings": "Calificaciones",
"CmsKit.Reactions": "Reacciones", "CmsKit.Reactions": "Reacciones",
"CmsKit.Tags": "Etiquetas", "CmsKit.Tags": "Etiquetas",
"CmsKit.BlogPost.PreventXssFeature": "Prevenir ataques XSS",
"CmsKit:0002": "¡El contenido ya existe!", "CmsKit:0002": "¡El contenido ya existe!",
"CmsKit:0003": "La entidad {0} no se puede etiquetar.", "CmsKit:0003": "La entidad {0} no se puede etiquetar.",
"CmsKit:Blog:0001": "¡La babosa dada ({Slug}) ya existe!", "CmsKit:Blog:0001": "¡La babosa dada ({Slug}) ya existe!",

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fa.json

@ -181,6 +181,7 @@
"HasBlogPostWaitingForReviewMessage": "شما یک پست وبلاگ دارید که منتظر بررسی است. برای لیست کلیک کنید.", "HasBlogPostWaitingForReviewMessage": "شما یک پست وبلاگ دارید که منتظر بررسی است. برای لیست کلیک کنید.",
"SelectAStatus": "انتخاب وضعیت", "SelectAStatus": "انتخاب وضعیت",
"Status": "وضعیت", "Status": "وضعیت",
"CmsKit.BlogPost.ScrollIndex": "نوار پیمایش سریع در پست های وبلاگ" "CmsKit.BlogPost.ScrollIndex": "نوار پیمایش سریع در پست های وبلاگ",
"CmsKit.BlogPost.PreventXssFeature": "جلوگیری از XSS"
} }
} }

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json

@ -185,6 +185,7 @@
"SelectAStatus": "Valitse tila", "SelectAStatus": "Valitse tila",
"Status": "Tila", "Status": "Tila",
"CmsKit.BlogPost.ScrollIndex": "Pikanavigointipalkki blogikirjoituksissa", "CmsKit.BlogPost.ScrollIndex": "Pikanavigointipalkki blogikirjoituksissa",
"CmsKit.BlogPost.PreventXssFeature": "Estä XSS",
"Add": "Lisää", "Add": "Lisää",
"AddWidget": "Lisää widget", "AddWidget": "Lisää widget",
"PleaseConfigureWidgets": "Määritä widgetit", "PleaseConfigureWidgets": "Määritä widgetit",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Évaluations", "CmsKit.Ratings": "Évaluations",
"CmsKit.Reactions": "Réactions", "CmsKit.Reactions": "Réactions",
"CmsKit.Tags": "Mots clés", "CmsKit.Tags": "Mots clés",
"CmsKit.BlogPost.PreventXssFeature": "Empêcher les attaques XSS",
"CmsKit:0002": "Le contenu existe déjà!", "CmsKit:0002": "Le contenu existe déjà!",
"CmsKit:0003": "L'entité {0} ne peut pas être taguée.", "CmsKit:0003": "L'entité {0} ne peut pas être taguée.",
"CmsKit:Blog:0001": "Le slug donné ({Slug}) existe déjà!", "CmsKit:Blog:0001": "Le slug donné ({Slug}) existe déjà!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "रेटिंग्स", "CmsKit.Ratings": "रेटिंग्स",
"CmsKit.Reactions": "प्रतिक्रियाओं", "CmsKit.Reactions": "प्रतिक्रियाओं",
"CmsKit.Tags": "टैग", "CmsKit.Tags": "टैग",
"CmsKit.BlogPost.PreventXssFeature": "XSS रोकें",
"CmsKit:0002": "सामग्री पहले से मौजूद है!", "CmsKit:0002": "सामग्री पहले से मौजूद है!",
"CmsKit:0003": "इकाई {0} टैग करने योग्य नहीं है।", "CmsKit:0003": "इकाई {0} टैग करने योग्य नहीं है।",
"CmsKit:Blog:0001": "दिया गया स्लग ({Slug}) पहले से मौजूद है!", "CmsKit:Blog:0001": "दिया गया स्लग ({Slug}) पहले से मौजूद है!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json

@ -182,6 +182,7 @@
"SelectAStatus": "Válasszon állapotot", "SelectAStatus": "Válasszon állapotot",
"Status": "Állapot", "Status": "Állapot",
"CmsKit.BlogPost.ScrollIndex": "Gyors navigációs sáv a blogbejegyzésekben", "CmsKit.BlogPost.ScrollIndex": "Gyors navigációs sáv a blogbejegyzésekben",
"CmsKit.BlogPost.PreventXssFeature": "XSS megelőzése",
"Add": "Hozzáadás", "Add": "Hozzáadás",
"AddWidget": "Widget hozzáadása", "AddWidget": "Widget hozzáadása",
"PleaseConfigureWidgets": "Kérjük, állítsa be a widgeteket", "PleaseConfigureWidgets": "Kérjük, állítsa be a widgeteket",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Skor", "CmsKit.Ratings": "Skor",
"CmsKit.Reactions": "Viðbrögð", "CmsKit.Reactions": "Viðbrögð",
"CmsKit.Tags": "Tög", "CmsKit.Tags": "Tög",
"CmsKit.BlogPost.PreventXssFeature": "Fyrirbyggja XSS árásir",
"CmsKit:0002": "Efni nú þegar til!", "CmsKit:0002": "Efni nú þegar til!",
"CmsKit:0003": "Ekki hægt að tagga einingu {0}", "CmsKit:0003": "Ekki hægt að tagga einingu {0}",
"CmsKit:Blog:0001": "Uppgefin snigill ({Slug}) er þegar til!", "CmsKit:Blog:0001": "Uppgefin snigill ({Slug}) er þegar til!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Valutazioni", "CmsKit.Ratings": "Valutazioni",
"CmsKit.Reactions": "Reazioni", "CmsKit.Reactions": "Reazioni",
"CmsKit.Tags": "Tag", "CmsKit.Tags": "Tag",
"CmsKit.BlogPost.PreventXssFeature": "Prevenzione XSS",
"CmsKit:0002": "Il contenuto esiste già!", "CmsKit:0002": "Il contenuto esiste già!",
"CmsKit:0003": "L'entità {0} non è codificabile.", "CmsKit:0003": "L'entità {0} non è codificabile.",
"CmsKit:Blog:0001": "Lo slug specificato ({Slug}) esiste già!", "CmsKit:Blog:0001": "Lo slug specificato ({Slug}) esiste già!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Beoordelingen", "CmsKit.Ratings": "Beoordelingen",
"CmsKit.Reactions": "Reacties", "CmsKit.Reactions": "Reacties",
"CmsKit.Tags": "Tags", "CmsKit.Tags": "Tags",
"CmsKit.BlogPost.PreventXssFeature": "XSS-functie voorkomen",
"CmsKit:0002": "Inhoud bestaat al!", "CmsKit:0002": "Inhoud bestaat al!",
"CmsKit:0003": "De entiteit {0} kan niet worden getagd.", "CmsKit:0003": "De entiteit {0} kan niet worden getagd.",
"CmsKit:Blog:0001": "De opgegeven slug ({Slug}) bestaat al!", "CmsKit:Blog:0001": "De opgegeven slug ({Slug}) bestaat al!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Oceny", "CmsKit.Ratings": "Oceny",
"CmsKit.Reactions": "Reakcje", "CmsKit.Reactions": "Reakcje",
"CmsKit.Tags": "Tagi", "CmsKit.Tags": "Tagi",
"CmsKit.BlogPost.PreventXssFeature": "Zapobiegaj atakom XSS",
"CmsKit:0002": "Treść już istnieje!", "CmsKit:0002": "Treść już istnieje!",
"CmsKit:0003": "Jednostka {0} nie może być otagowana.", "CmsKit:0003": "Jednostka {0} nie może być otagowana.",
"CmsKit:Blog:0001": "Podany ślimak ({Slug}) już istnieje!", "CmsKit:Blog:0001": "Podany ślimak ({Slug}) już istnieje!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Avaliações", "CmsKit.Ratings": "Avaliações",
"CmsKit.Reactions": "Reações", "CmsKit.Reactions": "Reações",
"CmsKit.Tags": "Tag", "CmsKit.Tags": "Tag",
"CmsKit.BlogPost.PreventXssFeature": "Prevenir recurso XSS",
"CmsKit:0002": "O conteúdo já existe!", "CmsKit:0002": "O conteúdo já existe!",
"CmsKit:0003": "A entidade {0} não pode ser etiquetada.", "CmsKit:0003": "A entidade {0} não pode ser etiquetada.",
"CmsKit:Blog:0001": "O slug fornecido ({Slug}) já existe!", "CmsKit:Blog:0001": "O slug fornecido ({Slug}) já existe!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Evaluări", "CmsKit.Ratings": "Evaluări",
"CmsKit.Reactions": "Reacţii", "CmsKit.Reactions": "Reacţii",
"CmsKit.Tags": "Etichete", "CmsKit.Tags": "Etichete",
"CmsKit.BlogPost.PreventXssFeature": "Prevenirea Xss",
"CmsKit:0002": "Conţinutul există deja!", "CmsKit:0002": "Conţinutul există deja!",
"CmsKit:0003": "Entitatea {0} nu este etichetabilă.", "CmsKit:0003": "Entitatea {0} nu este etichetabilă.",
"CmsKit:Blog:0001": "Slugul ({Slug}) există deja!", "CmsKit:Blog:0001": "Slugul ({Slug}) există deja!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Рейтинги", "CmsKit.Ratings": "Рейтинги",
"CmsKit.Reactions": "Реакции", "CmsKit.Reactions": "Реакции",
"CmsKit.Tags": "Теги", "CmsKit.Tags": "Теги",
"CmsKit.BlogPost.PreventXssFeature": "Защита от XSS",
"CmsKit:0002": "Контент уже существует!", "CmsKit:0002": "Контент уже существует!",
"CmsKit:0003": "Сущность {0} не может быть помечена.", "CmsKit:0003": "Сущность {0} не может быть помечена.",
"CmsKit:Blog:0001": "Указанный слаг ({Slug}) уже существует!", "CmsKit:Blog:0001": "Указанный слаг ({Slug}) уже существует!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Hodnotenia", "CmsKit.Ratings": "Hodnotenia",
"CmsKit.Reactions": "Reakcie", "CmsKit.Reactions": "Reakcie",
"CmsKit.Tags": "Tagy", "CmsKit.Tags": "Tagy",
"CmsKit.BlogPost.PreventXssFeature": "Zabraňte XSS",
"CmsKit:0002": "Obsah už existuje!", "CmsKit:0002": "Obsah už existuje!",
"CmsKit:0003": "Entite {0} nie je možné priradiť tag.", "CmsKit:0003": "Entite {0} nie je možné priradiť tag.",
"CmsKit:Blog:0001": "Zadaný slug ({Slug}) už existuje!", "CmsKit:Blog:0001": "Zadaný slug ({Slug}) už existuje!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Ocene", "CmsKit.Ratings": "Ocene",
"CmsKit.Reactions": "Reakcije", "CmsKit.Reactions": "Reakcije",
"CmsKit.Tags": "Oznake", "CmsKit.Tags": "Oznake",
"CmsKit.BlogPost.PreventXssFeature": "Prepreči XSS",
"CmsKit:0002": "Vsebina že obstaja!", "CmsKit:0002": "Vsebina že obstaja!",
"CmsKit:0003": "Entiteta {0} ni mogoče označiti.", "CmsKit:0003": "Entiteta {0} ni mogoče označiti.",
"CmsKit:Blog:0001": "Podani polž ({Slug}) že obstaja!", "CmsKit:Blog:0001": "Podani polž ({Slug}) že obstaja!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json

@ -187,6 +187,7 @@
"RemoveCoverImageConfirmationMessage": "Kapak resmini kaldırmak istediğinize emin misiniz?", "RemoveCoverImageConfirmationMessage": "Kapak resmini kaldırmak istediğinize emin misiniz?",
"RemoveCoverImage": "Kapak resmini kaldır", "RemoveCoverImage": "Kapak resmini kaldır",
"CmsKit.BlogPost.ScrollIndex": "Blog yazılarında hızlı gezinme çubuğu", "CmsKit.BlogPost.ScrollIndex": "Blog yazılarında hızlı gezinme çubuğu",
"CmsKit.BlogPost.PreventXssFeature": "XSS önleme özelliği",
"Add": "Ekle", "Add": "Ekle",
"AddWidget": "Widget Ekle", "AddWidget": "Widget Ekle",
"PleaseConfigureWidgets": "Lütfen widget'leri yapılandırın", "PleaseConfigureWidgets": "Lütfen widget'leri yapılandırın",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "Xếp hạng", "CmsKit.Ratings": "Xếp hạng",
"CmsKit.Reactions": "Phản ứng", "CmsKit.Reactions": "Phản ứng",
"CmsKit.Tags": "Thẻ", "CmsKit.Tags": "Thẻ",
"CmsKit.BlogPost.PreventXssFeature": "Ngăn chặn XSS",
"CmsKit:0002": "Nội dung đã tồn tại!", "CmsKit:0002": "Nội dung đã tồn tại!",
"CmsKit:0003": "Thực thể {0} không thể gắn thẻ.", "CmsKit:0003": "Thực thể {0} không thể gắn thẻ.",
"CmsKit:Blog:0001": "Sên đã cho ({Slug}) đã tồn tại!", "CmsKit:Blog:0001": "Sên đã cho ({Slug}) đã tồn tại!",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json

@ -185,6 +185,7 @@
"SelectAStatus": "选择一个状态", "SelectAStatus": "选择一个状态",
"Status": "状态", "Status": "状态",
"CmsKit.BlogPost.ScrollIndex": "博客文章快速导航栏", "CmsKit.BlogPost.ScrollIndex": "博客文章快速导航栏",
"CmsKit.BlogPost.PreventXssFeature": "防止XSS攻击",
"Add": "添加", "Add": "添加",
"AddWidget": "添加组件", "AddWidget": "添加组件",
"PleaseConfigureWidgets": "请配置组件", "PleaseConfigureWidgets": "请配置组件",

1
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json

@ -15,6 +15,7 @@
"CmsKit.Ratings": "評分", "CmsKit.Ratings": "評分",
"CmsKit.Reactions": "反應", "CmsKit.Reactions": "反應",
"CmsKit.Tags": "標籤", "CmsKit.Tags": "標籤",
"CmsKit.BlogPost.PreventXssFeature": "防止XSS攻擊",
"CmsKit:0002": "內容已經存在!", "CmsKit:0002": "內容已經存在!",
"CmsKit:0003": "實體 {0} 不可標記.", "CmsKit:0003": "實體 {0} 不可標記.",
"CmsKit:Blog:0001": "給定的slug ({Slug}) 已經存在!", "CmsKit:Blog:0001": "給定的slug ({Slug}) 已經存在!",

15
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/DefaultBlogFeatureProvider.cs

@ -11,12 +11,13 @@ public class DefaultBlogFeatureProvider : IDefaultBlogFeatureProvider, ITransien
public virtual Task<List<BlogFeature>> GetDefaultFeaturesAsync(Guid blogId) public virtual Task<List<BlogFeature>> GetDefaultFeaturesAsync(Guid blogId)
{ {
return Task.FromResult(new List<BlogFeature> return Task.FromResult(new List<BlogFeature>
{ {
new BlogFeature(blogId, CommentsFeature.Name), new BlogFeature(blogId, CommentsFeature.Name),
new BlogFeature(blogId, ReactionsFeature.Name), new BlogFeature(blogId, ReactionsFeature.Name),
new BlogFeature(blogId, RatingsFeature.Name), new BlogFeature(blogId, RatingsFeature.Name),
new BlogFeature(blogId, TagsFeature.Name), new BlogFeature(blogId, TagsFeature.Name),
new BlogFeature(blogId, BlogPostScrollIndexFeature.Name) new BlogFeature(blogId, BlogPostScrollIndexFeature.Name),
}); new BlogFeature(blogId, BlogConsts.PreventXssFeatureName)
});
} }
} }

2
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/Default.cshtml

@ -204,7 +204,7 @@
{ {
@foreach (var reply in comment.Replies) @foreach (var reply in comment.Replies)
{ {
<div class="bg-light card p-3 mx-0 mt-3"> <div class="comment-container card p-3 mx-0 mt-3">
<div class="comment"> <div class="comment">
<h5> <h5>
@GetCommentTitle(reply.Author, reply.CreationTime).Invoke(null) @GetCommentTitle(reply.Author, reply.CreationTime).Invoke(null)

24
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml

@ -69,7 +69,9 @@
</p> </p>
@(await Component.InvokeAsync(typeof(ContentFragmentViewComponent), new DefaultContentDto @(await Component.InvokeAsync(typeof(ContentFragmentViewComponent), new DefaultContentDto
{ {
ContentFragments = Model.ViewModel.ContentFragments ContentFragments = Model.ViewModel.ContentFragments,
AllowHtmlTags = true,
PreventXSS = Model.PreventXssFeature.IsEnabled,
})) }))
<p class="mb-3"> <p class="mb-3">
@if (Model.ViewModel.LastModificationTime != null) @if (Model.ViewModel.LastModificationTime != null)
@ -137,19 +139,19 @@
} }
@if (isScrollIndexEnabled) @if (isScrollIndexEnabled)
{ {
<div id="scroll-index" class="docs-inner-anchors mt-2"> <div id="scroll-index" class="docs-inner-anchors mt-2">
<h5>@L["InThisDocument"]</h5> <h5>@L["InThisDocument"]</h5>
<nav id="blog-post-sticky-index" class="navbar index-scroll pt-0"> <nav id="blog-post-sticky-index" class="navbar index-scroll pt-0">
</nav> </nav>
<div class="row"> <div class="row">
<div class="col p-0 py-3"> <div class="col p-0 py-3">
<a href="#" class="scroll-top-btn"> <a href="#" class="scroll-top-btn">
<i class="fa fa-chevron-up"></i> @L["GoToTop"] <i class="fa fa-chevron-up"></i> @L["GoToTop"]
</a> </a>
</div>
</div> </div>
</div> </div>
</div>
} }
</div> </div>

4
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs

@ -29,6 +29,8 @@ public class BlogPostModel : CmsKitPublicPageModelBase
public BlogFeatureDto BlogPostScrollIndexFeature { get; private set; } public BlogFeatureDto BlogPostScrollIndexFeature { get; private set; }
public BlogFeatureDto PreventXssFeature { get; private set; }
protected IBlogPostPublicAppService BlogPostPublicAppService { get; } protected IBlogPostPublicAppService BlogPostPublicAppService { get; }
protected IBlogFeatureAppService BlogFeatureAppService { get; } protected IBlogFeatureAppService BlogFeatureAppService { get; }
@ -81,6 +83,8 @@ public class BlogPostModel : CmsKitPublicPageModelBase
BlogPostScrollIndexFeature = await BlogFeatureAppService.GetOrDefaultAsync(ViewModel.BlogId, GlobalFeatures.BlogPostScrollIndexFeature.Name); BlogPostScrollIndexFeature = await BlogFeatureAppService.GetOrDefaultAsync(ViewModel.BlogId, GlobalFeatures.BlogPostScrollIndexFeature.Name);
} }
PreventXssFeature = await BlogFeatureAppService.GetOrDefaultAsync(ViewModel.BlogId, BlogConsts.PreventXssFeatureName);
return Page(); return Page();
} }
} }

23
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml

@ -7,23 +7,30 @@
@section styles{ @section styles{
<abp-style src="/Pages/Public/CmsKit/Pages/index.css" /> <abp-style src="/Pages/Public/CmsKit/Pages/index.css" />
@if (!Model.ViewModel.Style.IsNullOrEmpty())
<style> {
@Html.Raw(Model.ViewModel.Style) <style>
</style> @Html.Raw(Model.ViewModel.Style)
</style>
}
} }
@section scripts{ @section scripts{
<script> @if (!Model.ViewModel.Script.IsNullOrEmpty())
@Html.Raw(Model.ViewModel.Script) {
</script> <script>
@Html.Raw(Model.ViewModel.Script)
</script>
}
} }
<abp-card> <abp-card>
<abp-card-body> <abp-card-body>
@(await Component.InvokeAsync(typeof(ContentFragmentViewComponent), new DefaultContentDto @(await Component.InvokeAsync(typeof(ContentFragmentViewComponent), new DefaultContentDto
{ {
ContentFragments = Model.ViewModel.ContentFragments ContentFragments = Model.ViewModel.ContentFragments,
PreventXSS = false,
AllowHtmlTags = true,
})) }))
</abp-card-body> </abp-card-body>
</abp-card> </abp-card>

Loading…
Cancel
Save