author | Brian Grinstead <bgrinstead@mozilla.com> |
Wed, 20 Jul 2016 15:19:07 -0400 | |
changeset 306081 | d8384a5bd4dfd6371e3d0d17fa0a91367a20dc7a |
parent 306080 | f272791a6d75ec9d551f9c73493eaa39021e5827 |
child 306082 | c050984325e379286c1456a261b0cdc92dab89c1 |
push id | 79765 |
push user | cbook@mozilla.com |
push date | Thu, 21 Jul 2016 14:26:34 +0000 |
treeherder | mozilla-inbound@ab54bfc55266 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | gl |
bugs | 1113825 |
milestone | 50.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/devtools/client/shared/widgets/TableWidget.js +++ b/devtools/client/shared/widgets/TableWidget.js @@ -47,35 +47,38 @@ const MAX_VISIBLE_STRING_SIZE = 100; * * @param {nsIDOMNode} node * The container element for the table widget. * @param {object} options * - initialColumns: map of key vs display name for initial columns of * the table. See @setupColumns for more info. * - uniqueId: the column which will be the unique identifier of each * entry in the table. Default: name. + * - wrapTextInElements: Don't ever use 'value' attribute on labels. + * Default: false. * - emptyText: text to display when no entries in the table to display. * - highlightUpdated: true to highlight the changed/added row. * - removableColumns: Whether columns are removeable. If set to false, * the context menu in the headers will not appear. * - firstColumn: key of the first column that should appear. * - cellContextMenuId: ID of a <menupopup> element to be set as a * context menu of every cell. */ function TableWidget(node, options = {}) { EventEmitter.decorate(this); this.document = node.ownerDocument; this.window = this.document.defaultView; this._parent = node; let {initialColumns, emptyText, uniqueId, highlightUpdated, removableColumns, - firstColumn, cellContextMenuId} = options; + firstColumn, wrapTextInElements, cellContextMenuId} = options; this.emptyText = emptyText || ""; this.uniqueId = uniqueId || "name"; + this.wrapTextInElements = wrapTextInElements || false; this.firstColumn = firstColumn || ""; this.highlightUpdated = highlightUpdated || false; this.removableColumns = removableColumns !== false; this.cellContextMenuId = cellContextMenuId; this.tbody = this.document.createElementNS(XUL_NS, "hbox"); this.tbody.className = "table-widget-body theme-body"; this.tbody.setAttribute("flex", "1"); @@ -959,16 +962,17 @@ module.exports.TableWidget = TableWidget * The displayed string on the column's header. */ function Column(table, id, header) { this.tbody = table.tbody; this.document = table.document; this.window = table.window; this.id = id; this.uniqueId = table.uniqueId; + this.wrapTextInElements = table.wrapTextInElements; this.table = table; this.cells = []; this.items = {}; this.highlightUpdated = table.highlightUpdated; // This wrapping element is required solely so that position:sticky works on // the headers of the columns. @@ -1441,16 +1445,17 @@ Column.prototype = { * can be a DOMNode that is appended or a string value. * @param {Cell} nextCell * The cell object which is next to this cell. null if this cell is last * cell of the column */ function Cell(column, item, nextCell) { let document = column.document; + this.wrapTextInElements = column.wrapTextInElements; this.label = document.createElementNS(XUL_NS, "label"); this.label.setAttribute("crop", "end"); this.label.className = "plain table-widget-cell"; if (nextCell) { column.column.insertBefore(this.label, nextCell.label); } else { column.column.appendChild(this.label); @@ -1494,16 +1499,22 @@ Cell.prototype = { set value(value) { this._value = value; if (value == null) { this.label.setAttribute("value", ""); return; } + if (this.wrapTextInElements && !(value instanceof Ci.nsIDOMNode)) { + let span = this.label.ownerDocument.createElementNS(HTML_NS, "span"); + span.textContent = value; + value = span; + } + if (!(value instanceof Ci.nsIDOMNode) && value.length > MAX_VISIBLE_STRING_SIZE) { value = value .substr(0, MAX_VISIBLE_STRING_SIZE) + "\u2026"; } if (value instanceof Ci.nsIDOMNode) { this.label.removeAttribute("value");