Ver código fonte

重构面包屑导航

懒得勤快 1 mês atrás
pai
commit
e1946c11e1
46 arquivos alterados com 1396 adições e 1498 exclusões
  1. 17 9
      src/Masuit.MyBlogs.Core/Views/Home/Archieve.cshtml
  2. 25 17
      src/Masuit.MyBlogs.Core/Views/Home/Author.cshtml
  3. 116 102
      src/Masuit.MyBlogs.Core/Views/Home/Category.cshtml
  4. 13 7
      src/Masuit.MyBlogs.Core/Views/Home/Post.cshtml
  5. 17 9
      src/Masuit.MyBlogs.Core/Views/Home/Tag.cshtml
  6. 1 1
      src/Masuit.MyBlogs.Core/Views/Links/Index.cshtml
  7. 1 1
      src/Masuit.MyBlogs.Core/Views/Links/Index_Admin.cshtml
  8. 22 18
      src/Masuit.MyBlogs.Core/Views/Misc/About.cshtml
  9. 11 8
      src/Masuit.MyBlogs.Core/Views/Misc/Agreement.cshtml
  10. 22 19
      src/Masuit.MyBlogs.Core/Views/Misc/Disclaimer.cshtml
  11. 59 60
      src/Masuit.MyBlogs.Core/Views/Misc/Donate.cshtml
  12. 1 1
      src/Masuit.MyBlogs.Core/Views/Misc/Donate_Admin.cshtml
  13. 21 19
      src/Masuit.MyBlogs.Core/Views/Misc/Index.cshtml
  14. 1 1
      src/Masuit.MyBlogs.Core/Views/Msg/Index.cshtml
  15. 1 1
      src/Masuit.MyBlogs.Core/Views/Msg/Index_Admin.cshtml
  16. 51 44
      src/Masuit.MyBlogs.Core/Views/Notice/Details.cshtml
  17. 31 28
      src/Masuit.MyBlogs.Core/Views/Notice/Index.cshtml
  18. 1 1
      src/Masuit.MyBlogs.Core/Views/Notice/Index_Admin.cshtml
  19. 101 95
      src/Masuit.MyBlogs.Core/Views/Post/All.cshtml
  20. 1 1
      src/Masuit.MyBlogs.Core/Views/Post/CompareVersion.cshtml
  21. 1 1
      src/Masuit.MyBlogs.Core/Views/Post/Details.cshtml
  22. 1 1
      src/Masuit.MyBlogs.Core/Views/Post/Details_Admin.cshtml
  23. 91 73
      src/Masuit.MyBlogs.Core/Views/Post/Details_SEO.cshtml
  24. 1 1
      src/Masuit.MyBlogs.Core/Views/Post/History.cshtml
  25. 8 8
      src/Masuit.MyBlogs.Core/Views/Post/HistoryVersion.cshtml
  26. 1 1
      src/Masuit.MyBlogs.Core/Views/Post/HistoryVersion_Admin.cshtml
  27. 1 1
      src/Masuit.MyBlogs.Core/Views/Post/Publish.cshtml
  28. 1 1
      src/Masuit.MyBlogs.Core/Views/Post/PushMerge.cshtml
  29. 1 1
      src/Masuit.MyBlogs.Core/Views/Post/RepushMerge.cshtml
  30. 174 150
      src/Masuit.MyBlogs.Core/Views/Search/Search.cshtml
  31. 92 90
      src/Masuit.MyBlogs.Core/Views/Seminar/Index.cshtml
  32. 73 70
      src/Masuit.MyBlogs.Core/Views/Tools/GetIPInfo.cshtml
  33. 13 9
      src/Masuit.MyBlogs.Core/Views/Tools/Loan.cshtml
  34. 0 8
      src/Masuit.MyBlogs.Core/wwwroot/Assets/breadcrumb/cd-custom-separator.svg
  35. 0 297
      src/Masuit.MyBlogs.Core/wwwroot/Assets/breadcrumb/style.css
  36. 424 343
      src/Masuit.MyBlogs.Core/wwwroot/Content/common/style.css
  37. BIN
      src/Masuit.MyBlogs.Core/wwwroot/Content/images/1.jpg
  38. BIN
      src/Masuit.MyBlogs.Core/wwwroot/Content/images/2.jpg
  39. BIN
      src/Masuit.MyBlogs.Core/wwwroot/Content/images/3.jpg
  40. BIN
      src/Masuit.MyBlogs.Core/wwwroot/Content/images/4.jpg
  41. BIN
      src/Masuit.MyBlogs.Core/wwwroot/Content/images/5.jpg
  42. BIN
      src/Masuit.MyBlogs.Core/wwwroot/Content/images/6.jpg
  43. BIN
      src/Masuit.MyBlogs.Core/wwwroot/Content/images/7.jpg
  44. BIN
      src/Masuit.MyBlogs.Core/wwwroot/Content/images/8.jpg
  45. BIN
      src/Masuit.MyBlogs.Core/wwwroot/Content/images/9.jpg
  46. 1 1
      src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/article.js

+ 17 - 9
src/Masuit.MyBlogs.Core/Views/Home/Archieve.cshtml

@@ -3,17 +3,25 @@
 @using Masuit.Tools.Core.Net
 @model HomePageViewModel
 @{
-	ViewBag.Title = "归档_" + Context.Request.RouteValues["yyyy"]+"-"+ Context.Request.RouteValues["mm"]+"-"+ Context.Request.RouteValues["dd"];
-	Layout = "~/Views/Shared/_Layout.cshtml";
+  ViewBag.Title = "归档_" + Context.Request.RouteValues["yyyy"] + "-" + Context.Request.RouteValues["mm"] + "-" + Context.Request.RouteValues["dd"];
+  Layout = "~/Views/Shared/_Layout.cshtml";
 }
 <div class="container">
-	<ol class="cd-breadcrumb triangle">
-		<li><a asp-controller="Home" asp-action="Index">首页</a></li>
-		<li><a asp-controller="Home" asp-action="Post">文章列表</a></li>
-		<li class="current"><em>@ViewBag.Title</em></li>
-	</ol>
+  <div class="row">
+    <ol class="breadcrumb">
+      <li>
+        <a asp-action="Index" asp-controller="Home">首页</a>
+      </li>
+      <li>
+        <a asp-action="Post" asp-controller="Home">文章列表</a>
+      </li>
+      <li class="current">
+        <em>@ViewBag.Title</em>
+      </li>
+    </ol>
+  </div>
 </div>
 @{
-	UserInfoDto user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
-	await Html.RenderPartialAsync(user.IsAdmin ? "_MainContainer_Admin" : "_MainContainer", Model);
+  UserInfoDto user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
+  await Html.RenderPartialAsync(user.IsAdmin ? "_MainContainer_Admin" : "_MainContainer", Model);
 }

+ 25 - 17
src/Masuit.MyBlogs.Core/Views/Home/Author.cshtml

@@ -3,16 +3,16 @@
 @using Masuit.Tools.Core.Net
 @model HomePageViewModel
 @{
-	ViewBag.Title = "作者_" + ViewBag.Author;
-	Layout = "~/Views/Shared/_Layout.cshtml";
-	Random r = new Random();
+  ViewBag.Title = "作者_" + ViewBag.Author;
+  Layout = "~/Views/Shared/_Layout.cshtml";
+  Random r = new Random();
 }
 <style>
 	.bg-title {
 		height: 50vh;
 		max-height: 400px;
 		position: relative;
-		background: url(/Content/images/@(r.Next(1,9)).jpg) no-repeat center;
+		background: url(/Content/images/@(r.Next(1, 9)).jpg) no-repeat center;
 		background-size:cover;
 		background-attachment: fixed;
 		margin-bottom: 10px;
@@ -31,21 +31,29 @@
 	}
 </style>
 <div class="container">
-	<ol class="cd-breadcrumb triangle">
-		<li><a asp-controller="Home" asp-action="Index">首页</a></li>
-		<li><a asp-controller="Home" asp-action="Post">文章列表</a></li>
-		<li class="current"><em>@ViewBag.Title</em></li>
-	</ol>
+  <div class="row">
+    <ol class="breadcrumb">
+      <li>
+        <a asp-action="Index" asp-controller="Home">首页</a>
+      </li>
+      <li>
+        <a asp-action="Post" asp-controller="Home">文章列表</a>
+      </li>
+      <li class="current">
+        <em>@ViewBag.Title</em>
+      </li>
+    </ol>
+  </div>
 </div>
 <div class="bg-title">
-	<div class="header-content text-center">
-		<h2 class="size48">
-			@ViewBag.Author 参与编辑的文章
-		</h2>
-		<div class="divider"></div>
-	</div>
+  <div class="header-content text-center">
+    <h2 class="size48">
+      @ViewBag.Author 参与编辑的文章
+    </h2>
+    <div class="divider"></div>
+  </div>
 </div>
 @{
-	var user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
-	await Html.RenderPartialAsync(user.IsAdmin ? "_MainContainer_Admin" : "_MainContainer", Model);
+  var user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
+  await Html.RenderPartialAsync(user.IsAdmin ? "_MainContainer_Admin" : "_MainContainer", Model);
 }

+ 116 - 102
src/Masuit.MyBlogs.Core/Views/Home/Category.cshtml

@@ -10,41 +10,41 @@
 @model Masuit.MyBlogs.Core.Models.ViewModel.HomePageViewModel
 @inject ICategoryService CategoryService
 @{
-    var all = CategoryService.GetQuery(c => c.Status==Status.Available).Select(c => new Category() {
-        Id = c.Id,
-        ParentId = c.ParentId,
-        Name = c.Name,
-        Description = c.Description
-    }).Cacheable().ToList();
-    var alllist = all.ToTree();
-    var cat = all.FirstOrDefault(c => c.Id == ViewBag.Category.Id);
-    ViewBag.Title = "分类_" + cat.Path();
-    Layout = "~/Views/Shared/_Layout.cshtml";
-    var level = cat.Level();
-    var children2 = new List<Category>();
-    var children3 = new List<Category>();
-    var parentId = cat.ParentId;
-    switch (level) {
-        case 1:
-            children2.AddRange(cat.Children.OrderBy(c => c.Id));
-            break;
-        case 2:
-            children2.AddRange(all.Where(c => c.ParentId == parentId).OrderBy(c=> c.Name));
-            children3.AddRange(cat.Children.OrderBy(c => c.Name));
-            break;
-        case 3:
-            var topid = cat.Parent.ParentId;
-            children2.AddRange(all.Where(c => c.ParentId == topid).OrderBy(c => c.Name));
-            children3.AddRange(all.Where(c => c.ParentId == parentId).OrderBy(c => c.Name));
-            break;
-    }
+  var all = CategoryService.GetQuery(c => c.Status == Status.Available).Select(c => new Category() {
+    Id = c.Id,
+    ParentId = c.ParentId,
+    Name = c.Name,
+    Description = c.Description
+  }).Cacheable().ToList();
+  var alllist = all.ToTree();
+  var cat = all.FirstOrDefault(c => c.Id == ViewBag.Category.Id);
+  ViewBag.Title = "分类_" + cat.Path();
+  Layout = "~/Views/Shared/_Layout.cshtml";
+  var level = cat.Level();
+  var children2 = new List<Category>();
+  var children3 = new List<Category>();
+  var parentId = cat.ParentId;
+  switch (level) {
+    case 1:
+      children2.AddRange(cat.Children.OrderBy(c => c.Id));
+      break;
+    case 2:
+      children2.AddRange(all.Where(c => c.ParentId == parentId).OrderBy(c => c.Name));
+      children3.AddRange(cat.Children.OrderBy(c => c.Name));
+      break;
+    case 3:
+      var topid = cat.Parent.ParentId;
+      children2.AddRange(all.Where(c => c.ParentId == topid).OrderBy(c => c.Name));
+      children3.AddRange(all.Where(c => c.ParentId == parentId).OrderBy(c => c.Name));
+      break;
+  }
 }
 <style>
     .bg-title {
         height: 50vh;
         max-height: 400px;
         position: relative;
-        background: url(/Content/images/@(new Random().Next(1,9)).jpg) no-repeat center;
+        background: url(/Content/images/@(new Random().Next(1, 9)).jpg) no-repeat center;
         background-size:cover;
         background-attachment: fixed;
         margin-bottom: 10px;
@@ -63,86 +63,100 @@
     }
 </style>
 <div class="container">
-    <ol class="cd-breadcrumb triangle">
-        <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-        <li><a asp-controller="Home" asp-action="Post">文章列表</a></li>
-        @if(cat.ParentId>0) {
-            if(cat.Parent.ParentId>0) {
-                <li><a asp-controller="Home" asp-action="Category" asp-route-id="@cat.Parent.ParentId">@cat.Parent.Parent.Name</a></li>
-            }
-            <li><a asp-controller="Home" asp-action="Category" asp-route-id="@cat.ParentId">@cat.Parent.Name</a></li>
-        }
-        <li class="current"><em>@cat.Name</em></li>
-    </ol>
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li>
+      <a asp-action="Post" asp-controller="Home">文章列表</a>
+    </li>
+    @if (cat.ParentId > 0) {
+      if (cat.Parent.ParentId > 0) {
+        <li>
+          <a asp-action="Category" asp-controller="Home" asp-route-id="@cat.Parent.ParentId">@cat.Parent.Parent.Name</a>
+        </li>
+      }
+
+      <li>
+        <a asp-action="Category" asp-controller="Home" asp-route-id="@cat.ParentId">@cat.Parent.Name</a>
+      </li>
+    }
+    <li class="current">
+      <em>@cat.Name</em>
+    </li>
+  </ol>
 </div>
 <div class="bg-title">
-    <div class="header-content text-center">
-        <h2 class="size48">
-            @cat.Path()
-            @if(CommonHelper.SystemSettings.GetOrAdd("EnableRss", "true") == "true"){
-                <a class="btn btn-lg btn-success" asp-controller="Subscribe" asp-action="CategoryRss" asp-route-id="@cat.Id" target="_blank">
-                    <i class="icon-rss4"></i>
-                </a>
-            }
-            @if(Context.Request.GetHideCategories().Contains(cat.Id)) {
-                <a class="btn btn-lg btn-default" onclick='blockCategory("@cat.Id","@cat.Name")'>
-                    <i class="icon-blocked"></i>
-                </a>
-            }else {
-                <a class="btn btn-lg btn-danger" onclick='blockCategory("@cat.Id","@cat.Name")'>
-                    <i class="icon-blocked"></i>
-                </a>
-            }
-        </h2>
-        <div class="divider"></div>
-        <p class="size24">
-            @cat.Description
-        </p>
-    </div>
+  <div class="header-content text-center">
+    <h2 class="size48">
+      @cat.Path()
+      @if (CommonHelper.SystemSettings.GetOrAdd("EnableRss", "true") == "true") {
+        <a asp-action="CategoryRss" asp-controller="Subscribe" asp-route-id="@cat.Id" class="btn btn-lg btn-success" target="_blank">
+          <i class="icon-rss4"></i>
+        </a>
+      }
+      @if (Context.Request.GetHideCategories().Contains(cat.Id)) {
+        <a class="btn btn-default btn-lg" onclick='blockCategory("@cat.Id","@cat.Name")'>
+          <i class="icon-blocked"></i>
+        </a>
+      } else {
+        <a class="btn btn-danger btn-lg" onclick='blockCategory("@cat.Id","@cat.Name")'>
+          <i class="icon-blocked"></i>
+        </a>
+      }
+    </h2>
+    <div class="divider"></div>
+    <p class="size24">
+      @cat.Description
+    </p>
+  </div>
 </div>
 <div class="container">
+  <p>
+    一级分类:
+    @foreach (var category in alllist) {
+      if (cat.Id == category.Id || cat.ParentId == category.Id || (level == 3 && cat.Parent.ParentId == category.Id)) {
+        <a asp-action="Category" asp-controller="Home" asp-route-id="@category.Id" class="text-red">@category.Name</a>
+        <text> | </text>
+      } else {
+        <a asp-action="Category" asp-controller="Home" asp-route-id="@category.Id">@category.Name</a>
+        <text> | </text>
+      }
+    }
+  </p>
+  @if (children2.Count > 0) {
+    <hr/>
     <p>
-        一级分类:
-        @foreach (var category in alllist)
-        {
-            if (cat.Id==category.Id||cat.ParentId==category.Id|| (level==3&&cat.Parent.ParentId == category.Id)) {
-                <a class="text-red" asp-controller="Home" asp-action="Category" asp-route-id="@category.Id">@category.Name</a><text> | </text>
-            } else {
-                <a asp-controller="Home" asp-action="Category" asp-route-id="@category.Id">@category.Name</a><text> | </text>
-            }
+      <text>二级分类:</text>
+      @foreach (var category in children2) {
+        if (cat.Id == category.Id || cat.ParentId == category.Id) {
+          <a asp-action="Category" asp-controller="Home" asp-route-id="@category.Id" class="text-red">@category.Name</a>
+          <text> | </text>
+        } else {
+          <a asp-action="Category" asp-controller="Home" asp-route-id="@category.Id">@category.Name</a>
+          <text> | </text>
         }
+      }
     </p>
-    @if(children2.Count>0) {
-        <hr />
-        <p>
-            <text>二级分类:</text>
-            @foreach (var category in children2)
-            {
-                if (cat.Id==category.Id||cat.ParentId==category.Id) {
-                    <a class="text-red" asp-controller="Home" asp-action="Category" asp-route-id="@category.Id">@category.Name</a><text> | </text>
-                } else {
-                    <a asp-controller="Home" asp-action="Category" asp-route-id="@category.Id">@category.Name</a><text> | </text>
-                }
-            }
-        </p>
-    }
-    @if(children3.Count>0) {
-        <hr />
-        <p>
-            <text>三级分类:</text>
-            @foreach (var category in children3)
-            {
-                if (cat.Id==category.Id) {
-                    <a class="text-red" asp-controller="Home" asp-action="Category" asp-route-id="@category.Id">@category.Name</a><text> | </text>
-                } else {
-                    <a asp-controller="Home" asp-action="Category" asp-route-id="@category.Id">@category.Name</a><text> | </text>
-                }
-            }
-        </p>
-    }
-    <hr />
+  }
+  @if (children3.Count > 0) {
+    <hr/>
+    <p>
+      <text>三级分类:</text>
+      @foreach (var category in children3) {
+        if (cat.Id == category.Id) {
+          <a asp-action="Category" asp-controller="Home" asp-route-id="@category.Id" class="text-red">@category.Name</a>
+          <text> | </text>
+        } else {
+          <a asp-action="Category" asp-controller="Home" asp-route-id="@category.Id">@category.Name</a>
+          <text> | </text>
+        }
+      }
+    </p>
+  }
+  <hr/>
 </div>
 @{
-    var user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
-    await Html.RenderPartialAsync(user.IsAdmin ? "_MainContainer_Admin" : "_MainContainer", Model);
+  var user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
+  await Html.RenderPartialAsync(user.IsAdmin ? "_MainContainer_Admin" : "_MainContainer", Model);
 }

+ 13 - 7
src/Masuit.MyBlogs.Core/Views/Home/Post.cshtml

@@ -1,19 +1,25 @@
 
 @{
-    ViewBag.Title = "文章列表页";
-    Layout = "~/Views/Shared/_Layout.cshtml";
+  ViewBag.Title = "文章列表页";
+  Layout = "~/Views/Shared/_Layout.cshtml";
 }
 @using Masuit.MyBlogs.Core.Models.DTO
 @using Masuit.MyBlogs.Core.Models.ViewModel
 @using Masuit.Tools.Core.Net
 @model HomePageViewModel
 <div class="container">
-    <ol class="cd-breadcrumb triangle">
-        <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-        <li class="current"><em>@ViewBag.Title</em></li>
+  <div class="row">
+    <ol class="breadcrumb">
+      <li>
+        <a asp-action="Index" asp-controller="Home">首页</a>
+      </li>
+      <li class="current">
+        <em>@ViewBag.Title</em>
+      </li>
     </ol>
+  </div>
 </div>
 @{
-    UserInfoDto user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
-    await Html.RenderPartialAsync(user.IsAdmin ? "_MainContainer_Admin" : "_MainContainer", Model);
+  UserInfoDto user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
+  await Html.RenderPartialAsync(user.IsAdmin ? "_MainContainer_Admin" : "_MainContainer", Model);
 }

+ 17 - 9
src/Masuit.MyBlogs.Core/Views/Home/Tag.cshtml

@@ -3,17 +3,25 @@
 @using Masuit.Tools.Core.Net
 @model HomePageViewModel
 @{
-	ViewBag.Title = "标签_" + ViewBag.Tag;
-	Layout = "~/Views/Shared/_Layout.cshtml";
+  ViewBag.Title = "标签_" + ViewBag.Tag;
+  Layout = "~/Views/Shared/_Layout.cshtml";
 }
 <div class="container">
-	<ol class="cd-breadcrumb triangle">
-		<li><a asp-controller="Home" asp-action="Index">首页</a></li>
-		<li><a asp-controller="Home" asp-action="Post">文章列表</a></li>
-		<li class="current"><em>@ViewBag.Title</em></li>
-	</ol>
+  <div class="row">
+    <ol class="breadcrumb">
+      <li>
+        <a asp-action="Index" asp-controller="Home">首页</a>
+      </li>
+      <li>
+        <a asp-action="Post" asp-controller="Home">文章列表</a>
+      </li>
+      <li class="current">
+        <em>@ViewBag.Title</em>
+      </li>
+    </ol>
+  </div>
 </div>
 @{
-	UserInfoDto user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
-	await Html.RenderPartialAsync(user.IsAdmin ? "_MainContainer_Admin" : "_MainContainer", Model);
+  UserInfoDto user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
+  await Html.RenderPartialAsync(user.IsAdmin ? "_MainContainer_Admin" : "_MainContainer", Model);
 }

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Links/Index.cshtml

@@ -6,7 +6,7 @@
 }
 <link href="~/Content/common/btnstyle.css" rel="stylesheet"/>
 <div class="container min-height610" id="linksApp">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Links/Index_Admin.cshtml

@@ -6,7 +6,7 @@
 }
 <link href="~/Content/common/btnstyle.css" rel="stylesheet"/>
 <div class="container min-height610" id="linksApp">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 22 - 18
src/Masuit.MyBlogs.Core/Views/Misc/About.cshtml

@@ -1,16 +1,16 @@
 @model string
 @using Masuit.MyBlogs.Core.Models.ViewModel
 @{
-    ViewBag.Title = "关于博主";
-    Layout = "~/Views/Shared/_Layout.cshtml";
-    Random r = new Random();
+  ViewBag.Title = "关于博主";
+  Layout = "~/Views/Shared/_Layout.cshtml";
+  Random r = new Random();
 }
 <style>
     .bg-title {
         height: 50vh;
         max-height: 400px;
         position: relative;
-        background: url(/Content/images/@(r.Next(1,9)).jpg) no-repeat center;
+        background: url(/Content/images/@(r.Next(1, 9)).jpg) no-repeat center;
         background-size:cover;
         background-attachment: fixed;
     }
@@ -28,22 +28,26 @@
     }
 </style>
 <div class="container">
-    <ol class="cd-breadcrumb triangle">
-        <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-        <li class="current"><em>@ViewBag.Title</em></li>
-    </ol>
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li class="current">
+      <em>@ViewBag.Title</em>
+    </li>
+  </ol>
 </div>
 <div class="bg-title">
-    <div class="header-content text-center">
-        <h2 class="size48">
-            关于博主
-        </h2>
-        <div class="divider"></div>
-        <p class="size24">
-            博主个人简介
-        </p>
-    </div>
+  <div class="header-content text-center">
+    <h2 class="size48">
+      关于博主
+    </h2>
+    <div class="divider"></div>
+    <p class="size24">
+      博主个人简介
+    </p>
+  </div>
 </div>
 <div class="container">
-    @Html.Raw(Model)
+  @Html.Raw(Model)
 </div>

+ 11 - 8
src/Masuit.MyBlogs.Core/Views/Misc/Agreement.cshtml

@@ -1,15 +1,18 @@
 @model string
 @{
-    ViewBag.Title = "评论及留言须知";
-    Layout = "~/Views/Shared/_Layout.cshtml";
+  ViewBag.Title = "评论及留言须知";
+  Layout = "~/Views/Shared/_Layout.cshtml";
 }
-
 <div class="container">
-    <ol class="cd-breadcrumb triangle">
-        <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-        <li class="current"><em>@ViewBag.Title</em></li>
-    </ol>
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li class="current">
+      <em>@ViewBag.Title</em>
+    </li>
+  </ol>
 </div>
 <div class="container">
-    @Html.Raw(Model)
+  @Html.Raw(Model)
 </div>

+ 22 - 19
src/Masuit.MyBlogs.Core/Views/Misc/Disclaimer.cshtml

@@ -1,16 +1,15 @@
 @model string
 @{
-    ViewBag.Title = "网站免责声明";
-    Layout = "~/Views/Shared/_Layout.cshtml";
-    Random r = new Random();
+  ViewBag.Title = "网站免责声明";
+  Layout = "~/Views/Shared/_Layout.cshtml";
+  Random r = new Random();
 }
-
 <style>
     .bg-title {
         height: 50vh;
         max-height: 400px;
         position: relative;
-        background: url(/Content/images/@(r.Next(1,9)).jpg) no-repeat center;
+        background: url(/Content/images/@(r.Next(1, 9)).jpg) no-repeat center;
         background-size:cover;
         background-attachment: fixed;
     }
@@ -36,22 +35,26 @@
     }
 </style>
 <div class="container">
-    <ol class="cd-breadcrumb triangle">
-        <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-        <li class="current"><em>@ViewBag.Title</em></li>
-    </ol>
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li class="current">
+      <em>@ViewBag.Title</em>
+    </li>
+  </ol>
 </div>
 <div class="bg-title">
-    <div class="header-content text-center">
-        <h2 class="size48">
-            网站免责声明与法律条文
-        </h2>
-        <div class="divider"></div>
-        <p class="size24">
-            针对网站内容以及相关软件的附加说明和版权声明
-        </p>
-    </div>
+  <div class="header-content text-center">
+    <h2 class="size48">
+      网站免责声明与法律条文
+    </h2>
+    <div class="divider"></div>
+    <p class="size24">
+      针对网站内容以及相关软件的附加说明和版权声明
+    </p>
+  </div>
 </div>
 <div class="container">
-    @Html.Raw(Model)
+  @Html.Raw(Model)
 </div>

+ 59 - 60
src/Masuit.MyBlogs.Core/Views/Misc/Donate.cshtml

@@ -1,10 +1,10 @@
 @model string
 @using Masuit.MyBlogs.Core.Models.DTO
 @{
-    ViewBag.Title = "网站打赏";
-    Layout = "~/Views/Shared/_Layout.cshtml";
-    Random r = new Random();
-    List<AdvertisementDto> ads = ViewBag.Ads;
+  ViewBag.Title = "网站打赏";
+  Layout = "~/Views/Shared/_Layout.cshtml";
+  Random r = new Random();
+  List<AdvertisementDto> ads = ViewBag.Ads;
 }
 <style>
     .bg-title {
@@ -35,70 +35,69 @@
         }
     }
 </style>
-<ol class="cd-breadcrumb triangle">
-    <li>
-        <a asp-action="Index" asp-controller="Home">首页</a>
-    </li>
-    <li class="current">
-        <em>@ViewBag.Title</em>
-    </li>
+<ol class="breadcrumb">
+  <li>
+    <a asp-action="Index" asp-controller="Home">首页</a>
+  </li>
+  <li class="current">
+    <em>@ViewBag.Title</em>
+  </li>
 </ol>
 <div class="bg-title">
-    <div class="header-content text-center">
-        <h2 class="size48">
-            喜欢我的作品和文章?
-        </h2>
-        <div class="divider"></div>
-        <p class="size24">
-            您的捐助就是给我最大的鼓励
-        </p>
-    </div>
+  <div class="header-content text-center">
+    <h2 class="size48">
+      喜欢我的作品和文章?
+    </h2>
+    <div class="divider"></div>
+    <p class="size24">
+      您的捐助就是给我最大的鼓励
+    </p>
+  </div>
 </div>
 @Html.Raw(Model)
 <div class="container-fluid" id="donateApp" ng-controller="home as list">
+  <div class="margin-clear page-header">
+    <h2 class="size24" style="display: inline">
+      打赏名单(排名不分先后):
+    </h2>
+  </div>
+  <vxe-table :data="tableData" :loading="loading" border stripe>
+    <!-- 打赏时间列 -->
+    <vxe-column field="DonateTime" formatter="formatDate" title="打赏时间" width="160"></vxe-column>
+    <!-- 昵称列 -->
+    <vxe-column field="NickName" min-width="140" title="昵称"></vxe-column>
+    <!-- 金额列 -->
+    <vxe-column field="Amount" title="金额" width="110"></vxe-column>
+    <!-- 打赏方式列 -->
+    <vxe-column field="Via" title="打赏方式" width="140"></vxe-column>
+    <!-- Email列 -->
+    <vxe-column field="Email" min-width="200" title="Email"></vxe-column>
+    <!-- QQ或微信列 -->
+    <vxe-column field="QQorWechat" title="QQ或微信" width="160"></vxe-column>
+  </vxe-table>
+  <!-- 分页组件 -->
+  <vxe-pager :current-page="pageConfig.page" :page-size="pageConfig.size" :total="pageConfig.total" @@page-change="pageChange"/>
+</div>
+@if (ads.Count == 2) {
+  <div class="container-fluid">
     <div class="margin-clear page-header">
-        <h2 class="size24" style="display: inline">
-            打赏名单(排名不分先后):
-        </h2>
+      <h2 class="size24" style="display: inline">
+        推广支持
+      </h2>
     </div>
-    <vxe-table :data="tableData" :loading="loading" border stripe>
-        <!-- 打赏时间列 -->
-        <vxe-column field="DonateTime" formatter="formatDate" title="打赏时间" width="160"></vxe-column>
-        <!-- 昵称列 -->
-        <vxe-column field="NickName" min-width="140" title="昵称"></vxe-column>
-        <!-- 金额列 -->
-        <vxe-column field="Amount" title="金额" width="110"></vxe-column>
-        <!-- 打赏方式列 -->
-        <vxe-column field="Via" title="打赏方式" width="140"></vxe-column>
-        <!-- Email列 -->
-        <vxe-column field="Email" min-width="200" title="Email"></vxe-column>
-        <!-- QQ或微信列 -->
-        <vxe-column field="QQorWechat" title="QQ或微信" width="160"></vxe-column>
-    </vxe-table>
-    <!-- 分页组件 -->
-    <vxe-pager :current-page="pageConfig.page" :page-size="pageConfig.size" :total="pageConfig.total" @@page-change="pageChange" />
-</div>
-@if (ads.Count == 2)
-{
-    <div class="container-fluid">
-        <div class="margin-clear page-header">
-            <h2 class="size24" style="display: inline">
-                推广支持:
-            </h2>
-        </div>
-        <div class="row">
-            <div class="col-md-6">
-                @{
-                    await Html.RenderPartialAsync("_ArticleListAdvertisement", ads[0]);
-                }
-            </div>
-            <div class="col-md-6">
-                @{
-                    await Html.RenderPartialAsync("_ArticleListAdvertisement", ads[1]);
-                }
-            </div>
-        </div>
+    <div class="row">
+      <div class="col-md-6">
+        @{
+          await Html.RenderPartialAsync("_ArticleListAdvertisement", ads[0]);
+        }
+      </div>
+      <div class="col-md-6">
+        @{
+          await Html.RenderPartialAsync("_ArticleListAdvertisement", ads[1]);
+        }
+      </div>
     </div>
+  </div>
 }
 <link href="https://cdn.jsdelivr.net/npm/[email protected]/lib/style.min.css" rel="stylesheet">
 <link href="https://cdn.jsdelivr.net/npm/[email protected]/lib/style.min.css" rel="stylesheet">

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Misc/Donate_Admin.cshtml

@@ -32,7 +32,7 @@
         }
     }
 </style>
-<ol class="cd-breadcrumb triangle">
+<ol class="breadcrumb">
   <li>
     <a asp-action="Index" asp-controller="Home">首页</a>
   </li>

+ 21 - 19
src/Masuit.MyBlogs.Core/Views/Misc/Index.cshtml

@@ -1,17 +1,17 @@
 @using Masuit.MyBlogs.Core.Common
 @model Masuit.MyBlogs.Core.Models.Entity.Misc
 @{
-    ViewBag.Title = Model.Title;
-    Layout = "~/Views/Shared/_Layout.cshtml";
-    Random r = new Random();
+  ViewBag.Title = Model.Title;
+  Layout = "~/Views/Shared/_Layout.cshtml";
+  Random r = new Random();
 }
-<link href="~/UEditorPlus/third-party/SyntaxHighlighter/shCoreDefault.css" rel="stylesheet" />
+<link href="~/UEditorPlus/third-party/SyntaxHighlighter/shCoreDefault.css" rel="stylesheet"/>
 <style>
     .bg-title {
         height: 50vh;
         max-height: 400px;
         position: relative;
-        background: url(/Content/images/@(r.Next(1,9)).jpg) no-repeat center;
+        background: url(/Content/images/@(r.Next(1, 9)).jpg) no-repeat center;
         background-size:cover;
         background-attachment: fixed;
     }
@@ -36,24 +36,26 @@
         font-size: 24px;
     }
 </style>
-<ol class="cd-breadcrumb triangle">
-    <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-    <li class="current">
-        <em>@ViewBag.Title</em>
-    </li>
+<ol class="breadcrumb">
+  <li>
+    <a asp-action="Index" asp-controller="Home">首页</a>
+  </li>
+  <li class="current">
+    <em>@ViewBag.Title</em>
+  </li>
 </ol>
 <div class="bg-title">
-    <div class="header-content text-center">
-        <h2 class="size48">
-            @Model.Title
-        </h2>
-        <div class="divider"></div>
-    </div>
+  <div class="header-content text-center">
+    <h2 class="size48">
+      @Model.Title
+    </h2>
+    <div class="divider"></div>
+  </div>
 </div>
 <div class="container">
-    <article class="content">
-        @Html.Raw(await Model.Content.ReplaceImgAttribute(Model.Title))
-    </article>
+  <article class="content">
+    @Html.Raw(await Model.Content.ReplaceImgAttribute(Model.Title))
+  </article>
 </div>
 <script src="~/UEditorPlus/third-party/SyntaxHighlighter/shCore.js"></script>
 <script>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Msg/Index.cshtml

@@ -5,7 +5,7 @@
   string hidden = string.IsNullOrEmpty(Context.Request.Cookies["ValidateKey"]) ? "" : "hidden";
 }
 <div class="container min-height610" id="msgApp">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Msg/Index_Admin.cshtml

@@ -7,7 +7,7 @@
   UserInfoDto user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo);
 }
 <div class="container min-height610" id="msgApp">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 51 - 44
src/Masuit.MyBlogs.Core/Views/Notice/Details.cshtml

@@ -4,9 +4,9 @@
 @using Masuit.Tools.Core.Net
 @model Masuit.MyBlogs.Core.Models.Entity.Notice
 @{
-    ViewBag.Title = Model.Title;
-    Layout = "~/Views/Shared/_Layout.cshtml";
-    Random r = new Random();
+  ViewBag.Title = Model.Title;
+  Layout = "~/Views/Shared/_Layout.cshtml";
+  Random r = new Random();
 }
 <style>
     .bg-title {
@@ -29,50 +29,57 @@
         border-top: 3px solid rebeccapurple;
     }
 </style>
-<ol class="cd-breadcrumb triangle">
-    <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-    <li><a asp-controller="Notice" asp-action="Index">公告列表</a></li>
-    <li class="current"><em>@ViewBag.Title</em></li>
+<ol class="breadcrumb">
+  <li>
+    <a asp-action="Index" asp-controller="Home">首页</a>
+  </li>
+  <li>
+    <a asp-action="Index" asp-controller="Notice">公告列表</a>
+  </li>
+  <li class="current">
+    <em>@ViewBag.Title</em>
+  </li>
 </ol>
 <div class="bg-title">
-    <div class="header-content text-center">
-        <h2 class="size48">
-            @Model.Title
-        </h2>
-        <div class="divider"></div>
-        <p class="size24">
-            发布于:<time>@Model.PostDate.ToString("yyyy-MM-dd")</time> | 修改于:<time>@Model.ModifyDate.ToString("yyyy-MM-dd")</time> | 浏览人数:@Model.ViewCount
-        </p>
-    </div>
+  <div class="header-content text-center">
+    <h2 class="size48">
+      @Model.Title
+    </h2>
+    <div class="divider"></div>
+    <p class="size24">
+      发布于:
+      <time>@Model.PostDate.ToString("yyyy-MM-dd")</time> | 修改于:
+      <time>@Model.ModifyDate.ToString("yyyy-MM-dd")</time> | 浏览人数:@Model.ViewCount
+    </p>
+  </div>
 </div>
 <div class="container">
-    <div class="wrapper-content article">
-        <div class="ibox">
-            <div class="ibox-content">
-                <section class="wow fadeInUp">
-                    <div class="btn-group">
-                        <a asp-controller="Notice" asp-action="Index">&lt;&lt;返回公告列表页</a>
-                        @{
-                            var user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
-                            if (user.IsAdmin)
-                            {
-                                <a class="btn btn-primary" href="/dashboard/notice/write?id [email protected]" target="_blank">修改</a>
-                            }
-                        }
-                    </div>
-                </section>
-                <hr class="margin-top10 marginbot10" />
-                <main>
-                    <section>
-                        <article class="article" id="article">
-                            @Html.Raw(await Model.Content.ReplaceImgAttribute(Model.Title))
-                        </article>
-                    </section>
-                </main>
-            </div>
-        </div>
+  <div class="article wrapper-content">
+    <div class="ibox">
+      <div class="ibox-content">
+        <section class="fadeInUp wow">
+          <div class="btn-group">
+            <a asp-action="Index" asp-controller="Notice">&lt;&lt;返回公告列表页</a>
+            @{
+              var user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
+              if (user.IsAdmin) {
+                <a class="btn btn-primary" href="/dashboard/notice/write?id [email protected]" target="_blank">修改</a>
+              }
+            }
+          </div>
+        </section>
+        <hr class="margin-top10 marginbot10"/>
+        <main>
+          <section>
+            <article class="article" id="article">
+              @Html.Raw(await Model.Content.ReplaceImgAttribute(Model.Title))
+            </article>
+          </section>
+        </main>
+      </div>
     </div>
-    @{
-        await Html.RenderPartialAsync("_ArticleListAdvertisement", (AdvertisementDto)ViewBag.Ads);
-    }
+  </div>
+  @{
+    await Html.RenderPartialAsync("_ArticleListAdvertisement", (AdvertisementDto) ViewBag.Ads);
+  }
 </div>

+ 31 - 28
src/Masuit.MyBlogs.Core/Views/Notice/Index.cshtml

@@ -1,35 +1,38 @@
 @using Masuit.MyBlogs.Core.Models.DTO
 @model IList<Masuit.MyBlogs.Core.Models.DTO.NoticeDto>
 @{
-    ViewBag.Title = "网站公告栏";
-    Layout = "~/Views/Shared/_Layout.cshtml";
+  ViewBag.Title = "网站公告栏";
+  Layout = "~/Views/Shared/_Layout.cshtml";
 }
 <div class="container min-height610">
-    <ol class="cd-breadcrumb triangle">
-        <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-        <li class="current"><em>@ViewBag.Title</em></li>
-    </ol>
-    <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
-        @foreach (var n in Model)
-        {
-            <div class="panel panel-default">
-                <div class="panel-heading" role="tab" id="[email protected]">
-                    <h4 class="panel-title">
-                        <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#[email protected]" aria-expanded="false" aria-controls="[email protected]">
-                            @n.ModifyDate.ToString("yyyy-MM-dd") @n.Title
-                        </a>
-                    </h4>
-                </div>
-                <div id="[email protected]" class="panel-collapse collapse" role="tabpanel" aria-labelledby="[email protected]">
-                    <div class="panel-body">
-                        @Html.Raw(n.Content)
-                    </div>
-                </div>
-            </div>
-        }
-    </div>
-    @{
-        await Html.RenderPartialAsync("_Pagination", ViewData["page"]);
-        await Html.RenderPartialAsync("_ArticleListAdvertisement", (AdvertisementDto)ViewBag.Ads);
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li class="current">
+      <em>@ViewBag.Title</em>
+    </li>
+  </ol>
+  <div aria-multiselectable="true" class="panel-group" id="accordion" role="tablist">
+    @foreach (var n in Model) {
+      <div class="panel panel-default">
+        <div class="panel-heading" id="[email protected]" role="tab">
+          <h4 class="panel-title">
+            <a aria-controls="[email protected]" aria-expanded="false" class="collapsed" data-parent="#accordion" data-toggle="collapse" href="#[email protected]" role="button">
+              @n.ModifyDate.ToString("yyyy-MM-dd") @n.Title
+            </a>
+          </h4>
+        </div>
+        <div aria-labelledby="[email protected]" class="collapse panel-collapse" id="[email protected]" role="tabpanel">
+          <div class="panel-body">
+            @Html.Raw(n.Content)
+          </div>
+        </div>
+      </div>
     }
+  </div>
+  @{
+    await Html.RenderPartialAsync("_Pagination", ViewData["page"]);
+    await Html.RenderPartialAsync("_ArticleListAdvertisement", (AdvertisementDto) ViewBag.Ads);
+  }
 </div>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Notice/Index_Admin.cshtml

@@ -5,7 +5,7 @@
   Layout = "~/Views/Shared/_Layout.cshtml";
 }
 <div class="container min-height610">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 101 - 95
src/Masuit.MyBlogs.Core/Views/Post/All.cshtml

@@ -1,21 +1,33 @@
 @{
-	ViewBag.Title = "分类云_标签云_专题云";
-	Layout = "~/Views/Shared/_Layout.cshtml";
-	Dictionary<string, int> tags = ViewBag.tags;
-	Dictionary<int,string> cats = ViewBag.cats;
-	Dictionary<int,string> seminars = ViewBag.seminars;
-	string[] colors = { "success", "info", "primary", "warning", "danger", "default", "primary" };
-	Random r = new Random();
+  ViewBag.Title = "分类云_标签云_专题云";
+  Layout = "~/Views/Shared/_Layout.cshtml";
+  Dictionary<string, int> tags = ViewBag.tags;
+  Dictionary<int, string> cats = ViewBag.cats;
+  Dictionary<int, string> seminars = ViewBag.seminars;
+  string[] colors = {
+    "success",
+    "info",
+    "primary",
+    "warning",
+    "danger",
+    "default",
+    "primary"
+  };
+  Random r = new Random();
 }
-<link href="~/Content/common/post-all.css" rel="stylesheet" />
+<link href="~/Content/common/post-all.css" rel="stylesheet"/>
 <div class="container-fluid">
-	<ol class="cd-breadcrumb triangle">
-		<li><a asp-controller="Home" asp-action="Index">首页</a></li>
-		<li class="current"><em>@ViewBag.Title</em></li>
-	</ol>
-	<svg id="svg-source" height="0" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position: absolute">
-		<g id="shopping-cart" data-iconmelon="e-commerce icons:7c96e2dece0152dc594d66b260f79db0">
-			<path d="M22.463,25.841c0.528,0,0.918-0.429,0.918-0.958v-6.786c0-0.529-0.39-0.958-0.918-0.958c-0.529,0-0.92,0.429-0.92,0.958
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li class="current">
+      <em>@ViewBag.Title</em>
+    </li>
+  </ol>
+  <svg height="0" id="svg-source" style="position: absolute" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <g data-iconmelon="e-commerce icons:7c96e2dece0152dc594d66b260f79db0" id="shopping-cart">
+      <path d="M22.463,25.841c0.528,0,0.918-0.429,0.918-0.958v-6.786c0-0.529-0.39-0.958-0.918-0.958c-0.529,0-0.92,0.429-0.92,0.958
 	v6.786C21.543,25.413,21.934,25.841,22.463,25.841z M18.156,25.841c0.529,0,0.919-0.429,0.919-0.958v-6.786
 	c0-0.529-0.39-0.958-0.919-0.958s-0.919,0.429-0.919,0.958v6.786C17.237,25.413,17.627,25.841,18.156,25.841z M13.851,25.841
 	c0.528,0,0.919-0.429,0.919-0.958v-6.786c0-0.529-0.391-0.958-0.919-0.958c-0.529,0-0.919,0.429-0.919,0.958v6.786
@@ -30,15 +42,15 @@
 	L9.396,9.742h12.467l-2.76-4.32c-0.189-0.33-0.076-0.753,0.253-0.944c0.323-0.186,0.756-0.074,0.955,0.27l3.104,4.994h6.011
 	c0.741,0,1.344,0.603,1.344,1.344V12.556z M9.545,25.841c0.528,0,0.918-0.429,0.918-0.958v-6.786c0-0.529-0.39-0.958-0.918-0.958
 	c-0.529,0-0.919,0.429-0.919,0.958v6.786C8.626,25.413,9.016,25.841,9.545,25.841z"></path>
-		</g>
-		<g id="credit-card" data-iconmelon="e-commerce icons:c3144b166f93e0f6b73aee04a0a48397">
-			<path d="M29.018,4.751H2.981C1.337,4.751,0,6.089,0,7.733v16.534c0,1.644,1.337,2.981,2.981,2.981h26.036
+    </g>
+    <g data-iconmelon="e-commerce icons:c3144b166f93e0f6b73aee04a0a48397" id="credit-card">
+      <path d="M29.018,4.751H2.981C1.337,4.751,0,6.089,0,7.733v16.534c0,1.644,1.337,2.981,2.981,2.981h26.036
 	c1.645,0,2.982-1.338,2.982-2.981V7.733C32,6.089,30.662,4.751,29.018,4.751z M30.638,24.267c0,0.893-0.727,1.62-1.621,1.62H2.981
 	c-0.893,0-1.62-0.727-1.62-1.62V13.603h29.276V24.267z M30.638,10.236H1.362V7.733c0-0.894,0.727-1.62,1.62-1.62h26.036
 	c0.894,0,1.621,0.727,1.621,1.62V10.236z M8.848,22.494H2.724v1.338h6.124V22.494z M19.043,22.494H9.548v1.338h9.495V22.494z"></path>
-		</g>
-		<g id="gift" data-iconmelon="e-commerce icons:05fa65d254ada5a9cb5c2f1e8d87f02b">
-			<path d="M29.084,7.154h-4.807c0.157-0.146,0.731-0.497,0.866-0.678c0.757-1.01,1.016-2.355,0.677-3.51
+    </g>
+    <g data-iconmelon="e-commerce icons:05fa65d254ada5a9cb5c2f1e8d87f02b" id="gift">
+      <path d="M29.084,7.154h-4.807c0.157-0.146,0.731-0.497,0.866-0.678c0.757-1.01,1.016-2.355,0.677-3.51
 	c-0.473-1.612-1.773-2.575-3.479-2.575c-1.017,0-1.993,0.371-2.546,0.967c-0.759,0.818-2.841,3.57-3.764,4.8
 	c-0.923-1.23-3.004-3.982-3.764-4.8c-0.553-0.596-1.528-0.967-2.546-0.967c-1.706,0-3.007,0.962-3.479,2.575
 	c-0.339,1.155-0.08,2.5,0.677,3.51C7.053,6.657,7.5,7.007,7.657,7.154H2.915C1.308,7.154,0,8.462,0,10.07v5.262h1.356v13.362
@@ -50,83 +62,77 @@
 	c0.513,0,1.75,0.156,2.173,1.597c0.217,0.74,0.037,1.647-0.46,2.311c-0.227,0.303-0.716,0.811-1.447,0.811
 	c-0.894,0-3.493,0.006-5.115,0.011C18.504,5.139,20.169,2.956,20.792,2.285z M29.26,28.694c0,0.857-0.697,1.617-1.554,1.617h-10.02
 	v-14.91H29.26V28.694z M30.638,13.949H17.687V8.515h11.397c0.858,0,1.554,0.698,1.554,1.555V13.949z"></path>
-		</g>
-		<g id="package" data-iconmelon="e-commerce icons:de2d76203b2448ee25bda0d82fa73c00">
-			<path d="M31.666,7.132l0.028-0.014L16.191,0L0.264,7.285l0.027,0.013v17.39l15.094,7.266V32l0.05-0.023l0.012,0.006l0.006-0.013
+    </g>
+    <g data-iconmelon="e-commerce icons:de2d76203b2448ee25bda0d82fa73c00" id="package">
+      <path d="M31.666,7.132l0.028-0.014L16.191,0L0.264,7.285l0.027,0.013v17.39l15.094,7.266V32l0.05-0.023l0.012,0.006l0.006-0.013
 	l16.283-7.442V7.132H31.666z M16.191,1.415l12.553,5.73l-3.352,1.604L12.535,3.088L16.191,1.415z M1.669,23.879V7.887l13.993,6.388
 	l0.006,16.256L1.669,23.879z M3.202,7.285L8.223,5.06l12.553,5.897l-4.592,2.195L3.202,7.285z M30.358,23.698l-13.307,6.294
 	l0.019-15.722l4.873-2.396l0.031,7.692l4.169-2.288V9.777l4.215-2.062V23.698z"></path>
-		</g>
-	</svg>
-	<!-- ICONS -->
-
-	<div id="wrapper">
-		<div id="left-side">
-			<ul>
-				<li class="choose active">
-					<div class="icon active">
-						<svg viewBox="0 0 32 32">
-							<g filter="">
-								<use xlink:href="#shopping-cart"></use>
-							</g>
-						</svg>
-					</div>
-					分类云
-				</li>
-				<li class="pay">
-					<div class="icon">
-						<svg viewBox="0 0 32 32">
-							<g filter="">
-								<use xlink:href="#credit-card"></use>
-							</g>
-						</svg>
-					</div>
-					标签云
-				</li>
-				<li class="wrap">
-					<div class="icon">
-						<svg viewBox="0 0 32 32">
-							<g filter="">
-								<use xlink:href="#gift"></use>
-							</g>
-						</svg>
-					</div>
-					专题云
-				</li>
-			</ul>
-		</div>
-
-		<div id="border">
-			<div id="line" class="one"></div>
-		</div>
-
-		<div id="right-side">
-			<div id="first" class="active">
-				<p>
-					@foreach (var (key, value) in cats)
-					{
-						<a asp-controller="Home" asp-action="Category" asp-route-id="@key" class="label label-@colors[r.Next(colors.Length)]">@value</a>
-					}
-				</p>
-			</div>
-			<div id="second">
-				<p>
-					@foreach (var (key, _) in tags)
-					{
-						<a asp-controller="Home" asp-action="Tag" asp-route-tag="@key" class="label label-@colors[r.Next(colors.Length)]">@key</a>
-					}
-				</p>
-			</div>
-			<div id="third">
-				<p>
-					@foreach (var (key, value) in seminars)
-					{
-						<a asp-controller="Seminar" asp-action="Index" asp-route-id="@key" class="label label-@colors[r.Next(colors.Length)]">@value</a>
-					}
-				</p>
-			</div>
-		</div>
-	</div>
+    </g>
+  </svg>
+  <!-- ICONS -->
+  <div id="wrapper">
+    <div id="left-side">
+      <ul>
+        <li class="active choose">
+          <div class="active icon">
+            <svg viewBox="0 0 32 32">
+              <g filter="">
+                <use xlink:href="#shopping-cart"></use>
+              </g>
+            </svg>
+          </div>
+          分类云
+        </li>
+        <li class="pay">
+          <div class="icon">
+            <svg viewBox="0 0 32 32">
+              <g filter="">
+                <use xlink:href="#credit-card"></use>
+              </g>
+            </svg>
+          </div>
+          标签云
+        </li>
+        <li class="wrap">
+          <div class="icon">
+            <svg viewBox="0 0 32 32">
+              <g filter="">
+                <use xlink:href="#gift"></use>
+              </g>
+            </svg>
+          </div>
+          专题云
+        </li>
+      </ul>
+    </div>
+    <div id="border">
+      <div class="one" id="line"></div>
+    </div>
+    <div id="right-side">
+      <div class="active" id="first">
+        <p>
+          @foreach (var (key, value) in cats) {
+            <a asp-action="Category" asp-controller="Home" asp-route-id="@key" class="label label-@colors[r.Next(colors.Length)]">@value</a>
+          }
+        </p>
+      </div>
+      <div id="second">
+        <p>
+          @foreach (var (key, _) in tags) {
+            <a asp-action="Tag" asp-controller="Home" asp-route-tag="@key" class="label label-@colors[r.Next(colors.Length)]">@key</a>
+          }
+        </p>
+      </div>
+      <div id="third">
+        <p>
+          @foreach (var (key, value) in seminars) {
+            <a asp-action="Index" asp-controller="Seminar" asp-route-id="@key" class="label label-@colors[r.Next(colors.Length)]">@value</a>
+          }
+        </p>
+      </div>
+    </div>
+  </div>
 </div>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r55/three.js"></script>
 <script src="~/Scripts/Detector.js"></script>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/CompareVersion.cshtml

@@ -33,7 +33,7 @@
 </style>
 <link href="~/UEditorPlus/third-party/SyntaxHighlighter/shCoreDefault.css" rel="stylesheet"/>
 <div class="container-fluid">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/Details.cshtml

@@ -35,7 +35,7 @@
   }
 </script>
 <div class="container" id="postApp">
-<ol class="cd-breadcrumb triangle">
+<ol class="breadcrumb">
   <li>
     <a asp-action="Index" asp-controller="Home">首页</a>
   </li>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/Details_Admin.cshtml

@@ -36,7 +36,7 @@
   }
 </script>
 <div class="container" id="postApp">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 91 - 73
src/Masuit.MyBlogs.Core/Views/Post/Details_SEO.cshtml

@@ -1,86 +1,104 @@
 @using Microsoft.AspNetCore.Mvc.TagHelpers
 @model Masuit.MyBlogs.Core.Models.Entity.Post
-
 @{
-    ViewBag.Title = Model.Title;
-    Layout = null;
-    var summary = await Model.Content.GetSummary();
+  ViewBag.Title = Model.Title;
+  Layout = null;
+  var summary = await Model.Content.GetSummary();
 }
 <!DOCTYPE html>
 <html lang="zh-CN">
 <head>
-    <meta charset="utf-8">
-    <meta http-equiv='content-language' content='zh-CN'>
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-    <title>@(ViewBag.Title + "_" + CommonHelper.SystemSettings["Title"])</title>
-    <meta name="keywords" content="@(CommonHelper.SystemSettings["Keyword"]+","+Model.Keyword)" />
-    <meta name="description" content="@summary" />
-    <meta name="format-detection" content="telephone=no">
-    <meta name="theme-color" content="#ffffff">
-    <meta name="twitter:card" content="summary">
-    <meta property="og:title" content="@(Model.Title + "_" + CommonHelper.SystemSettings["Title"])">
-    <meta property="og:description" content="@summary">
-    <meta property="og:type" content="website">
-    <meta property="og:image:alt" content="@summary" />
-    <meta property="og:locale" content="zh_CN">
-    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
+  <meta charset="utf-8">
+  <meta content='zh-CN' http-equiv='content-language'>
+  <meta content="IE=edge" http-equiv="X-UA-Compatible">
+  <meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
+  <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
+  <title>@(ViewBag.Title + "_" + CommonHelper.SystemSettings["Title"])</title>
+  <meta content="@(CommonHelper.SystemSettings["Keyword"] + "," + Model.Keyword)" name="keywords"/>
+  <meta content="@summary" name="description"/>
+  <meta content="telephone=no" name="format-detection">
+  <meta content="#ffffff" name="theme-color">
+  <meta content="summary" name="twitter:card">
+  <meta content="@(Model.Title + "_" + CommonHelper.SystemSettings["Title"])" property="og:title">
+  <meta content="@summary" property="og:description">
+  <meta content="website" property="og:type">
+  <meta content="@summary" property="og:image:alt"/>
+  <meta content="zh_CN" property="og:locale">
+  <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
 </head>
 <body>
-    <div class="container">
-        <div class="page-header">
-            <h2><a asp-controller="Home" asp-action="Index">@CommonHelper.SystemSettings["Title"]</a></h2>
-        </div>
-        <ol class="breadcrumb triangle">
-            <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-            <li><a asp-controller="Home" asp-action="Post">文章列表</a></li>
-            @if (Model.Category.ParentId > 0)
-            {
-                if (Model.Category.Parent.ParentId > 0)
-                {
-                    <li><a asp-controller="Home" asp-action="Category" asp-route-id="@Model.Category.Parent.ParentId">@Model.Category.Parent.Parent.Name</a></li>
-                }
-                <li><a asp-controller="Home" asp-action="Category" asp-route-id="@Model.Category.ParentId">@Model.Category.Parent.Name</a></li>
-            }
-            <li><a asp-controller="Home" asp-action="Category" asp-route-id="@Model.CategoryId">@Model.Category.Name</a></li>
-            <li class="current"><em>@Model.Title</em></li>
-        </ol>
-        <div class="page-header">
-            <h2>@Model.Title</h2>
-        </div>
-        <div class="row">
-            <div class="col-sm-8">
-                <div class="padding-bot10">
-                    <span class="label label-info">
-                        <a asp-controller="Home" asp-action="Author" asp-route-author="@Model.Author">@Model.Author</a>
-                    </span>发表于<a asp-controller="Home" asp-action="Archieve" asp-route-yyyy="@Model.PostDate.Year" asp-route-mm="@Model.PostDate.Month" asp-route-dd="@Model.PostDate.Day" asp-route-mode="@nameof(Model.PostDate)"><time class="text-info">@Model.PostDate.ToString("yyyy-MM-dd HH:mm:ss")</time></a> |
-                    <span class="label label-info">
-                        <a asp-controller="Home" asp-action="Author" asp-route-author="@Model.Modifier">@Model.Modifier</a>
-                    </span>最后修改于<a asp-controller="Home" asp-action="Archieve" asp-route-yyyy="@Model.ModifyDate.Year" asp-route-mm="@Model.ModifyDate.Month" asp-route-dd="@Model.ModifyDate.Day" asp-route-mode="@nameof(Model.ModifyDate)"><time class="text-success">@Model.ModifyDate.ToString("yyyy-MM-dd HH:mm")</time></a>
-                </div>
-            </div>
-            @{
-                if (!string.IsNullOrEmpty(Model.Label))
-                {
-                    <div class="pull-right margin-right20">
-                        <div>
-                            @foreach (string s in Model.Label.Split(new[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries))
-                            {
-                                <a asp-controller="Home" asp-action="Tag" asp-route-tag="@s">
-                                    <span class="label label-primary">@s</span>
-                                </a>
-                            }
-                        </div>
-                    </div>
-                }
-            }
-        </div>
+<div class="container">
+  <div class="page-header">
+    <h2>
+      <a asp-action="Index" asp-controller="Home">@CommonHelper.SystemSettings["Title"]</a>
+    </h2>
+  </div>
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li>
+      <a asp-action="Post" asp-controller="Home">文章列表</a>
+    </li>
+    @if (Model.Category.ParentId > 0) {
+      if (Model.Category.Parent.ParentId > 0) {
+        <li>
+          <a asp-action="Category" asp-controller="Home" asp-route-id="@Model.Category.Parent.ParentId">@Model.Category.Parent.Parent.Name</a>
+        </li>
+      }
 
-        <article class="article" id="article">
-            @Html.Raw(Model.Content)
-            @Html.Raw(Model.ProtectContent)
-        </article>
+      <li>
+        <a asp-action="Category" asp-controller="Home" asp-route-id="@Model.Category.ParentId">@Model.Category.Parent.Name</a>
+      </li>
+    }
+    <li>
+      <a asp-action="Category" asp-controller="Home" asp-route-id="@Model.CategoryId">@Model.Category.Name</a>
+    </li>
+    <li class="current">
+      <em>@Model.Title</em>
+    </li>
+  </ol>
+  <div class="page-header">
+    <h2>@Model.Title</h2>
+  </div>
+  <div class="row">
+    <div class="col-sm-8">
+      <div class="padding-bot10">
+        <span class="label label-info">
+          <a asp-action="Author" asp-controller="Home" asp-route-author="@Model.Author">@Model.Author</a>
+        </span>发表于
+        <a asp-action="Archieve" asp-controller="Home" asp-route-dd="@Model.PostDate.Day" asp-route-mm="@Model.PostDate.Month" asp-route-mode="@nameof(Model.PostDate)" asp-route-yyyy="@Model.PostDate.Year">
+          <time class="text-info">@Model.PostDate.ToString("yyyy-MM-dd HH:mm:ss")</time>
+        </a> |
+        <span class="label label-info">
+          <a asp-action="Author" asp-controller="Home" asp-route-author="@Model.Modifier">@Model.Modifier</a>
+        </span>最后修改于
+        <a asp-action="Archieve" asp-controller="Home" asp-route-dd="@Model.ModifyDate.Day" asp-route-mm="@Model.ModifyDate.Month" asp-route-mode="@nameof(Model.ModifyDate)" asp-route-yyyy="@Model.ModifyDate.Year">
+          <time class="text-success">@Model.ModifyDate.ToString("yyyy-MM-dd HH:mm")</time>
+        </a>
+      </div>
     </div>
+    @{
+      if (!string.IsNullOrEmpty(Model.Label)) {
+        <div class="margin-right20 pull-right">
+          <div>
+            @foreach (string s in Model.Label.Split(new[] {
+                        ',',
+                        ','
+                      }, StringSplitOptions.RemoveEmptyEntries)) {
+              <a asp-action="Tag" asp-controller="Home" asp-route-tag="@s">
+                <span class="label label-primary">@s</span>
+              </a>
+            }
+          </div>
+        </div>
+      }
+    }
+  </div>
+  <article class="article" id="article">
+    @Html.Raw(Model.Content)
+    @Html.Raw(Model.ProtectContent)
+  </article>
+</div>
 </body>
 </html>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/History.cshtml

@@ -9,7 +9,7 @@
   AdvertisementDto ad = ViewBag.Ads;
 }
 <div class="container" id="historyApp" style="min-height: 70vh">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 8 - 8
src/Masuit.MyBlogs.Core/Views/Post/HistoryVersion.cshtml

@@ -22,7 +22,7 @@
   AdvertisementDto ad = ViewBag.Ads;
 }
 <div class="container" id="postApp">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>
@@ -158,15 +158,15 @@
   </div>
 </div>
 <environment names="Development">
-    <link href="~/UEditorPlus/third-party/SyntaxHighlighter/shCoreDefault.css" rel="stylesheet" />
-    <script src="/UEditorPlus/third-party/SyntaxHighlighter/shCore.js"></script>
-    <link href="~/Assets/auto-toc/auto-toc.css" rel="stylesheet" />
-    <script src="/Assets/auto-toc/auto-toc.js"></script>
-    <script src="/Scripts/global/article.js"></script>
+  <link href="~/UEditorPlus/third-party/SyntaxHighlighter/shCoreDefault.css" rel="stylesheet"/>
+  <script src="/UEditorPlus/third-party/SyntaxHighlighter/shCore.js"></script>
+  <link href="~/Assets/auto-toc/auto-toc.css" rel="stylesheet"/>
+  <script src="/Assets/auto-toc/auto-toc.js"></script>
+  <script src="/Scripts/global/article.js"></script>
 </environment>
 <environment names="Stage,Production">
-    @await Styles.RenderAsync("/bundles/article.css")
-    @await Scripts.RenderAsync("/bundles/article.js")
+  @await Styles.RenderAsync("/bundles/article.css")
+  @await Scripts.RenderAsync("/bundles/article.js")
 </environment>
 <script>
 window.onload=function() {

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/HistoryVersion_Admin.cshtml

@@ -19,7 +19,7 @@
   AdvertisementDto ad = ViewBag.Ads;
 }
 <div class="container" id="postApp">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/Publish.cshtml

@@ -6,7 +6,7 @@
 <script charset="utf-8" src="~/UEditorPlus/ueditor.all.js" type="text/javascript"></script>
 <script charset="utf-8" src="~/UEditorPlus/lang/zh-cn/zh-cn.js" type="text/javascript"></script>
 <div class="container" id="publishApp">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/PushMerge.cshtml

@@ -5,7 +5,7 @@
   Layout = "~/Views/Shared/_Layout.cshtml";
 }
 <div class="container">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/RepushMerge.cshtml

@@ -5,7 +5,7 @@
   Layout = "~/Views/Shared/_Layout.cshtml";
 }
 <div class="container">
-  <ol class="cd-breadcrumb triangle">
+  <ol class="breadcrumb">
     <li>
       <a asp-action="Index" asp-controller="Home">首页</a>
     </li>

+ 174 - 150
src/Masuit.MyBlogs.Core/Views/Search/Search.cshtml

@@ -6,157 +6,181 @@
 @using Microsoft.AspNetCore.Mvc.Rendering
 @model SearchResult<Masuit.MyBlogs.Core.Models.DTO.PostDto>
 @{
-	ViewBag.Title = "站内搜索:" + ViewBag.Keyword;
-	Layout = "~/Views/Shared/_Layout.cshtml";
-	IList<KeywordsRank> hotSearches = ViewBag.hotSearches;
-	IList<string> relateKeywords = ViewBag.RelateKeywords;
-	AdvertisementDto ad = ViewBag.Ads;
+  ViewBag.Title = "站内搜索:" + ViewBag.Keyword;
+  Layout = "~/Views/Shared/_Layout.cshtml";
+  IList<KeywordsRank> hotSearches = ViewBag.hotSearches;
+  IList<string> relateKeywords = ViewBag.RelateKeywords;
+  AdvertisementDto ad = ViewBag.Ads;
 }
 <div class="container min-height610">
-	<ol class="cd-breadcrumb triangle">
-		<li><a asp-controller="Home" asp-action="Index">首页</a></li>
-		<li class="current"><em>@ViewBag.Title</em></li>
-	</ol>
-	<div class="wrapper wrapper-content animated fadeInRight">
-		<div class="row">
-			<div class="col-sm-12">
-				@if (!string.IsNullOrEmpty(ViewBag.Keyword))
-				{
-					<small>搜索用时(@Model.Elapsed 毫秒)</small>
-				}
-				<div class="search-form">
-					<form action="/search" method="get">
-						<div class="input-group">
-							<input type="text" placeholder="你要查找的关键词,支持部分指令:intitle,content,如:intitle:会声会影 content:懒得勤快,指令支持组合" id="search" name="wd" maxlength="32" value="@ViewBag.Keyword" class="form-control input-lg">
-							<div class="input-group-btn">
-								<button class="btn btn-lg btn-primary" type="submit">搜索</button>
-							</div>
-						</div>
-					</form>
-					@if (hotSearches.Any())
-					{
-						<span>搜索推荐:</span>
-						foreach (var item in hotSearches)
-						{
-							@Html.ActionLink(item.Keywords + "(" + item.Count + ")", "Search", new { wd = item.Keywords }, new { @class = "label label-danger" }) <span>  </span>
-						}
-					}
-				</div>
-				@if (Model.Results.Any())
-				{
-					<div class="hr-line-dashed"></div>
-					var rnd = new Random().Next(Model.Results.Count > 2 ? 2 : 1, Model.Results.Count);
-					for (var i = 0; i < Model.Results.Count; i++)
-					{
-						if (rnd > 1 && rnd == i && ad != null)
-						{
-							await Html.RenderPartialAsync("_ArticleListAdvertisement", ad);
-						}
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li class="current">
+      <em>@ViewBag.Title</em>
+    </li>
+  </ol>
+  <div class="animated fadeInRight wrapper wrapper-content">
+    <div class="row">
+      <div class="col-sm-12">
+        @if (!string.IsNullOrEmpty(ViewBag.Keyword)) {
+          <small>搜索用时(@Model.Elapsed 毫秒)</small>
+        }
+        <div class="search-form">
+          <form action="/search" method="get">
+            <div class="input-group">
+              <input class="form-control input-lg" id="search" maxlength="32" name="wd" placeholder="你要查找的关键词,支持部分指令:intitle,content,如:intitle:会声会影 content:懒得勤快,指令支持组合" type="text" value="@ViewBag.Keyword">
+              <div class="input-group-btn">
+                <button class="btn btn-lg btn-primary" type="submit">搜索</button>
+              </div>
+            </div>
+          </form>
+          @if (hotSearches.Any()) {
+            <span>搜索推荐:</span>
+            foreach (var item in hotSearches) {
+              @Html.ActionLink(item.Keywords + "(" + item.Count + ")", "Search", new {
+                wd = item.Keywords
+              }, new {
+                @class = "label label-danger"
+              })
+              <span> </span>
+            }
+          }
+        </div>
+        @if (Model.Results.Any()) {
+          <div class="hr-line-dashed"></div>
+          var rnd = new Random().Next(Model.Results.Count > 2 ? 2 : 1, Model.Results.Count);
+          for (var i = 0; i < Model.Results.Count; i++) {
+            if (rnd > 1 && rnd == i && ad != null) {
+              await Html.RenderPartialAsync("_ArticleListAdvertisement", ad);
+            }
 
-						var p = Model.Results[i];
-						<div class="ibox">
-							<div class="ibox-content">
-								<a asp-controller="Post" asp-action="Details" asp-route-id="@p.Id" asp-route-kw="@ViewBag.Keyword" target="_blank">
-									<h2 class="size20 margin-bot10">
-										@Html.Raw(p.Title)
-									</h2>
-								</a>
-								<div>
-									作者:
-									<label class="label label-info">@Html.Raw(p.Author)</label> | 发表时间:<a asp-controller="Home" asp-action="Archieve" asp-route-yyyy="@p.ModifyDate.Year" asp-route-mm="@p.ModifyDate.Month" asp-route-dd="@p.ModifyDate.Day" asp-route-mode="@nameof(p.ModifyDate)"><time>@(p.ModifyDate.ToTimeZoneF(Context.Session.Get<string>(SessionKey.TimeZone)))</time></a> | 分类:<i class="icon-map-pin"></i>
-									@{
-										await Html.RenderPartialAsync("CategoryPath", p.Category);
-									}
-								</div>
-								<p class="size14">@Html.Raw(p.Content)</p>
-								<div class="row">
-									<div class="col-md-6">
-										<a asp-controller="Post" asp-action="Details" asp-route-id="@p.Id" class="search-link" target="_blank">@(Context.Request.Scheme + "://" + Context.Request.Host + "/" + p.Id)</a>
-									</div>
-								</div>
-							</div>
-						</div>
-					}
-				}
-				@if(relateKeywords?.Count>0) {
-					<div class="margin-bot10">
-						<h3>相关搜索:</h3>
-						@foreach (var kw in relateKeywords)
-						{
-							<a asp-action="Search" asp-route-wd="@kw">@kw</a><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
-						}
-					</div>
-				}
-				@if (!string.IsNullOrEmpty((string)ViewBag.ErrorMsg))
-				{
-					<h3>@ViewBag.ErrorMsg</h3>
-				}
-
-				@*分页组件*@
-				@{
-					int size = ViewBag.PageSize;
-					int pages = Math.Ceiling(Model.Total / (size > 0 ? size : 10.0)).ToInt32();
-					var page = Context.Request.Query["page"].ToString().ToInt32();
-					int current = page > 0 ? page : 1;
-					int pageStart = current - 3 > 0 ? current - 3 : 1;
-					int pageEnd = current + 3 >= pages ? pages : current + 3;
-					if (pageEnd - pageStart < 7)
-					{
-						if (pageStart == 1)
-						{
-							pageEnd = pageStart + 4 >= pages ? pages : pageStart + 4;
-						}
-						else
-						{
-							pageStart = pageEnd - 4 > 0 ? pageEnd - 4 : 1;
-						}
-					}
-				}
-				@if (pages > 1)
-				{
-					<ul class="pagination margin-clear">
-						@if (current == 1)
-						{
-							<li class="disabled"><a>首页</a></li>
-							<li class="disabled"><a aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>
-						}
-						else
-						{
-							<li><a asp-action="Search" asp-route-wd="@ViewBag.Keyword" aria-label="Previous">首页</a></li>
-							<li><a asp-action="Search" asp-route-wd="@ViewBag.Keyword" asp-route-page="@(page - 1 <= 0 ? 1 : page - 1)" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>
-						}
-						@if (pageStart > 1)
-						{
-							<li class="disabled"><a aria-label="Previous"><span aria-hidden="true">...</span></a></li>
-						}
-						@for (int i = pageStart; i <= pageEnd; i++)
-						{
-							if (i == current)
-							{
-								<li class="disabled"><a>@i</a></li>
-							}
-							else
-							{
-								<li><a asp-action="Search" asp-route-page="@i" asp-route-wd="@ViewBag.Keyword">@i</a></li>
-							}
-						}
-						@if (pageEnd < pages)
-						{
-							<li class="disabled"><a aria-label="Previous"><span aria-hidden="true">...</span></a></li>
-						}
-						@if (current == pages)
-						{
-							<li class="disabled"><a><span aria-hidden="true">&raquo;</span></a></li>
-							<li class="disabled"><a>最后一页</a></li>
-						}
-						else
-						{
-							<li><a asp-action="Search" asp-route-page="@(current + 1)" asp-route-wd="@ViewBag.Keyword" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>
-							<li><a asp-action="Search" asp-route-page="@pages" asp-route-wd="@ViewBag.Keyword" aria-label="Next">最后一页</a></li>
-						}
-					</ul>
-				}
-			</div>
-		</div>
-	</div>
+            var p = Model.Results[i];
+            <div class="ibox">
+              <div class="ibox-content">
+                <a asp-action="Details" asp-controller="Post" asp-route-id="@p.Id" asp-route-kw="@ViewBag.Keyword" target="_blank">
+                  <h2 class="margin-bot10 size20">
+                    @Html.Raw(p.Title)
+                  </h2>
+                </a>
+                <div>
+                  作者:
+                  <label class="label label-info">@Html.Raw(p.Author)</label> | 发表时间:
+                  <a asp-action="Archieve" asp-controller="Home" asp-route-dd="@p.ModifyDate.Day" asp-route-mm="@p.ModifyDate.Month" asp-route-mode="@nameof(p.ModifyDate)" asp-route-yyyy="@p.ModifyDate.Year">
+                    <time>@(p.ModifyDate.ToTimeZoneF(Context.Session.Get<string>(SessionKey.TimeZone)))</time>
+                  </a> | 分类:
+                  <i class="icon-map-pin"></i>
+                  @{
+                    await Html.RenderPartialAsync("CategoryPath", p.Category);
+                  }
+                </div>
+                <p class="size14">@Html.Raw(p.Content)</p>
+                <div class="row">
+                  <div class="col-md-6">
+                    <a asp-action="Details" asp-controller="Post" asp-route-id="@p.Id" class="search-link" target="_blank">@(Context.Request.Scheme + "://" + Context.Request.Host + "/" + p.Id)</a>
+                  </div>
+                </div>
+              </div>
+            </div>
+          }
+        }
+        @if (relateKeywords?.Count > 0) {
+          <div class="margin-bot10">
+            <h3>相关搜索:</h3>
+            @foreach (var kw in relateKeywords) {
+              <a asp-action="Search" asp-route-wd="@kw">@kw</a>
+              <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
+            }
+          </div>
+        }
+        @if (!string.IsNullOrEmpty((string) ViewBag.ErrorMsg)) {
+          <h3>@ViewBag.ErrorMsg</h3>
+        }
+        @*分页组件*@
+        @{
+          int size = ViewBag.PageSize;
+          int pages = Math.Ceiling(Model.Total / (size > 0 ? size : 10.0)).ToInt32();
+          var page = Context.Request.Query["page"].ToString().ToInt32();
+          int current = page > 0 ? page : 1;
+          int pageStart = current - 3 > 0 ? current - 3 : 1;
+          int pageEnd = current + 3 >= pages ? pages : current + 3;
+          if (pageEnd - pageStart < 7) {
+            if (pageStart == 1) {
+              pageEnd = pageStart + 4 >= pages ? pages : pageStart + 4;
+            } else {
+              pageStart = pageEnd - 4 > 0 ? pageEnd - 4 : 1;
+            }
+          }
+        }
+        @if (pages > 1) {
+          <ul class="margin-clear pagination">
+            @if (current == 1) {
+              <li class="disabled">
+                <a>首页</a>
+              </li>
+              <li class="disabled">
+                <a aria-label="Previous">
+                  <span aria-hidden="true">&laquo;</span>
+                </a>
+              </li>
+            } else {
+              <li>
+                <a aria-label="Previous" asp-action="Search" asp-route-wd="@ViewBag.Keyword">首页</a>
+              </li>
+              <li>
+                <a aria-label="Previous" asp-action="Search" asp-route-page="@(page - 1 <= 0 ? 1 : page - 1)" asp-route-wd="@ViewBag.Keyword">
+                  <span aria-hidden="true">&laquo;</span>
+                </a>
+              </li>
+            }
+            @if (pageStart > 1) {
+              <li class="disabled">
+                <a aria-label="Previous">
+                  <span aria-hidden="true">...</span>
+                </a>
+              </li>
+            }
+            @for (int i = pageStart; i <= pageEnd; i++) {
+              if (i == current) {
+                <li class="disabled">
+                  <a>@i</a>
+                </li>
+              } else {
+                <li>
+                  <a asp-action="Search" asp-route-page="@i" asp-route-wd="@ViewBag.Keyword">@i</a>
+                </li>
+              }
+            }
+            @if (pageEnd < pages) {
+              <li class="disabled">
+                <a aria-label="Previous">
+                  <span aria-hidden="true">...</span>
+                </a>
+              </li>
+            }
+            @if (current == pages) {
+              <li class="disabled">
+                <a>
+                  <span aria-hidden="true">&raquo;</span>
+                </a>
+              </li>
+              <li class="disabled">
+                <a>最后一页</a>
+              </li>
+            } else {
+              <li>
+                <a aria-label="Next" asp-action="Search" asp-route-page="@(current + 1)" asp-route-wd="@ViewBag.Keyword">
+                  <span aria-hidden="true">&raquo;</span>
+                </a>
+              </li>
+              <li>
+                <a aria-label="Next" asp-action="Search" asp-route-page="@pages" asp-route-wd="@ViewBag.Keyword">最后一页</a>
+              </li>
+            }
+          </ul>
+        }
+      </div>
+    </div>
+  </div>
 </div>

+ 92 - 90
src/Masuit.MyBlogs.Core/Views/Seminar/Index.cshtml

@@ -9,18 +9,18 @@
 @using Markdig
 @model Masuit.Tools.Models.PagedList<Masuit.MyBlogs.Core.Models.DTO.PostDto>
 @{
-    Layout = "~/Views/Shared/_Layout.cshtml";
-    Random r = new Random();
-    UserInfoDto user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
-    AdvertisementDto ad = ViewBag.Ads;
-    Pagination page = ViewData["page"] as Pagination;
+  Layout = "~/Views/Shared/_Layout.cshtml";
+  Random r = new Random();
+  UserInfoDto user = Context.Session.Get<UserInfoDto>(SessionKey.UserInfo) ?? new UserInfoDto();
+  AdvertisementDto ad = ViewBag.Ads;
+  Pagination page = ViewData["page"] as Pagination;
 }
 <style>
     .bg-title {
         height: 50vh;
         max-height: 400px;
         position: relative;
-        background: url(/Content/images/@(r.Next(1,9)).jpg) no-repeat center;
+        background: url(/Content/images/@(r.Next(1, 9)).jpg) no-repeat center;
         background-size:cover;
         background-attachment: fixed;
             margin-bottom: 10px;
@@ -39,96 +39,98 @@
     }
 </style>
 <div class="container">
-    <ol class="cd-breadcrumb triangle">
-        <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-        <li class="current"><em>专题[email protected]</em></li>
-    </ol>
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li class="current">
+      <em>专题[email protected]</em>
+    </li>
+  </ol>
 </div>
 <div class="bg-title">
-    <div class="header-content text-center">
-        <h2 class="size48">
-            @ViewBag.Title
-            @if (CommonHelper.SystemSettings.GetOrAdd("EnableRss", "true") == "true") {
-                <a class="btn btn-lg btn-danger" asp-controller="Subscribe" asp-action="SeminarRss" asp-route-id="@ViewBag.Id" target="_blank">
-                    <i class="icon-rss4"></i>
-                </a>
-            }
-        </h2>
-        <div class="divider"></div>
-        <p class="size24">
-            @Html.Raw(ViewBag.SubTitle)
-        </p>
-    </div>
+  <div class="header-content text-center">
+    <h2 class="size48">
+      @ViewBag.Title
+      @if (CommonHelper.SystemSettings.GetOrAdd("EnableRss", "true") == "true") {
+        <a asp-action="SeminarRss" asp-controller="Subscribe" asp-route-id="@ViewBag.Id" class="btn btn-danger btn-lg" target="_blank">
+          <i class="icon-rss4"></i>
+        </a>
+      }
+    </h2>
+    <div class="divider"></div>
+    <p class="size24">
+      @Html.Raw(ViewBag.SubTitle)
+    </p>
+  </div>
 </div>
 <div class="container">
-    <div class="ibox">
-        <div class="ibox-content">
-            <div>
-                <h3 class="size20">
-                    专题描述:
-                </h3>
-            </div>
-            <p>
-                @Html.Raw(Markdown.ToHtml(ViewBag.Desc))
-            </p>
-        </div>
+  <div class="ibox">
+    <div class="ibox-content">
+      <div>
+        <h3 class="size20">
+          专题描述:
+        </h3>
+      </div>
+      <p>
+        @Html.Raw(Markdown.ToHtml(ViewBag.Desc))
+      </p>
     </div>
-    <div class="wrapper-content  animated bounceInUp blog">
-        @if (Model.Data.Any())
-        {
-            var rnd = new Random().Next(Model.CurrentCount > 2 ? 2 : 0, Model.CurrentCount);
-            for (var i = 0; i < Model.CurrentCount; i++)
-            {
-                if (rnd > 2 && rnd == i && ad != null)
-                {
-                    await Html.RenderPartialAsync("_ArticleListAdvertisement", ad);
-                }
-
-                var post = Model.Data[i];
-                await Html.RenderPartialAsync(user.IsAdmin ? "_ArticleListItem_Admin" : "_ArticleListItem", post);
-            }
+  </div>
+  <div class="animated blog bounceInUp wrapper-content">
+    @if (Model.Data.Any()) {
+      var rnd = new Random().Next(Model.CurrentCount > 2 ? 2 : 0, Model.CurrentCount);
+      for (var i = 0; i < Model.CurrentCount; i++) {
+        if (rnd > 2 && rnd == i && ad != null) {
+          await Html.RenderPartialAsync("_ArticleListAdvertisement", ad);
         }
-        else
-        {
-            <h3>Oops!抱歉~本专题没有收录相关的文章或资源!如果您有相关的结果,您可以 <a asp-controller="Post" asp-action="Publish" class="btn btn-info btn-lg">点击这里</a> 投稿哦!</h3>
-        }
-        <div class="row">
-            <div class="col-sm-8 col-xs-12">
-                @{ await Html.RenderPartialAsync("_Pagination", page); }
-            </div>
-            <div class="col-sm-4 col-xs-12 text-right">
-                <div class="btn-group dropup">
-                    <a asp-controller="Post" asp-action="All" class="btn btn-info">所有专题</a>
-                    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                        @(page.OrderBy?.GetDescription()??"排序方式")
-                        <span class="caret"></span>
-                    </button>
-                    <ul class="dropdown-menu">
-                        <li>
-                            <a href="">最后修改日期</a>
-                        </li>
-                        <li>
-                            <a asp-route-orderby="@OrderBy.PostDate">最后发表日期</a>
-                        </li>
-                        <li>
-                            <a asp-route-orderby="@OrderBy.Trending">今日热榜</a>
-                        </li>
-                        <li role="separator" class="divider"></li>
-                        <li>
-                            <a asp-route-orderby="@OrderBy.CommentCount">评论最多</a>
-                        </li>
-                        <li>
-                            <a asp-route-orderby="@OrderBy.TotalViewCount">访问量最多</a>
-                        </li>
-                        <li>
-                            <a asp-route-orderby="@OrderBy.VoteUpCount">支持最多</a>
-                        </li>
-                        <li>
-                            <a asp-route-orderby="@OrderBy.AverageViewCount">最热门</a>
-                        </li>
-                    </ul>
-                </div>
-            </div>
+
+        var post = Model.Data[i];
+        await Html.RenderPartialAsync(user.IsAdmin ? "_ArticleListItem_Admin" : "_ArticleListItem", post);
+      }
+    } else {
+      <h3>
+        Oops!抱歉~本专题没有收录相关的文章或资源!如果您有相关的结果,您可以
+        <a asp-action="Publish" asp-controller="Post" class="btn btn-info btn-lg">点击这里</a> 投稿哦!
+      </h3>
+    }
+    <div class="row">
+      <div class="col-sm-8 col-xs-12">
+        @{ await Html.RenderPartialAsync("_Pagination", page); }
+      </div>
+      <div class="col-sm-4 col-xs-12 text-right">
+        <div class="btn-group dropup">
+          <a asp-action="All" asp-controller="Post" class="btn btn-info">所有专题</a>
+          <button aria-expanded="false" aria-haspopup="true" class="btn btn-default dropdown-toggle" data-toggle="dropdown" type="button">
+            @(page.OrderBy?.GetDescription() ?? "排序方式")
+            <span class="caret"></span>
+          </button>
+          <ul class="dropdown-menu">
+            <li>
+              <a href="">最后修改日期</a>
+            </li>
+            <li>
+              <a asp-route-orderby="@OrderBy.PostDate">最后发表日期</a>
+            </li>
+            <li>
+              <a asp-route-orderby="@OrderBy.Trending">今日热榜</a>
+            </li>
+            <li class="divider" role="separator"></li>
+            <li>
+              <a asp-route-orderby="@OrderBy.CommentCount">评论最多</a>
+            </li>
+            <li>
+              <a asp-route-orderby="@OrderBy.TotalViewCount">访问量最多</a>
+            </li>
+            <li>
+              <a asp-route-orderby="@OrderBy.VoteUpCount">支持最多</a>
+            </li>
+            <li>
+              <a asp-route-orderby="@OrderBy.AverageViewCount">最热门</a>
+            </li>
+          </ul>
         </div>
+      </div>
     </div>
+  </div>
 </div>

+ 73 - 70
src/Masuit.MyBlogs.Core/Views/Tools/GetIPInfo.cshtml

@@ -1,7 +1,7 @@
 @model Masuit.MyBlogs.Core.Models.ViewModel.IpInfo
 @{
-    ViewBag.Title = "获取IP机房和路由信息";
-    Layout = "~/Views/Shared/_Layout.cshtml";
+  ViewBag.Title = "获取IP机房和路由信息";
+  Layout = "~/Views/Shared/_Layout.cshtml";
 }
 <style>
     #allmap {
@@ -10,72 +10,75 @@
     }
 </style>
 <div class="container">
-    <ol class="cd-breadcrumb triangle">
-        <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-        <li class="current">
-            <em>@ViewBag.Title</em>
-        </li>
-    </ol>
-    <ul class="list-group">
-        <li class="list-group-item">
-            <p class="size24">
-                如果你觉得这个工具有用,请 <a asp-controller="Misc" asp-action="Donate">点击这里</a> 支持一下博主!
-            </p>
-        </li>
-        <li class="list-group-item">
-            <p class="text-red">
-                特别提示:由于IP地址存在多变性,本工具查询结果仅供参考,无法保证100%的准确性和精确性,请根据自己的实际情况酌情使用!
-            </p>
-        </li>
-    </ul>
-    <form method="get" asp-action="GetIpInfo">
-        <div class="input-group">
-            <input class="form-control" name="ip" value="@ViewBag.IP" placeholder="请输入有效的IPv4地址" />
-            <span class="input-group-btn">
-                <button class="btn btn-info" type="submit">查询</button>
-            </span>
-        </div>
-    </form>
-    <table class="table table-bordered table-condensed table-hover">
-        <tr>
-            <td>IP路由信息:</td>
-            <td>@Model.Network.Router</td>
-        </tr>
-        <tr>
-            <td>IP机房信息:</td>
-            <td>@Model.Network.Organization</td>
-        </tr>
-        <tr>
-            <td>IP机房信息2:</td>
-            <td>@Model.Network2</td>
-        </tr>
-        <tr>
-            <td>ASN:</td>
-            <td>@Model.Network.Asn</td>
-        </tr>
-        <tr>
-            <td>参考地理位置1:</td>
-            <td>@Model.Address</td>
-        </tr>
-        <tr>
-            <td>参考地理位置2:</td>
-            <td>@Model.Address2</td>
-        </tr>
-        <tr>
-            <td>时区:</td>
-            <td>@Model.TimeZone</td>
-        </tr>
-        <tr>
-            <td>经纬度:</td>
-            <td>(经度:@(Model.Location.Longitude),纬度:@(Model.Location.Latitude))</td>
-        </tr>
-        <tr>
-            <td>代理或任播节点:</td>
-            <td>@Model.IsProxy</td>
-        </tr>
-        <tr>
-            <td>域名解析:</td>
-            <td>@Model.Domain</td>
-        </tr>
-    </table>
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li class="current">
+      <em>@ViewBag.Title</em>
+    </li>
+  </ol>
+  <ul class="list-group">
+    <li class="list-group-item">
+      <p class="size24">
+        如果你觉得这个工具有用,请
+        <a asp-action="Donate" asp-controller="Misc">点击这里</a> 支持一下博主!
+      </p>
+    </li>
+    <li class="list-group-item">
+      <p class="text-red">
+        特别提示:由于IP地址存在多变性,本工具查询结果仅供参考,无法保证100%的准确性和精确性,请根据自己的实际情况酌情使用!
+      </p>
+    </li>
+  </ul>
+  <form asp-action="GetIpInfo" method="get">
+    <div class="input-group">
+      <input class="form-control" name="ip" placeholder="请输入有效的IPv4地址" value="@ViewBag.IP"/>
+      <span class="input-group-btn">
+        <button class="btn btn-info" type="submit">查询</button>
+      </span>
+    </div>
+  </form>
+  <table class="table table-bordered table-condensed table-hover">
+    <tr>
+      <td>IP路由信息:</td>
+      <td>@Model.Network.Router</td>
+    </tr>
+    <tr>
+      <td>IP机房信息:</td>
+      <td>@Model.Network.Organization</td>
+    </tr>
+    <tr>
+      <td>IP机房信息2:</td>
+      <td>@Model.Network2</td>
+    </tr>
+    <tr>
+      <td>ASN:</td>
+      <td>@Model.Network.Asn</td>
+    </tr>
+    <tr>
+      <td>参考地理位置1:</td>
+      <td>@Model.Address</td>
+    </tr>
+    <tr>
+      <td>参考地理位置2:</td>
+      <td>@Model.Address2</td>
+    </tr>
+    <tr>
+      <td>时区:</td>
+      <td>@Model.TimeZone</td>
+    </tr>
+    <tr>
+      <td>经纬度:</td>
+      <td>(经度:@(Model.Location.Longitude),纬度:@(Model.Location.Latitude))</td>
+    </tr>
+    <tr>
+      <td>代理或任播节点:</td>
+      <td>@Model.IsProxy</td>
+    </tr>
+    <tr>
+      <td>域名解析:</td>
+      <td>@Model.Domain</td>
+    </tr>
+  </table>
 </div>

+ 13 - 9
src/Masuit.MyBlogs.Core/Views/Tools/Loan.cshtml

@@ -1,14 +1,18 @@
 @using Masuit.MyBlogs.Core.Views.Tools
 @{
-    ViewBag.Title = "房贷多次提前还款试算模型计算器";
-    Layout = "~/Views/Shared/_Layout.cshtml";
+  ViewBag.Title = "房贷多次提前还款试算模型计算器";
+  Layout = "~/Views/Shared/_Layout.cshtml";
 }
 <div class="container-fluid">
-    <ol class="cd-breadcrumb triangle">
-        <li><a asp-controller="Home" asp-action="Index">首页</a></li>
-        <li class="current">
-            <em>@ViewBag.Title</em>
-        </li>
-    </ol>
-    @(await Html.RenderComponentAsync<Loan>(RenderMode.ServerPrerendered, new { IP = Context.Connection.RemoteIpAddress.ToString() }))
+  <ol class="breadcrumb">
+    <li>
+      <a asp-action="Index" asp-controller="Home">首页</a>
+    </li>
+    <li class="current">
+      <em>@ViewBag.Title</em>
+    </li>
+  </ol>
+  @(await Html.RenderComponentAsync<Loan>(RenderMode.ServerPrerendered, new {
+    IP = Context.Connection.RemoteIpAddress.ToString()
+  }))
 </div>

+ 0 - 8
src/Masuit.MyBlogs.Core/wwwroot/Assets/breadcrumb/cd-custom-separator.svg

@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 19.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
-<path fill="#959FA5" d="M6,13c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4L8.6,8L5.3,4.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l4,4
-	c0.4,0.4,0.4,1,0,1.4l-4,4C6.5,12.9,6.3,13,6,13z"/>
-</svg>

+ 0 - 297
src/Masuit.MyBlogs.Core/wwwroot/Assets/breadcrumb/style.css

@@ -1,297 +0,0 @@
-.triangle {
-    line-height: 1;
-    font-size: 62.5%;
-}
-.triangle a {
-    color: #96c03d;
-    text-decoration: none;
-}
-.cd-breadcrumb, .cd-multi-steps {
-    padding: 0.5em 1em;
-    border-radius: .25em;
-}
-.cd-breadcrumb:after, .cd-multi-steps:after {
-    content: "";
-    display: table;
-    clear: both;
-}
-.cd-breadcrumb li, .cd-multi-steps li {
-    display: inline-block;
-    margin: 0.5em 0;
-}
-.cd-breadcrumb li::after, .cd-multi-steps li::after {
-    display: inline-block;
-    content: '\00bb';
-    margin: 0 .6em;
-    color: #959fa5;
-}
-.cd-breadcrumb li:last-of-type::after, .cd-multi-steps li:last-of-type::after {
-    display: none;
-}
-.cd-breadcrumb li > *, .cd-multi-steps li > * {
-    display: inline-block;
-    font-size: 1.4rem;
-    color: #2c3f4c;
-}
-@media only screen and (max-width: 959px) {
-    .cd-breadcrumb li > *, .cd-multi-steps li > * {
-        font-size: 1rem;
-    }
-}
-.cd-breadcrumb li.current > *, .cd-multi-steps li.current > * {
-    color: #96c03d;
-}
-.no-touch .cd-breadcrumb a:hover, .no-touch .cd-multi-steps a:hover {
-    color: #96c03d;
-}
-.cd-breadcrumb.custom-separator li::after, .cd-multi-steps.custom-separator li::after {
-    content: '';
-    height: 16px;
-    width: 16px;
-    background: url(/assets/breadcrumb/cd-custom-separator.svg) no-repeat center center;
-    vertical-align: middle;
-}
-@media only screen and (min-width: 768px) {
-    .cd-breadcrumb, .cd-multi-steps {
-        padding: 0 1.2em;
-    }
-    .cd-breadcrumb li, .cd-multi-steps li {
-        margin: 1.2em 0;
-    }
-    .cd-breadcrumb li::after, .cd-multi-steps li::after {
-        margin: 0 1em;
-    }
-    .cd-breadcrumb li > *, .cd-multi-steps li > * {
-        font-size: 1rem;
-    }
-}
-
-@media only screen and (min-width: 768px) {
-    .cd-breadcrumb.triangle {
-        background-color: transparent;
-        padding: 0;
-        margin-bottom: 15px;
-    }
-    .cd-breadcrumb.triangle li {
-        position: relative;
-        padding: 0;
-        margin: 4px 1px 0 0;
-    }
-    .cd-breadcrumb.triangle li:last-of-type {
-        margin-right: 0;
-    }
-    .cd-breadcrumb.triangle li > * {
-        position: relative;
-        padding: 1em .8em 1em 2.5em;
-        color: #2c3f4c;
-        background-color: #edeff0;
-        border-color: #edeff0;
-    }
-    .cd-breadcrumb.triangle li.current > * {
-        color: #ffffff;
-        background-color: #96c03d;
-        border-color: #96c03d;
-    }
-    .cd-breadcrumb.triangle li:first-of-type > * {
-        padding-left: 1.6em;
-        border-radius: .25em 0 0 .25em;
-    }
-    .cd-breadcrumb.triangle li:last-of-type > * {
-        padding-right: 1.6em;
-        border-radius: 0 .25em .25em 0;
-    }
-    .no-touch .cd-breadcrumb.triangle a:hover {
-        color: #ffffff;
-        background-color: #2c3f4c;
-        border-color: #2c3f4c;
-    }
-    .cd-breadcrumb.triangle li::after, .cd-breadcrumb.triangle li > *::after {
-        content: '';
-        position: absolute;
-        top: 0;
-        left: 100%;
-        content: '';
-        height: 0;
-        width: 0;
-        border: 24px solid transparent;
-        border-right-width: 0;
-        border-left-width: 20px;
-    }
-    .cd-breadcrumb.triangle li::after {
-        z-index: 1;
-        -webkit-transform: translateX(4px);
-        -moz-transform: translateX(4px);
-        -ms-transform: translateX(4px);
-        -o-transform: translateX(4px);
-        transform: translateX(4px);
-        border-left-color: white;
-        /* reset style */
-        margin: 0;
-    }
-    .cd-breadcrumb.triangle li > *::after {
-        z-index: 2;
-        border-left-color: inherit;
-    }
-    .cd-breadcrumb.triangle li:last-of-type::after, .cd-breadcrumb.triangle li:last-of-type > *::after {
-        display: none;
-    }
-    .cd-breadcrumb.triangle.custom-separator li::after {
-        background-image: none;
-    }
-}
-@media only screen and (min-width: 768px) {
-    .cd-multi-steps {
-        background-color: transparent;
-        padding: 0;
-        text-align: center;
-    }
-
-    .cd-multi-steps li {
-        position: relative;
-        float: none;
-        margin: 0.4em 40px 0.4em 0;
-    }
-    .cd-multi-steps li:last-of-type {
-        margin-right: 0;
-    }
-    .cd-multi-steps li::after {
-        position: absolute;
-        content: '';
-        height: 4px;
-        background: #edeff0;
-        margin: 0;
-    }
-    .cd-multi-steps li.visited::after {
-        background-color: #96c03d;
-    }
-    .cd-multi-steps li > *, .cd-multi-steps li.current > * {
-        position: relative;
-        color: #2c3f4c;
-    }
-
-    .cd-multi-steps.custom-separator li::after {
-        height: 4px;
-        background: #edeff0;
-    }
-
-    .cd-multi-steps.text-center li::after {
-        width: 100%;
-        top: 50%;
-        left: 100%;
-        -webkit-transform: translateY(-50%) translateX(-1px);
-        -moz-transform: translateY(-50%) translateX(-1px);
-        -ms-transform: translateY(-50%) translateX(-1px);
-        -o-transform: translateY(-50%) translateX(-1px);
-        transform: translateY(-50%) translateX(-1px);
-    }
-    .cd-multi-steps.text-center li > * {
-        z-index: 1;
-        padding: .6em 1em;
-        border-radius: .25em;
-        background-color: #edeff0;
-    }
-    .no-touch .cd-multi-steps.text-center a:hover {
-        background-color: #2c3f4c;
-    }
-    .cd-multi-steps.text-center li.current > *, .cd-multi-steps.text-center li.visited > * {
-        color: #ffffff;
-        background-color: #96c03d;
-    }
-
-    .cd-multi-steps.text-top li, .cd-multi-steps.text-bottom li {
-        width: 80px;
-        text-align: center;
-    }
-    .cd-multi-steps.text-top li::after, .cd-multi-steps.text-bottom li::after {
-        position: absolute;
-        left: 50%;
-        width: calc(100% + 40px);
-    }
-    .cd-multi-steps.text-top li > *::before, .cd-multi-steps.text-bottom li > *::before {
-        content: '';
-        position: absolute;
-        z-index: 1;
-        left: 50%;
-        right: auto;
-        -webkit-transform: translateX(-50%);
-        -moz-transform: translateX(-50%);
-        -ms-transform: translateX(-50%);
-        -o-transform: translateX(-50%);
-        transform: translateX(-50%);
-        height: 12px;
-        width: 12px;
-        border-radius: 50%;
-        background-color: #edeff0;
-    }
-    .cd-multi-steps.text-top li.visited > *::before,
-    .cd-multi-steps.text-top li.current > *::before, .cd-multi-steps.text-bottom li.visited > *::before,
-    .cd-multi-steps.text-bottom li.current > *::before {
-        background-color: #96c03d;
-    }
-    .no-touch .cd-multi-steps.text-top a:hover, .no-touch .cd-multi-steps.text-bottom a:hover {
-        color: #96c03d;
-    }
-    .no-touch .cd-multi-steps.text-top a:hover::before, .no-touch .cd-multi-steps.text-bottom a:hover::before {
-        box-shadow: 0 0 0 3px rgba(150, 192, 61, 0.3);
-    }
-
-    .cd-multi-steps.text-top li::after {
-        bottom: 4px;
-    }
-    .cd-multi-steps.text-top li > * {
-        padding-bottom: 20px;
-    }
-    .cd-multi-steps.text-top li > *::before {
-        bottom: 0;
-    }
-
-    .cd-multi-steps.text-bottom li::after {
-        top: 3px;
-    }
-    .cd-multi-steps.text-bottom li > * {
-        padding-top: 20px;
-    }
-    .cd-multi-steps.text-bottom li > *::before {
-        top: 0;
-    }
-}
-.cd-multi-steps.count li {
-    counter-increment: steps;
-}
-
-.cd-multi-steps.count li > *::before {
-    content: counter(steps) " - ";
-}
-
-@media only screen and (min-width: 768px) {
-    .cd-multi-steps.text-top.count li > *::before,
-    .cd-multi-steps.text-bottom.count li > *::before {
-        content: counter(steps);
-        height: 26px;
-        width: 26px;
-        line-height: 26px;
-        font-size: 1.4rem;
-        color: #ffffff;
-    }
-
-    .cd-multi-steps.text-top.count li:not(.current) em::before,
-    .cd-multi-steps.text-bottom.count li:not(.current) em::before {
-        color: #2c3f4c;
-    }
-
-    .cd-multi-steps.text-top.count li::after {
-        bottom: 11px;
-    }
-
-    .cd-multi-steps.text-top.count li > * {
-        padding-bottom: 34px;
-    }
-
-    .cd-multi-steps.text-bottom.count li::after {
-        top: 11px;
-    }
-
-    .cd-multi-steps.text-bottom.count li > * {
-        padding-top: 34px;
-    }
-}

+ 424 - 343
src/Masuit.MyBlogs.Core/wwwroot/Content/common/style.css

@@ -1,292 +1,293 @@
 /*#region 滚动条美化 */
 
 ::-webkit-scrollbar-track {
-    -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
-    background-color: #F5F5F5;
-    border-radius: 15px;
+  -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
+  background-color: #F5F5F5;
+  border-radius: 15px;
 }
 
 ::-webkit-scrollbar {
-    width: 15px;
-    background-color: #F5F5F5;
+  width: 15px;
+  background-color: #F5F5F5;
 }
 
 ::-webkit-scrollbar-thumb {
-    border-radius: 15px;
-    /*background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #e1622f), color-stop(0.05, #fd7d36), color-stop(0.1, #fe9778), color-stop(0.15, #ff9b6a), color-stop(0.2, #f3d64e), color-stop(0.25, #f1b8e4), color-stop(0.3, #d9b8f1), color-stop(0.35, #f1ccb8), color-stop(0.4, #f1f1b8), color-stop(0.45, #b8f1ed), color-stop(0.5, #b8f1cc), color-stop(0.55, #CDDC39), color-stop(0.6, #e7dac9), color-stop(0.65, #FFC107), color-stop(0.7, #FF9800), color-stop(0.75, #fa7497), color-stop(0.8, #f9b747), color-stop(0.85, #dcff93), color-stop(0.9, #b7d28d), color-stop(0.95, #f2debd), color-stop(1,#b7d28d ));*/
-    background-image: -webkit-gradient(linear, left top, left bottom,color-stop(0, #f1ccb8), color-stop(0.1, #f1f1b8), color-stop(0.2, #b8f1ed), color-stop(0.3, #b8f1cc), color-stop(0.4, #CDDC39), color-stop(0.5, #e7dac9), color-stop(0.6, #FFC107), color-stop(0.7, #dcff93), color-stop(0.8, #b7d28d), color-stop(0.9, #f2debd));
+  border-radius: 15px;
+  /*background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #e1622f), color-stop(0.05, #fd7d36), color-stop(0.1, #fe9778), color-stop(0.15, #ff9b6a), color-stop(0.2, #f3d64e), color-stop(0.25, #f1b8e4), color-stop(0.3, #d9b8f1), color-stop(0.35, #f1ccb8), color-stop(0.4, #f1f1b8), color-stop(0.45, #b8f1ed), color-stop(0.5, #b8f1cc), color-stop(0.55, #CDDC39), color-stop(0.6, #e7dac9), color-stop(0.65, #FFC107), color-stop(0.7, #FF9800), color-stop(0.75, #fa7497), color-stop(0.8, #f9b747), color-stop(0.85, #dcff93), color-stop(0.9, #b7d28d), color-stop(0.95, #f2debd), color-stop(1,#b7d28d ));*/
+  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f1ccb8), color-stop(0.1, #f1f1b8), color-stop(0.2, #b8f1ed), color-stop(0.3, #b8f1cc), color-stop(0.4, #CDDC39), color-stop(0.5, #e7dac9), color-stop(0.6, #FFC107), color-stop(0.7, #dcff93), color-stop(0.8, #b7d28d), color-stop(0.9, #f2debd));
 }
+
 /*#endregion */
 
 body {
-    background-image: url(/images/bg2.jpg);
-    background-size: cover;
-    background-position: 50% 0;
-    margin: 0;
+  background-image: url(/images/bg2.jpg);
+  background-size: cover;
+  background-position: 50% 0;
+  margin: 0;
 }
 
 /*#region canvas背景 */
 
 #c {
-    position: fixed;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    z-index: -1;
+  position: fixed;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: -1;
 }
 
 /*#endregion */
 #components-reconnect-modal {
-    visibility: hidden !important;
+  visibility: hidden !important;
 }
 
 .min-height610 {
-    min-height: 610px;
+  min-height: 610px;
 }
 
 .footer {
-    margin-top: 10px;
-    padding: 8px;
-    /*height: 120px;*/
-    color: white;
-    font-size: 16px;
-    line-height: 24px;
-    background-color: #3f3f3f;
-    transition: ease-in-out 1s;
-    text-align: center;
-}
-
-    .footer a {
-        color: wheat;
-        text-shadow: 1px 1px 1px #000;
-    }
-
-        .footer a:hover {
-            text-decoration: underline;
-            transform: rotate(360deg);
-            transition: ease-in-out .5s;
-        }
+  margin-top: 10px;
+  padding: 8px;
+  /*height: 120px;*/
+  color: white;
+  font-size: 16px;
+  line-height: 24px;
+  background-color: #3f3f3f;
+  transition: ease-in-out 1s;
+  text-align: center;
+}
+
+.footer a {
+  color: wheat;
+  text-shadow: 1px 1px 1px #000;
+}
+
+.footer a:hover {
+  text-decoration: underline;
+  transform: rotate(360deg);
+  transition: ease-in-out .5s;
+}
 
 /*#region 返回顶部火箭筒 */
 
 #rocket-to-top div {
-    left: 0;
-    margin: 0;
-    overflow: hidden;
-    padding: 0;
-    position: absolute;
-    top: 0;
-    width: 149px;
+  left: 0;
+  margin: 0;
+  overflow: hidden;
+  padding: 0;
+  position: absolute;
+  top: 0;
+  width: 149px;
 }
 
 #rocket-to-top .level-2 {
-    background: url("/assets/scrolltop/images/rocket_button_up.png") no-repeat scroll -149px 0 transparent;
-    display: none;
-    height: 150px;
-    opacity: 0;
-    z-index: 1;
+  background: url("/assets/scrolltop/images/rocket_button_up.png") no-repeat scroll -149px 0 transparent;
+  display: none;
+  height: 150px;
+  opacity: 0;
+  z-index: 1;
 }
 
 #rocket-to-top .level-3 {
-    background: none repeat scroll 0 0 transparent;
-    cursor: pointer;
-    display: block;
-    height: 150px;
-    z-index: 2;
+  background: none repeat scroll 0 0 transparent;
+  cursor: pointer;
+  display: block;
+  height: 150px;
+  z-index: 2;
 }
 
 #rocket-to-top {
-    background: url("/assets/scrolltop/images/rocket_button_up.png") no-repeat scroll 0 0 transparent;
-    cursor: default;
-    display: block;
-    height: 150px;
-    margin: -125px 0 0;
-    overflow: hidden;
-    padding: 0;
-    position: fixed;
-    right: 0;
-    /*top: 83%;*/
-    bottom: 20px;
-    width: 150px;
-    z-index: 11;
+  background: url("/assets/scrolltop/images/rocket_button_up.png") no-repeat scroll 0 0 transparent;
+  cursor: default;
+  display: block;
+  height: 150px;
+  margin: -125px 0 0;
+  overflow: hidden;
+  padding: 0;
+  position: fixed;
+  right: 0;
+  /*top: 83%;*/
+  bottom: 20px;
+  width: 150px;
+  z-index: 11;
 }
 
 /*#endregion */
 .box {
-    margin: 0 10%;
+  margin: 0 10%;
 }
 
 .size14 {
-    font-size: 14px !important;
+  font-size: 14px !important;
 }
 
 .size16 {
-    font-size: 16px !important;
+  font-size: 16px !important;
 }
 
 .size18 {
-    font-size: 18px !important;
+  font-size: 18px !important;
 }
 
 .size20 {
-    font-size: 20px !important;
+  font-size: 20px !important;
 }
 
 .size24 {
-    font-size: 24px !important;
+  font-size: 24px !important;
 }
 
 .size28 {
-    font-size: 28px !important;
+  font-size: 28px !important;
 }
 
 .size32 {
-    font-size: 32px !important;
+  font-size: 32px !important;
 }
 
 .size36 {
-    font-size: 36px !important;
+  font-size: 36px !important;
 }
 
 .size48 {
-    font-size: 48px !important;
+  font-size: 48px !important;
 }
 
 .ueditor {
-    border: none;
+  border: none;
 }
 
 .margin-clear {
-    margin: 0 !important;
+  margin: 0 !important;
 }
 
 .padding-clear {
-    padding: 0 !important;
+  padding: 0 !important;
 }
 
 .margintop-clear {
-    margin-top: 0 !important;
+  margin-top: 0 !important;
 }
 
 .paddingtop-clear {
-    padding-top: 0 !important;
+  padding-top: 0 !important;
 }
 
 .marginbot-clear {
-    margin-bottom: 0 !important;
+  margin-bottom: 0 !important;
 }
 
 .paddingbot-clear {
-    padding-bottom: 0 !important;
+  padding-bottom: 0 !important;
 }
 
 .marginleft-clear {
-    margin-left: 0 !important;
+  margin-left: 0 !important;
 }
 
 .paddingleft-clear {
-    padding-left: 0 !important;
+  padding-left: 0 !important;
 }
 
 .marginright-clear {
-    margin-right: 0 !important;
+  margin-right: 0 !important;
 }
 
 .paddingright-clear {
-    padding-right: 0 !important;
+  padding-right: 0 !important;
 }
 
 .padding-top40 {
-    padding-top: 40px !important;
+  padding-top: 40px !important;
 }
 
 .padding-topt60 {
-    padding-top: 60px !important;
+  padding-top: 60px !important;
 }
 
 .padding-top70 {
-    padding-top: 70px !important;
+  padding-top: 70px !important;
 }
 
 .padding-bot5 {
-    padding-bottom: 5px !important;
+  padding-bottom: 5px !important;
 }
 
 .padding-bot10 {
-    padding-bottom: 10px !important;
+  padding-bottom: 10px !important;
 }
 
 .padding-bot15 {
-    padding-bottom: 15px !important;
+  padding-bottom: 15px !important;
 }
 
 .padding-bot20 {
-    padding-bottom: 20px !important;
+  padding-bottom: 20px !important;
 }
 
 .padding-bot30 {
-    padding-bottom: 30px !important;
+  padding-bottom: 30px !important;
 }
 
 .padding-bot40 {
-    padding-bottom: 40px !important;
+  padding-bottom: 40px !important;
 }
 
 .padding-bot50 {
-    padding-bottom: 50px !important;
+  padding-bottom: 50px !important;
 }
 
 .padding-bot60 {
-    padding-bottom: 60px !important;
+  padding-bottom: 60px !important;
 }
 
 .padding-bot70 {
-    padding-bottom: 70px !important;
+  padding-bottom: 70px !important;
 }
 
 .margin-mintop10 {
-    margin-top: -10px !important;
+  margin-top: -10px !important;
 }
 
 .margin-top10 {
-    margin-top: 10px !important;
+  margin-top: 10px !important;
 }
 
 .margin-bot10 {
-    margin-bottom: 10px !important;
+  margin-bottom: 10px !important;
 }
 
 .margin-mintop20 {
-    margin-top: -20px !important;
+  margin-top: -20px !important;
 }
 
 .margin-mintop30 {
-    margin-top: -30px !important;
+  margin-top: -30px !important;
 }
 
 .margin-mintop60 {
-    margin-top: -60px !important;
+  margin-top: -60px !important;
 }
 
 .margin-mintop110 {
-    margin-top: -110px !important;
+  margin-top: -110px !important;
 }
 
 .margin-minbot10 {
-    margin-bottom: -10px !important;
+  margin-bottom: -10px !important;
 }
 
 .margin-minbot20 {
-    margin-bottom: -20px !important;
+  margin-bottom: -20px !important;
 }
 
 .margin-minbot30 {
-    margin-bottom: -30px !important;
+  margin-bottom: -30px !important;
 }
 
 .margin-minbot60 {
-    margin-bottom: -60px !important;
+  margin-bottom: -60px !important;
 }
 
 /*
@@ -294,19 +295,19 @@ Custom left right spacer
 =========================== */
 
 .margin-left10 {
-    margin-left: 10px !important;
+  margin-left: 10px !important;
 }
 
 .margin-right10 {
-    margin-right: 10px !important;
+  margin-right: 10px !important;
 }
 
 .margin-left20 {
-    margin-left: 20px !important;
+  margin-left: 20px !important;
 }
 
 .margin-right20 {
-    margin-right: 20px !important;
+  margin-right: 20px !important;
 }
 
 /*
@@ -314,55 +315,55 @@ Custom top spacer
 =========================== */
 
 .margintop5 {
-    margin-top: 5px !important;
+  margin-top: 5px !important;
 }
 
 .margintop10 {
-    margin-top: 10px !important;
+  margin-top: 10px !important;
 }
 
 .margintop15 {
-    margin-top: 15px !important;
+  margin-top: 15px !important;
 }
 
 .margintop20 {
-    margin-top: 20px !important;
+  margin-top: 20px !important;
 }
 
 .margintop25 {
-    margin-top: 25px !important;
+  margin-top: 25px !important;
 }
 
 .margintop30 {
-    margin-top: 30px !important;
+  margin-top: 30px !important;
 }
 
 .margintop35 {
-    margin-top: 35px !important;
+  margin-top: 35px !important;
 }
 
 .margintop40 {
-    margin-top: 40px !important;
+  margin-top: 40px !important;
 }
 
 .margintop45 {
-    margin-top: 45px !important;
+  margin-top: 45px !important;
 }
 
 .margintop50 {
-    margin-top: 50px !important;
+  margin-top: 50px !important;
 }
 
 .margintop55 {
-    margin-top: 55px !important;
+  margin-top: 55px !important;
 }
 
 .margintop60 {
-    margin-top: 60px !important;
+  margin-top: 60px !important;
 }
 
 .margintop80 {
-    margin-top: 80px !important;
+  margin-top: 80px !important;
 }
 
 /*
@@ -370,369 +371,449 @@ Custom bottom spacer
 =========================== */
 
 .marginbot5 {
-    margin-bottom: 5px !important;
+  margin-bottom: 5px !important;
 }
 
 .marginbot10 {
-    margin-bottom: 10px !important;
+  margin-bottom: 10px !important;
 }
 
 .marginbot15 {
-    margin-bottom: 15px !important;
+  margin-bottom: 15px !important;
 }
 
 .marginbot20 {
-    margin-bottom: 20px !important;
+  margin-bottom: 20px !important;
 }
 
 .marginbot25 {
-    margin-bottom: 25px !important;
+  margin-bottom: 25px !important;
 }
 
 .marginbot30 {
-    margin-bottom: 30px !important;
+  margin-bottom: 30px !important;
 }
 
 .marginbot35 {
-    margin-bottom: 35px !important;
+  margin-bottom: 35px !important;
 }
 
 .marginbot40 {
-    margin-bottom: 40px !important;
+  margin-bottom: 40px !important;
 }
 
 .marginbot45 {
-    margin-bottom: 45px !important;
+  margin-bottom: 45px !important;
 }
 
 .marginbot50 {
-    margin-bottom: 50px !important;
+  margin-bottom: 50px !important;
 }
 
 .marginbot55 {
-    margin-bottom: 55px !important;
+  margin-bottom: 55px !important;
 }
 
 .marginbot60 {
-    margin-bottom: 60px !important;
+  margin-bottom: 60px !important;
 }
 
 .marginbot80 {
-    margin-bottom: 80px !important;
+  margin-bottom: 80px !important;
 }
 
 .msg-list .panel .panel-body {
-    padding: 2px;
+  padding: 2px;
 }
 
 .msg-list article.panel {
-    margin-top: 5px;
-    margin-bottom: 0px;
-    padding-bottom: 1px;
+  margin-top: 5px;
+  margin-bottom: 0px;
+  padding-bottom: 1px;
 }
 
-    .msg-list article.panel article.panel {
-        margin-left: 10px;
-        /*margin-right: 15px;*/
-    }
+.msg-list article.panel article.panel {
+  margin-left: 10px;
+  /*margin-right: 15px;*/
+}
 
-    .msg-list article.panel > .panel-heading {
-        padding: 5px 2px;
-    }
+.msg-list article.panel>.panel-heading {
+  padding: 5px 2px;
+}
 
-        .msg-list article.panel > .panel-heading > span {
-            line-height: 18px;
-        }
+.msg-list article.panel>.panel-heading>span {
+  line-height: 18px;
+}
 
 .msg-list .cmvote {
-    cursor: pointer;
+  cursor: pointer;
 }
 
 .news-item {
-    padding: 4px 4px;
-    margin: 0px;
-    border-bottom: 1px dotted #555;
+  padding: 4px 4px;
+  margin: 0px;
+  border-bottom: 1px dotted #555;
 }
 
 .line-height28 {
-    line-height: 28px;
+  line-height: 28px;
 }
 
 .line-height24 {
-    line-height: 24px;
+  line-height: 24px;
 }
 
 .padding-10 {
-    padding: 10px;
+  padding: 10px;
 }
 
 .notice {
-    overflow: hidden;
-    word-wrap: inherit;
-    color: black;
-    border: 1px dashed #F60;
-    clear: both;
-    margin-bottom: 10px;
-    padding: 5px;
+  overflow: hidden;
+  word-wrap: inherit;
+  color: black;
+  border: 1px dashed #F60;
+  clear: both;
+  margin-bottom: 10px;
+  padding: 5px;
 }
 
 .layui-layer-content img {
-    max-height: 50vh;
-    max-width: 100%;
+  max-height: 50vh;
+  max-width: 100%;
 }
 
 .media {
-    margin: 0;
+  margin: 0;
 }
 
-.form-control, .panel, .list-group-item, .panel-footer {
-    background-color: transparent;
+.form-control,
+.panel,
+.list-group-item,
+.panel-footer {
+  background-color: transparent;
 }
 
 .page-header {
-    margin-top: 0px;
+  margin-top: 0px;
 }
 
 .notices {
-    min-height: 110px !important;
-    overflow: hidden !important;
+  min-height: 110px !important;
+  overflow: hidden !important;
 }
 
 .text-white {
-    color: white;
+  color: white;
 }
 
 .text-focus {
-    background-color: yellow;
-    color: red;
-    font-size: 22px !important;
-    -ms-border-radius: 5px;
-    border-radius: 5px;
-    border: dotted 3px red;
-    padding: 5px;
-    box-shadow: grey 0px 3px 15px;
+  background-color: yellow;
+  color: red;
+  font-size: 22px !important;
+  -ms-border-radius: 5px;
+  border-radius: 5px;
+  border: dotted 3px red;
+  padding: 5px;
+  box-shadow: grey 0px 3px 15px;
 }
 
 .inline {
-    display: inline !important;
+  display: inline !important;
 }
 
 .highlight {
-    background: yellow;
-    color: red;
+  background: yellow;
+  color: red;
 }
 
 .prelight {
-    background: blue;
-    color: white;
+  background: blue;
+  color: white;
 }
 
 .header-content {
-    position: absolute;
-    left: 50%;
-    top: 50%;
-    transform: translate(-50%,-50%);
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  transform: translate(-50%, -50%);
 }
 
-    .header-content .divider {
-        width: inherit;
-        height: 20px;
-        margin-top: 20px;
-        border-top: 3px solid rebeccapurple;
-    }
+.header-content .divider {
+  width: inherit;
+  height: 20px;
+  margin-top: 20px;
+  border-top: 3px solid rebeccapurple;
+}
 
 .page-list .pagination {
-    float: left;
+  float: left;
 }
 
-    .page-list .pagination span {
-        cursor: pointer;
-    }
+.page-list .pagination span {
+  cursor: pointer;
+}
 
-    .page-list .pagination .separate span {
-        cursor: default;
-        border-top: none;
-        border-bottom: none;
-    }
+.page-list .pagination .separate span {
+  cursor: default;
+  border-top: none;
+  border-bottom: none;
+}
 
-        .page-list .pagination .separate span:hover {
-            background: none;
-        }
+.page-list .pagination .separate span:hover {
+  background: none;
+}
 
 .page-list .page-total {
-    float: left;
-    margin: 25px 20px;
+  float: left;
+  margin: 25px 20px;
 }
 
-    .page-list .page-total input, .page-list .page-total select {
-        height: 26px;
-        border: 1px solid #ddd;
-    }
+.page-list .page-total input,
+.page-list .page-total select {
+  height: 26px;
+  border: 1px solid #ddd;
+}
 
-    .page-list .page-total input {
-        width: 40px;
-        padding-left: 3px;
-    }
+.page-list .page-total input {
+  width: 40px;
+  padding-left: 3px;
+}
 
-    .page-list .page-total select {
-        width: 50px;
-    }
+.page-list .page-total select {
+  width: 50px;
+}
 
 .rainbow {
-    background-image: linear-gradient(-45deg, rgba(255, 0, 0, .3), rgba(255, 255, 0, .3), rgba(0, 255, 255, .2), rgba(0, 0, 255, .15), rgba(255, 0, 255, .2), rgba(255, 0, 0, .3));
+  background-image: linear-gradient(-45deg, rgba(255, 0, 0, .3), rgba(255, 255, 0, .3), rgba(0, 255, 255, .2), rgba(0, 0, 255, .15), rgba(255, 0, 255, .2), rgba(255, 0, 0, .3));
 }
 
 #reply-form {
-    margin: 15px 0;
+  margin: 15px 0;
 }
 
-    #reply-form .form-group {
-        margin-bottom: 0;
-    }
+#reply-form .form-group {
+  margin-bottom: 0;
+}
 
 .close-bg {
-    position: fixed;
-    bottom: 0;
-    left: 0;
-    z-index: 10;
-    display: none;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 10;
+  display: none;
 }
 
 .text-red {
-    font-size: 16px;
-    color: #F44336 !important;
+  font-size: 16px;
+  color: #F44336 !important;
 }
 
 .text-bold {
-    font-weight: bold;
+  font-weight: bold;
 }
 
 .text-green {
-    color: #009900;
-    font-size: 16px;
+  color: #009900;
+  font-size: 16px;
 }
 
 .text-blue {
-    font-size: 16px;
-    color: #2196F3;
+  font-size: 16px;
+  color: #2196F3;
 }
 
 #tagscloud {
-    min-width: 250px;
-    min-height: 200px;
-    max-width: 100vh;
-    position: relative;
-    font-size: 12px;
-    color: #333;
-    /*margin: 20px auto 0;*/
-    text-align: center;
-}
-
-    #tagscloud a {
-        position: absolute;
-        top: 0px;
-        left: 0px;
-        color: #333;
-        font-family: Arial;
-        text-decoration: none;
-        margin: 0 10px 15px 0;
-        text-align: center;
-        padding: 1px 5px;
-        display: inline-block;
-        border-radius: 3px;
-    }
-
-        #tagscloud a.tagc-0 {
-            background: #666;
-            color: #fff;
-        }
-
-        #tagscloud a.tagc-1 {
-            background: #a9a9a9;
-            color: #fff;
-        }
-
-        #tagscloud a.tagc-2 {
-            background: #F16E50;
-            color: #fff;
-        }
-
-        #tagscloud a.tagc-3 {
-            background: #6495ed;
-            color: #fff;
-        }
-
-        #tagscloud a.tagc-4 {
-            background: #da70d6;
-            color: #fff;
-        }
-
-        #tagscloud a.tagc-5 {
-            background: #006633;
-            color: #fff;
-        }
-
-        #tagscloud a.tagc-6 {
-            background: #d2691e;
-            color: #fff;
-        }
-
-        #tagscloud a.tagc-7 {
-            background: #ff00ff;
-            color: #fff;
-        }
-
-        #tagscloud a.tagc-8 {
-            background: #afeeee;
-            color: #fff;
-        }
-
-        #tagscloud a.tagc-9 {
-            background: #da70d6;
-            color: #fff;
-        }
-
-        #tagscloud a:hover {
-            color: #fff;
-            background: #0099ff;
-        }
-
-.container p, .container-fluid p {
-    font-size: 16px;
-    line-height: 22px;
-    word-break: break-all;
+  min-width: 250px;
+  min-height: 200px;
+  max-width: 100vh;
+  position: relative;
+  font-size: 12px;
+  color: #333;
+  /*margin: 20px auto 0;*/
+  text-align: center;
+}
+
+#tagscloud a {
+  position: absolute;
+  top: 0px;
+  left: 0px;
+  color: #333;
+  font-family: Arial;
+  text-decoration: none;
+  margin: 0 10px 15px 0;
+  text-align: center;
+  padding: 1px 5px;
+  display: inline-block;
+  border-radius: 3px;
+}
+
+#tagscloud a.tagc-0 {
+  background: #666;
+  color: #fff;
+}
+
+#tagscloud a.tagc-1 {
+  background: #a9a9a9;
+  color: #fff;
+}
+
+#tagscloud a.tagc-2 {
+  background: #F16E50;
+  color: #fff;
+}
+
+#tagscloud a.tagc-3 {
+  background: #6495ed;
+  color: #fff;
+}
+
+#tagscloud a.tagc-4 {
+  background: #da70d6;
+  color: #fff;
+}
+
+#tagscloud a.tagc-5 {
+  background: #006633;
+  color: #fff;
+}
+
+#tagscloud a.tagc-6 {
+  background: #d2691e;
+  color: #fff;
+}
+
+#tagscloud a.tagc-7 {
+  background: #ff00ff;
+  color: #fff;
+}
+
+#tagscloud a.tagc-8 {
+  background: #afeeee;
+  color: #fff;
+}
+
+#tagscloud a.tagc-9 {
+  background: #da70d6;
+  color: #fff;
+}
+
+#tagscloud a:hover {
+  color: #fff;
+  background: #0099ff;
+}
+
+.container p,
+.container-fluid p {
+  font-size: 16px;
+  line-height: 22px;
+  word-break: break-all;
 }
 
 .mp-popup {
-    max-height: 100vh !important;
+  max-height: 100vh !important;
 }
 
 @media (min-width: 2100px) {
-    .container {
-        width: 60vw;
-    }
+  .container {
+    width: 60vw;
+  }
 }
 
 .mp-results.mp-bottomleft {
-    top: unset !important;
-    bottom: 0 !important;
+  top: unset !important;
+  bottom: 0 !important;
 }
 
 .grid-30 {
-    display: grid;
-    grid-template-columns: repeat(30, 1fr);
-    grid-gap: 8px;
+  display: grid;
+  grid-template-columns: repeat(30, 1fr);
+  grid-gap: 8px;
 }
 
 .span-col-27 {
-    grid-column: span 27 / auto;
+  grid-column: span 27 / auto;
 }
 
 .span-col-28 {
-    grid-column: span 28 / auto;
+  grid-column: span 28 / auto;
 }
 
 .syntaxhighlighter .code .container:before {
-    display: block;
-    content: "" !important;
+  display: block;
+  content: "" !important;
+}
+
+.breadcrumb {
+  display: flex;
+  flex-wrap: wrap;
+  list-style: none;
+  padding: 0 10px;
+  margin: 0;
+  background: transparent;
+  /* #fafbfc;*/
+  border-radius: 8px;
+  min-height: 48px;
+  align-items: center;
+  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);
+  border: 1px solid #e5e7eb;
+  font-family: "Segoe UI", "Arial", sans-serif;
+}
+
+.breadcrumb li {
+  display: flex;
+  align-items: center;
+  color: #555;
+  font-size: 16px;
+  padding: 0 15px;
+  position: relative;
+  background: none;
+  min-height: 44px;
+}
+
+.breadcrumb>li+li:before {
+  padding: 0;
+  /* color: #ccc; */
+  content: "";
+}
+
+.breadcrumb li:not(:last-child)::after {
+  content: '';
+  display: inline-block;
+  margin: 0 0 0 12px;
+  width: 12px;
+  height: 12px;
+  border-top: 2px solid #bbb;
+  border-right: 2px solid #bbb;
+  transform: rotate(45deg);
+  position: absolute;
+  right: 0;
+  top: 50%;
+  background: transparent;
+  translate: 0 -50%;
+}
+
+.breadcrumb li:not(:last-child) {
+  color: #0077ff;
+  cursor: pointer;
+  transition: color 0.2s;
+}
+
+.breadcrumb li:not(:last-child):hover {
+  color: #0056b3;
+}
+
+.breadcrumb li:last-child {
+  color: #aaa;
+  font-weight: 600;
+}
+
+.breadcrumb a {
+  text-decoration: none;
+  color: inherit;
+  font-weight: 500;
+  transition: color 0.2s;
+}
+
+.breadcrumb a:hover {
+  text-decoration: underline;
 }

BIN
src/Masuit.MyBlogs.Core/wwwroot/Content/images/1.jpg


BIN
src/Masuit.MyBlogs.Core/wwwroot/Content/images/2.jpg


BIN
src/Masuit.MyBlogs.Core/wwwroot/Content/images/3.jpg


BIN
src/Masuit.MyBlogs.Core/wwwroot/Content/images/4.jpg


BIN
src/Masuit.MyBlogs.Core/wwwroot/Content/images/5.jpg


BIN
src/Masuit.MyBlogs.Core/wwwroot/Content/images/6.jpg


BIN
src/Masuit.MyBlogs.Core/wwwroot/Content/images/7.jpg


BIN
src/Masuit.MyBlogs.Core/wwwroot/Content/images/8.jpg


BIN
src/Masuit.MyBlogs.Core/wwwroot/Content/images/9.jpg


+ 1 - 1
src/Masuit.MyBlogs.Core/wwwroot/Scripts/global/article.js

@@ -636,7 +636,7 @@ createApp({
         observe: true,
         position: 'left', // 可选: left | right | top | custom
         float: true,
-        offset: { top: 156, left: left - Math.min(left - 5, 600) },
+        offset: { top: 138, left: left - Math.min(left - 5, 600) },
         width: Math.max(Math.min(left - 7, 600), 220),
         closeButton: true,
         draggable: true