Browse code

Refactor and rewrite as contao bundle

Benjamin Roth authored on04/11/2022 22:32:32
Showing1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,77 @@
1
+import { h, ref, onMounted, onUpdated, onBeforeUpdate, computed, onBeforeUnmount } from 'vue';
2
+import { uniqueClasses } from './utils';
3
+var SwiperSlide = {
4
+  name: 'SwiperSlide',
5
+  props: {
6
+    tag: {
7
+      type: String,
8
+      default: 'div'
9
+    },
10
+    swiperRef: Object,
11
+    zoom: {
12
+      type: Boolean,
13
+      default: undefined
14
+    },
15
+    virtualIndex: {
16
+      type: [String, Number],
17
+      default: undefined
18
+    }
19
+  },
20
+  setup: function setup(props, _ref) {
21
+    var slots = _ref.slots;
22
+    var eventAttached = false;
23
+    var swiperRef = props.swiperRef;
24
+    var slideElRef = ref(null);
25
+    var slideClasses = ref('swiper-slide');
26
+
27
+    function updateClasses(swiper, el, classNames) {
28
+      if (el === slideElRef.value) {
29
+        slideClasses.value = classNames;
30
+      }
31
+    }
32
+
33
+    onMounted(function () {
34
+      if (!swiperRef.value) return;
35
+      swiperRef.value.on('_slideClass', updateClasses);
36
+      eventAttached = true;
37
+    });
38
+    onBeforeUpdate(function () {
39
+      if (eventAttached || !swiperRef || !swiperRef.value) return;
40
+      swiperRef.value.on('_slideClass', updateClasses);
41
+      eventAttached = true;
42
+    });
43
+    onUpdated(function () {
44
+      if (!slideElRef.value || !swiperRef || !swiperRef.value) return;
45
+
46
+      if (swiperRef.value.destroyed) {
47
+        if (slideClasses.value !== 'swiper-slide') {
48
+          slideClasses.value = 'swiper-slide';
49
+        }
50
+      }
51
+    });
52
+    onBeforeUnmount(function () {
53
+      if (!swiperRef || !swiperRef.value) return;
54
+      swiperRef.value.off('_slideClass', updateClasses);
55
+    });
56
+    var slideData = computed(function () {
57
+      return {
58
+        isActive: slideClasses.value.indexOf('swiper-slide-active') >= 0 || slideClasses.value.indexOf('swiper-slide-duplicate-active') >= 0,
59
+        isVisible: slideClasses.value.indexOf('swiper-slide-visible') >= 0,
60
+        isDuplicate: slideClasses.value.indexOf('swiper-slide-duplicate') >= 0,
61
+        isPrev: slideClasses.value.indexOf('swiper-slide-prev') >= 0 || slideClasses.value.indexOf('swiper-slide-duplicate-prev') >= 0,
62
+        isNext: slideClasses.value.indexOf('swiper-slide-next') >= 0 || slideClasses.value.indexOf('swiper-slide-duplicate-next') >= 0
63
+      };
64
+    });
65
+    return function () {
66
+      return h(props.tag, {
67
+        class: uniqueClasses("" + slideClasses.value),
68
+        ref: slideElRef,
69
+        'data-swiper-slide-index': props.virtualIndex
70
+      }, props.zoom ? h('div', {
71
+        class: 'swiper-zoom-container',
72
+        'data-swiper-zoom': typeof props.zoom === 'number' ? props.zoom : undefined
73
+      }, slots.default && slots.default(slideData.value)) : slots.default && slots.default(slideData.value));
74
+    };
75
+  }
76
+};
77
+export { SwiperSlide };
0 78
\ No newline at end of file