123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- "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);
- };
- },
- };
|