private void InitializePreviewBrowser() { PreviewBrowser.Navigated += (sender, e) => { // No Script Errors NoScriptErrors(PreviewBrowser, true); }; PreviewBrowser.LoadCompleted += (sender, e) => { if (e.Uri.ToString().Contains("about:blank")) { return; } var editor = GetActiveMarkdownEditor(); dynamic dom = PreviewBrowser.Document; dom.documentElement.scrollTop = editor.MarkdownDocument.LastBrowserScrollPosition; new Timer((editr) => { try { if (File.Exists(editor.MarkdownDocument.HtmlRenderFilename)) { File.Delete(editor.MarkdownDocument.HtmlRenderFilename); } } catch { } }, null, 2000, Timeout.Infinite); }; PreviewBrowser.Navigate("about:blank"); }
private void TreeTopicBrowser_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { SelectedTopic = TopicPicker.SelectedTopic; if (SelectedTopic == null) { return; } var doc = new MarkdownDocument(); doc.Load(SelectedTopic.GetTopicFileName()); doc.RenderHtmlToFile(); PreviewBrowser.Navigate(doc.HtmlRenderFilename); }
public EditArticleWindow(NewspaperArticle article) { InitializeComponent(); DataContext = new EditArticleViewModel(article); //PreviewBrowser.NavigateToString("<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'></head><body style='border: solid 1px gray'><div style='text-align:center;margin-top:100px;'>Тут появится статья</div></body></html>"); ViewModel.ShowHtml = () => { var ph = Path.Combine(Environment.CurrentDirectory, "ArticlePreview/Article.htm"); PreviewBrowser.Navigate("file:///" + ph); }; ViewModel.Init(); }
/// <summary> /// Shows or hides the preview browser /// </summary> /// <param name="hide"></param> public void ShowPreviewBrowser(bool hide = false) { if (!hide) { PreviewBrowser.Visibility = Visibility.Visible; ContentGrid.ColumnDefinitions[1].Width = new GridLength(12); ContentGrid.ColumnDefinitions[2].Width = new GridLength(Width / 2 - 40); } else { if (ContentGrid.ColumnDefinitions[2].Width.Value > 100) { mmApp.Configuration.WindowPosition.SplitterPosition = Convert.ToInt32(ContentGrid.ColumnDefinitions[2].Width.Value); } ContentGrid.ColumnDefinitions[1].Width = new GridLength(0); ContentGrid.ColumnDefinitions[2].Width = new GridLength(0); PreviewBrowser.Navigate("about:blank"); } }
/// <summary> /// Fetch thumbnail image from slack. Automatically picks largest available or hides thumbnail if none. /// </summary> /// <param name="selected"></param> private async void GetPreview(ResponseFile selected) { if (selected == null) { PreviewBrowser.Visibility = Visibility.Hidden; PreviewThumbnail.Visibility = Visibility.Hidden; return; } Uri imgUrl; if (selected.thumb_480 != null) { imgUrl = new Uri(selected.thumb_480); } else if (selected.thumb_360 != null) { imgUrl = new Uri(selected.thumb_360); } else if (selected.thumb_160 != null) { imgUrl = new Uri(selected.thumb_160); } else { PreviewThumbnail.Visibility = Visibility.Hidden; if (selected.preview != null) { PreviewBrowser.Visibility = Visibility.Visible; PreviewBrowser.NavigateToString(selected.preview); } else { PreviewBrowser.Visibility = Visibility.Hidden; } return; } var request_data = new NameValueCollection(); request_data.Add("Content-Type", "application/x-www-form-urlencoded"); request_data.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"); var webclient = new WebClient(); webclient.Encoding = Encoding.UTF8; webclient.Proxy = WebRequest.DefaultWebProxy; webclient.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + Oauth_Value); try { var imageData = await webclient.DownloadDataTaskAsync(imgUrl); var bitmapImage = new BitmapImage { CacheOption = BitmapCacheOption.Default }; var encoder = new PngBitmapEncoder(); bitmapImage.BeginInit(); bitmapImage.StreamSource = new MemoryStream(imageData); bitmapImage.EndInit(); PreviewBrowser.Visibility = Visibility.Hidden; PreviewThumbnail.Visibility = Visibility.Visible; PreviewThumbnail.Source = bitmapImage; } catch { PreviewBrowser.Visibility = Visibility.Hidden; PreviewThumbnail.Visibility = Visibility.Hidden; } webclient.Dispose(); }
private void SaveTSButton_Click(object sender, EventArgs e) { PreviewBrowser.ShowSaveAsDialog(); }
private void PropertiesTSButton_Click(object sender, EventArgs e) { PreviewBrowser.ShowPropertiesDialog(); }
private void PreviewTSButton_Click(object sender, EventArgs e) { PreviewBrowser.ShowPrintPreviewDialog(); }
private void PageSetupTSButton_Click(object sender, EventArgs e) { PreviewBrowser.ShowPageSetupDialog(); }
public void PreviewMarkdown(MarkdownDocumentEditor editor = null, bool keepScrollPosition = false, bool showInBrowser = false) { if (!Model.IsPreviewBrowserVisible && !showInBrowser) { return; } if (editor == null) { editor = GetActiveMarkdownEditor(); } if (editor == null) { return; } var doc = editor.MarkdownDocument; var ext = Path.GetExtension(editor.MarkdownDocument.Filename).ToLower().Replace(".", ""); int lastPos = 0; dynamic dom = null; if (string.IsNullOrEmpty(ext) || ext == "md" || ext == "html" || ext == "htm") { this.ShowPreviewBrowser(); if (keepScrollPosition) { dom = PreviewBrowser.Document; editor.MarkdownDocument.LastBrowserScrollPosition = dom.documentElement.scrollTop; } else { editor.MarkdownDocument.LastBrowserScrollPosition = 0; } if (ext == "html" || ext == "htm") { File.WriteAllText(editor.MarkdownDocument.HtmlRenderFilename, editor.MarkdownDocument.CurrentText); } else { editor.MarkdownDocument.RenderHtmlToFile(); } if (showInBrowser) { ShellUtils.GoUrl(editor.MarkdownDocument.HtmlRenderFilename); } else { PreviewBrowser.Cursor = Cursors.None; PreviewBrowser.ForceCursor = true; if (keepScrollPosition && PreviewBrowser.Source.ToString() == editor.MarkdownDocument.HtmlRenderFilename) { PreviewBrowser.Refresh(true); } else { PreviewBrowser.Navigate(editor.MarkdownDocument.HtmlRenderFilename); } } } else { ShowPreviewBrowser(true); } }
public void ScrollToEditorLine(int editorLineNumber = -1, bool updateCodeBlocks = false, bool noScrollTimeout = false, bool noScrollTopAdjustment = false) { PreviewBrowser.ScrollToEditorLine(editorLineNumber, updateCodeBlocks, noScrollTimeout, noScrollTopAdjustment); }
public void PreviewMarkdown(MarkdownDocumentEditor editor = null, bool keepScrollPosition = false, bool showInBrowser = false) { // only render if the preview is actually visible and rendering in Preview Browser if (!Model.IsPreviewBrowserVisible && !showInBrowser) { return; } if (editor == null) { editor = GetActiveMarkdownEditor(); } if (editor == null) { return; } var doc = editor.MarkdownDocument; var ext = Path.GetExtension(doc.Filename).ToLower().Replace(".", ""); string renderedHtml = null; if (string.IsNullOrEmpty(ext) || ext == "md" || ext == "html" || ext == "htm") { dynamic dom = null; if (keepScrollPosition) { dom = PreviewBrowser.Document; editor.MarkdownDocument.LastBrowserScrollPosition = dom.documentElement.scrollTop; } else { ShowPreviewBrowser(false, false); editor.MarkdownDocument.LastBrowserScrollPosition = 0; } if (ext == "html" || ext == "htm") { editor.MarkdownDocument.WriteFile(editor.MarkdownDocument.HtmlRenderFilename, editor.MarkdownDocument.CurrentText); } else { renderedHtml = editor.MarkdownDocument.RenderHtmlToFile(); } if (showInBrowser) { ShellUtils.GoUrl(editor.MarkdownDocument.HtmlRenderFilename); } else { PreviewBrowser.Cursor = Cursors.None; PreviewBrowser.ForceCursor = true; if (keepScrollPosition) { string browserUrl = PreviewBrowser.Source.ToString().ToLower(); string documentFile = "file:///" + editor.MarkdownDocument.HtmlRenderFilename.Replace('\\', '/').ToLower(); if (browserUrl == documentFile) { dom = PreviewBrowser.Document; //var content = dom.getElementById("MainContent"); renderedHtml = StringUtils.ExtractString(renderedHtml, "<!-- Markdown Monster Content -->", "<!-- End Markdown Monster Content -->"); if (string.IsNullOrEmpty(renderedHtml)) { PreviewMarkdown(editor, false, false); // fully reload document } else { try { // explicitly update the document with JavaScript code // much more efficient and non-jumpy and no wait cursor var window = dom.parentWindow; window.updateDocumentContent(renderedHtml); } catch { PreviewBrowser.Refresh(true); } } return; } } PreviewBrowser.Navigate(editor.MarkdownDocument.HtmlRenderFilename); return; } } ShowPreviewBrowser(true, keepScrollPosition); }
public MainWindow() { LoadFromXmlFile("Resources/dictionary.txd"); try { IEHelper.EnsureBrowserEmulationEnabled(AppDomain.CurrentDomain.FriendlyName); } catch (IeVersionTooOldException) { MessageBox.Show( T("dialog.no_ie"), T("dialog.header.warning"), MessageBoxButton.OK, MessageBoxImage.Warning); System.Diagnostics.Process.Start("https://support.microsoft.com/en-us/help/18520/download-internet-explorer-11-offline-installer"); } catch (Exception ex) { MessageBox.Show( T("dialog.ie_fail", "exception", ex.ToString()), T("dialog.header.warning"), MessageBoxButton.OK, MessageBoxImage.Warning); } InitializeComponent(); _viewModel = new MainViewModel(_database, DialogCoordinator.Instance); DataContext = _viewModel; _database.Database.EnsureCreatedAsync(); _database.Items.LoadAsync(); _localListPersistence = new LocalListPersistence(_database); QaListSelector.SelectedIndex = 0; //QaList.ItemsSource = _viewModel.ActiveQaList; _peingService = new PeingService(); _peingService.OnLoginStatusChanged += (sender, status) => Dispatcher?.Invoke(() => { if (sender != _peingService) { return; } _viewModel.UpdatePeingStatus(status); if (status == ServiceStatus.Available) { _viewModel.StatusText = T("status.logged_in.peing"); } else if (status == ServiceStatus.NotLoggedIn) { _viewModel.StatusText = T("status.dropped.peing"); } }); _marshmallowService = new MarshmallowService(); _marshmallowService.OnLoginStatusChanged += (sender, status) => Dispatcher?.Invoke(() => { if (sender != _marshmallowService) { return; } _viewModel.UpdateMarshmallowStatus(status); if (status == ServiceStatus.Available) { _viewModel.StatusText = T("status.logged_in.marshmallow"); } else if (status == ServiceStatus.NotLoggedIn) { _viewModel.StatusText = T("status.dropped.marshmallow"); } }); _viewModel.PropertyChanged += (sender, args) => { if (args.PropertyName != nameof(_viewModel.ActiveQaList)) { return; } var list = _viewModel.ActiveQaList; switch (list) { case QaListStubsViewModel stubs: _viewModel.ActiveQaItems = stubs.PopulatedItems; break; case QaList qaList: var coll2 = new ObservableCollection <QaItem>(qaList.Items); _viewModel.ActiveQaItems = coll2; break; case QaListObservable qaListObservable: _viewModel.ActiveQaItems = qaListObservable.Items; break; } }; foreach (var stubs in _localListPersistence.GetAllStubs()) { var vm = new QaListStubsViewModel(stubs, _database); vm.CollectionChanged += OnQaListModified; vm.PropertyChanged += OnQaListLockStatusChanged; _viewModel.QaListStubs.Add(vm); } _localListPersistence.OnListModified += (sender, args) => { Dispatcher?.InvokeAsync(() => { switch (args.Action) { case NotifyCollectionChangedAction.Add: var vm = new QaListStubsViewModel((QaListStubs)args.NewItems[0], _database); vm.PropertyChanged += OnQaListLockStatusChanged; vm.CollectionChanged += OnQaListModified; _viewModel.QaListStubs.Add(vm); QaListSelector.SelectedItem = vm; OpenCollectorFor(vm); break; case NotifyCollectionChangedAction.Remove: _viewModel.QaListStubs.Remove(_viewModel.QaListStubs.FirstOrDefault(it => (QaListStubs)args.OldItems[0] == it.Underlying)); break; case NotifyCollectionChangedAction.Replace: _viewModel.QaListStubs.FirstOrDefault(it => (QaListStubs)args.NewItems[0] == it.Underlying)?.OnPropertyChanged(nameof(QaListStubsViewModel.Name)); break; default: throw new ArgumentOutOfRangeException(); } }); }; _displayCommunication = new DisplayCommunication(); try { _displayCommunication.Start(); _viewModel.ServerStatusText = T("status.display.running", "port", DisplayCommunication.DisplayWSPort.ToString()); } catch (Exception) { _viewModel.ServerStatusText = T("status.display.failed"); } if (File.Exists("resources/index_preview.html")) { PreviewBrowser.NavigateToStream(File.Open("resources/index_preview.html", FileMode.Open, FileAccess.Read)); } }
public async Task ScrollToEditorLineAsync(int editorLineNumber = -1, bool updateCodeBlocks = false, bool noScrollTimeout = false, bool noScrollTopAdjustment = false) { await PreviewBrowser.ScrollToEditorLineAsync(editorLineNumber, updateCodeBlocks, noScrollTimeout, noScrollTopAdjustment); }
public void Dispose() { PreviewBrowser.Dispose(); }
public void ExecuteCommand(string command, params dynamic[] args) { PreviewBrowser.ExecuteCommand(command, args); }
public void Refresh(bool noCache = false) { PreviewBrowser.Refresh(noCache); PreviewMarkdownAsync(); }
public void Navigate(string url) { PreviewBrowser.Navigate(url); }
/// <summary> /// Closes a tab and ask for confirmation if the tab doc /// is dirty. /// </summary> /// <param name="tab"></param> /// <returns>true if tab can close, false if it should stay open</returns> public bool CloseTab(TabItem tab) { if (tab == null) { return(false); } var editor = tab.Tag as MarkdownDocumentEditor; if (editor == null) { return(false); } bool returnValue = true; var doc = editor.MarkdownDocument; if (!string.IsNullOrEmpty(doc.HtmlRenderFilename) && File.Exists(doc.HtmlRenderFilename)) { File.Delete(doc.HtmlRenderFilename); } if (doc.IsDirty) { var res = MessageBox.Show(Path.GetFileName(doc.Filename) + "\r\n\r\nhas been modified.\r\n" + "Do you want to save changes?", "Save Document", MessageBoxButton.YesNoCancel, MessageBoxImage.Question, MessageBoxResult.Cancel); if (res == MessageBoxResult.Cancel) { return(false); // don't close } else if (res == MessageBoxResult.No) { // close but don't save } else { if (doc.Filename == "untitled") { Model.SaveAsCommand.Execute(ButtonSaveAsFile); } else if (!SaveFile()) { returnValue = false; } } } tab.Tag = null; TabControl.Items.Remove(tab); if (TabControl.Items.Count == 0) { PreviewBrowser.Visibility = Visibility.Hidden; PreviewBrowser.Navigate("about:blank"); Model.ActiveDocument = null; } return(returnValue); // close }
public void PreviewMarkdown(MarkdownDocumentEditor editor = null, bool keepScrollPosition = false, bool showInBrowser = false, string renderedHtml = null, int editorLineNumber = -1) { PreviewBrowser.PreviewMarkdown(editor, keepScrollPosition, showInBrowser, renderedHtml); }