get-children.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { children } from 'solid-js';
  2. function childrenAsArray(c) {
  3. const cachedChildren = children(() => c);
  4. return Array.isArray(cachedChildren()) ? cachedChildren() : [cachedChildren()];
  5. }
  6. function processChildren(c) {
  7. const slides = [];
  8. childrenAsArray(c).forEach(child => {
  9. if (!child) return;
  10. if (child.className && child.className.indexOf('swiper-slide') >= 0) {
  11. slides.push(child);
  12. } else if (child.children) {
  13. processChildren(child.children).forEach(slide => slides.push(slide));
  14. }
  15. });
  16. return slides;
  17. }
  18. function getChildren(c) {
  19. const slides = [];
  20. const slots = {
  21. 'container-start': [],
  22. 'container-end': [],
  23. 'wrapper-start': [],
  24. 'wrapper-end': []
  25. };
  26. childrenAsArray(c).forEach(child => {
  27. if (!child) return;
  28. if (child.className && child.className.indexOf('swiper-slide') >= 0) {
  29. slides.push(child);
  30. } else if (child.slot && slots[child.slot]) {
  31. slots[child.slot].push(child);
  32. } else if (child.children) {
  33. const foundSlides = processChildren(child.children);
  34. if (foundSlides.length > 0) {
  35. foundSlides.forEach(slide => slides.push(slide));
  36. } else {
  37. slots['container-end'].push(child);
  38. }
  39. } else {
  40. slots['container-end'].push(child);
  41. }
  42. });
  43. return {
  44. slides,
  45. slots
  46. };
  47. }
  48. export { getChildren };