163 lines
6.9 KiB
C#
163 lines
6.9 KiB
C#
using ZelWiki.Engine.Library;
|
|
using ZelWiki.Engine.Library.Interfaces;
|
|
using ZelWiki.Library;
|
|
using ZelWiki.Models;
|
|
using ZelWiki.Repository;
|
|
using Constants = ZelWiki.Engine.Library.Constants;
|
|
|
|
namespace ZelWiki.Engine.Implementation
|
|
{
|
|
/// <summary>
|
|
/// 内链处理.
|
|
/// </summary>
|
|
public class InternalLinkHandler : IInternalLinkHandler
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="state"></param>
|
|
/// <param name="pageNavigation"></param>
|
|
/// <param name="pageName"></param>
|
|
/// <param name="linkText"></param>
|
|
/// <param name="image"></param>
|
|
/// <param name="imageScale"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="Exception"></exception>
|
|
public HandlerResult Handle(IZelEngineState state, NamespaceNavigation pageNavigation,
|
|
string pageName, string linkText, string? image, int imageScale)
|
|
{
|
|
var page = PageRepository.GetPageRevisionByNavigation(pageNavigation);
|
|
|
|
if (page == null)
|
|
{
|
|
if (state.Session?.CanCreate == true)
|
|
{
|
|
if (image != null)
|
|
{
|
|
string href;
|
|
|
|
if (image.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase)
|
|
|| image.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase))
|
|
{
|
|
//外部图片.
|
|
href =
|
|
$"<a href=\"{GlobalConfiguration.BasePath}/Page/Create?Name={pageName}\"><img src=\"{GlobalConfiguration.BasePath}{image}?Scale={imageScale}\" /></a>";
|
|
}
|
|
else if (image.Contains('/'))
|
|
{
|
|
//图像位于另一页面.
|
|
href =
|
|
$"<a href=\"{GlobalConfiguration.BasePath}/Page/Create?Name={pageName}\"><img src=\"{GlobalConfiguration.BasePath}/Page/Image/{image}?Scale={imageScale}\" /></a>";
|
|
}
|
|
else
|
|
{
|
|
//图像位于此页面上,但此页面不存在.
|
|
href =
|
|
$"<a href=\"{GlobalConfiguration.BasePath}/Page/Create?Name={pageName}\">{linkText}</a>";
|
|
}
|
|
|
|
return new HandlerResult(href)
|
|
{
|
|
Instructions = [Constants.HandlerResultInstruction.DisallowNestedProcessing]
|
|
};
|
|
}
|
|
else if (linkText != null)
|
|
{
|
|
var href =
|
|
$"<a href=\"{GlobalConfiguration.BasePath}/Page/Create?Name={pageName}\">{linkText}</a>"
|
|
+ "<font color=\"#cc0000\" size=\"2\">?</font>";
|
|
|
|
return new HandlerResult(href)
|
|
{
|
|
Instructions = [Constants.HandlerResultInstruction.DisallowNestedProcessing]
|
|
};
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("No link or image was specified.");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//该页面不存在,用户没有创建该页面的权限.
|
|
|
|
if (image != null)
|
|
{
|
|
string mockHref;
|
|
|
|
if (image.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase)
|
|
|| image.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase))
|
|
{
|
|
//外部图像.
|
|
mockHref = $"<img src=\"{GlobalConfiguration.BasePath}{image}?Scale={imageScale}\" />";
|
|
}
|
|
else if (image.Contains('/'))
|
|
{
|
|
//图像位于另一页.
|
|
mockHref =
|
|
$"<img src=\"{GlobalConfiguration.BasePath}/Page/Image/{image}?Scale={imageScale}\" />";
|
|
}
|
|
else
|
|
{
|
|
//图像位于此页面上,但此页面不存在.
|
|
mockHref = $"linkText";
|
|
}
|
|
|
|
return new HandlerResult(mockHref)
|
|
{
|
|
Instructions = [Constants.HandlerResultInstruction.DisallowNestedProcessing]
|
|
};
|
|
}
|
|
else if (linkText != null)
|
|
{
|
|
return new HandlerResult(linkText)
|
|
{
|
|
Instructions = [Constants.HandlerResultInstruction.DisallowNestedProcessing]
|
|
};
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("未指定链接或图像.");
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
string href;
|
|
|
|
if (image != null)
|
|
{
|
|
if (image.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase)
|
|
|| image.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase))
|
|
{
|
|
//外部图像.
|
|
href =
|
|
$"<a href=\"{GlobalConfiguration.BasePath}/{page.Navigation}\"><img src=\"{GlobalConfiguration.BasePath}{image}\" /></a>";
|
|
}
|
|
else if (image.Contains('/'))
|
|
{
|
|
//图像在另一页面.
|
|
href =
|
|
$"<a href=\"{GlobalConfiguration.BasePath}/{page.Navigation}\"><img src=\"{GlobalConfiguration.BasePath}/Page/Image/{image}?Scale={imageScale}\" /></a>";
|
|
}
|
|
else
|
|
{
|
|
//图像在此页面
|
|
href =
|
|
$"<a href=\"{GlobalConfiguration.BasePath}/{page.Navigation}\"><img src=\"{GlobalConfiguration.BasePath}/Page/Image/{state.Page.Navigation}/{image}?Scale={imageScale}\" /></a>";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//内链
|
|
href = $"<a href=\"{GlobalConfiguration.BasePath}/{page.Navigation}\">{linkText}</a>";
|
|
}
|
|
|
|
return new HandlerResult(href)
|
|
{
|
|
Instructions = [Constants.HandlerResultInstruction.DisallowNestedProcessing]
|
|
};
|
|
}
|
|
}
|
|
}
|
|
} |