Пример #1
0
        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"]);
        }
Пример #2
0
        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;
                });
            }
        }
Пример #3
0
        public void EditorFactoryTestCleanup()
        {
            editorPackage.Dispose();
            editorPackage = null;

            editorFactory.Dispose();
            editorFactory = null;
        }
Пример #4
0
        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.");
        }
Пример #5
0
 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);
             }
         }
     }
 }
Пример #6
0
        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, "");
        }
Пример #7
0
        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));
            });
        }
Пример #8
0
 /// <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);
     }
 }
Пример #9
0
        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();
                }
            });
        }
Пример #10
0
        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");
        }
Пример #11
0
        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
            });
        }
Пример #12
0
 public void EditorPackageTestCleanup()
 {
     editorPackage = null;
 }
Пример #13
0
 public void EditorPackageTestInitialize()
 {
     editorPackage = new EditorPackage();
 }
Пример #14
0
 public override void Initialize()
 {
     MouseInputManager.Instance.SetMouseAction(MouseClicked);
     editorPkg = MonoBehaviour.FindObjectOfType <EditorPackage>();
     editorPkg.editorIC.RegisterInputEnteredFunc(InputFromConsole);
 }
Пример #15
0
 public void EditorFactoryTestInitialize()
 {
     editorPackage = new EditorPackage();
     editorFactory = new EditorFactory();
 }