HTML writer: use width on whole table if col widths sum to < 100%.

Otherwise some browsers display the table with the columns
separated far apart.
This commit is contained in:
John MacFarlane 2015-10-30 12:36:36 -07:00
parent 893ba9863c
commit 7843b5759a
2 changed files with 12 additions and 5 deletions

View file

@ -593,8 +593,15 @@ blockToHtml opts (Table capt aligns widths headers rows') = do
return $ H.thead (nl opts >> contents) >> nl opts
body' <- liftM (\x -> H.tbody (nl opts >> mconcat x)) $
zipWithM (tableRowToHtml opts aligns) [1..] rows'
return $ H.table $ nl opts >> captionDoc >> coltags >> head' >>
body' >> nl opts
let tbl = H.table $
nl opts >> captionDoc >> coltags >> head' >> body' >> nl opts
let totalWidth = sum widths
-- When widths of columns are < 100%, we need to set width for the whole
-- table, or some browsers give us skinny columns with lots of space between:
return $ if totalWidth == 0 || totalWidth == 1
then tbl
else tbl ! A.style (toValue $ "width:" ++
show (round (totalWidth * 100) :: Int) ++ "%;")
tableRowToHtml :: WriterOptions
-> [Alignment]

View file

@ -94,7 +94,7 @@
</tbody>
</table>
<p>Multiline table with caption:</p>
<table>
<table style="width:79%;">
<caption>Here's the caption. It may span multiple lines.</caption>
<colgroup>
<col width="15%" />
@ -126,7 +126,7 @@
</tbody>
</table>
<p>Multiline table without caption:</p>
<table>
<table style="width:79%;">
<colgroup>
<col width="15%" />
<col width="13%" />
@ -180,7 +180,7 @@
</tbody>
</table>
<p>Multiline table without column headers:</p>
<table>
<table style="width:79%;">
<colgroup>
<col width="15%" />
<col width="13%" />