static async Task <string> FetchMessageContent(EditorPackage package) { if (string.IsNullOrEmpty(package.PostUriForm)) { return(null); } var html = await HttpClientHelper.Get(package.PostUriForm); HtmlNode.ElementsFlags.Remove("form"); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); HtmlNode formNode = htmlDoc.DocumentNode.Descendants("form").First(x => (string)x.GetAttributeValue("id", "") == "hop"); //All inputs/select data Dictionary <string, string> formInputs = new Dictionary <string, string>(); foreach (HtmlNode node in formNode.Descendants("textarea")) { formInputs.Add(node.GetAttributeValue("name", ""), WebUtility.HtmlDecode(node.InnerText) + Environment.NewLine); } return(formInputs["content_form"]); }
public static async Task GetEditor(EditorPackage package) { if (package.Intent == EditorIntent.MultiQuote) { if (string.IsNullOrEmpty(Loc.Editor.MultiQuoteTemporaryContent)) { Loc.Editor.MultiQuoteTemporaryContent = ""; } Loc.Editor.MultiQuoteTemporaryContent += await FetchMessageContent(package); Loc.Editor.MultiQuoteTemporaryContent += Environment.NewLine; } else { Debug.WriteLine("Fetching Form"); var editor = await Fetch(package); Debug.WriteLine("Updating UI with new Editor"); await ThreadUI.Invoke(() => { Loc.Editor.CurrentEditor = editor; }); } }
public void EditorFactoryTestCleanup() { editorPackage.Dispose(); editorPackage = null; editorFactory.Dispose(); editorFactory = null; }
public void DisposeTest() { EditorPackage target = editorPackage; Microsoft_Samples_VisualStudio_IDE_EditorWithToolbox_EditorPackageAccessor accessor = new Microsoft_Samples_VisualStudio_IDE_EditorWithToolbox_EditorPackageAccessor(target); accessor.editorFactory = new EditorFactory(); target.Dispose(); Assert.IsNull(accessor.editorFactory, "Internal Editor Factory object was not disposed properly."); }
private async void ThreadWebView_OnNavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args) { if (args.Uri != null && args.Uri.AbsoluteUri.StartsWith(Strings.LocalUriPrefix)) { args.Cancel = true; if (args.Uri.AbsoluteUri.Contains("quote")) { var decoder = new WwwFormUrlDecoder(args.Uri.Query); var postId = decoder.FirstOrDefault(x => x.Name == "postId")?.Value; if (!string.IsNullOrEmpty(postId)) { var package = new EditorPackage(EditorIntent.Quote, Loc.Thread.CurrentThread.ThreadNewPostUriForm + $"&numrep={postId}"); Loc.Thread.ShowEditorCommand.Execute(package); } } else if (args.Uri.AbsoluteUri.Contains("deleteFromMultiQuote")) { var decoder = new WwwFormUrlDecoder(args.Uri.Query); var postId = decoder.FirstOrDefault(x => x.Name == "postId")?.Value; if (!string.IsNullOrEmpty(postId)) { var package = new EditorPackage(EditorIntent.MultiQuote, Loc.Thread.CurrentThread.ThreadNewPostUriForm + $"&numrep={postId}"); await Loc.Editor.RemoveQuoteFromMultiQuote(package); } } else if (args.Uri.AbsoluteUri.Contains("multiQuote")) { var decoder = new WwwFormUrlDecoder(args.Uri.Query); var postId = decoder.FirstOrDefault(x => x.Name == "postId")?.Value; if (!string.IsNullOrEmpty(postId)) { var package = new EditorPackage(EditorIntent.MultiQuote, Loc.Thread.CurrentThread.ThreadNewPostUriForm + $"&numrep={postId}"); Loc.Thread.ShowEditorCommand.Execute(package); } } else if (args.Uri.AbsoluteUri.Contains("edit")) { var decoder = new WwwFormUrlDecoder(args.Uri.Query); var postId = decoder.FirstOrDefault(x => x.Name == "postId")?.Value; if (!string.IsNullOrEmpty(postId)) { var package = new EditorPackage(EditorIntent.Edit, Loc.Thread.CurrentThread.ThreadNewPostUriForm + $"&numreponse={postId}"); Loc.Thread.ShowEditorCommand.Execute(package); } } else { Debug.WriteLine("WW " + args.Uri.Query + "-- " + args.Uri + " -- " + args.Uri.AbsoluteUri); string param = args.Uri.Query.Replace("?", ""); if (Loc.Main.ContextMessageCommand.CanExecute(param)) { Loc.Main.ContextMessageCommand.Execute(param); } } } }
public async Task RemoveQuoteFromMultiQuote(EditorPackage package) { if (string.IsNullOrEmpty(MultiQuoteTemporaryContent)) { return; } var quote = await FormFetcher.FetchMessageContent(package); Loc.Editor.MultiQuoteTemporaryContent = Loc.Editor.MultiQuoteTemporaryContent.Replace(quote, "").Replace(Environment.NewLine, ""); }
public async Task LoadEditor(EditorPackage package) { await ThreadUI.Invoke(() => IsBusy = true); await Task.Run(async() => await FormFetcher.GetEditor(package)); await ThreadUI.Invoke(() => { IsBusy = false; RaisePropertyChanged(nameof(IsEditUIVisible)); }); }
/// <summary> /// Clean up any resources being used. /// </summary> protected virtual void Dispose(bool disposing) { if (disposing) { if (editorPackage != null) { editorPackage.Dispose(); editorPackage = null; } GC.SuppressFinalize(this); } }
public async Task LoadEditor(EditorPackage package) { await ThreadUI.Invoke(() => IsBusy = true); await Task.Run(async() => await FormFetcher.GetEditor(package)); await ThreadUI.Invoke(() => { IsBusy = false; RaisePropertyChanged(nameof(IsEditUIVisible)); if (package.Intent == EditorIntent.MultiQuote) { Loc.NavigationService.GoBack(); } }); }
public void SetSite() { // Create the package IVsPackage package = new EditorPackage() as IVsPackage; Assert.IsNotNull(package, "The object does not implement IVsPackage"); // Create a basic service provider OleServiceProvider serviceProvider = OleServiceProvider.CreateOleServiceProviderWithBasicServices(); // Add site support to register editor factory BaseMock registerEditor = MockRegisterEditors.GetRegisterEditorsInstance(); serviceProvider.AddService(typeof(SVsRegisterEditors), registerEditor, false); // Site the package Assert.AreEqual(0, package.SetSite(serviceProvider), "SetSite did not return S_OK"); }
private static async Task <Editor> Fetch(EditorPackage package) { if (string.IsNullOrEmpty(package.PostUriForm)) { return(null); } var html = await HttpClientHelper.Get(package.PostUriForm); HtmlNode.ElementsFlags.Remove("form"); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); HtmlNode formNode = htmlDoc.DocumentNode.Descendants("form").First(x => (string)x.GetAttributeValue("id", "") == "hop"); //Submit URL string submitUrl = formNode.GetAttributeValue("action", ""); //All inputs/select data Dictionary <string, string> formInputs = new Dictionary <string, string>(); foreach (HtmlNode node in formNode.Descendants("input")) { if (node.GetAttributeValue("value", "") != "" && node.GetAttributeValue("name", "") != "") { if (node.GetAttributeValue("name", "") == "MsgIcon") { // Message' icon - Only if checked if (node.GetAttributeValue("checked", "") == "checked") { formInputs.Add(node.GetAttributeValue("name", ""), node.GetAttributeValue("value", "")); } } else if (node.GetAttributeValue("type", "") == "checkbox") { // Checkboxes formInputs.Add(node.GetAttributeValue("name", ""), node.GetAttributeValue("checked", "") == "checked" ? "1" : "0"); } else { try { formInputs.Add(node.GetAttributeValue("name", ""), node.GetAttributeValue("value", "")); } catch (Exception) { Debug.WriteLine("ext0 =" + node.GetAttributeValue("name", "") + "," + node.GetAttributeValue("value", "")); throw; } } } } foreach (HtmlNode node in formNode.Descendants("select")) { if (node.GetAttributeValue("name", "") == "subcat") { #warning "Categories list used to select/change FP category not implemented" } // add Selected category (on edit), or first one if none selected. HtmlNode selectedNode = node .Descendants("option") .FirstOrDefault(x => (string)x.GetAttributeValue("selected", "") == "selected"); if (selectedNode != null) { formInputs.Add(node.GetAttributeValue("name", ""), selectedNode.GetAttributeValue("value", "")); } else { formInputs.Add(node.GetAttributeValue("name", ""), node.Descendants("option").First().GetAttributeValue("value", " ")); } } foreach (HtmlNode node in formNode.Descendants("textarea")) { formInputs.Add(node.GetAttributeValue("name", ""), WebUtility.HtmlDecode(node.InnerText) + Environment.NewLine); } //Debug.WriteLine("Parsing OK"); //foreach (KeyValuePair<string, string> entry in formInputs) //{ // Debug.WriteLine("inputs = " + entry.Key + " " + entry.Value); //} // Populate with multi quote temporary content if found and that content_form is empty var content = ""; if (formInputs.TryGetValue("content_form", out content)) { if (string.IsNullOrEmpty(content.CleanFromWeb())) { if (!string.IsNullOrEmpty(Loc.Editor.MultiQuoteTemporaryContent)) { formInputs["content_form"] = Loc.Editor.MultiQuoteTemporaryContent; Loc.Editor.MultiQuoteTemporaryContent = null; } } } return(new Editor { FromUrl = package.PostUriForm, SubmitUrl = submitUrl, Data = formInputs, idxTopic = 0, Intent = package.Intent }); }
public void EditorPackageTestCleanup() { editorPackage = null; }
public void EditorPackageTestInitialize() { editorPackage = new EditorPackage(); }
public override void Initialize() { MouseInputManager.Instance.SetMouseAction(MouseClicked); editorPkg = MonoBehaviour.FindObjectOfType <EditorPackage>(); editorPkg.editorIC.RegisterInputEnteredFunc(InputFromConsole); }
public void EditorFactoryTestInitialize() { editorPackage = new EditorPackage(); editorFactory = new EditorFactory(); }