ln.templates/ln.templates/Context.cs

70 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using Jint;
using Jint.Native;
using Jint.Native.Object;
using ln.templates.html;
namespace ln.templates;
public class Context : IDisposable
{
public Context(ITemplateResolver resolver, IEnumerable<KeyValuePair<string, object>> scriptObjects, TextWriter targetWriter)
{
Resolver = resolver;
Engine = new Engine();
foreach (KeyValuePair<string,object> pair in scriptObjects)
Engine.SetValue(pair.Key, pair.Value);
TargetWriter = targetWriter;
}
public Context(ITemplateResolver resolver, Engine engine, TextWriter targetWriter)
{
Resolver = resolver;
Engine = engine;
TargetWriter = targetWriter;
}
public Context(Context source)
{
Resolver = source.Resolver;
Engine = source.Engine;
TargetWriter = source.TargetWriter;
}
public Context(ITemplateResolver resolver, TextWriter targetWriter)
: this(resolver, new Engine(), targetWriter){}
public Engine Engine { get; private set; }
public ITemplateResolver Resolver { get; }
public TextWriter TargetWriter { get; }
/**
* Slots to be used for v-include and v-frame
*/
private Dictionary<string, Element> _slots = new Dictionary<string, Element>();
public bool TryGetSlot(string slotName, out Element slot) => _slots.TryGetValue(slotName, out slot);
public void SetSlot(string slotName, Element slot) => _slots[slotName] = slot;
public void ClearSlot(string slotName) => _slots.Remove(slotName);
public void ClearSlots() => _slots.Clear();
public void SetSlots(IEnumerable<KeyValuePair<string, Element>> slots)
{
_slots.Clear();
foreach (var pair in slots)
_slots.Add(pair.Key, pair.Value);
}
public void AssignGlobals(ObjectInstance o)
{
foreach (var key in o.GetOwnPropertyKeys())
Engine.Realm.GlobalObject.Set(key, o.Get(key));
}
public void Dispose()
{
}
}