ln.templates.http/ln.templates.http/TemplateRouter.cs

46 lines
1.7 KiB
C#
Raw Normal View History

2020-12-01 12:18:20 +01:00
using System;
using ln.http;
using ln.http.exceptions;
using ln.http.router;
using ln.templates.html;
namespace ln.templates.http
{
public delegate void PrepareRenderContext(TemplateRouter templateRouter,TemplateDocument templateDocument, RenderContext renderContext);
public class TemplateRouter : IHttpRouter
{
2020-12-08 09:41:14 +01:00
public ITemplateSource TemplateSource { get; }
public String DefaultTemplatePath { get; set; }
2020-12-01 12:18:20 +01:00
public event PrepareRenderContext OnPrepareRenderContext;
public TemplateRouter(ITemplateSource templateSource)
{
TemplateSource = templateSource;
}
public HttpResponse Route(HttpRoutingContext routingContext, HttpRequest httpRequest)
{
2020-12-08 09:41:14 +01:00
string lookupPath = routingContext.Path.Length > 0 ? routingContext.Path.Substring(1) : DefaultTemplatePath;
Console.WriteLine("... {0}", lookupPath);
TemplateDocument document = TemplateSource.GetTemplateByPath(lookupPath);
if ((DefaultTemplatePath != null) && (document != null))
document = TemplateSource.GetTemplateByPath(DefaultTemplatePath);
2020-12-01 12:18:20 +01:00
if (document != null)
{
HttpResponse response = new HttpResponse(httpRequest);
RenderContext renderContext = new RenderContext(response.ContentWriter, TemplateSource);
2020-12-08 09:41:14 +01:00
renderContext.SetScriptObject("request", httpRequest);
renderContext.SetScriptObject("response", response);
2020-12-01 12:18:20 +01:00
OnPrepareRenderContext?.Invoke(this, document, renderContext);
document.RenderTemplate(renderContext);
return response;
}
return null;
}
}
}