UNPKG

luhn-generator

Version:

A generator of numbers that passes the validation of Luhn algorithm or Luhn formula, also known as the 'modulus 10' or 'mod 10' algorithm

59 lines (50 loc) 1.65 kB
import toGrid from './to-grid'; import getCellPosition from './get-cell-position'; import findUp from '../dom/find-up'; /** * Determine if a `HTMLTableCellElement` is a column header, if so get the scope of the header * @method getScope * @memberof axe.commons.table * @instance * @param {HTMLTableCellElement} cell The table cell to test * @return {Boolean|String} Returns `false` if not a column header, or the scope of the column header element */ function getScope(cell) { var scope = cell.getAttribute('scope'); var role = cell.getAttribute('role'); if ( cell instanceof window.Element === false || ['TD', 'TH'].indexOf(cell.nodeName.toUpperCase()) === -1 ) { throw new TypeError('Expected TD or TH element'); } if (role === 'columnheader') { return 'col'; } else if (role === 'rowheader') { return 'row'; } else if (scope === 'col' || scope === 'row') { return scope; } else if (cell.nodeName.toUpperCase() !== 'TH') { return false; } var tableGrid = toGrid(findUp(cell, 'table')); var pos = getCellPosition(cell, tableGrid); // The element is in a row with all th elements, that makes it a column header var headerRow = tableGrid[pos.y].reduce((headerRow, cell) => { return headerRow && cell.nodeName.toUpperCase() === 'TH'; }, true); if (headerRow) { return 'col'; } // The element is in a column with all th elements, that makes it a row header var headerCol = tableGrid .map(col => col[pos.x]) .reduce((headerCol, cell) => { return headerCol && cell && cell.nodeName.toUpperCase() === 'TH'; }, true); if (headerCol) { return 'row'; } return 'auto'; } export default getScope;