46 lines
1.7 KiB
C#
46 lines
1.7 KiB
C#
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
|
|
{
|
|
public ITemplateSource TemplateSource { get; }
|
|
public String DefaultTemplatePath { get; set; }
|
|
|
|
public event PrepareRenderContext OnPrepareRenderContext;
|
|
|
|
public TemplateRouter(ITemplateSource templateSource)
|
|
{
|
|
TemplateSource = templateSource;
|
|
}
|
|
|
|
public HttpResponse Route(HttpRoutingContext routingContext, HttpRequest httpRequest)
|
|
{
|
|
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);
|
|
|
|
if (document != null)
|
|
{
|
|
HttpResponse response = new HttpResponse(httpRequest);
|
|
RenderContext renderContext = new RenderContext(response.ContentWriter, TemplateSource);
|
|
renderContext.SetScriptObject("request", httpRequest);
|
|
renderContext.SetScriptObject("response", response);
|
|
OnPrepareRenderContext?.Invoke(this, document, renderContext);
|
|
document.RenderTemplate(renderContext);
|
|
|
|
return response;
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
}
|