ln.http.resources/TemplateResource.cs

70 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using ln.http.resources;
using ln.http;
using ln.templates;
namespace ln.http.resources
{
public class TemplateResource : Resource
{
public Template Template { get; }
public object This { get; set; }
public override bool HandlesDispatching => true;
public TemplateResource(Resource container, string filename)
: base(container, System.IO.Path.GetFileName(filename))
{
Template = new Template(filename, (container as TemplateProvider));
}
public TemplateResource(Resource container, string filename,object This)
:this(container,filename)
{
this.This = This;
}
public override IEnumerable<Resource> GetResources()
{
return new Resource[0];
}
public override bool Contains(string name)
{
return false;
}
public override void AddResource(Resource resource)
{
throw new NotImplementedException();
}
public override void RemoveResource(Resource resource)
{
throw new NotImplementedException();
}
public override HttpResponse GetResponse(HttpRequest httpRequest, Queue<string> pathStack) => GetResponse(httpRequest, pathStack.ToArray());
public override HttpResponse GetResponse(HttpRequest httpRequest) => GetResponse(httpRequest,new string[0]);
public HttpResponse GetResponse(HttpRequest httpRequest,string[] suffixPath)
{
HttpResponse httpResponse = new HttpResponse(httpRequest);
Template.Context context = new Template.Context(Template);
context.ExpressionContext.AddMappedValue("__root__", Root);
context.ExpressionContext.AddMappedValue("__path__", suffixPath);
context.ExpressionContext.AddMappedValue("request", httpRequest);
context.ExpressionContext.AddMappedValue("response", httpResponse);
context.ExpressionContext.AddMappedValue("this", This);
bool unframed = httpRequest.GetRequestHeader("x-template-unframed", "framed").Equals("unframed");
httpResponse.ContentWriter.Write(Template.Generate(context,unframed));
return httpResponse;
}
}
}