pseudos.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.verifyPseudoArgs = exports.pseudos = void 0;
  4. // While filters are precompiled, pseudos get called when they are needed
  5. exports.pseudos = {
  6. empty: function (elem, _a) {
  7. var adapter = _a.adapter;
  8. return !adapter.getChildren(elem).some(function (elem) {
  9. // FIXME: `getText` call is potentially expensive.
  10. return adapter.isTag(elem) || adapter.getText(elem) !== "";
  11. });
  12. },
  13. "first-child": function (elem, _a) {
  14. var adapter = _a.adapter, equals = _a.equals;
  15. if (adapter.prevElementSibling) {
  16. return adapter.prevElementSibling(elem) == null;
  17. }
  18. var firstChild = adapter
  19. .getSiblings(elem)
  20. .find(function (elem) { return adapter.isTag(elem); });
  21. return firstChild != null && equals(elem, firstChild);
  22. },
  23. "last-child": function (elem, _a) {
  24. var adapter = _a.adapter, equals = _a.equals;
  25. var siblings = adapter.getSiblings(elem);
  26. for (var i = siblings.length - 1; i >= 0; i--) {
  27. if (equals(elem, siblings[i]))
  28. return true;
  29. if (adapter.isTag(siblings[i]))
  30. break;
  31. }
  32. return false;
  33. },
  34. "first-of-type": function (elem, _a) {
  35. var adapter = _a.adapter, equals = _a.equals;
  36. var siblings = adapter.getSiblings(elem);
  37. var elemName = adapter.getName(elem);
  38. for (var i = 0; i < siblings.length; i++) {
  39. var currentSibling = siblings[i];
  40. if (equals(elem, currentSibling))
  41. return true;
  42. if (adapter.isTag(currentSibling) &&
  43. adapter.getName(currentSibling) === elemName) {
  44. break;
  45. }
  46. }
  47. return false;
  48. },
  49. "last-of-type": function (elem, _a) {
  50. var adapter = _a.adapter, equals = _a.equals;
  51. var siblings = adapter.getSiblings(elem);
  52. var elemName = adapter.getName(elem);
  53. for (var i = siblings.length - 1; i >= 0; i--) {
  54. var currentSibling = siblings[i];
  55. if (equals(elem, currentSibling))
  56. return true;
  57. if (adapter.isTag(currentSibling) &&
  58. adapter.getName(currentSibling) === elemName) {
  59. break;
  60. }
  61. }
  62. return false;
  63. },
  64. "only-of-type": function (elem, _a) {
  65. var adapter = _a.adapter, equals = _a.equals;
  66. var elemName = adapter.getName(elem);
  67. return adapter
  68. .getSiblings(elem)
  69. .every(function (sibling) {
  70. return equals(elem, sibling) ||
  71. !adapter.isTag(sibling) ||
  72. adapter.getName(sibling) !== elemName;
  73. });
  74. },
  75. "only-child": function (elem, _a) {
  76. var adapter = _a.adapter, equals = _a.equals;
  77. return adapter
  78. .getSiblings(elem)
  79. .every(function (sibling) { return equals(elem, sibling) || !adapter.isTag(sibling); });
  80. },
  81. };
  82. function verifyPseudoArgs(func, name, subselect, argIndex) {
  83. if (subselect === null) {
  84. if (func.length > argIndex) {
  85. throw new Error("Pseudo-class :".concat(name, " requires an argument"));
  86. }
  87. }
  88. else if (func.length === argIndex) {
  89. throw new Error("Pseudo-class :".concat(name, " doesn't have any arguments"));
  90. }
  91. }
  92. exports.verifyPseudoArgs = verifyPseudoArgs;
  93. //# sourceMappingURL=pseudos.js.map