Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix table with rows but no column #31862

Merged
merged 3 commits into from Mar 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
28 changes: 21 additions & 7 deletions components/layout_2020/table/layout.rs
Expand Up @@ -1423,7 +1423,7 @@ impl<'a> TableLayout<'a> {
let mut baselines = Baselines::default();
let mut table_fragments = Vec::new();

if self.table.size.width == 0 || self.table.size.height == 0 {
if self.table.size.width == 0 && self.table.size.height == 0 {
return IndependentLayout {
fragments: table_fragments,
content_block_size: self.final_table_height,
Expand Down Expand Up @@ -1794,29 +1794,43 @@ impl TableAndTrackDimensions {
fn new(table_layout: &TableLayout) -> Self {
let border_spacing = table_layout.table.border_spacing();

// The sizes used for a dimension when that dimension has no table tracks.
let fallback_inline_size = table_layout.assignable_width;
let fallback_block_size = table_layout.final_table_height;

let mut column_dimensions = Vec::new();
let mut column_offset = border_spacing.inline;
let mut column_offset = if table_layout.table.size.width == 0 {
fallback_inline_size
} else {
border_spacing.inline
};
for column_index in 0..table_layout.table.size.width {
let column_size = table_layout.distributed_column_widths[column_index];
column_dimensions.push((column_offset, column_offset + column_size));
column_offset += column_size + border_spacing.inline;
}

let mut row_dimensions = Vec::new();
let mut row_offset = border_spacing.block;
let mut row_offset = if table_layout.table.size.height == 0 {
fallback_block_size
} else {
border_spacing.block
};
for row_index in 0..table_layout.table.size.height {
let row_size = table_layout.row_sizes[row_index];
row_dimensions.push((row_offset, row_offset + row_size));
row_offset += row_size + border_spacing.block;
}

let table_start_corner = LogicalVec2 {
inline: column_dimensions[0].0,
block: row_dimensions[0].0,
inline: column_dimensions.first().map_or_else(Au::zero, |v| v.0),
block: row_dimensions.first().map_or_else(Au::zero, |v| v.0),
};
let table_size = &LogicalVec2 {
inline: column_dimensions[column_dimensions.len() - 1].1,
block: row_dimensions[row_dimensions.len() - 1].1,
inline: column_dimensions
.last()
.map_or(fallback_inline_size, |v| v.1),
block: row_dimensions.last().map_or(fallback_block_size, |v| v.1),
} - &table_start_corner;
let table_cells_rect = LogicalRect {
start_corner: table_start_corner,
Expand Down
@@ -0,0 +1,36 @@
[table-rows-with-zero-columns.html]
[tr 1]
expected: FAIL

[tr 2]
expected: FAIL

[tr 3]
expected: FAIL

[tr 4]
expected: FAIL

[tr 5]
expected: FAIL

[tr 6]
expected: FAIL

[tr 7]
expected: FAIL

[tr 8]
expected: FAIL

[tr 9]
expected: FAIL

[tr 10]
expected: FAIL

[tr 11]
expected: FAIL

[tr 12]
expected: FAIL
7 changes: 7 additions & 0 deletions tests/wpt/meta/MANIFEST.json
Expand Up @@ -545254,6 +545254,13 @@
{}
]
],
"table-rows-with-zero-columns.html": [
"da9e0098a7a1e6657887539448c5e1b2c1f14b5b",
[
null,
{}
]
],
"table-width-redistribution-fixed-padding.html": [
"097ddacfc3139105f0d80689e0c03ac722a00aeb",
[
Expand Down
Expand Up @@ -7,6 +7,3 @@

[.container 13]
expected: FAIL

[.container 3]
expected: FAIL
Expand Up @@ -2,39 +2,9 @@
[table 5]
expected: FAIL

[table 6]
expected: FAIL

[table 7]
expected: FAIL

[table 8]
expected: FAIL

[table 9]
expected: FAIL

[table 10]
expected: FAIL

[table 11]
expected: FAIL

[table 12]
expected: FAIL

[table 13]
expected: FAIL

[table 14]
expected: FAIL

[table 15]
expected: FAIL

[table 16]
expected: FAIL

[table 17]
expected: FAIL

Expand All @@ -53,9 +23,6 @@
[table 22]
expected: FAIL

[table 23]
expected: FAIL

[table 25]
expected: FAIL

Expand Down
@@ -0,0 +1,62 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Test: size of table rows when the table has no columns</title>
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-tables-3/">
<link rel="help" href="https://github.com/w3c/csswg-drafts/issues/10132">
<meta name="assert" content="If a table has rows but no columns, the rows are as wide as the inner width of the table.">

<style>
#tests table {
box-sizing: border-box;
width: 60px;
height: 60px;
}
</style>

<div id="log"></div>

<main id="tests">
<table cellspacing="0">
<tr data-expected-width="60" data-expected-height="60"></tr>
</table>

<table cellspacing="0">
<tr data-expected-width="60" data-expected-height="30"></tr>
<tr data-expected-width="60" data-expected-height="30"></tr>
</table>

<table cellspacing="10">
<tr data-expected-width="60" data-expected-height="40"></tr>
</table>

<table cellspacing="10">
<tr data-expected-width="60" data-expected-height="15"></tr>
<tr data-expected-width="60" data-expected-height="15"></tr>
</table>

<table cellspacing="0" border="5">
<tr data-expected-width="50" data-expected-height="50"></tr>
</table>

<table cellspacing="0" border="5">
<tr data-expected-width="50" data-expected-height="25"></tr>
<tr data-expected-width="50" data-expected-height="25"></tr>
</table>

<table cellspacing="10" border="5">
<tr data-expected-width="50" data-expected-height="30"></tr>
</table>

<table cellspacing="10" border="5">
<tr data-expected-width="50" data-expected-height="10"></tr>
<tr data-expected-width="50" data-expected-height="10"></tr>
</table>
</main>

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<script>
checkLayout("tr");
</script>