Skip to content

Commit 97a650f

Browse files
committed
grid area trim value
1 parent c63fff8 commit 97a650f

File tree

2 files changed

+67
-10
lines changed

2 files changed

+67
-10
lines changed

src/AngleSharp.Css.Tests/Declarations/CssGridProperty.cs

+52-8
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ public void CssGridAreaSingleValueLegal()
528528
}
529529

530530
[Test]
531-
public void CssGridAreaSingleTextValueLegal1()
531+
public void CssGridAreaTextValueLegal1()
532532
{
533533
var source = "#nav-header {grid-area: aaa; }";
534534
var css = ParseStyleSheet(source);
@@ -540,7 +540,7 @@ public void CssGridAreaSingleTextValueLegal1()
540540

541541

542542
[Test]
543-
public void CssGridAreaSingleTextValueLegal2()
543+
public void CssGridAreaTextValueLegal2()
544544
{
545545
var source = "#nav-header {grid-area: aaa / bbb; }";
546546
var css = ParseStyleSheet(source);
@@ -551,7 +551,7 @@ public void CssGridAreaSingleTextValueLegal2()
551551
}
552552

553553
[Test]
554-
public void CssGridAreaSingleTextValueLegal3()
554+
public void CssGridAreaTextValueLegal3()
555555
{
556556
var source = "#nav-header {grid-area: 1 / 2; }";
557557
var css = ParseStyleSheet(source);
@@ -562,7 +562,7 @@ public void CssGridAreaSingleTextValueLegal3()
562562
}
563563

564564
[Test]
565-
public void CssGridAreaSingleTextValueLegal4()
565+
public void CssGridAreaTextValueLegal4()
566566
{
567567
var source = "#nav-header {grid-area: aaa / 2; }";
568568
var css = ParseStyleSheet(source);
@@ -573,7 +573,7 @@ public void CssGridAreaSingleTextValueLegal4()
573573
}
574574

575575
[Test]
576-
public void CssGridAreaSingleTextValueLegal5()
576+
public void CssGridAreaTextValueLegal5()
577577
{
578578
var source = "#nav-header {grid-area: aaa / bbb / ccc; }";
579579
var css = ParseStyleSheet(source);
@@ -584,7 +584,7 @@ public void CssGridAreaSingleTextValueLegal5()
584584
}
585585

586586
[Test]
587-
public void CssGridAreaSingleTextValueLegal6()
587+
public void CssGridAreaTextValueLegal6()
588588
{
589589
var source = "#nav-header {grid-area: aaa / bbb / ccc; }";
590590
var css = ParseStyleSheet(source);
@@ -595,7 +595,7 @@ public void CssGridAreaSingleTextValueLegal6()
595595
}
596596

597597
[Test]
598-
public void CssGridAreaSingleTextValueLegal7()
598+
public void CssGridAreaTextValueLegal7()
599599
{
600600
var source = "#nav-header {grid-area: 1; }";
601601
var css = ParseStyleSheet(source);
@@ -606,7 +606,7 @@ public void CssGridAreaSingleTextValueLegal7()
606606
}
607607

608608
[Test]
609-
public void CssGridAreaSingleTextValueLegal8()
609+
public void CssGridAreaTextValueLegal8()
610610
{
611611
var source = "#nav-header {grid-area: 2 / aaa; }";
612612
var css = ParseStyleSheet(source);
@@ -616,6 +616,50 @@ public void CssGridAreaSingleTextValueLegal8()
616616
Assert.AreEqual(expected, text);
617617
}
618618

619+
[Test]
620+
public void CssGridAreaTextValueIllegal1()
621+
{
622+
var source = "#nav-header {grid-area: 2a / 3%; }";
623+
var css = ParseStyleSheet(source);
624+
var text = css.Rules[0].CssText;
625+
626+
var expected = "#nav-header { }";
627+
Assert.AreEqual(expected, text);
628+
}
629+
630+
[Test]
631+
public void CssGridAreaTextValueIllegal2()
632+
{
633+
var source = "#nav-header {grid-area: 2a; }";
634+
var css = ParseStyleSheet(source);
635+
var text = css.Rules[0].CssText;
636+
637+
var expected = "#nav-header { }";
638+
Assert.AreEqual(expected, text);
639+
}
640+
641+
[Test]
642+
public void CssGridAreaTextValueTrim1()
643+
{
644+
var source = "#nav-header {grid-area: 9999999; }";
645+
var css = ParseStyleSheet(source);
646+
var text = css.Rules[0].CssText;
647+
648+
var expected = "#nav-header { grid-area: 10000 / auto / auto / auto }";
649+
Assert.AreEqual(expected, text);
650+
}
651+
652+
[Test]
653+
public void CssGridAreaTextValueTrim2()
654+
{
655+
var source = "#nav-header {grid-area: 9999999 / 8888888 }";
656+
var css = ParseStyleSheet(source);
657+
var text = css.Rules[0].CssText;
658+
659+
var expected = "#nav-header { grid-area: 10000 / 10000 / auto / auto }";
660+
Assert.AreEqual(expected, text);
661+
}
662+
619663
[Test]
620664
public void CssGridAutoFlowAndRepeatLegal()
621665
{

src/AngleSharp.Css/Declarations/GridAreaDeclaration.cs

+15-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ namespace AngleSharp.Css.Declarations
22
{
33
using AngleSharp.Css.Converters;
44
using AngleSharp.Css.Dom;
5+
using AngleSharp.Css.Parser;
56
using AngleSharp.Css.Values;
67
using AngleSharp.Text;
78
using System;
89
using static ValueConverters;
910

1011
static class GridAreaDeclaration
1112
{
13+
private const int MaximumGridSize = 10000;
14+
1215
public static readonly String Name = PropertyNames.GridArea;
1316

1417
public static readonly String[] Longhands = new[]
@@ -42,7 +45,7 @@ public ICssValue[] Split(ICssValue value)
4245
{
4346
return new[]
4447
{
45-
tuple.Items[0],
48+
GetItem(tuple, 0),
4649
GetItem(tuple, 1),
4750
GetItem(tuple, 2),
4851
GetItem(tuple, 3),
@@ -56,6 +59,13 @@ private static ICssValue GetItem(CssTupleValue tuple, Int32 index)
5659
{
5760
if (tuple.Items.Length > index)
5861
{
62+
if (int.TryParse(tuple.Items[index].CssText, out int value))
63+
{
64+
if (value > MaximumGridSize)
65+
{
66+
return new Constant<Object>(MaximumGridSize.ToString(), null);
67+
}
68+
}
5969
return tuple.Items[index];
6070
}
6171

@@ -64,10 +74,13 @@ private static ICssValue GetItem(CssTupleValue tuple, Int32 index)
6474

6575
private static ICssValue GetItemSimple(CssTupleValue tuple, Int32 index)
6676
{
77+
var val = UnitParser.ParseUnit(new StringSource(tuple.Items[0].CssText));
6778
if (index <= 2)
6879
{
6980
if (tuple.Items.Length <= index)
70-
{if (!int.TryParse(tuple.Items[0].CssText, out int _))
81+
{
82+
83+
if (!int.TryParse(tuple.Items[0].CssText, out int _))
7184
{
7285
return tuple.Items[0];
7386
}

0 commit comments

Comments
 (0)