public void should_clean_html_using_sanitizer() { // Arrange string html = "<div onclick=\"javascript:alert('ouch');\">test</div>"; var pagehtml = new PageHtml() { Html = html }; var htmlSanitizerMock = Substitute.For <IHtmlSanitizer>(); var factoryMock = Substitute.For <IHtmlSanitizerFactory>(); factoryMock .CreateHtmlSanitizer() .Returns(htmlSanitizerMock); var middleware = new HarmfulTagMiddleware(factoryMock); // Act middleware.Invoke(pagehtml); // Assert htmlSanitizerMock .Received(1) .Sanitize(html, "", null); }
public void should_parser_markup_using_parser() { // Arrange string markdown = "some **bold** text"; string expectedHtml = "<p>some <strong>bold</strong> text</p>\n"; var pagehtml = new PageHtml() { Html = markdown }; var parser = Substitute.For <IMarkupParser>(); parser .ToHtml(markdown) .Returns(expectedHtml); var middleware = new MarkupParserMiddleware(parser); // Act PageHtml actualPageHtml = middleware.Invoke(pagehtml); // Assert Assert.Equal(expectedHtml, actualPageHtml.Html); }
/// <summary> /// Turns the wiki markup provided into HTML. /// </summary> /// <param name="text">A wiki markup string, e.g. creole markup.</param> /// <returns>The wiki markup converted to HTML.</returns> public PageHtml ToHtml(string text) { CustomTokenParser tokenParser = new CustomTokenParser(_applicationSettings); PageHtml pageHtml = new PageHtml(); TextPluginRunner runner = new TextPluginRunner(_pluginFactory); // Text plugins before parse text = runner.BeforeParse(text, pageHtml); // Parse the markup into HTML string html = _parser.Transform(text); // Remove bad HTML tags html = RemoveHarmfulTags(html); // Customvariables.xml file html = tokenParser.ReplaceTokensAfterParse(html); // Text plugins after parse html = runner.AfterParse(html); // Text plugins pre and post #container HTML pageHtml.PreContainerHtml = runner.PreContainerHtml(); pageHtml.PostContainerHtml = runner.PostContainerHtml(); pageHtml.IsCacheable = runner.IsCacheable; pageHtml.Html = html; return(pageHtml); }
public Task <ActionResult <string> > ConvertToHtml([FromBody] string markDown) { PageHtml result = _textMiddlewareBuilder.Execute(markDown); ActionResult <string> actionResult = Ok(result.Html); return(Task.FromResult(actionResult)); }
public void should_clean_html_using_sanitizer() { string markdown = @"@@warningbox:ENTER YOUR CONTENT HERE here is some more content @@"; string expectedHtml = @"<div class=""alert alert-warning"">ENTER YOUR CONTENT HERE here is some more content </div><br style=""clear:both""/>"; var pagehtml = new PageHtml() { Html = markdown }; var settings = new TextSettings(); settings.CustomTokensPath = Path.Combine(Directory.GetCurrentDirectory(), "Text", "CustomTokens", "customvariables.xml"); var customTokenParser = new CustomTokenParser(settings, _logger); var middleware = new CustomTokenMiddleware(customTokenParser); // Act PageHtml actualPageHtml = middleware.Invoke(pagehtml); actualPageHtml.Html = actualPageHtml.Html.Replace(Environment.NewLine, "", StringComparison.Ordinal); expectedHtml = expectedHtml.Replace(Environment.NewLine, "", StringComparison.Ordinal); // Assert Assert.Equal(expectedHtml, actualPageHtml.Html); }
public override PageHtml Invoke(PageHtml pageHtml) { string text = TextPluginRunner.BeforeParse(pageHtml); pageHtml.Html = text; return(pageHtml); }
protected override string ExtractFriendlyName() { var titleContainer = PageHtml .FastEnumerateDescendantsByName(HtmlElements.Div) .FirstOrDefault(x => x.HasAttribute(HtmlAttributes.Class, "apphub_AppName")); return(titleContainer?.InnerText ?? UnknownAppName); }
public override PageHtml Invoke(PageHtml pageHtml) { pageHtml.Html = TextPluginRunner.AfterParse(pageHtml.Html); pageHtml.PreContainerHtml = TextPluginRunner.PreContainerHtml(); pageHtml.PostContainerHtml = TextPluginRunner.PostContainerHtml(); pageHtml.IsCacheable = _textPluginRunner.IsCacheable; return(pageHtml); }
public override PageHtml Invoke(PageHtml pageHtml) { if (_sanitizer != null) { pageHtml.Html = _sanitizer.Sanitize(pageHtml.Html); } return(pageHtml); }
public void should() { // given var builder = CreateBuilderWithoutParser(); // when PageHtml pageHtml = builder.Execute("![Image title](/DSC001.jpg)"); // then Console.WriteLine(pageHtml); }
public PageViewModel(PageContent pageContent, MarkupConverter converter) { if (pageContent == null) { throw new ArgumentNullException("pageContent"); } if (pageContent.Page == null) { throw new ArgumentNullException("pageContent.Page"); } if (converter == null) { throw new ArgumentNullException("converter"); } RoadkillContext = ObjectFactory.GetInstance <IUserContext>(); Id = pageContent.Page.Id; Title = pageContent.Page.Title; PreviousTitle = pageContent.Page.Title; CreatedBy = pageContent.Page.CreatedBy; CreatedOn = pageContent.Page.CreatedOn; IsLocked = pageContent.Page.IsLocked; ModifiedBy = pageContent.Page.ModifiedBy; ModifiedOn = pageContent.Page.ModifiedOn; RawTags = pageContent.Page.Tags; Content = pageContent.Text; VersionNumber = pageContent.VersionNumber; ProjectStart = pageContent.Page.ProjectStart; ProjectEnd = pageContent.ProjectEnd; ProjectEstimatedTime = pageContent.ProjectEstimatedTime; ProjectStatus = pageContent.ProjectStatus; ProjectLanguage = pageContent.ProjectLanguage; orgID = pageContent.orgID; Rel = RelToUserToPage(Id); Relationships = GetRelationships(); PageHtml pageHtml = converter.ToHtml(pageContent.Text); ContentAsHtml = pageHtml.Html; IsCacheable = pageHtml.IsCacheable; PluginHeadHtml = pageHtml.HeadHtml; PluginFooterHtml = pageHtml.FooterHtml; PluginPreContainer = pageHtml.PreContainerHtml; PluginPostContainer = pageHtml.PostContainerHtml; CreatedOn = DateTime.SpecifyKind(CreatedOn, DateTimeKind.Utc); ModifiedOn = DateTime.SpecifyKind(ModifiedOn, DateTimeKind.Utc); AllTags = new List <TagViewModel>(); }
public static void CreatePageItem(IEntity entity, string snippetPath, string description) { var queue = PageHtml.PageHtmlCodeQueue(entity, snippetPath, description); using var sw = new StreamWriter(entity.Path + entity.FileName); while (queue.Any()) { sw.WriteLine(queue.Dequeue()); } }
public ActionResult GetPreview(string id) { PageHtml pagehtml = ""; if (!string.IsNullOrEmpty(id)) { MarkupConverter converter = _pageService.GetMarkupConverter(); pagehtml = converter.ToHtml(id); } return(JavaScript(pagehtml.Html)); }
public SteamPage(Uri address, HtmlDocument pageHtml, params string[] prefetchHtmlElementNames) { if (address is null) { throw new ArgumentNullException(nameof(address)); } PageHtml = pageHtml ?? throw new ArgumentNullException(nameof(pageHtml)); NormalizedAddress = LinkSanitizer.GetSanitizedLinkWithoutQueryAndFragment(address); PrefetchedHtmlNodes = PageHtml.GetDescendantsByNames(prefetchHtmlElementNames.Union(new[] { HtmlElements.Anchor, HtmlElements.Form }).ToArray()); FriendlyName = ExtractFriendlyName(); var htmlLinks = PrefetchedHtmlNodes[HtmlElements.Anchor]; var subLinks = GetLinksForSubs(PrefetchedHtmlNodes[HtmlElements.Form]); NormalizedLinks = htmlLinks .Select(x => x.GetAttributeValue(HtmlAttributes.Href, null)) .Where(x => !string.IsNullOrWhiteSpace(x)) .Where(x => x.StartsWith(PageUrlPrefixes.Steam, StringComparison.OrdinalIgnoreCase)) .Select(x => LinkSanitizer.GetSanitizedLinkWithoutQueryAndFragment(new Uri(x, UriKind.Absolute))) .Concat(subLinks.Select(x => x.Address)) .Distinct(UriAbsoluteUriEqualityComparer.Instance) .OrderBy(x => x.AbsoluteUri) .ToList(); AppLinks = NormalizedLinks .Where(uri => uri.AbsoluteUri.StartsWith(PageUrlPrefixes.App)) .OrderBy(x => x.AbsoluteUri) .Select(x => new AppLink(x)) .ToList(); BundleLinks = NormalizedLinks .Where(uri => uri.AbsoluteUri.StartsWith(PageUrlPrefixes.Bundle)) .OrderBy(x => x.AbsoluteUri) .Select(x => new BundleLink(x)) .ToList(); DlcLinks = NormalizedLinks .Where(uri => uri.AbsoluteUri.StartsWith(PageUrlPrefixes.Dlc)) .OrderBy(x => x.AbsoluteUri) .ToList(); SubLinks = subLinks; }
private string[] GetChapterPages(int ID) { var Page = GetChapterHtml(ID); List <string> Pages = new List <string>(); var Scripts = Page.SelectNodes("//body//script[@type=\"text/javascript\"]"); bool Found = false; foreach (var Node in Scripts) { if (!Node.InnerHtml.Contains("var images")) { continue; } Found = true; string JS = Node.InnerHtml.Substring("var images = ", "\"];") + "\"]"; var Result = (from x in JSTools.EvaluateScript <List <object> >(JS) select(string) x).ToArray(); foreach (string PageHtml in Result) { var PageUrl = PageHtml.Substring("src=", " ").Trim(' ', '\'', '"'); Pages.Add(PageUrl); } } if (!Found) { foreach (var Img in Page.SelectNodes("//section[@id='imageWrapper']//img")) { Pages.Add(Img.GetAttributeValue("src", string.Empty)); } } var Links = (from x in Pages select x.Replace(".webp", "").Replace("/images", "/mangas_files")).ToArray(); if (Links.Where(x => string.IsNullOrEmpty(System.IO.Path.GetExtension(x))).Any()) { return(Links.Select(x => x + ".webp").ToArray()); } return(Links); }
public PageViewModel(PageContent pageContent, MarkupConverter converter) { if (pageContent == null) { throw new ArgumentNullException("pageContent"); } if (pageContent.Page == null) { throw new ArgumentNullException("pageContent.Page"); } if (converter == null) { throw new ArgumentNullException("converter"); } Id = pageContent.Page.Id; Title = pageContent.Page.Title; PreviousTitle = pageContent.Page.Title; CreatedBy = pageContent.Page.CreatedBy; CreatedOn = pageContent.Page.CreatedOn; IsLocked = pageContent.Page.IsLocked; ModifiedBy = pageContent.Page.ModifiedBy; ModifiedOn = pageContent.Page.ModifiedOn; RawTags = pageContent.Page.Tags; Content = pageContent.Text; VersionNumber = pageContent.VersionNumber; PageHtml pageHtml = converter.ToHtml(pageContent.Text); ContentAsHtml = pageHtml.Html; IsCacheable = pageHtml.IsCacheable; PluginHeadHtml = pageHtml.HeadHtml; PluginFooterHtml = pageHtml.FooterHtml; PluginPreContainer = pageHtml.PreContainerHtml; PluginPostContainer = pageHtml.PostContainerHtml; CreatedOn = DateTime.SpecifyKind(CreatedOn, DateTimeKind.Utc); ModifiedOn = DateTime.SpecifyKind(ModifiedOn, DateTimeKind.Utc); AllTags = new List <TagViewModel>(); CustomWysiwygButtons = new List <WysiwygButtonViewModel>(); }
public PageHtml Execute(string markdown) { var pageHtml = new PageHtml() { Html = markdown }; foreach (Middleware item in MiddlewareItems) { try { pageHtml = item.Invoke(pageHtml); } catch (Exception ex) { _logger.LogWarning("TextMiddlewareBuilder exception: {0}", ex); } } return(pageHtml); }
public void should_handle_null_sanitizer_from_factory_and_return_uncleaned_html() { // Arrange string html = "<div onclick=\"javascript:alert('ouch');\">test</div>"; var pagehtml = new PageHtml() { Html = html }; var factoryMock = Substitute.For <IHtmlSanitizerFactory>(); factoryMock .CreateHtmlSanitizer() .Returns(callInfo => null); var middleware = new HarmfulTagMiddleware(factoryMock); // Act PageHtml actualPageHtml = middleware.Invoke(pagehtml); // Assert Assert.Equal(html, actualPageHtml.Html); }
protected virtual void Extract() { try { Regex r = new Regex(ItemRegex, RegexOptions.Multiline); MatchCollection mc = r.Matches(PageHtml); if (mc.Count == 0) { return; } string text = ""; for (int i = 0; i < mc.Count; i++) { if (i < mc.Count - 2) { text = PageHtml.Substring(mc[i].Index, mc[i + 1].Index - mc[i].Index); } else { text = PageHtml.Substring(mc[i].Index, PageHtml.IndexOf(LastItemEndTag, mc[i].Index) - mc[i].Index); } text = RemoveGarbage(text); OnExtract(text); } } catch (Exception ex) { throw ex; } }
public static string BeforeParse(PageHtml pageHtml) { return(pageHtml.Html); }
public override PageHtml Invoke(PageHtml pageHtml) { pageHtml.Html = _parser.ToHtml(pageHtml.Html); return(pageHtml); }
public Task <string> ConvertToHtml(string markDown) { PageHtml result = _textMiddlewareBuilder.Execute(markDown); return(Task.FromResult(result.Html)); }
public abstract PageHtml Invoke(PageHtml pageHtml);
public override PageHtml Invoke(PageHtml pageHtml) { return(pageHtml.Html.Replace(SearchString, Replacement, StringComparison.Ordinal)); }
public override PageHtml Invoke(PageHtml pageHtml) { pageHtml.Html = _customTokenParser.ReplaceTokensAfterParse(pageHtml.Html); return(pageHtml); }
/// <summary> /// Allows a string to be implicitly cast from a <c>PageHtml</c>. /// </summary> /// <param name="pageHtml">A PageHtml object.</param> /// <returns>The PageHtml's Html property.</returns> public static string FromPageHtml(PageHtml pageHtml) { // string s = pageHtml return(pageHtml.Html); }