MediaList
Represents a list of media elements.
using AngleSharp.Css;
using AngleSharp.Dom.Css;
using AngleSharp.Parser.Css;
using System.Collections;
using System.Collections.Generic;
namespace AngleSharp.Dom.Collections
{
internal sealed class MediaList : IMediaList, IEnumerable<string>, IEnumerable
{
private readonly CssParser _parser;
private readonly List<CssMedium> _media;
public string this[int index] {
get {
if (index < 0 || index >= _media.Count)
return null;
return _media[index].ToCss();
}
}
public int Length => _media.Count;
public string MediaText {
get {
string[] array = new string[_media.Count];
for (int i = 0; i < _media.Count; i++) {
array[i] = _media[i].ToCss();
}
return string.Join(", ", array);
}
set {
_media.Clear();
foreach (CssMedium item in _parser.ParseMediaList(value)) {
if (item == null)
throw new DomException(DomError.Syntax);
_media.Add(item);
}
}
}
internal MediaList(CssParser parser)
{
_parser = parser;
_media = new List<CssMedium>();
}
public bool Validate(RenderDevice device)
{
foreach (CssMedium medium in _media) {
if (!medium.Validate(device))
return false;
}
return true;
}
public void Add(string newMedium)
{
CssMedium cssMedium = _parser.ParseMedium(newMedium);
if (cssMedium == null)
throw new DomException(DomError.Syntax);
_media.Add(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)) {
_media.Remove(medium);
return;
}
}
throw new DomException(DomError.NotFound);
}
public void Add(CssMedium medium)
{
_media.Add(medium);
}
public void Clear()
{
_media.Clear();
}
public void Import(MediaList list)
{
_media.Clear();
_media.AddRange(list._media);
}
public IEnumerator<string> GetEnumerator()
{
foreach (CssMedium medium in _media) {
yield return medium.ToCss();
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}