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; } } }