MediaList
sealed class MediaList : CssNode, IMediaList, ICssNode, IStyleFormattable, IEnumerable<ICssMedium>, IEnumerable
Represents a list of media elements.
using AngleSharp.Css;
using AngleSharp.Dom.Css;
using AngleSharp.Extensions;
using AngleSharp.Parser.Css;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace AngleSharp.Dom.Collections
{
internal sealed class MediaList : CssNode, IMediaList, ICssNode, IStyleFormattable, IEnumerable<ICssMedium>, IEnumerable
{
private readonly CssParser _parser;
public string this[int index] {
get {
return Media.GetItemByIndex(index).ToCss();
}
}
public IEnumerable<CssMedium> Media => base.Children.OfType<CssMedium>();
public int Length => Media.Count();
public string MediaText {
get {
return this.ToCss();
}
set {
Clear();
foreach (CssMedium item in _parser.ParseMediaList(value)) {
if (item == null)
throw new DomException(DomError.Syntax);
AppendChild(item);
}
}
}
internal MediaList(CssParser parser)
{
_parser = parser;
}
public override void ToCss(TextWriter writer, IStyleFormatter formatter)
{
CssMedium[] array = Media.ToArray();
if (array.Length != 0) {
array[0].ToCss(writer, formatter);
for (int i = 1; i < array.Length; i++) {
writer.Write(", ");
array[i].ToCss(writer, formatter);
}
}
}
public bool Validate(RenderDevice device)
{
return !Media.Any((CssMedium m) => !m.Validate(device));
}
public void Add(string newMedium)
{
CssMedium cssMedium = _parser.ParseMedium(newMedium);
if (cssMedium == null)
throw new DomException(DomError.Syntax);
AppendChild(cssMedium);
}
public void Remove(string oldMedium)
{
CssMedium cssMedium = _parser.ParseMedium(oldMedium);
if (cssMedium == null)
throw new DomException(DomError.Syntax);
foreach (CssMedium medium in Media) {
if (medium.Equals(cssMedium)) {
RemoveChild(medium);
return;
}
}
throw new DomException(DomError.NotFound);
}
public IEnumerator<ICssMedium> GetEnumerator()
{
return Media.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}