WebTemplateGrid.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Threading.Tasks;
  5. using Comal.Classes;
  6. using InABox.Core;
  7. using InABox.DynamicGrid;
  8. using InABox.WPF;
  9. using ScriptEditor = InABox.DynamicGrid.ScriptEditor;
  10. namespace PRSServer.Forms.WebTemplates
  11. {
  12. public class WebTemplateGrid : DynamicDataGrid<WebTemplate>
  13. {
  14. private readonly string defaultTemplate = @"
  15. @{Model.LoadModel(new string[] { ""CompanyInformation"", ""CompanyLogo"", ""User"" });}
  16. <!DOCTYPE html>
  17. <html>
  18. <head>
  19. <title>Untitled page</title>
  20. <meta charset=""utf8"">
  21. <meta name=""viewport"" content=""width=device-width,initial-scale=1"">
  22. </head>
  23. <body>
  24. <h1>New Page</h1>
  25. <p>
  26. This is an empty page.
  27. </p>
  28. </body>
  29. </html>";
  30. public WebTemplateGrid()
  31. {
  32. Options.AddRange(DynamicGridOption.AddRows, DynamicGridOption.EditRows, DynamicGridOption.DeleteRows);
  33. ActionColumns.Add(new DynamicImageColumn(Properties.Resources.html.AsBitmapImage(), EditTemplateAction));
  34. OnCreateItem += (sender, item) => { (item as WebTemplate).Template = defaultTemplate; };
  35. OnAfterSave += (sender, items) =>
  36. {
  37. foreach (var item in items) SaveToLocalFolder(item);
  38. };
  39. OnDoubleClick += (sender, args) =>
  40. {
  41. if (SelectedRows.Length == 1) EditWebTemplateScript(SelectedRows[0]);
  42. args.Handled = true;
  43. };
  44. }
  45. private bool EditTemplateAction(CoreRow arg)
  46. {
  47. if (arg != null) EditWebTemplateScript(arg);
  48. return false;
  49. }
  50. private static void SaveToLocalFolder(WebTemplate template)
  51. {
  52. if (CoreUtils.GetVersion() == "???")
  53. File.WriteAllText(
  54. string.Format("{0}/WebBackup/Templates/{1}_{2}_{3}.html",
  55. Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
  56. template.DataModel,
  57. template.Slug,
  58. template.ID
  59. ),
  60. template.Template
  61. );
  62. }
  63. private void EditWebTemplateScript(CoreRow arg)
  64. {
  65. var template = LoadItem(arg);
  66. var editor = new ScriptEditor(template.Template, SyntaxLanguage.HTML, $"Template: {template}");
  67. editor.OnSave += (e, args) =>
  68. {
  69. template.Template = editor.Script;
  70. SaveToLocalFolder(template);
  71. SaveItem(template);
  72. };
  73. editor.OnCompile += (e, args) =>
  74. {
  75. editor.Save();
  76. editor.ClearErrors().AddError("Template Saved").AddError("Compiling Template...");
  77. Task.Run(() =>
  78. {
  79. var errors = new List<string>();
  80. try
  81. {
  82. WebHandler.CompileTemplate(template);
  83. errors.Add("Template Compiled Successfully!");
  84. }
  85. catch (Exception e0)
  86. {
  87. errors.Add("ERROR: ");
  88. errors.AddRange(e0.Message.Split(new[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries));
  89. }
  90. Dispatcher.Invoke(() =>
  91. {
  92. editor.ClearErrors();
  93. foreach (var error in errors) editor.AddError(error);
  94. });
  95. });
  96. };
  97. editor.Show();
  98. }
  99. }
  100. }