import { tokenList } from '../../core/utils'; function tdHeadersAttrEvaluate(node) { const cells = []; const reviewCells = []; const badCells = []; for (let rowIndex = 0; rowIndex < node.rows.length; rowIndex++) { const row = node.rows[rowIndex]; for (let cellIndex = 0; cellIndex < row.cells.length; cellIndex++) { cells.push(row.cells[cellIndex]); } } const ids = cells.reduce((ids, cell) => { if (cell.getAttribute('id')) { ids.push(cell.getAttribute('id')); } return ids; }, []); cells.forEach(cell => { let isSelf = false; let notOfTable = false; if (!cell.hasAttribute('headers')) { return; } const headersAttr = cell.getAttribute('headers').trim(); if (!headersAttr) { return reviewCells.push(cell); } // Get a list all the values of the headers attribute const headers = tokenList(headersAttr); if (headers.length !== 0) { // Check if the cell's id is in this list if (cell.getAttribute('id')) { isSelf = headers.indexOf(cell.getAttribute('id').trim()) !== -1; } // Check if the headers are of cells inside the table notOfTable = headers.some(header => !ids.includes(header)); if (isSelf || notOfTable) { badCells.push(cell); } } }); if (badCells.length > 0) { this.relatedNodes(badCells); return false; } if (reviewCells.length) { this.relatedNodes(reviewCells); return undefined; } return true; } export default tdHeadersAttrEvaluate;