AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.9.11" />

.NET API 1,230,848 bytes

 CssImportRule

Represents a CSS import rule.
using AngleSharp.Dom.Collections; using AngleSharp.Extensions; using AngleSharp.Network; using AngleSharp.Parser.Css; using System.IO; using System.Linq; using System.Threading.Tasks; namespace AngleSharp.Dom.Css { internal sealed class CssImportRule : CssRule, ICssImportRule, ICssRule, ICssNode, IStyleFormattable { private string _href; private CssStyleSheet _styleSheet; public string Href { get { return _href; } set { _href = value; } } public MediaList Media => base.Children.OfType<MediaList>().FirstOrDefault(); IMediaList ICssImportRule.Media { get { return Media; } } public ICssStyleSheet Sheet => _styleSheet; internal CssImportRule(CssParser parser) : base(CssRuleType.Import, parser) { AppendChild(new MediaList(parser)); } internal async Task LoadStylesheetFromAsync(Document document) { if (document != null) { IResourceLoader loader = document.Loader; Url url = new Url(Url.Create(Owner.Href ?? document.BaseUri), _href); if (!IsRecursion(url) && loader != null) { ResourceRequest request = Owner.OwnerNode.CreateRequestFor(url); using (IResponse response = await loader.DownloadAsync(request).Task.ConfigureAwait(false)) { CssStyleSheet sheet = new CssStyleSheet(this, response.Address.Href); TextSource source = new TextSource(response.Content, null); CssStyleSheet styleSheet = _styleSheet; _styleSheet = await Parser.ParseStylesheetAsync(sheet, source).ConfigureAwait(false); } } } } protected override void ReplaceWith(ICssRule rule) { CssImportRule cssImportRule = rule as CssImportRule; _href = cssImportRule._href; _styleSheet = null; base.ReplaceWith(rule); } public override void ToCss(TextWriter writer, IStyleFormatter formatter) { string mediaText = Media.MediaText; string str = string.IsNullOrEmpty(mediaText) ? string.Empty : " "; string value = _href.CssUrl() + str + mediaText; writer.Write(formatter.Rule("@import", value)); } private bool IsRecursion(Url url) { string href = url.Href; ICssStyleSheet cssStyleSheet = base.Owner; while (cssStyleSheet != null && !cssStyleSheet.Href.Is(href)) { cssStyleSheet = cssStyleSheet.Parent; } return cssStyleSheet != null; } } }