Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | 4x 59x 59x 59x 59x 10x 49x 17x 17x 23x 17x 7x 42x 4x 38x 3x 35x 4x | /**
* The validator that verify the rules base on user config
*/
const validate = function($, ruleDef = {}) {
// console.log('validate the rule', ruleDef);
const {
selector,
required,
unique,
requiredAttr,
maxQuantity,
} = ruleDef;
const elem = $(selector);
const elemCount = elem.length;
/**
* Check for required tag
*/
if (required && !elemCount) {
return {
msg: ruleDef.failMessage,
data: { tagHtml: ruleDef.tagHtml }
};
}
/**
* Check for required attribute(s) of specific tag
*/
if (requiredAttr) {
let failCount = 0;
elem.each(function() {
if (!$(this).attr(requiredAttr)) failCount++;
});
if (failCount > 0) {
return {
msg: ruleDef.failMessage,
data: {
tagHtml: ruleDef.tagHtml,
quantity: failCount,
requiredAttr: requiredAttr,
}
}
}
}
/**
* Check for the tag that have more than neccessary quantity
*/
if (maxQuantity && elemCount > maxQuantity) {
return {
msg: ruleDef.failMessage,
data: {
tagHtml: ruleDef.tagHtml,
maxQuantity,
}
}
}
/**
* Check for the tag that's supposed to be unique but have more than one
*/
if (unique && elemCount > 1) {
return {
msg: ruleDef.failMessage,
data: {
tagHtml: ruleDef.tagHtml
}
};
}
return false;
}
module.exports = validate; |