-
Bug
-
Resolution: Fixed
-
Major
-
8.5.0
-
None
-
Security Level: Jimmy
-
None
-
None
Steps to Reproduce
Run snippet on current FL 8.5.0.FL.20170919
<zk> <div apply="org.zkoss.bind.BindComposer"> <grid span="true" sizedByContent="true" width="500px" height="200px" model="@init(([1, 2, 3, 4, 5].stream().toList()))"> <columns> <column label="test" /> <column label="test" visible="false" align="right" /> <column label="test" align="right" /> </columns> <template name="model"> <row> <cell> <label value="@load(each)" /> </cell> <cell> <label value="@load(each)" /> </cell> <cell> <label value="@load(each)" /> </cell> </row> </template> <foot> <footer label="test"></footer> <footer label="test"></footer> <footer label="test"></footer> </foot> </grid> </div> </zk>
Actual Result
Columns and cells are not displayed correctly.
Hidden cells with align right have a style of:
style="width: 0.1pxtext-align:right;"
instead of style="width: 0.1px;text-align:right;"
which cause them to misinterpret the style
Expected Result
Cells / columns should have a valid style hiding the hidden cells.
Debug Info
tested with following to add the missing semicolon.
However, this cause a different issue as the hidden cells don't shrink to 0.1px altogether
zk.afterLoad('zul.grid', function() { var xRow = {}; zk.override(zul.grid.Row.prototype, xRow ,{ _childAttrs: function(a, b) { var c = b , e = 1; if (this._spans) for (var d = 0, h = this._spans.length; d < h; ++d) { if (d == b) { e = this._spans[d]; break } c += this._spans[d] - 1 } if ((b = this.getGrid()) && (d = b.columns) && c < d.nChildren) { var f = d.getChildAt(c); var g = b._model && this._loaded ? "width: 0.1px;" : ""; var k = f.getHeight(); var l = f.getAlign(); f = f.getValign() } c = this.domStyle_({ visible: 1, width: 1, height: 1 }); (b = zk.isLoaded("zkex.grid") && a.$instanceof(zkex.grid.Detail)) && (d = a.getWidth()) && (c += "width:" + d + ";"); if (g || k || l || f) c += g, k && (c += "height:" + k + ";"), l && (c += "text-align:" + l + ";"), f && (c += "vertical-align:" + f + ";"); a = b ? a.$s("outer") : this.$s("inner"); g = ""; 1 !== e && (g += ' colspan="' + e + '"'); this._nowrap && (g += ' nowrap="nowrap"'); c && (g += ' style="' + c + '"'); return g + ' class="' + a + '"' } });//zk.override });//zk.afterLoad
Root Cause
width style is not closed by semicolon
https://github.com/zkoss/zk/blob/a9d091ed356824be23c86e69261fbf4b7796e183/zul/src/archive/web/js/zul/grid/Row.js#L207
Workaround
- relates to
-
ZK-3722 Grid Row childAttributes calculation ignores colspan and rowspan defined on Cell
- Closed