diff --git a/src/MjmlVisualizer/Helpers/WebBrowserHelper.cs b/src/MjmlVisualizer/Helpers/WebBrowserHelper.cs new file mode 100644 index 0000000..53770a1 --- /dev/null +++ b/src/MjmlVisualizer/Helpers/WebBrowserHelper.cs @@ -0,0 +1,68 @@ +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Windows.Forms; + +namespace MjmlVisualizer.Helpers +{ + public static class WebBrowserHelper + { + private static WebBrowser _webBrowser; + private static string _outputFile; + private static double _width; + + public static void TakeScreenshot(string outputFile, string html, double width) + { + _outputFile = outputFile; + _width = width; + + _webBrowser = new WebBrowser(); + _webBrowser.ProgressChanged += wb_ProgressChanged; + _webBrowser.ScriptErrorsSuppressed = true; + _webBrowser.ScrollBarsEnabled = false; + + var tempPath = SaveHtmlToTempFile(html); + + _webBrowser.Navigate(tempPath); + } + + private static string SaveHtmlToTempFile(string html) + { + var path = Path.Combine(Path.GetTempPath(), "index.html"); + File.WriteAllText(path, html); + return path; + } + + private static void wb_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) + { + if (e.CurrentProgress != e.MaximumProgress) + { + return; + } + + _webBrowser.ProgressChanged -= wb_ProgressChanged; + + try + { + var scrollHeight = _webBrowser.Document.Body.ScrollRectangle.Height; + _webBrowser.Size = new Size(Convert.ToInt32(_width), scrollHeight); + + var bitmap = new Bitmap(_webBrowser.Width, _webBrowser.Height); + + for (var x = 0; x < bitmap.Width; x++) + { + for (var y = 0; y < bitmap.Height; y++) + { + bitmap.SetPixel(x, y, Color.Black); + } + } + + _webBrowser.DrawToBitmap(bitmap, new Rectangle(0, 0, _webBrowser.Width, _webBrowser.Height)); + + bitmap.Save(_outputFile, ImageFormat.Jpeg); + } + catch { } + } + } +} diff --git a/src/MjmlVisualizer/MjmlVisualizer.csproj b/src/MjmlVisualizer/MjmlVisualizer.csproj index 34ef841..56f12f9 100644 --- a/src/MjmlVisualizer/MjmlVisualizer.csproj +++ b/src/MjmlVisualizer/MjmlVisualizer.csproj @@ -84,6 +84,7 @@ + diff --git a/src/MjmlVisualizer/Repositories/MjmlRepository.cs b/src/MjmlVisualizer/Repositories/MjmlRepository.cs index 77208ed..466d8b9 100644 --- a/src/MjmlVisualizer/Repositories/MjmlRepository.cs +++ b/src/MjmlVisualizer/Repositories/MjmlRepository.cs @@ -10,8 +10,8 @@ namespace MjmlVisualizer.Repositories public class MjmlRepository { private const string _apiURL = "https://api.mjml.io/v1/render"; - private const string _userName = "c4303cb3-7710-417d-9bc7-da57885b3432"; - private const string _password = "acaca040-7197-4450-b057-5bb3465f3459"; + private const string _userName = "#{MJML_USERNAME}#"; + private const string _password = "#{MJML_PASSWORD}#"; private readonly HttpClient _httpClient; public MjmlRepository() diff --git a/src/MjmlVisualizer/Windows/MjmlVisualizerWindow.xaml b/src/MjmlVisualizer/Windows/MjmlVisualizerWindow.xaml index 72e5a85..372881b 100644 --- a/src/MjmlVisualizer/Windows/MjmlVisualizerWindow.xaml +++ b/src/MjmlVisualizer/Windows/MjmlVisualizerWindow.xaml @@ -66,7 +66,7 @@ - + @@ -155,8 +155,32 @@ + - + + + + + + + + + + + + + + + + + + + diff --git a/src/MjmlVisualizer/Windows/MjmlVisualizerWindow.xaml.cs b/src/MjmlVisualizer/Windows/MjmlVisualizerWindow.xaml.cs index ca27893..a1e63fb 100644 --- a/src/MjmlVisualizer/Windows/MjmlVisualizerWindow.xaml.cs +++ b/src/MjmlVisualizer/Windows/MjmlVisualizerWindow.xaml.cs @@ -1,4 +1,5 @@ -using MjmlVisualizer.ViewModels; +using MjmlVisualizer.Helpers; +using MjmlVisualizer.ViewModels; using System.IO; using System.Windows; using SaveFileDialog = System.Windows.Forms.SaveFileDialog; @@ -55,5 +56,26 @@ private void OnHtmlSaveButtonClick(object sender, RoutedEventArgs e) File.WriteAllText(safeFileDialog.FileName, (DataContext as MjmlVisualizerViewModel).HTML); } + + private void OnPreviewSaveButtonClick(object sender, RoutedEventArgs e) + { + var safeFileDialog = new SaveFileDialog + { + Filter = "JPEG Image|*.jpg", + Title = "Save a JPEG Image" + }; + + safeFileDialog.ShowDialog(); + + if (string.IsNullOrEmpty(safeFileDialog.FileName)) + { + return; + } + + WebBrowserHelper.TakeScreenshot( + safeFileDialog.FileName, + (DataContext as MjmlVisualizerViewModel).HTML, + PreviewWebBrowser.ActualWidth); + } } }