MediaFeature
Represents a feature expression within a media query.
using AngleSharp.Css;
using AngleSharp.Extensions;
using System.IO;
namespace AngleSharp.Dom.Css
{
internal abstract class MediaFeature : CssNode, IMediaFeature, ICssNode, IStyleFormattable
{
private readonly bool _min;
private readonly bool _max;
private readonly string _name;
private CssValue _value;
public string Name => _name;
public bool IsMinimum => _min;
public bool IsMaximum => _max;
public string Value {
get {
if (!HasValue)
return string.Empty;
return _value.CssText;
}
}
public bool HasValue {
get {
if (_value != null)
return _value.Count > 0;
return false;
}
}
internal abstract IValueConverter Converter { get; }
internal MediaFeature(string name)
{
_name = name;
_min = name.StartsWith("min-");
_max = name.StartsWith("max-");
}
internal bool TrySetValue(CssValue value)
{
bool flag = false;
flag = ((value != null) ? (Converter.Convert(value) != null) : (!IsMinimum && !IsMaximum && Converter.HasDefault()));
if (flag)
_value = value;
return flag;
}
public abstract bool Validate(RenderDevice device);
public override void ToCss(TextWriter writer, IStyleFormatter formatter)
{
string value = HasValue ? Value : null;
writer.Write(formatter.Constraint(_name, value));
}
}
}