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
55 lines (45 loc) • 1.43 kB
JavaScript
import standards from '../../standards';
import matchesFn from '../../commons/matches';
/**
* Return the spec for an HTML element from the standards object. Since the spec is determined by the node and what attributes it has, a node is required.
* @param {VirtualNode} vNode The VirtualNode to get the spec for.
* @return {Object} The standard spec object
*/
function getElementSpec(vNode) {
const standard = standards.htmlElms[vNode.props.nodeName];
// invalid element name (could be an svg or custom element name)
if (!standard) {
return {};
}
if (!standard.variant) {
return standard;
}
// start with the information at the top level
const { variant, ...spec } = standard;
// loop through all variants (excluding default) finding anything
// that matches
for (const variantName in variant) {
if (!variant.hasOwnProperty(variantName) || variantName === 'default') {
continue;
}
const { matches, ...props } = variant[variantName];
if (matchesFn(vNode, matches)) {
for (const propName in props) {
if (props.hasOwnProperty(propName)) {
spec[propName] = props[propName];
}
}
}
}
// apply defaults if properties were not found
for (const propName in variant.default) {
if (
variant.default.hasOwnProperty(propName) &&
typeof spec[propName] === 'undefined'
) {
spec[propName] = variant.default[propName];
}
}
return spec;
}
export default getElementSpec;