Skip to content

Commit e549e0b

Browse files
committed
Fixed template merging with variables #83
1 parent 5294c40 commit e549e0b

File tree

4 files changed

+48
-11
lines changed

4 files changed

+48
-11
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Released on Thursday, November 4 2021.
55
- Fixed issue with unbalanced grid areas and rows (#82)
66
- Fixed small numbers to be transformed into negative exponentials (#80)
77
- Fixed issue handling exponential unit values (#79)
8+
- Fixed `InvalidCastException` in template merging with CSS variables (#83)
89

910
# 0.16.1
1011

src/AngleSharp.Css.Tests/Parsing/StyleSheet.cs

+30
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,36 @@ @keyframes errorAnimation {
113113
input:invalid {
114114
color: red;
115115
}
116+
";
117+
var parser = new CssParser();
118+
var formatter = new MinifyStyleFormatter();
119+
var ss = await parser.ParseStyleSheetAsync(css);
120+
var newCss = ss.ToCss(formatter);
121+
Assert.IsNotNull(newCss);
122+
}
123+
124+
[Test]
125+
public async Task CastingException_Issue83()
126+
{
127+
var css = @"
128+
.kardex-wrapper {
129+
height: 100vh;
130+
width: 100vw;
131+
display: grid;
132+
grid-template-rows: var(--header-height) 10px 1fr;
133+
grid-template-columns: var(--nav-width) 1fr;
134+
grid-template-areas: ""navheader header"" ""navheader content"" ""nav content"";
135+
}
136+
137+
header {
138+
grid-area: header;
139+
font-family: KardexMOT-Light, sans-serif;
140+
background-color: var(--kx-bg);
141+
color: var(--kx-text-light);
142+
display: grid;
143+
grid-template-rows: var(--header-height);
144+
grid-template-columns: 1fr 1fr 1fr;
145+
}
116146
";
117147
var parser = new CssParser();
118148
var formatter = new MinifyStyleFormatter();

src/AngleSharp.Css/Declarations/GridTemplateDeclaration.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ public ICssValue Merge(ICssValue[] values)
5252
}
5353
else if (cols != null || rows != null || areas != null)
5454
{
55-
return new CssGridTemplateValue(rows, cols, areas);
55+
if (cols is not CssReferenceValue && rows is not CssReferenceValue && areas is not CssReferenceValue)
56+
{
57+
return new CssGridTemplateValue(rows, cols, areas);
58+
}
5659
}
5760

5861
return null;

src/AngleSharp.Css/Values/Composites/CssGridTemplateValue.cs

+13-10
Original file line numberDiff line numberDiff line change
@@ -67,20 +67,23 @@ public String CssText
6767
}
6868
else if (_areas != null)
6969
{
70-
var areas = ((CssTupleValue)_areas).Items;
71-
var rowItems = ((CssTupleValue)_rows).Items;
70+
var areas = (_areas as CssTupleValue)?.Items;
71+
var rowItems = (_rows as CssTupleValue)?.Items;
7272
var newRows = new List<ICssValue>();
7373

74-
for (var i = 0; i < rowItems.Length; i++)
74+
if (rowItems != null && areas != null)
7575
{
76-
var area = areas.Length > i ? areas[i] : null;
77-
var item = rowItems[i] as CssTupleValue;
78-
79-
if (item != null && area != null)
76+
for (var i = 0; i < rowItems.Length; i++)
8077
{
81-
var newItems = new List<ICssValue>(item.Items);
82-
newItems.Insert(1, area);
83-
newRows.Add(new CssTupleValue(newItems.ToArray()));
78+
var area = areas.Length > i ? areas[i] : null;
79+
var item = rowItems[i] as CssTupleValue;
80+
81+
if (item != null && area != null)
82+
{
83+
var newItems = new List<ICssValue>(item.Items);
84+
newItems.Insert(1, area);
85+
newRows.Add(new CssTupleValue(newItems.ToArray()));
86+
}
8487
}
8588
}
8689

0 commit comments

Comments
 (0)