1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import {
- accessibleText,
- isHumanInterpretable,
- visibleTextNodes,
- isIconLigature,
- sanitize,
- removeUnicode
- } from '../../commons/text';
- /**
- * Check if a given text exists in another
- *
- * @param {String} compare given text to check
- * @param {String} compareWith text against which to be compared
- * @returns {Boolean}
- */
- function isStringContained(compare, compareWith) {
- const curatedCompareWith = curateString(compareWith);
- const curatedCompare = curateString(compare);
- if (!curatedCompareWith || !curatedCompare) {
- return false;
- }
- return curatedCompareWith.includes(curatedCompare);
- }
- /**
- * Curate given text, by removing emoji's, punctuations, unicode and trim whitespace.
- *
- * @param {String} str given text to curate
- * @returns {String}
- */
- function curateString(str) {
- const noUnicodeStr = removeUnicode(str, {
- emoji: true,
- nonBmp: true,
- punctuations: true
- });
- return sanitize(noUnicodeStr);
- }
- function labelContentNameMismatchEvaluate(node, options, virtualNode) {
- const { pixelThreshold, occuranceThreshold } = options || {};
- const accText = accessibleText(node).toLowerCase();
- if (isHumanInterpretable(accText) < 1) {
- return undefined;
- }
- const textVNodes = visibleTextNodes(virtualNode);
- const nonLigatureText = textVNodes
- .filter(
- textVNode =>
- !isIconLigature(textVNode, pixelThreshold, occuranceThreshold)
- )
- .map(textVNode => textVNode.actualNode.nodeValue)
- .join('');
- const visibleText = sanitize(nonLigatureText).toLowerCase();
- if (!visibleText) {
- return true;
- }
- if (isHumanInterpretable(visibleText) < 1) {
- if (isStringContained(visibleText, accText)) {
- return true;
- }
- return undefined;
- }
- return isStringContained(visibleText, accText);
- }
- export default labelContentNameMismatchEvaluate;
|