feat(hide-columns): hide empty columns per default

This commit is contained in:
Sarah Vaupel 2019-12-02 11:19:50 +01:00 committed by Gregor Kleen
parent 3fbb4db962
commit d1232ce72d

View File

@ -5,6 +5,8 @@ import './hide-columns.scss';
const HIDE_COLUMNS_CONTAINER_IDENT = 'uw-hide-columns';
const TABLE_HEADER_IDENT = 'uw-hide-column-header';
const ASYNC_TABLE_IDENT = 'uw-async-table';
const TABLE_UTILS_ATTR = 'table-utils';
const TABLE_UTILS_CONTAINER_SELECTOR = `[${TABLE_UTILS_ATTR}]`;
@ -158,6 +160,8 @@ export class HideColumns {
}
updateColumnDisplay(columnIndex, hidden) {
let isColumnWithContent = false;
this._element.getElementsByTagName('tr').forEach(row => {
const cell = row.cells[columnIndex];
if (cell) {
@ -165,9 +169,26 @@ export class HideColumns {
cell.classList.add(CELL_HIDDEN_CLASS);
} else {
cell.classList.remove(CELL_HIDDEN_CLASS);
// determine if this cell has content
if (cell.nodeName === 'TD') {
let cellHasContent = false;
if (this._elementWrapper.hasAttribute(ASYNC_TABLE_IDENT)) {
cell.children.forEach(child => {
cellHasContent = cellHasContent || !isEmptyElement(child);
});
} else {
cellHasContent = !isEmptyElement(cell);
}
isColumnWithContent = isColumnWithContent || cellHasContent;
}
}
}
});
if (!hidden && !isColumnWithContent) {
this.updateColumnDisplay(columnIndex, true);
}
}
updateHider(hider, hidden) {
@ -216,3 +237,12 @@ export class HideColumns {
}
}
function isEmptyElement(element) {
for (let child of element.childNodes) {
if (child.nodeName !== '#comment')
return false;
}
return true;
}