class.js 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.toggleClass = exports.removeClass = exports.addClass = exports.hasClass = exports.getClass = void 0;
  4. const rclass = /[\t\r\n\f]/g;
  5. const rnotwhite = /\S+/g;
  6. const fillSpaces = (str) => ` ${str} `;
  7. function getClass(elem) {
  8. return (elem && elem.getAttribute && elem.getAttribute('class')) || '';
  9. }
  10. exports.getClass = getClass;
  11. function hasClass(elem, selector) {
  12. if (elem == null || selector == null) {
  13. return false;
  14. }
  15. const classNames = fillSpaces(getClass(elem));
  16. const className = fillSpaces(selector);
  17. return elem.nodeType === 1
  18. ? classNames.replace(rclass, ' ').includes(className)
  19. : false;
  20. }
  21. exports.hasClass = hasClass;
  22. function addClass(elem, selector) {
  23. if (elem == null || selector == null) {
  24. return;
  25. }
  26. if (typeof selector === 'function') {
  27. return addClass(elem, selector(getClass(elem)));
  28. }
  29. if (typeof selector === 'string' && elem.nodeType === 1) {
  30. const classes = selector.match(rnotwhite) || [];
  31. const oldValue = fillSpaces(getClass(elem)).replace(rclass, ' ');
  32. let newValue = classes.reduce((memo, cls) => {
  33. if (memo.indexOf(fillSpaces(cls)) < 0) {
  34. return `${memo}${cls} `;
  35. }
  36. return memo;
  37. }, oldValue);
  38. newValue = newValue.trim();
  39. if (oldValue !== newValue) {
  40. elem.setAttribute('class', newValue);
  41. }
  42. }
  43. }
  44. exports.addClass = addClass;
  45. function removeClass(elem, selector) {
  46. if (elem == null) {
  47. return;
  48. }
  49. if (typeof selector === 'function') {
  50. return removeClass(elem, selector(getClass(elem)));
  51. }
  52. if ((!selector || typeof selector === 'string') && elem.nodeType === 1) {
  53. const classes = (selector || '').match(rnotwhite) || [];
  54. const oldValue = fillSpaces(getClass(elem)).replace(rclass, ' ');
  55. let newValue = classes.reduce((memo, cls) => {
  56. const className = fillSpaces(cls);
  57. if (memo.indexOf(className) > -1) {
  58. return memo.replace(className, ' ');
  59. }
  60. return memo;
  61. }, oldValue);
  62. newValue = selector ? newValue.trim() : '';
  63. if (oldValue !== newValue) {
  64. elem.setAttribute('class', newValue);
  65. }
  66. }
  67. }
  68. exports.removeClass = removeClass;
  69. function toggleClass(elem, selector, stateVal) {
  70. if (elem == null || selector == null) {
  71. return;
  72. }
  73. if (stateVal != null && typeof selector === 'string') {
  74. stateVal ? addClass(elem, selector) : removeClass(elem, selector);
  75. return;
  76. }
  77. if (typeof selector === 'function') {
  78. return toggleClass(elem, selector(getClass(elem), stateVal), stateVal);
  79. }
  80. if (typeof selector === 'string') {
  81. const metches = selector.match(rnotwhite) || [];
  82. metches.forEach((cls) => {
  83. hasClass(elem, cls) ? removeClass(elem, cls) : addClass(elem, cls);
  84. });
  85. }
  86. }
  87. exports.toggleClass = toggleClass;
  88. //# sourceMappingURL=class.js.map