ln.templates/ln.templates/Template.cs

56 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using ln.templates.html;
namespace ln.templates;
public class Template
{
public Template(string filename, ITemplateResolver resolver)
:this(filename, resolver, null)
{}
private Template(string filename, ITemplateResolver resolver, string source)
{
FileName = filename;
Resolver = resolver;
if (source is null)
{
Load();
}
else
{
Document = TemplateReader.Parse(source);
}
}
private void Load()
{
Document = TemplateReader.ReadTemplate(FileName);
LastWriteTime = File.GetLastWriteTime(FileName);
}
public ITemplateResolver Resolver { get; }
public string FileName { get; }
public TemplateDocument Document { get; private set; }
public DateTime LastWriteTime { get; private set; }
public void Render(TextWriter target) => Render(target, Array.Empty<KeyValuePair<string, object>>());
public void Render(TextWriter target, IEnumerable<KeyValuePair<string, object>> scriptObjects)
{
Context context = new Context(Resolver, scriptObjects, target);
Render(context);
}
public void Render(Context context)
{
DateTime currentLastWriteTime = File.GetLastWriteTime(FileName);
if (currentLastWriteTime > LastWriteTime)
Load();
Document.RenderTemplate(context);
}
}