internal void TryToAddText(HtmlText text)
 {
     if (text != null)
     {
         Fragments.Add(text);
     }
 }
Example #2
0
        /// <summary>
        /// SendEmailAsync
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <SendMailResponse> SendEmailAsync(ISendMailRequest request)
        {
            var response = new SendMailResponse();

            try
            {
                if (_client == null)
                {
                    _client = new SendGridClient(_clientConfig.ApiKey);
                }

                var recipientList = request.Recipients.Select(recipient => new EmailAddress(recipient)).ToList();

                var from             = new EmailAddress(request.From, request.FromName);
                var plainTextContent = HtmlText.ConvertHtml(request.Message);
                var htmlContent      = request.Message;
                var msg = MailHelper.CreateSingleEmailToMultipleRecipients(from, recipientList, request.Subject, plainTextContent, htmlContent);
                await _client.SendEmailAsync(msg);
            }
            catch (Exception ex)
            {
                response.ErrorMessage = ex.Message;
                response.IsSuccess    = false;
            }


            return(response);
        }
Example #3
0
        public void ToHtmlString_should_get_text_as_is(string expected)
        {
            var ele  = new HtmlElement("b");
            var text = new HtmlText(expected);

            Assert.Equal($"<b>{expected}</b>", ele.Append(text).OuterHtml);
        }
Example #4
0
 public void ToString_ReturnsExpected(HtmlText text, string expected)
 {
     Assert.Equal(expected, text.ToString());
     Assert.Equal(expected, text.Serialize());
     Assert.Equal(expected, text.Serialize(HtmlSerializeOptions.None));
     Assert.Equal(expected, text.Serialize(HtmlSerializeOptions.NoFormatting));
 }
Example #5
0
        void EndData(HtmlText containerClass)
        {
            if (currentData.Count > 0)
            {
                string data = currentData.Aggregate(new StringBuilder(), (x, y) => x.Append(y)).ToString();

                //TODO: clean this up
                char[] spaceChars = { (char)9, (char)10, (char)12, (char)13, (char)32 };
                if (string.IsNullOrEmpty(new string(data.Where(c => !spaceChars.Contains(c)).ToArray())))
                {
                    if (preserveWhitespaceTags.Intersect(tagStack.Select(tag => tag.TagName)).Count() == 0)
                    {
                        if (data.Contains("\n"))
                        {
                            data = "\n";
                        }
                        else
                        {
                            data = " ";
                        }
                    }
                }
                currentData = new List <string>();
                HtmlText o = containerClass;
                o.Value = data;
                o.Setup(currentTag, root.Previous);
                if (root.Previous != null)
                {
                    root.Previous.Next = o;
                }
                root.Previous = o;
                currentTag.AddChild(o);
            }
        }
Example #6
0
        private static string AddFragments(TagReader reader, HtmlFragment parentFragment, Stack <string> openTagStack)
        {
            while (reader.Read())
            {
                parentFragment.TryToAddText(HtmlText.Create(reader.Document, reader.PreviousTag, reader.CurrentTag));

                if (reader.CurrentTag.TagType == TagType.Close && openTagStack.Any(t => t.Equals(reader.CurrentTag.Name, StringComparison.CurrentCultureIgnoreCase)))
                {
                    return(reader.CurrentTag.Name);
                }

                var node = parentFragment.AddNode(reader.CurrentTag);
                node.Parent = parentFragment;

                if (reader.CurrentTag.TagType == TagType.Open)
                {
                    openTagStack.Push(reader.CurrentTag.Name);

                    var lastClosed = AddFragments(reader, node, openTagStack);
                    if (lastClosed != openTagStack.Pop())
                    {
                        return(lastClosed);
                    }
                }
            }
            parentFragment.TryToAddText(HtmlText.Create(reader.Document, reader.CurrentTag, null));
            return(null);
        }
Example #7
0
 /// <summary>
 /// 抓取网页内容
 /// </summary>
 /// <param name="id">数据的ID,源自网页中的ID</param>
 /// <param name="url">抓取的URl</param>
 /// <returns></returns>
 private bool CatchContent(long id, string url)
 {
     dataEncoding = cbbEncoding.Text;
     data         = WebAccess.Request(url, string.Empty, WebAccess.WebAccessMethod.POST, "text\\html", null, dataEncoding);
     if (!string.IsNullOrEmpty(data) && data.Contains(txtFilter.Text) && !data.Contains(txtOppFilter.Text))
     {
         try
         {
             //匹配过滤
             item.ID         = id.ToString();
             item.Title      = FindText.Find(data, config.GetConfig("Title"));
             item.Author     = FindText.Find(data, config.GetConfig("Author"));
             item.CreateDate = FindText.Find(data, config.GetConfig("CreateDate"));
             item.ImageUrl   = FindText.Find(data, config.GetConfig("ImageUrl"));
             item.Content    = FindText.Find(data, config.GetConfig("Content"));
             //处理HTML内容
             if (cbReplaceHtml.Checked)
             {
                 item.Content = HtmlText.ToText(item.Content);
             }
             int contentLength = Convert.ToInt32(txtContentLength.Text);
             if (!string.IsNullOrEmpty(item.Title) && item.Content.Length > contentLength)
             {
                 resultFileName = string.Format("{0}//{1}.txt", OUTPUT_PATH, CommonFile.RemoveInvalidChar(item.Title));
                 System.IO.File.WriteAllText(resultFileName, item.ToString());
                 return(true);
             }
         }
         catch (Exception ex)
         {
             txtMessage.Text = ex.Message;
         }
     }
     return(false);
 }
Example #8
0
 public void ToString_ReturnsExpected(HtmlText text, string expected)
 {
     Assert.Equal(expected, text.ToString());
     Assert.Equal(expected, text.Serialize());
     Assert.Equal(expected, text.Serialize(HtmlSerializeOptions.None));
     Assert.Equal(expected, text.Serialize(HtmlSerializeOptions.NoFormatting));
 }
        internal static HtmlText Create(string doc, HtmlTag startTag, HtmlTag endTag)
        {
            var startIndex = 0;

            if (startTag != null)
            {
                startIndex = startTag.StartIndex + startTag.Length;
            }

            var endIndex = doc.Length;

            if (endTag != null)
            {
                endIndex = endTag.StartIndex;
            }

            var text = new HtmlText(doc, startIndex, endIndex);

            if (text != null && !string.IsNullOrEmpty(text.Content))
            {
                return(text);
            }

            return(null);
        }
Example #10
0
        public void ToString_ReturnString_Indent()
        {
            // Arrange
            var obj = HtmlText.Create(contentRaw);

            // Assert
            Assert.Equal($"\t{contentEncoded}\n", obj.ToString(1));
        }
Example #11
0
        public void Constrcutor_SetValues_Raw()
        {
            // Act
            var obj = new HtmlText(contentRaw, false);

            // Assert
            Assert.Equal(contentRaw, obj.Content);
        }
Example #12
0
        public void Constrcutor_SetValues_Encode()
        {
            // Act
            var obj = new HtmlText(contentRaw);

            // Assert
            Assert.Equal(contentEncoded, obj.Content);
        }
Example #13
0
        public void Equals_Null()
        {
            // Arrange
            var orig = HtmlText.Create(contentRaw, false);

            // Assert
            Assert.False(orig.Equals(null));
        }
Example #14
0
        public void Constrcutor_Empty()
        {
            // Act
            var obj = new HtmlText();

            // Assert
            Assert.Null(obj.Content);
        }
Example #15
0
        public void ToXText_Test(HtmlText htmlText, XText expectedXText)
        {
            // Act
            var xText = htmlText.ToXText();

            // Assert
            Assert.That(xText, Is.EqualTo(expectedXText).Using <XNode>(XNode.EqualityComparer));
        }
Example #16
0
 public static string Serialize(this HtmlText text, string parentTagName)
 {
     if (text == null)
     {
         throw new ArgumentNullException(nameof(text));
     }
     return(Builder.BuildString(sb => SerializeTextTo(text.Value, parentTagName, sb)));
 }
Example #17
0
        public void TextTest(string input, string expected)
        {
            // ARRANGE
            var content = new HtmlText(input);

            // ACT & ASSERT
            Assert.AreEqual(expected, content.Text);
        }
Example #18
0
        public void ToXText_Test(HtmlText text, XText expected)
        {
            // Act
            var actual = text.ToXText();

            // Assert
            Assert.That(actual, Is.EqualTo(expected).Using <XNode>(XNode.EqualityComparer));
        }
Example #19
0
        public void RawTextTest(string text)
        {
            // ARRANGE
            var content = new HtmlText(text);

            // ACT & ASSERT
            Assert.AreEqual(text, content.RawText);
        }
Example #20
0
        public void IndexerNullTest()
        {
            // ARRANGE
            var element = new HtmlText("Hello");

            // ACT & ASSERT
            Assert.AreEqual(null, element[null]);
        }
Example #21
0
        public void TestHtmlDecodingValue()
        {
            var tag = new HtmlText();

            tag.Value = "10 &lt; 20";
            Assert.AreEqual("10 < 20", tag.Value);
            Assert.AreEqual("10 < 20", tag.ToString());
        }
Example #22
0
        /// <summary>
        /// 读取下一个 HTML 内容节点(开始标签、结束标签、注释或特殊节点)
        /// </summary>
        /// <param name="index">读取开始位置</param>
        /// <returns>下一个内容节点,若已经达到文档末尾,则返回 null</returns>
        protected virtual HtmlContentFragment NextContentNode(int index)
        {
            Match match;

            while (true)
            {
                index = HtmlText.IndexOf('<', index);
                if (index == -1)
                {
                    return(null);
                }


                match = specialTagRegex.Match(HtmlText, index);
                if (match.Success)
                {
                    return(CreateSpacial(match));
                }


                match = commentTagRegex.Match(HtmlText, index);
                if (match.Success)
                {
                    return(CreateComment(match));
                }



                match = tagRegex.Match(HtmlText, index);

                if (match.Success == false)
                {
                    return(null);//如果再也找不到标签,则认为已经匹配结束
                }
                //如果无法匹配任何类型的标签,稍后从下一个位置再进行尝试
                index = match.Index + 1;

                var capture = match.Groups["tag"];

                match = beginTagRegex.Match(HtmlText, capture.Index, capture.Length);
                if (match.Success)
                {
                    return(CreateBeginTag(match));
                }

                match = endTagRegex.Match(HtmlText, capture.Index, capture.Length);
                if (match.Success)
                {
                    return(CreateEndTag(match));
                }

                match = doctypeRegex.Match(HtmlText, capture.Index, capture.Length);
                if (match.Success)
                {
                    return(CreateDoctypeDeclaration(match));
                }
            }
        }
Example #23
0
        public void GetHashCode_IsEqual()
        {
            // Arrange
            var orig = HtmlText.Create(contentRaw, false);
            var copy = HtmlText.Create(contentRaw, false);

            // Assert
            Assert.Equal(orig.GetHashCode(), copy.GetHashCode());
        }
Example #24
0
        public void GetHashCode_IsNotEqual()
        {
            // Arrange
            var orig  = HtmlText.Create(contentRaw, false);
            var other = HtmlText.Create(contentEncoded, false);

            // Assert
            Assert.NotEqual(orig.GetHashCode(), other.GetHashCode());
        }
Example #25
0
        public void Create_ReturnNewInstance_Raw()
        {
            // Act
            var obj = HtmlText.Create(contentRaw, false);

            // Assert
            Assert.Equal(contentRaw, obj.Content);
            Assert.IsType <HtmlText>(obj);
        }
Example #26
0
        public void Equals_IsEqual()
        {
            // Arrange
            var orig = HtmlText.Create(contentRaw, false);
            var copy = HtmlText.Create(contentRaw, false);

            // Assert
            Assert.True(orig.Equals(copy));
        }
Example #27
0
 public void Equals_ReturnsExpected(HtmlText text, object other, bool expected)
 {
     if (other is HtmlText || other == null)
     {
         Assert.Equal(expected, text.GetHashCode().Equals(other?.GetHashCode()));
         Assert.Equal(expected, text.Equals((HtmlText)other));
     }
     Assert.Equal(expected, text.Equals(other));
 }
Example #28
0
        public void Equals_OtherObject()
        {
            // Arrange
            var orig = HtmlText.Create(contentRaw, false);
            var str  = "not same";

            // Assert
            Assert.False(orig.Equals(str));
        }
        public ActionResult EditText(HtmlText model)
        {
            GetProjectIdAsyncByJustBackRequest();
            var projectTemp = _context.Projects.FirstOrDefault(c => c.Id == ProjectId);

            projectTemp.Text = model.HtmlContent;
            _context.SaveChanges();
            return(RedirectToAction("Index", "Home"));
        }
Example #30
0
        public void Equals_IsNotEqual()
        {
            // Arrange
            var orig  = HtmlText.Create(contentRaw, false);
            var other = HtmlText.Create(contentEncoded, false);

            // Assert
            Assert.False(orig.Equals(other));
        }
Example #31
0
 public void ToHtml_WhenTextIsAbc_ShouldAlwaysReturnAbc()
 {
     var htmlText = new HtmlText("abc");
       Assert.That(htmlText.ToHtml(TagRenderMode.EndTag).ToString(), Is.EqualTo("abc"));
       Assert.That(htmlText.ToHtml(TagRenderMode.StartTag).ToString(), Is.EqualTo("abc"));
       Assert.That(htmlText.ToHtml(TagRenderMode.SelfClosing).ToString(), Is.EqualTo("abc"));
       Assert.That(htmlText.ToHtml(TagRenderMode.Normal).ToString(), Is.EqualTo("abc"));
       Assert.That(htmlText.ToHtml().ToString(), Is.EqualTo("abc"));
 }
Example #32
0
 public void Equals_ReturnsExpected(HtmlText text, object other, bool expected)
 {
     if (other is HtmlText || other == null)
     {
         Assert.Equal(expected, text.GetHashCode().Equals(other?.GetHashCode()));
         Assert.Equal(expected, text.Equals((HtmlText)other));
     }
     Assert.Equal(expected, text.Equals(other));
 }
Example #33
0
        public void ToHtml_WhenTextIsAbc_ShouldAlwaysReturnAbc()
        {
            var htmlText = new HtmlText("abc");

            Assert.That(htmlText.ToHtml(TagRenderMode.EndTag).ToString(), Is.EqualTo("abc"));
            Assert.That(htmlText.ToHtml(TagRenderMode.StartTag).ToString(), Is.EqualTo("abc"));
            Assert.That(htmlText.ToHtml(TagRenderMode.SelfClosing).ToString(), Is.EqualTo("abc"));
            Assert.That(htmlText.ToHtml(TagRenderMode.Normal).ToString(), Is.EqualTo("abc"));
            Assert.That(htmlText.ToHtml().ToString(), Is.EqualTo("abc"));
        }
Example #34
0
 public void ObjectType_Get_ReturnsText()
 {
     HtmlText text = new HtmlText("text");
     Assert.Equal(HtmlObjectType.Text, text.ObjectType);
 }
Example #35
0
 public void Ctor_String(string text)
 {
     HtmlText htmlText = new HtmlText(text);
     Assert.Equal(text, htmlText.Text);
 }