using Comal.Classes; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using ScriptEditor = InABox.DynamicGrid.ScriptEditorWindow; namespace PRSServer.Forms.WebTemplates { public class WebTemplateGrid : DynamicDataGrid { private readonly string defaultTemplate = @" @{Model.LoadModel(new string[] { ""CompanyInformation"", ""CompanyLogo"", ""User"" });} Untitled page

New Page

This is an empty page.

"; public WebTemplateGrid() { ActionColumns.Add(new DynamicImageColumn(Properties.Resources.html.AsBitmapImage(), EditTemplateAction)); OnCreateItem += (sender, item) => { (item as WebTemplate).Template = defaultTemplate; }; OnAfterSave += (sender, items) => { foreach (var item in items.Cast()) SaveToLocalFolder(item); }; OnDoubleClick += (sender, args) => { if (SelectedRows.Length == 1) EditWebTemplateScript(SelectedRows[0]); args.Handled = true; }; } protected override void DoReconfigure(DynamicGridOptions options) { base.DoReconfigure(options); options.AddRows = true; options.EditRows = true; options.DeleteRows = true; } private bool EditTemplateAction(CoreRow arg) { if (arg != null) EditWebTemplateScript(arg); return false; } private static void SaveToLocalFolder(WebTemplate template) { if (CoreUtils.GetVersion() == "???") File.WriteAllText( string.Format("{0}/WebBackup/Templates/{1}_{2}_{3}.html", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), template.DataModel, template.Slug, template.ID ), template.Template ); } private void EditWebTemplateScript(CoreRow arg) { var template = LoadItem(arg); var editor = new ScriptEditor(template.Template, SyntaxLanguage.HTML, $"Template: {template}"); editor.OnSave += (e, args) => { template.Template = editor.Script; SaveToLocalFolder(template); SaveItem(template); }; editor.OnCompile += (e, args) => { editor.Save(); editor.ClearErrors().AddError("Template Saved").AddError("Compiling Template..."); Task.Run(() => { var errors = new List(); try { WebHandler.CompileTemplate(template); errors.Add("Template Compiled Successfully!"); } catch (Exception e0) { errors.Add("ERROR: "); errors.AddRange(e0.Message.Split(new[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries)); } Dispatcher.Invoke(() => { editor.ClearErrors(); foreach (var error in errors) editor.AddError(error); }); }); }; editor.Show(); } } }