old-selector.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. "use strict";
  2. var OldSelector =
  3. /*#__PURE__*/
  4. function () {
  5. function OldSelector(selector, prefix) {
  6. this.prefix = prefix;
  7. this.prefixed = selector.prefixed(this.prefix);
  8. this.regexp = selector.regexp(this.prefix);
  9. this.prefixeds = selector.possible().map(function (x) {
  10. return [selector.prefixed(x), selector.regexp(x)];
  11. });
  12. this.unprefixed = selector.name;
  13. this.nameRegexp = selector.regexp();
  14. }
  15. /**
  16. * Is rule a hack without unprefixed version bottom
  17. */
  18. var _proto = OldSelector.prototype;
  19. _proto.isHack = function isHack(rule) {
  20. var index = rule.parent.index(rule) + 1;
  21. var rules = rule.parent.nodes;
  22. while (index < rules.length) {
  23. var before = rules[index].selector;
  24. if (!before) {
  25. return true;
  26. }
  27. if (before.indexOf(this.unprefixed) !== -1 && before.match(this.nameRegexp)) {
  28. return false;
  29. }
  30. var some = false;
  31. for (var _iterator = this.prefixeds, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
  32. var _ref;
  33. if (_isArray) {
  34. if (_i >= _iterator.length) break;
  35. _ref = _iterator[_i++];
  36. } else {
  37. _i = _iterator.next();
  38. if (_i.done) break;
  39. _ref = _i.value;
  40. }
  41. var _ref2 = _ref,
  42. string = _ref2[0],
  43. regexp = _ref2[1];
  44. if (before.indexOf(string) !== -1 && before.match(regexp)) {
  45. some = true;
  46. break;
  47. }
  48. }
  49. if (!some) {
  50. return true;
  51. }
  52. index += 1;
  53. }
  54. return true;
  55. }
  56. /**
  57. * Does rule contain an unnecessary prefixed selector
  58. */
  59. ;
  60. _proto.check = function check(rule) {
  61. if (rule.selector.indexOf(this.prefixed) === -1) {
  62. return false;
  63. }
  64. if (!rule.selector.match(this.regexp)) {
  65. return false;
  66. }
  67. if (this.isHack(rule)) {
  68. return false;
  69. }
  70. return true;
  71. };
  72. return OldSelector;
  73. }();
  74. module.exports = OldSelector;