AngleSharp by AngleSharp

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

.NET API 1,232,384 bytes

 CssImportRule

Represents a CSS import rule.
using AngleSharp.Dom.Collections; using AngleSharp.Extensions; using AngleSharp.Network; using AngleSharp.Parser.Css; 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 LoadStylesheetFrom(Document document) { if (document != null) { IResourceLoader loader = document.Loader; Url baseUrl = Url.Create(base.Owner.Href ?? document.BaseUri); Url url = new Url(baseUrl, _href); if (!IsRecursion(url) && loader != null) { IElement element = base.Owner.OwnerNode; ResourceRequest request = element.CreateRequestFor(url); IDownload download = loader.DownloadAsync(request); using (IResponse response = await download.Task.ConfigureAwait(false)) { CssStyleSheet sheet = new CssStyleSheet(this, response.Address.Href); TextSource source = new TextSource(response.Content, null); _styleSheet = await base.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 string ToCss(IStyleFormatter formatter) { string mediaText = Media.MediaText; string str = string.IsNullOrEmpty(mediaText) ? string.Empty : " "; string value = _href.CssUrl() + str + mediaText; return 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; } } }