aboutsummaryrefslogtreecommitdiff
path: root/node_modules/css-select/lib/attributes.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/css-select/lib/attributes.js')
-rw-r--r--node_modules/css-select/lib/attributes.js171
1 files changed, 171 insertions, 0 deletions
diff --git a/node_modules/css-select/lib/attributes.js b/node_modules/css-select/lib/attributes.js
new file mode 100644
index 0000000..bbe57e2
--- /dev/null
+++ b/node_modules/css-select/lib/attributes.js
@@ -0,0 +1,171 @@
+"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);
+ };
+ },
+};