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> scriptObjects, TextWriter targetWriter) { Resolver = resolver; Engine = new Engine(); foreach (KeyValuePair 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 _slots = new Dictionary(); 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> 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() { } }