You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
6.1 KiB
171 lines
6.1 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.attributeRules = void 0; |
|
var boolbase_1 = require("boolbase"); |
|
/** |
|
* All reserved characters in a regex, used for escaping. |
|
* |
|
* Taken from XRegExp, (c) 2007-2020 Steven Levithan under the MIT license |
|
* https://github.com/slevithan/xregexp/blob/95eeebeb8fac8754d54eafe2b4743661ac1cf028/src/xregexp.js#L794 |
|
*/ |
|
var reChars = /[-[\]{}()*+?.,\\^$|#\s]/g; |
|
function escapeRegex(value) { |
|
return value.replace(reChars, "\\$&"); |
|
} |
|
/** |
|
* Attribute selectors |
|
*/ |
|
exports.attributeRules = { |
|
equals: function (next, data, _a) { |
|
var adapter = _a.adapter; |
|
var name = data.name; |
|
var value = data.value; |
|
if (data.ignoreCase) { |
|
value = value.toLowerCase(); |
|
return function (elem) { |
|
var attr = adapter.getAttributeValue(elem, name); |
|
return (attr != null && |
|
attr.length === value.length && |
|
attr.toLowerCase() === value && |
|
next(elem)); |
|
}; |
|
} |
|
return function (elem) { |
|
return adapter.getAttributeValue(elem, name) === value && next(elem); |
|
}; |
|
}, |
|
hyphen: function (next, data, _a) { |
|
var adapter = _a.adapter; |
|
var name = data.name; |
|
var value = data.value; |
|
var len = value.length; |
|
if (data.ignoreCase) { |
|
value = value.toLowerCase(); |
|
return function hyphenIC(elem) { |
|
var attr = adapter.getAttributeValue(elem, name); |
|
return (attr != null && |
|
(attr.length === len || attr.charAt(len) === "-") && |
|
attr.substr(0, len).toLowerCase() === value && |
|
next(elem)); |
|
}; |
|
} |
|
return function hyphen(elem) { |
|
var attr = adapter.getAttributeValue(elem, name); |
|
return (attr != null && |
|
(attr.length === len || attr.charAt(len) === "-") && |
|
attr.substr(0, len) === value && |
|
next(elem)); |
|
}; |
|
}, |
|
element: function (next, _a, _b) { |
|
var name = _a.name, value = _a.value, ignoreCase = _a.ignoreCase; |
|
var adapter = _b.adapter; |
|
if (/\s/.test(value)) { |
|
return boolbase_1.falseFunc; |
|
} |
|
var regex = new RegExp("(?:^|\\s)".concat(escapeRegex(value), "(?:$|\\s)"), ignoreCase ? "i" : ""); |
|
return function element(elem) { |
|
var attr = adapter.getAttributeValue(elem, name); |
|
return (attr != null && |
|
attr.length >= value.length && |
|
regex.test(attr) && |
|
next(elem)); |
|
}; |
|
}, |
|
exists: function (next, _a, _b) { |
|
var name = _a.name; |
|
var adapter = _b.adapter; |
|
return function (elem) { return adapter.hasAttrib(elem, name) && next(elem); }; |
|
}, |
|
start: function (next, data, _a) { |
|
var adapter = _a.adapter; |
|
var name = data.name; |
|
var value = data.value; |
|
var len = value.length; |
|
if (len === 0) { |
|
return boolbase_1.falseFunc; |
|
} |
|
if (data.ignoreCase) { |
|
value = value.toLowerCase(); |
|
return function (elem) { |
|
var attr = adapter.getAttributeValue(elem, name); |
|
return (attr != null && |
|
attr.length >= len && |
|
attr.substr(0, len).toLowerCase() === value && |
|
next(elem)); |
|
}; |
|
} |
|
return function (elem) { |
|
var _a; |
|
return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.startsWith(value)) && |
|
next(elem); |
|
}; |
|
}, |
|
end: function (next, data, _a) { |
|
var adapter = _a.adapter; |
|
var name = data.name; |
|
var value = data.value; |
|
var len = -value.length; |
|
if (len === 0) { |
|
return boolbase_1.falseFunc; |
|
} |
|
if (data.ignoreCase) { |
|
value = value.toLowerCase(); |
|
return function (elem) { |
|
var _a; |
|
return ((_a = adapter |
|
.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.substr(len).toLowerCase()) === value && next(elem); |
|
}; |
|
} |
|
return function (elem) { |
|
var _a; |
|
return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.endsWith(value)) && |
|
next(elem); |
|
}; |
|
}, |
|
any: function (next, data, _a) { |
|
var adapter = _a.adapter; |
|
var name = data.name, value = data.value; |
|
if (value === "") { |
|
return boolbase_1.falseFunc; |
|
} |
|
if (data.ignoreCase) { |
|
var regex_1 = new RegExp(escapeRegex(value), "i"); |
|
return function anyIC(elem) { |
|
var attr = adapter.getAttributeValue(elem, name); |
|
return (attr != null && |
|
attr.length >= value.length && |
|
regex_1.test(attr) && |
|
next(elem)); |
|
}; |
|
} |
|
return function (elem) { |
|
var _a; |
|
return !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.includes(value)) && |
|
next(elem); |
|
}; |
|
}, |
|
not: function (next, data, _a) { |
|
var adapter = _a.adapter; |
|
var name = data.name; |
|
var value = data.value; |
|
if (value === "") { |
|
return function (elem) { |
|
return !!adapter.getAttributeValue(elem, name) && next(elem); |
|
}; |
|
} |
|
else if (data.ignoreCase) { |
|
value = value.toLowerCase(); |
|
return function (elem) { |
|
var attr = adapter.getAttributeValue(elem, name); |
|
return ((attr == null || |
|
attr.length !== value.length || |
|
attr.toLowerCase() !== value) && |
|
next(elem)); |
|
}; |
|
} |
|
return function (elem) { |
|
return adapter.getAttributeValue(elem, name) !== value && next(elem); |
|
}; |
|
}, |
|
};
|
|
|