This commit is contained in:
Zel
2025-02-25 23:06:02 +08:00
parent 8b415588bc
commit f8519c41bf
23 changed files with 161 additions and 140 deletions

View File

@@ -19,7 +19,10 @@ using static ZelWiki.Library.Images;
namespace ZelWiki.Controllers
{
[Route("")]
public class PageController(IZelEngine zelEngine, SignInManager<IdentityUser> signInManager, UserManager<IdentityUser> userManager)
public class PageController(
IZelEngine zelEngine,
SignInManager<IdentityUser> signInManager,
UserManager<IdentityUser> userManager)
: WikiControllerBase(signInManager, userManager)
{
[AllowAnonymous]
@@ -76,7 +79,8 @@ namespace ZelWiki.Controllers
queryKey += $"{query.Key}:{query.Value}";
}
var cacheKey = WikiCacheKeyFunction.Build(WikiCache.Category.Page, [page.Navigation, page.Revision, queryKey]);
var cacheKey = WikiCacheKeyFunction.Build(WikiCache.Category.Page,
[page.Navigation, page.Revision, queryKey]);
if (WikiCache.TryGet<PageCache>(cacheKey, out var cached))
{
model.Body = cached.Body;
@@ -96,7 +100,8 @@ namespace ZelWiki.Controllers
PageTitle = state.PageTitle
};
WikiCache.Put(cacheKey, toBeCached); //This is cleared with the call to Cache.ClearCategory($"Page:{page.Navigation}");
WikiCache.Put(cacheKey,
toBeCached); //This is cleared with the call to Cache.ClearCategory($"Page:{page.Navigation}");
}
}
}
@@ -107,7 +112,8 @@ namespace ZelWiki.Controllers
model.Body = state.HtmlResult;
}
if (GlobalConfiguration.EnablePageComments && GlobalConfiguration.ShowCommentsOnPageFooter && model.HideFooterComments == false)
if (GlobalConfiguration.EnablePageComments && GlobalConfiguration.ShowCommentsOnPageFooter &&
model.HideFooterComments == false)
{
var comments = PageRepository.GetPageCommentsPaged(navigation.Canonical, 1);
@@ -128,7 +134,8 @@ namespace ZelWiki.Controllers
}
else if (pageRevision != null)
{
var notExistPageName = ConfigurationRepository.Get<string>("Customization", "Revision Does Not Exists Page");
var notExistPageName =
ConfigurationRepository.Get<string>("Customization", "Revision Does Not Exists Page");
string notExistPageNavigation = NamespaceNavigation.CleanAndValidate(notExistPageName);
var notExistsPage = PageRepository.GetPageRevisionByNavigation(notExistPageNavigation).EnsureNotNull();
@@ -183,7 +190,8 @@ namespace ZelWiki.Controllers
{
var model = new PageSearchViewModel()
{
Pages = PageRepository.PageSearchPaged(Utility.SplitToTokens(searchString), GetQueryValue("page", 1)),
Pages = PageRepository.PageSearchPaged(Utility.SplitToTokens(searchString),
GetQueryValue("page", 1)),
SearchString = searchString
};
@@ -208,7 +216,8 @@ namespace ZelWiki.Controllers
{
model = new PageSearchViewModel()
{
Pages = PageRepository.PageSearchPaged(Utility.SplitToTokens(searchString), GetQueryValue("page", 1)),
Pages = PageRepository.PageSearchPaged(Utility.SplitToTokens(searchString),
GetQueryValue("page", 1)),
SearchString = searchString
};
@@ -252,7 +261,8 @@ namespace ZelWiki.Controllers
}
else
{
PageRepository.DeletePageCommentByUserAndId(pageInfo.Id, SessionState.Profile.EnsureNotNull().UserId, int.Parse(deleteAction));
PageRepository.DeletePageCommentByUserAndId(pageInfo.Id,
SessionState.Profile.EnsureNotNull().UserId, int.Parse(deleteAction));
}
}
@@ -375,7 +385,8 @@ namespace ZelWiki.Controllers
var model = new RevisionsViewModel()
{
Revisions = PageRepository.GetPageRevisionsInfoByNavigationPaged(pageNavigation, pageNumber, orderBy, orderByDirection)
Revisions = PageRepository.GetPageRevisionsInfoByNavigationPaged(pageNavigation, pageNumber, orderBy,
orderByDirection)
};
model.PaginationPageCount = (model.Revisions.FirstOrDefault()?.PaginationPageCount ?? 0);
@@ -417,7 +428,8 @@ namespace ZelWiki.Controllers
var instructions = PageRepository.GetPageProcessingInstructionsByPageId(page.EnsureNotNull().Id);
if (instructions.Contains(WikiInstruction.Protect))
{
return NotifyOfError("The page is protected and cannot be deleted. A moderator or an administrator must remove the protection before deletion.");
return NotifyOfError(
"The page is protected and cannot be deleted. A moderator or an administrator must remove the protection before deletion.");
}
bool confirmAction = bool.Parse(GetFormValue("IsActionConfirmed").EnsureNotNull());
@@ -455,7 +467,8 @@ namespace ZelWiki.Controllers
var instructions = PageRepository.GetPageProcessingInstructionsByPageId(page.Id);
if (instructions.Contains(WikiInstruction.Protect))
{
return NotifyOfError("The page is protected and cannot be deleted. A moderator or an administrator must remove the protection before deletion.");
return NotifyOfError(
"The page is protected and cannot be deleted. A moderator or an administrator must remove the protection before deletion.");
}
return View(model);
@@ -534,7 +547,8 @@ namespace ZelWiki.Controllers
var instructions = PageRepository.GetPageProcessingInstructionsByPageId(page.EnsureNotNull().Id);
if (SessionState.CanModerate == false && instructions.Contains(WikiInstruction.Protect))
{
return NotifyOfError("The page is protected and cannot be modified except by a moderator or an administrator unless the protection is removed.");
return NotifyOfError(
"The page is protected and cannot be modified except by a moderator or an administrator unless the protection is removed.");
}
SessionState.SetPageId(page.Id);
@@ -552,7 +566,8 @@ namespace ZelWiki.Controllers
{
var pageName = GetQueryValue("Name").DefaultWhenNullOrEmpty(pageNavigation);
string templateName = ConfigurationRepository.Get<string>("Customization", "New Page Template").EnsureNotNull();
string templateName = ConfigurationRepository.Get<string>("Customization", "New Page Template")
.EnsureNotNull();
string templateNavigation = NamespaceNavigation.CleanAndValidate(templateName);
var templatePage = PageRepository.GetPageRevisionByNavigation(templateNavigation);
@@ -611,7 +626,8 @@ namespace ZelWiki.Controllers
var instructions = PageRepository.GetPageProcessingInstructionsByPageId(page.Id);
if (SessionState.CanModerate == false && instructions.Contains(WikiInstruction.Protect))
{
return NotifyOfError("The page is protected and cannot be modified except by a moderator or an administrator unless the protection is removed.");
return NotifyOfError(
"The page is protected and cannot be modified except by a moderator or an administrator unless the protection is removed.");
}
string originalNavigation = string.Empty;
@@ -626,7 +642,8 @@ namespace ZelWiki.Controllers
return View(model);
}
originalNavigation = page.Navigation; //So we can clear cache and this also indicates that we need to redirect to the new name.
originalNavigation =
page.Navigation; //So we can clear cache and this also indicates that we need to redirect to the new name.
}
page.ModifiedDate = DateTime.UtcNow;
@@ -658,11 +675,11 @@ namespace ZelWiki.Controllers
#region File.
/// <summary>
/// Gets an image attached to a page.
/// 获取图片
/// </summary>
/// <param name="givenPageNavigation">The navigation link of the page.</param>
/// <param name="givenFileNavigation">The navigation link of the file.</param>
/// <param name="pageRevision">The revision of the the PAGE that the file is attached to (NOT THE FILE REVISION)</param>
/// <param name="givenPageNavigation"></param>
/// <param name="givenFileNavigation"></param>
/// <param name="pageRevision"></param>
/// <returns></returns>
[HttpGet("Page/Image/{givenPageNavigation}/{givenFileNavigation}/{pageRevision:int?}")]
public ActionResult Image(string givenPageNavigation, string givenFileNavigation, int? pageRevision = null)
@@ -670,21 +687,22 @@ namespace ZelWiki.Controllers
var pageNavigation = new NamespaceNavigation(givenPageNavigation);
var fileNavigation = new NamespaceNavigation(givenFileNavigation);
string givenScale = GetQueryValue("Scale", "100");
var givenScale = GetQueryValue("Scale", "100");
var cacheKey = WikiCacheKeyFunction.Build(WikiCache.Category.Page, [givenPageNavigation, givenFileNavigation, pageRevision, givenScale]);
var cacheKey = WikiCacheKeyFunction.Build(WikiCache.Category.Page,
[givenPageNavigation, givenFileNavigation, pageRevision, givenScale]);
if (WikiCache.TryGet<ImageCacheItem>(cacheKey, out var cached))
{
return File(cached.Bytes, cached.ContentType);
}
var file = PageFileRepository.GetPageFileAttachmentByPageNavigationPageRevisionAndFileNavigation(pageNavigation.Canonical, fileNavigation.Canonical, pageRevision);
var file = PageFileRepository.GetPageFileAttachmentByPageNavigationPageRevisionAndFileNavigation(
pageNavigation.Canonical, fileNavigation.Canonical, pageRevision);
if (file != null)
{
if (file.ContentType == "image/x-icon")
{
//We do not handle the resizing of icon file. Maybe later....
return File(file.Data, file.ContentType);
}
@@ -695,19 +713,18 @@ namespace ZelWiki.Controllers
{
parsedScale = 500;
}
if (parsedScale != 100)
{
int width = (int)(img.Width * (parsedScale / 100.0));
int height = (int)(img.Height * (parsedScale / 100.0));
var width = (int)(img.Width * (parsedScale / 100.0));
var height = (int)(img.Height * (parsedScale / 100.0));
//Adjusting by a ratio (and especially after applying additional scaling) may have caused one
// dimension to become very small (or even negative). So here we will check the height and width
// to ensure they are both at least n pixels and adjust both dimensions.
if (height < 16)
{
height += 16 - height;
width += 16 - height;
}
if (width < 16)
{
height += 16 - width;
@@ -741,11 +758,11 @@ namespace ZelWiki.Controllers
}
/// <summary>
/// Gets an image from the database, converts it to a PNG with optional scaling and returns it to the client.
/// PNG
/// </summary>
/// <param name="givenPageNavigation">The navigation link of the page.</param>
/// <param name="givenFileNavigation">The navigation link of the file.</param>
/// <param name="pageRevision">The revision of the the PAGE that the file is attached to (NOT THE FILE REVISION)</param>
/// <param name="givenPageNavigation"></param>
/// <param name="givenFileNavigation"></param>
/// <param name="pageRevision"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpGet("Page/Png/{givenPageNavigation}/{givenFileNavigation}/{pageRevision:int?}")]
@@ -756,14 +773,15 @@ namespace ZelWiki.Controllers
var pageNavigation = new NamespaceNavigation(givenPageNavigation);
var fileNavigation = new NamespaceNavigation(givenFileNavigation);
string givenScale = GetQueryValue("Scale", "100");
var givenScale = GetQueryValue("Scale", "100");
var file = PageFileRepository.GetPageFileAttachmentByPageNavigationPageRevisionAndFileNavigation(pageNavigation.Canonical, fileNavigation.Canonical, pageRevision);
var file = PageFileRepository.GetPageFileAttachmentByPageNavigationPageRevisionAndFileNavigation(
pageNavigation.Canonical, fileNavigation.Canonical, pageRevision);
if (file != null)
{
var img = SixLabors.ImageSharp.Image.Load(new MemoryStream(Utility.Decompress(file.Data)));
int parsedScale = int.Parse(givenScale);
var parsedScale = int.Parse(givenScale);
if (parsedScale > 500)
{
parsedScale = 500;
@@ -771,17 +789,15 @@ namespace ZelWiki.Controllers
if (parsedScale != 100)
{
int width = (int)(img.Width * (parsedScale / 100.0));
int height = (int)(img.Height * (parsedScale / 100.0));
var width = (int)(img.Width * (parsedScale / 100.0));
var height = (int)(img.Height * (parsedScale / 100.0));
//Adjusting by a ratio (and especially after applying additional scaling) may have caused one
// dimension to become very small (or even negative). So here we will check the height and width
// to ensure they are both at least n pixels and adjust both dimensions.
if (height < 16)
{
height += 16 - height;
width += 16 - height;
}
if (width < 16)
{
height += 16 - width;
@@ -807,11 +823,12 @@ namespace ZelWiki.Controllers
}
/// <summary>
/// Gets a file from the database and returns it to the client.
/// <param name="givenPageNavigation">The navigation link of the page.</param>
/// <param name="givenFileNavigation">The navigation link of the file.</param>
/// <param name="pageRevision">The revision of the the PAGE that the file is attached to (NOT THE FILE REVISION)</param>
/// 二进制
/// </summary>
/// <param name="givenPageNavigation"></param>
/// <param name="givenFileNavigation"></param>
/// <param name="pageRevision"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpGet("Page/Binary/{givenPageNavigation}/{givenFileNavigation}/{pageRevision:int?}")]
public ActionResult Binary(string givenPageNavigation, string givenFileNavigation, int? pageRevision = null)
@@ -821,7 +838,8 @@ namespace ZelWiki.Controllers
var pageNavigation = new NamespaceNavigation(givenPageNavigation);
var fileNavigation = new NamespaceNavigation(givenFileNavigation);
var file = PageFileRepository.GetPageFileAttachmentByPageNavigationPageRevisionAndFileNavigation(pageNavigation.Canonical, fileNavigation.Canonical, pageRevision);
var file = PageFileRepository.GetPageFileAttachmentByPageNavigationPageRevisionAndFileNavigation(
pageNavigation.Canonical, fileNavigation.Canonical, pageRevision);
if (file != null)
{
@@ -836,4 +854,4 @@ namespace ZelWiki.Controllers
#endregion
}
}
}

View File

@@ -6,11 +6,10 @@
}
<h3>
Database
数据库
</h3>
<p>
Various utilities to assist in management of the SQLite database.
</p>
@if (!string.IsNullOrEmpty(Model.ErrorMessage))
@@ -42,14 +41,14 @@
<td>@NTDLS.Helpers.Formatters.FileSize((long)info.DatabaseSize)</td>
<td>
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateSafeLink(GlobalConfiguration.BasePath,
"This will optimize the database indexes and structure. Continue?",
"Optimize", $"/Admin/Database/Optimize/{info.Name}", Context.Request.Path.Value))
"即将优化数据库索引和结构,继续?",
"优化", $"/Admin/Database/Optimize/{info.Name}", Context.Request.Path.Value))
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateSafeLink(GlobalConfiguration.BasePath,
"This will remove empty space from the database, which can free space if a lot of data has been deleted. Continue?",
"Vacuum", $"/Admin/Database/Vacuum/{info.Name}", Context.Request.Path.Value))
"即将从数据库中删除空白空间,如果删除了大量数据,则可以释放空间,继续吗?",
"真空化", $"/Admin/Database/Vacuum/{info.Name}", Context.Request.Path.Value))
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateSafeLink(GlobalConfiguration.BasePath,
"This will check the database integrity and validate all foreign keys. Continue?",
"Verify", $"/Admin/Database/Verify/{info.Name}", Context.Request.Path.Value))
"即将检查数据库的完整性并验证所有外键,继续吗?",
"校验", $"/Admin/Database/Verify/{info.Name}", Context.Request.Path.Value))
</td>
</tr>
}

View File

@@ -7,15 +7,15 @@
<div class="card border-warning mb-3">
<div class="card-header bg-warning">
<strong>Viewing a deleted page</strong>
<strong>正在浏览一个已删除的页面</strong>
</div>
<div class="card-body">
<p class="card-text">
You are viewing a page which was deleted on @Model.DeletedDate by @Model.DeletedByUserName.<br />
您正在浏览的页面于 @Model.DeletedDate @Model.DeletedByUserName 删除<br />
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateWarnLink(GlobalConfiguration.BasePath,
"This will restore the deleted page and all of its history. Continue?",
"Restore This Page", "/Admin/RestoreDeletedPage/" + @Model.PageId, "/Admin/DeletedPages", Context.Request.Path.Value))
"这将恢复已删除的页面及其所有修订历史,继续吗?",
"恢复这个页面", "/Admin/RestoreDeletedPage/" + @Model.PageId, "/Admin/DeletedPages", Context.Request.Path.Value))
<br />
</p>
</div>

View File

@@ -7,15 +7,15 @@
<div class="card border-warning mb-3">
<div class="card-header bg-warning">
<strong>Viewing a deleted page revision</strong>
<strong>查看已删除的页面修订</strong>
</div>
<div class="card-body">
<p class="card-text">
You are viewing a page revision which was deleted on @Model.DeletedDate by @Model.DeletedByUserName.<br />
您正在查看于 @Model.DeletedDate @Model.DeletedByUserName 删除的页面修订<br />
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateWarnLink(GlobalConfiguration.BasePath,
"This will restore the deleted page and all of its history. Continue?",
"Restore This Revision", $"/Admin/RestoreDeletedPageRevision/{Model.PageId}/{Model.Revision}", "/Admin/DeletedPageRevisions", Context.Request.Path.Value))
"这将还原已删除的页面及其所有历史记录,继续?",
"恢复", $"/Admin/RestoreDeletedPageRevision/{Model.PageId}/{Model.Revision}", "/Admin/DeletedPageRevisions", Context.Request.Path.Value))
<br />
</p>
</div>

View File

@@ -7,11 +7,11 @@
}
<h3>
Deleted Page Revisions
删除页面修订
</h3>
<p>
Page revision that have been deleted for the given page. These can be purged or restored.<br /><br />
<br /><br />
</p>
@if (!string.IsNullOrEmpty(Model.ErrorMessage))
@@ -24,8 +24,8 @@
}
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateDangerLink(GlobalConfiguration.BasePath,
$"This will permanently purge all deleted pages revisions for \"{Model.Name}\". Continue?",
"Purge Deleted Revisions", $"/Admin/PurgeDeletedPageRevisions/{Model.PageId}", Context.Request.Path.Value))
$"这将永久清除 \"{Model.Name}\" 所有已删除的页面修订 继续吗?",
"清除所有修订", $"/Admin/PurgeDeletedPageRevisions/{Model.PageId}", Context.Request.Path.Value))
<br />
<br />
@@ -36,9 +36,9 @@
<table class="table fixedTable100 table-striped" border="0" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Revision")">Revision</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "DeletedDate")">Deleted Date</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "DeletedBy")">Deleted By</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Revision")">修订</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "DeletedDate")">删除时间</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "DeletedBy")">删除人</a></strong></td>
<td><strong>Action</strong></td>
</tr>
</thead>
@@ -53,12 +53,12 @@
<td>@p.DeletedByUserName</td>
<td>
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateSafeLink(GlobalConfiguration.BasePath,
"This will restore the deleted page and all of its history. Continue?",
"Restore", $"/Admin/RestoreDeletedPageRevision/{p.Id}/{p.Revision}", Context.Request.Path.Value))
"这将恢复已删除的页面及其所有历史记录,继续?",
"恢复", $"/Admin/RestoreDeletedPageRevision/{p.Id}/{p.Revision}", Context.Request.Path.Value))
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateDangerLink(GlobalConfiguration.BasePath,
"This will permanently delete the specified page, all revisions and attachments. Continue?",
"Purge", $"/Admin/PurgeDeletedPageRevision/{p.Id}/{p.Revision}", Context.Request.Path.Value))
"这将永久删除指定的页面、所有修订和附件,继续?",
"删除", $"/Admin/PurgeDeletedPageRevision/{p.Id}/{p.Revision}", Context.Request.Path.Value))
</td>
</tr>
}

View File

@@ -7,11 +7,11 @@
}
<h3>
Deleted Pages
被删除页面
</h3>
<p>
Pages that have been deleted. Can be purged or restored.<br /><br />
<br /><br />
</p>
@if (!string.IsNullOrEmpty(Model.ErrorMessage))
@@ -24,8 +24,8 @@
}
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateDangerLink(GlobalConfiguration.BasePath,
"This will permanently purge all deleted pages. Continue?",
"Purge Deleted Pages", "/Admin/PurgeDeletedPages", Context.Request.Path.Value))
"这将永久清除所有已删除的页面,确定吗?",
"清除已删除的页面", "/Admin/PurgeDeletedPages", Context.Request.Path.Value))
<br />
<br />
@@ -46,8 +46,8 @@
<table class="table fixedTable100 table-striped" border="0" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Page")">Page</a></strong></td>
<td><strong>Action</strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Page")">页面</a></strong></td>
<td><strong>操作</strong></td>
</tr>
</thead>
@foreach (var p in Model.Pages)
@@ -61,11 +61,11 @@
</td>
<td>
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateSafeLink(GlobalConfiguration.BasePath,
"This will restore the deleted page and all of its history. Continue?",
"Restore", "/Admin/RestoreDeletedPage/" + @p.Id, Context.Request.Path.Value))
"这将恢复已删除的页面及其所有历史记录,继续吗?",
"恢复", "/Admin/RestoreDeletedPage/" + @p.Id, Context.Request.Path.Value))
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateDangerLink(GlobalConfiguration.BasePath,
"This will permanently delete the specified page, all revisions and attachments. Continue?",
"Purge", "/Admin/PurgeDeletedPage/" + @p.Id, Context.Request.Path.Value))
"这将永久删除指定的页面、所有修订和附件,继续吗?",
"清除", "/Admin/PurgeDeletedPage/" + @p.Id, Context.Request.Path.Value))
</td>
</tr>
}
@@ -77,7 +77,7 @@
{
<div class="d-flex small text-muted mb-0">
<strong>
Either the deleted pages queue is empty or your search criteria returned no results.
暂无数据.
</strong>
</div>
}

View File

@@ -7,11 +7,11 @@
}
<h3>
Namespace
命名空间
</h3>
<p>
All pages contained in the namespace.<br /><br />
<br /><br />
</p>
@if (!string.IsNullOrEmpty(Model.ErrorMessage))
@@ -28,10 +28,10 @@
<table class="table fixedTable100 table-striped" border="0" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Name")">Name</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Revision")">Revision</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "ModifiedBy")">Modified By</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "ModifiedDate")">Modified Date</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Name")">名称</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Revision")">修订</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "ModifiedBy")">上次一修改人</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "ModifiedDate")">上一次修改时间</a></strong></td>
</tr>
</thead>

View File

@@ -7,11 +7,11 @@
}
<h3>
Namespaces
命名空间
</h3>
<p>
All namespaces contained in the wiki.<br /><br />
<br/><br/>
</p>
@if (!string.IsNullOrEmpty(Model.ErrorMessage))
@@ -29,16 +29,19 @@
{
<table class="table fixedTable100 table-striped" border="0" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Name")">Name</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Pages")">Pages</a></strong></td>
</tr>
<tr>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Name")">命名</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Pages")">包含页数</a></strong>
</td>
</tr>
</thead>
@foreach (var p in Model.Namespaces)
{
<tr>
<td><a href="@GlobalConfiguration.BasePath/Admin/Namespace/@(p.Namespace?? string.Empty)">@(string.IsNullOrEmpty(p.Namespace) ? "(Default)" : p.Namespace)</a></td>
<td>
<a href="@GlobalConfiguration.BasePath/Admin/Namespace/@(p.Namespace ?? string.Empty)">@(string.IsNullOrEmpty(p.Namespace) ? "(Default)" : p.Namespace)</a>
</td>
<td>@p.CountOfPages.ToString("N0")</td>
</tr>
}
@@ -50,7 +53,7 @@
{
<div class="d-flex small text-muted mb-0">
<strong>
There are currently no pages which exist within namespaces.
暂无数据
</strong>
</div>
}

View File

@@ -7,11 +7,11 @@
}
<h3>
Orphaned Page Attachments
孤立页附件
</h3>
<p>
These are all of the page attachments that are no longer attached to any page revision.<br /><br />
这些是不再附加到任何页面修订的所有页面附件<br /><br />
</p>
@if (!string.IsNullOrEmpty(Model.ErrorMessage))
@@ -24,8 +24,8 @@
}
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateDangerLink(GlobalConfiguration.BasePath,
"This will permanently purge all orphaned page attachments. Continue?",
"Purge Orphaned Attachments", "/Admin/PurgeOrphanedAttachments", Context.Request.Path.Value))
"这将永久清除所有孤立的页面附件,继续吗?",
"清除所有孤立附件", "/Admin/PurgeOrphanedAttachments", Context.Request.Path.Value))
<br />
<br />
@@ -35,10 +35,10 @@
{
<table class="table fixedTable100 table-striped" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Page")">Page</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "File")">File</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Size")">Size</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Revision")">Revision</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Page")">页面</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "File")">文件</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Size")">大小</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Revision")">修订</a></strong></td>
<td><strong>Action</strong></td>
</tr>
@@ -56,8 +56,8 @@
<td>@p.FileRevision</td>
<td>
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateDangerLink(GlobalConfiguration.BasePath,
"This will permanently delete the specified attachment. Continue?",
"Delete", $"/Admin/PurgeOrphanedAttachment/{@p.PageFileId}/{@p.FileRevision}", Context.Request.Path.Value))
"这将永久清除这个附件,继续吗?",
"删除", $"/Admin/PurgeOrphanedAttachment/{@p.PageFileId}/{@p.FileRevision}", Context.Request.Path.Value))
</td>
</tr>
}

View File

@@ -7,11 +7,11 @@
}
<h3>
Page revisions for <a href="@GlobalConfiguration.BasePath/@sessionState.PageNavigation">@sessionState.Page.Name</a>.
关于页面 <a href="@GlobalConfiguration.BasePath/@sessionState.PageNavigation">@sessionState.Page.Name</a> 的修订
</h3>
<p>
All changes that have been made to the page.<br /><br />
<br /><br />
</p>
@if (!string.IsNullOrEmpty(Model.ErrorMessage))
@@ -30,11 +30,11 @@
<table class="table fixedTable100 table-striped" border="0" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Revision")">Revision</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "ModifiedBy")">Modified By</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "ModifiedDate")">Modified Date</a></strong></td>
<td><strong>Summary</strong></td>
<td><strong>Action</strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "Revision")">修订好</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "ModifiedBy")">修改人</a></strong></td>
<td><strong><a href="?@QueryStringConverter.OrderHelper(sessionState, "ModifiedDate")">修改日期</a></strong></td>
<td><strong>摘要</strong></td>
<td><strong>操作</strong></td>
</tr>
</thead>
@@ -48,14 +48,14 @@
<td>@Html.DisplayTextFor(x => h.ChangeSummary)</td>
<td>
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateWarnLink(GlobalConfiguration.BasePath,
$"Reverting {h.Name} from revision {h.HighestRevision} to {h.Revision} will rollback {h.HigherRevisionCount} changes.<br />"
+ "Reverting does not mean that changes will be lost however, the revert process will create a new revision with the reverted changes.<br /><br />"
+ "Are you sure you want to continue?<br /><br />",
"Revert", $"/Admin/RevertPageRevision/{h.Navigation}/{h.Revision}", Context.Request.Path.Value))
$"将{h.Name} 从 {h.HighestRevision} 回滚至 {h.Revision} 将会 {h.HigherRevisionCount} 个更改<br />"
+ "还原并不意味着更改将丢失,但是还原过程将使用还原的更改创建新的修订.<br /><br />"
+ "继续吗?",
"回滚", $"/Admin/RevertPageRevision/{h.Navigation}/{h.Revision}", Context.Request.Path.Value))
@Html.Raw(ZelWiki.Library.ConfirmActionHelper.GenerateDangerLink(GlobalConfiguration.BasePath,
$"Deleting revision {h.Revision} of \"{h.Name}\" will move the page revision to the deletion queue. This action can only be undone by an administrator or moderator. Continue?",
"Delete", $"/Admin/DeletePageRevision/{h.Navigation}/{h.Revision}", Context.Request.Path.Value))
$" {h.Revision} \"{h.Name}\" 的修订记录中删除,继续吗?",
"删除", $"/Admin/DeletePageRevision/{h.Navigation}/{h.Revision}", Context.Request.Path.Value))
</td>
</tr>
}

View File

@@ -6,11 +6,11 @@
}
<h3>
Page File Revisions
页面附件修订
</h3>
<p>
All changes that have been made to the attached file. <br /><br />
<br /><br />
</p>
@if (!string.IsNullOrEmpty(Model.ErrorMessage))
@@ -27,10 +27,10 @@
<table class="table fixedTable100 table-striped" border="0" cellspacing="0" cellpadding="0">
<thead>
<tr>
<td><strong>Revision</strong></td>
<td><strong>Modified By</strong></td>
<td><strong>Modified Date</strong></td>
<td><strong>Summary</strong></td>
<td><strong>修订</strong></td>
<td><strong>修订人</strong></td>
<td><strong>修订时间</strong></td>
<td><strong>摘要</strong></td>
</tr>
</thead>

View File

@@ -30,9 +30,9 @@
<div class="container">
<div class="d-flex justify-content-end mb-4">
<div class="flex-grow-1 me-2">
<input type="text" name="Comment" id="Comment" class="form-control" placeholder="输入关键字" />
<input type="text" name="Comment" id="Comment" class="form-control" placeholder="发表一下你的看法吧" />
</div>
<button type="submit" value="Find" class="btn btn-primary">搜一搜</button>
<button type="submit" value="Find" class="btn btn-primary">发送</button>
</div>
</div>
}
@@ -63,7 +63,7 @@
</div>
@if (sessionState.CanModerate == true || h.UserId == sessionState.Profile?.UserId)
{
<a href="?Delete=@h.Id" class="small text-danger text-decoration-none" onclick="return confirm('真的要删除吗?')">Delete</a>
<a href="?Delete=@h.Id" class="small text-danger text-decoration-none" onclick="return confirm('真的要删除吗?')">删除</a>
}
</div>
</div>

View File

@@ -31,7 +31,7 @@
<br />
if (ZelWiki.Models.GlobalConfiguration.EnablePublicProfiles)
{
<small><cite title="Modified By">Last modified by <a href="@GlobalConfiguration.BasePath/Profile/@Model.ModifiedByUserName/Public">@Model.ModifiedByUserName</a> @@ @Model.ModifiedDate</cite></small>
<small><cite title="Modified By"> <a href="@GlobalConfiguration.BasePath/Profile/@Model.ModifiedByUserName/Public">@Model.ModifiedByUserName</a> @@修改于 @Model.ModifiedDate</cite></small>
}
else
{
@@ -55,9 +55,9 @@
<div class="container">
<div class="d-flex justify-content-end mb-4">
<div class="flex-grow-1 me-2">
<input type="text" name="Comment" id="Comment" class="form-control" placeholder="输入一条评论" />
<input type="text" name="Comment" id="Comment" class="form-control" placeholder="发表一下你的看法吧" />
</div>
<button type="submit" value="Post" class="btn btn-primary">Post</button>
<button type="submit" value="Post" class="btn btn-primary">发送</button>
</div>
</div>
</form>
@@ -83,7 +83,7 @@
</div>
@if (sessionState.CanModerate == true || h.UserId == sessionState.Profile?.UserId)
{
<a href="@GlobalConfiguration.BasePath/@sessionState.PageNavigation/Comments?Delete=@h.Id" class="small text-danger text-decoration-none" onclick="return confirm('确定要删除此评论吗?')">Delete</a>
<a href="@GlobalConfiguration.BasePath/@sessionState.PageNavigation/Comments?Delete=@h.Id" class="small text-danger text-decoration-none" onclick="return confirm('确定要删除此评论吗?')">删除</a>
}
</div>
</div>
@@ -92,6 +92,6 @@
}
@if (ZelWiki.Models.GlobalConfiguration.EnablePageComments && ZelWiki.Models.GlobalConfiguration.ShowCommentsOnPageFooter)
{
<a href="@GlobalConfiguration.BasePath/@sessionState.PageNavigation/Comments">View all comments</a>
<a href="@GlobalConfiguration.BasePath/@sessionState.PageNavigation/Comments">查看所有评论</a>
}
}