PageSourceSearch

https://gsinapsis.com/wp-content/plugins/dethemekit-for-elementor/…/de_reveal_animation.preview.js?ver=7.1.2

js gsinapsis.com collected 2026-09-24 13:25:49 UTC 52,958 bytes, 1,523 lines download raw bytes

1var observersDefault = []
2var observersCurtain = []
3var observersLetter = []
4var letterAnim
5var originalLetters
6var animObject
7
8function getDefaultPreviewAnimObj($target = '', $animation_style = 'fu', $distance = '200', $rotation = '0', $scale = '1', $duration = '2000', $direction = 'normal', $loop = '1', $easing = 'linear', is_stagger = false, $delay = '0', stagger_delay = '500', elTarget = null) {
9  switch ($animation_style) {
10    case 'fu':
11      var animObj = {
12        targets: $target,
13        duration: $duration,
14        delay: $delay,
15        opacity: [0,1],
16        translateY: [$distance,0],
17        easing: $easing,
18        loop: $loop,
19        direction: $direction,
20      }
21      break;
22    case 'fd':
23      var animObj = {
24        targets: $target,
25        duration: $duration,
26        delay: $delay,
27        opacity: [0,1],
28        translateY: [-$distance,0],
29        easing: $easing,
30        loop: $loop,
31        direction: $direction,
32      }
33    break;
34    case 'fl':
35      var animObj = {
36        targets: $target,
37        duration: $duration,
38        delay: $delay,
39        opacity: [0,1],
40        translateX: [$distance,0],
41        easing: $easing,
42        loop: $loop,
43        direction: $direction,
44      }
45      break;
46    case 'fr':
47      var animObj = {
48        targets: $target,
49        duration: $duration,
50        delay: $delay,
51        opacity: [0,1],
52        translateX: [-$distance,0],
53        easing: $easing,
54        loop: $loop,
55        direction: $direction,
56      }
57      break;
58    case 'rotate':
59      var animObj = {
60        targets: $target,
61        duration: $duration,
62        delay: $delay,
63        opacity: [0,1],
64        rotate: [-$rotation,0],
65        easing: $easing,
66        loop: $loop,
67        direction: $direction,
68      }
69      break;
70    case 'scale':
71      var animObj = {
72        targets: $target,
73        duration: $duration,
74        delay: $delay,
75        opacity: [0,1],
76        scale: [1/$scale,1],
77        easing: $easing,
78        loop: $loop,
79        direction: $direction,
80      }
81      break;  
82    default:
83      var animObj = {
84        targets: $target,
85        duration: $duration,
86        delay: $delay,
87        opacity: [0,1],
88        translateY: [$distance,0],
89        easing: $easing,
90        loop: $loop,
91        direction: $direction,
92      }    
93      break;
94  }
95
96  if (is_stagger) {
97    animObj.delay = anime.stagger(stagger_delay)    
98  }
99
100  if (elTarget) {
101    animObj.begin = function(anim) {
102      if ( anim.began ) {
103        // elTarget.setAttribute("style", "")
104        elTarget.setAttribute("data-de-reveal-animated", true)
105      }
106    }
107    
108    animObj.complete = function(anim) {
109      if ( anim.completed ) {
110        elTarget.setAttribute("data-de-reveal-animated", false)
111      }
112    }
113    
114    animObj.change = function() {
115      // elTarget.style.backgroundColor = '#00FF00'
116      // elTarget.style.opacity = 0
117    }
118  }
119
120  return animObj
121}
122
123function observerCallbackDefault(entries, observer) {  
124  entries.forEach(function (entry) {
125    var element = entry.target;
126    var animating = false
127    if ( element.hasAttribute("data-de-reveal-animated") ) {
128      if ( element.getAttribute("data-de-reveal-animated") === "true" ) {
129        animating = true 
130      }
131    }
132
133    var infinite = element.hasAttribute("data-anim-infinite") ? true : false;
134
135    var animation_style = element.getAttribute("data-de-reveal-animation-style")
136    var distance = element.getAttribute("data-de-reveal-distance")
137    var rotation = element.getAttribute("data-de-reveal-default-rotation")
138    var scale = element.getAttribute("data-de-reveal-default-scale")
139    var duration = element.getAttribute("data-de-reveal-duration")
140    var direction = element.getAttribute("data-de-reveal-direction")
141    var easing = element.getAttribute("data-de-reveal-easing")
142    // var loop = element.getAttribute("data-de-reveal-animation-loop")
143    var loop = element.hasAttribute("data-de-reveal-animation-loop-infinite") ? true : element.getAttribute("data-de-reveal-animation-loop")
144
145    var id = element.getAttribute("data-id")
146    var is_section = element.hasAttribute("data-de-reveal-section") ? true : false;
147    var is_stagger = element.hasAttribute("data-de-reveal-stagger") ? true : false;
148    var run_animation = element.hasAttribute("data-de-reveal-run-animation") ? true : false;
149    
150    var delay = element.getAttribute("data-de-reveal-default-delay")
151    var stagger_delay = element.getAttribute("de-reveal-stagger-child-delay")
152
153    // if (id === '137f2861') {
154    //   console.log('isIntersecting: ' + entry.isIntersecting)
155    // }
156
157    if (entry.isIntersecting) {
158      var targets
159
160      if (is_stagger) {
161        targets = ".de_reveal_animation_yes.elementor-element-" + id + " > .elementor-container > .elementor-column"
162      } else {
163        if (is_section) {
164          targets = ".de_reveal_animation_yes.elementor-section.elementor-element-" + id
165        } else {
166          targets = ".de_reveal_animation_yes.elementor-element-" + id
167        }
168      }
169
170      if ( !animating ) {
171        if (run_animation) {
172          var animObj = getDefaultPreviewAnimObj(targets,animation_style,distance,rotation,scale,duration,direction,loop,easing,is_stagger,delay,stagger_delay, element)
173          anime(animObj)
174        } else {
175          element.style.opacity = 1
176        }
177      }
178
179      if (element.classList.contains('de_reveal_animate_in_viewport_runonce') && observer.root === null) {
180        observer.unobserve(element)
181      }
182
183    } else {
184      element.style.opacity = 0
185      if (infinite) {
186
187      }
188    }
189  })
190}
191
192function observerCallbackCurtain(entries, observer) {
193  entries.forEach(function (entry) {
194    var element = entry.target;
195
196    // To be implemented later:
197    var infinite = element.hasAttribute("data-anim-infinite") ? true : false;
198    
199    
200    var duration = element.getAttribute("data-de-reveal-duration")
201    var curtain_direction = element.getAttribute("data-de-reveal-curtain-direction")
202    var easing = element.getAttribute("data-de-reveal-easing")
203    var curtain_delay = element.getAttribute("data-de-reveal-curtain-delay")    
204    var run_animation = element.hasAttribute("data-de-reveal-run-animation") ? true : false;
205
206    if (entry.isIntersecting) {
207      if (run_animation) {
208
209        var revealer = new RevealFx(element);
210  
211        revealer.reveal({
212          duration: duration,
213          direction: curtain_direction,
214          easing: easing,
215          delay: curtain_delay,
216          onStart: function(contentEl, revealerEl) { 
217            if (contentEl) { contentEl.style.opacity = 0 }
218          },
219          onCover: function(contentEl, revealerEl) { 
220            if (contentEl) { 
221              contentEl.style.opacity = 1
222              
223              const nodelist = contentEl.querySelectorAll(".elementor-element");
224
225              for (let i = 0; i < nodelist.length; i++) {
226                nodelist[i].style.opacity = 1;
227              }
228            }
229          },
230          onComplete: function(contentEl, revealerEl) { 
231            if (contentEl) { 
232              contentEl.style.opacity = 1 
233              
234              const nodelist = contentEl.querySelectorAll(".elementor-element");
235
236              for (let i = 0; i < nodelist.length; i++) {
237                nodelist[i].style.opacity = 1;
238              }            
239            } 
240          },
241        });  
242      } else {
243        var wcontainer = element.querySelector(".elementor-widget-container")
244
245        if (wcontainer) {
246          wcontainer.style.opacity = 1
247        }
248      }
249
250      if (element.classList.contains('de_reveal_animate_in_viewport_runonce') && observer.root === null) {
251        observer.unobserve(element)
252      }
253    } else {
254        if (infinite) {
255
256        }
257    }
258  })
259}
260
261function observerCallbackLetter(entries, observer) {
262  entries.forEach(function (entry) {
263    var element = entry.target
264
265    // To be implemented later:
266    var infinite = element.hasAttribute("data-anim-infinite") ? true : false;
267    var run_animation = element.hasAttribute("data-de-reveal-run-animation") ? true : false;
268
269    if (entry.isIntersecting) {
270      if (run_animation) {
271        var animated = element.querySelectorAll(".elementor-widget-container > *:not(style)");
272  
273        Array.prototype.forEach.call(animated, function(el, i){
274          doLetterEffect(element,el)
275        })
276      }
277
278      if (element.classList.contains('de_reveal_animate_in_viewport_runonce') && observer.root === null) {
279        observer.unobserve(element)
280      }
281    } else {
282        if (infinite) {
283
284        }
285    }
286  })
287}
288
289function doLetterEffect(element,text_element) {  
290  var effect = element.getAttribute("data-dereveal-letter-effects")
291  var initial_state = element.getAttribute("data-dereveal-letter-initial-state")
292  
293  var hasLetterEffect = text_element.classList.contains('letter-effect')
294  var tempInnerText = text_element.innerHTML
295
296  if ( !hasLetterEffect ) {        
297    var letterAnim = new TextFx(text_element)
298
299    if ( initial_state==='hidden' ) {
300      letterAnim.hide()
301    } else {
302      letterAnim.show()  
303    }
304
305    letterAnim.show(effect, function(){
306      if (!element.classList.contains('de_reveal_letter_animated')) {
307        element.classList.add('de_reveal_letter_animated')
308      }
309
310      
311      if (tempInnerText !== '') {
312        text_element.innerHTML = tempInnerText
313      }
314      text_element.classList.remove('letter-effect')
315    })
316  }
317}
318
319function deFindUpTemplateElement(el) {
320  while (el.parentElement) {
321      el = el.parentElement;
322      if ( el.hasAttribute('data-elementor-type') ) {
323        if ( el.getAttribute('data-elementor-type') !== "wp-page" )
324          return el;
325      }
326  }
327  return null;
328}
329
330function deFindUpParentElementByClass(el,classname) {
331  while (el.parentElement) {
332      el = el.parentElement;
333      if ( el.classList.contains(classname) ) {
334        return el;
335      }
336  }
337  return null;
338}
339
340function deClassToSelector(classes) {
341  result = classes.replace(' ','.')
342  result = '.' + result
343  return result 
344}
345
346class DeRevealAnimationHandlerClass extends elementorModules.frontend.handlers.Base {
347    getDefaultSettings() {
348        return {
349            selectors: {
350                wrapper: '.de_reveal_animation_yes',
351                widget_container: '.elementor-widget-container',
352            },
353        };
354    }
355
356    getDefaultElements() {
357        const selectors = this.getSettings( 'selectors' );
358        return {
359            $wrapper: this.$element.find( selectors.wrapper ),
360            $widget_container: this.$element.find( selectors.widget_container ),
361        };
362    }
363
364    do_frontend_reveal_default() {
365      if (!this.$element.hasClass('de_reveal_animation_yes')) {
366        return
367      }
368
369      if (!this.$element.hasClass('de_reveal_animation_type_default')) {
370        return
371      }
372
373      var observerOptions = {
374        root: null,
375        rootMargin: '0px',
376        threshold: 1
377      }
378
379      var ele = this.$element.get()
380      
381      var element = ele[0]
382      var classes = element.getAttribute("class")
383      var arr_classes = classes.split(' ')
384      var de_reveal_start = 0
385
386      var de_reveal_distance = 0
387      element.setAttribute("data-de-reveal-distance", de_reveal_distance)
388
389      var de_reveal_rotation = 0
390      element.setAttribute("data-de-reveal-default-rotation", de_reveal_rotation)
391
392      var de_reveal_scale = 0
393      element.setAttribute("data-de-reveal-default-scale", de_reveal_scale)
394
395      var de_reveal_default_delay = 0
396      element.setAttribute("data-de-reveal-default-delay", de_reveal_default_delay)
397
398      var de_reveal_duration = 0
399      element.setAttribute("data-de-reveal-duration", de_reveal_duration)
400
401      Array.prototype.forEach.call(arr_classes, function(item, num){
402        if ( item.search('de_reveal_start_') === 0 ) {
403          de_reveal_start = item.replace('de_reveal_start_','')
404        }
405
406        if ( item.search('de_reveal_animation_style_') === 0 ) {
407          var de_reveal_animation_style = item.replace('de_reveal_animation_style_','')
408
409          element.setAttribute("data-de-reveal-animation-style", de_reveal_animation_style)
410        }
411
412        if ( item.search('de_reveal_distance_') === 0 ) {
413          de_reveal_distance = item.replace('de_reveal_distance_','')
414          element.setAttribute("data-de-reveal-distance", de_reveal_distance)
415        }
416
417        if ( item.search('de_reveal_default_rotation_') === 0 ) {
418          de_reveal_rotation = item.replace('de_reveal_default_rotation_','')
419          element.setAttribute("data-de-reveal-default-rotation", de_reveal_rotation)
420        }
421
422        if ( item.search('de_reveal_default_scale_') === 0 ) {
423          de_reveal_scale = item.replace('de_reveal_default_scale_','')
424          element.setAttribute("data-de-reveal-default-scale", de_reveal_scale)
425        }
426
427        if ( item.search('de_reveal_default_delay_') === 0 ) {
428          de_reveal_default_delay = item.replace('de_reveal_default_delay_','')
429          element.setAttribute("data-de-reveal-default-delay", de_reveal_default_delay)
430        }
431
432        if ( item.search('de_reveal_duration_') === 0 ) {
433          de_reveal_duration = item.replace('de_reveal_duration_','')
434          element.setAttribute("data-de-reveal-duration", de_reveal_duration)
435        }
436
437        if ( item.search('de_reveal_direction_') === 0 ) {
438          var de_reveal_direction = item.replace('de_reveal_direction_','')
439          element.setAttribute("data-de-reveal-direction", de_reveal_direction)
440        }
441
442        if ( item.search('de_reveal_easing_') === 0 ) {
443          var de_reveal_easing = item.replace('de_reveal_easing_','')
444          element.setAttribute("data-de-reveal-easing", de_reveal_easing)
445        }
446
447        var $loop_type = 'custom'
448        var $loop 
449        if ( item.search('de_reveal_loop_') === 0 ) {
450          $loop_type = item.replace('de_reveal_loop_','')
451
452          if ( $loop_type === 'infinite' ) {
453            $loop = true
454            element.setAttribute("data-de-reveal-animation-loop-infinite", true)
455          }
456        }
457
458        if (( item.search('de_reveal_custom_loop_') === 0 ) && ($loop_type === 'custom')) {
459          $loop = item.replace('de_reveal_custom_loop_','')
460          element.setAttribute("data-de-reveal-animation-loop", $loop)
461        }
462
463        if ( item.search('de_reveal_stagger_yes') === 0 ) {
464          element.setAttribute("data-de-reveal-stagger", "true")
465        }
466
467        if ( item.search('elementor-section') === 0 ) {
468          element.setAttribute("data-de-reveal-section", "true")
469        }
470
471        if ( item.search('de_reveal_run_animation') === 0 ) {
472          element.setAttribute("data-de-reveal-run-animation", "true")
473        }
474
475        if ( item.search('de_reveal_stagger_child_delay_') === 0 ) {
476          var stagger_delay = item.replace('de_reveal_stagger_child_delay_','')
477
478          element.setAttribute("de-reveal-stagger-child-delay", stagger_delay)
479        }
480      })
481
482      var threshold = de_reveal_start;
483
484      if(threshold) {           
485          var num = parseFloat(threshold);
486          observerOptions.threshold = num;
487      } else {
488          observerOptions.threshold = 0;
489      }
490
491      var doObserve = true
492      // Ambil Template dimana widget ini diletakkan
493      var templateEl = deFindUpTemplateElement(element)
494
495      // Kalo memang diletakkan di template, set oberver root
496      if ( templateEl ) {            
497        if ( templateEl.parentElement.classList.contains('dethemekit-carousel-template') ) {
498          doObserve = false
499        } else {
500          observerOptions.root = templateEl.parentElement
501        }
502      }
503
504      if (doObserve) {
505        var id = element.getAttribute('data-id')
506        // initialize intersection observer
507        if (!observersDefault[id]) {
508          observersDefault[id] = new IntersectionObserver(observerCallbackDefault, observerOptions)
509          observersDefault[id].observe(element)
510        }
511      }
512    }
513
514    do_frontend_reveal_curtain() {
515      if (!this.$element.hasClass('de_reveal_animation_yes')) {
516        return
517      }
518
519      if (!this.$element.hasClass('de_reveal_animation_type_blockcurtain')) {
520        return
521      }
522
523      var observerOptions = {
524        root: null,
525        rootMargin: '0px',
526        threshold: 1
527      }
528
529      var ele = this.$element.get()
530      
531      var element = ele[0]
532
533      // Get threshold settings from class de_reveal_start_
534      var classes = element.getAttribute("class")
535      var arr_classes = classes.split(' ')
536      var de_reveal_start = 0
537      Array.prototype.forEach.call(arr_classes, function(item, num){
538        if ( item.search('de_reveal_start_') === 0 ) {
539          de_reveal_start = item.replace('de_reveal_start_','')
540        }
541
542        if ( item.search('de_reveal_curtain_direction_') === 0 ) {
543          var de_reveal_curtain_direction = item.replace('de_reveal_curtain_direction_','')
544
545          element.setAttribute("data-de-reveal-curtain-direction", de_reveal_curtain_direction)
546        }
547
548        if ( item.search('de_reveal_curtain_delay_') === 0 ) {
549          var de_reveal_curtain_delay = item.replace('de_reveal_curtain_delay_','')
550
551          element.setAttribute("data-de-reveal-curtain-delay", de_reveal_curtain_delay)
552        }
553
554        if ( item.search('de_reveal_easing_') === 0 ) {
555          var de_reveal_easing = item.replace('de_reveal_easing_','')
556
557          element.setAttribute("data-de-reveal-easing", de_reveal_easing)
558        }
559
560        if ( item.search('de_reveal_duration_') === 0 ) {
561          var de_reveal_duration = item.replace('de_reveal_duration_','')
562
563          element.setAttribute("data-de-reveal-duration", de_reveal_duration)
564        }
565
566      })
567      var threshold = de_reveal_start;
568
569      if(threshold) {           
570          var num = parseFloat(threshold);
571          observerOptions.threshold = num;
572      } else {
573          observerOptions.threshold = 0;
574      }
575
576      var doObserve = true
577      // Ambil Template dimana widget ini diletakkan
578      var templateEl = deFindUpTemplateElement(element)
579
580      // Kalo memang diletakkan di template, set oberver root
581      if ( templateEl ) {            
582        if ( templateEl.parentElement.classList.contains('dethemekit-carousel-template') ) {
583          doObserve = false
584        } else {
585          observerOptions.root = templateEl.parentElement
586        }
587      }
588
589      // Kalo memang diletakkan di template, set oberver root
590      // if ( templateEl ) {            
591      //   if ( templateEl.parentElement.classList.contains('slick-slide') ) {
592      //     var carouselId = templateEl.parentElement.parentElement.parentElement.parentElement.getAttribute('id')
593      //     observerOptions.root = document.querySelector('#' + carouselId + '.slick-slide.slick-current.slick-active')              
594      //   } else {
595      //     observerOptions.root = templateEl.parentElement
596      //   }
597      // }
598
599      if (doObserve) {
600        var id = element.getAttribute('data-id')
601        // initialize intersection observer
602        if (!observersDefault[id]) {
603          // initialize intersection observer
604          observersCurtain[id] = new IntersectionObserver(observerCallbackCurtain, observerOptions);
605    
606          // observe wrapper element
607          observersCurtain[id].observe(element);        
608        }
609      }
610    }
611
612    do_frontend_reveal_letter() {
613      if (!this.$element.hasClass('de_reveal_animation_yes')) {
614        return
615      }
616
617      if (!this.$element.hasClass('de_reveal_animation_type_letter')) {
618        return
619      }
620
621      var observerOptions = {
622        root: null,
623        rootMargin: '0px',
624        thresholds: [0.5],
625      }
626
627      var ele = this.$element.get()
628      
629      var element = ele[0]
630  
631      // Get threshold settings from class de_reveal_start_
632      var classes = element.getAttribute("class")
633      var arr_classes = classes.split(' ')
634      var de_reveal_start = 0
635
636      Array.prototype.forEach.call(arr_classes, function(item, num){
637        if ( item.search('de_reveal_start_') === 0 ) {
638          de_reveal_start = item.replace('de_reveal_start_','')
639        }
640
641        if ( item.search('de_reveal_letter_effects_') === 0 ) {
642          var de_reveal_letter_effects = item.replace('de_reveal_letter_effects_','')
643
644          element.setAttribute("data-dereveal-letter-effects", de_reveal_letter_effects)
645        }
646
647        if ( item.search('de_reveal_letter_initial_state_') === 0 ) {
648          var initial_state = item.replace('de_reveal_letter_initial_state_','')
649
650          element.setAttribute("data-dereveal-letter-initial-state", initial_state)
651        }
652      })
653      var threshold = de_reveal_start;
654
655      if(threshold) {           
656          var num = parseFloat(threshold);
657          observerOptions.threshold = num;
658      } else {
659          observerOptions.threshold = 0;
660      }
661
662      var doObserve = true
663
664      // Ambil Template dimana widget ini diletakkan
665      var templateEl = deFindUpTemplateElement(element)
666
667      // Kalo memang diletakkan di template, set oberver root
668      if ( templateEl ) {            
669        if ( templateEl.parentElement.classList.contains('dethemekit-carousel-template') ) {
670          doObserve = true
671          // var carouselId = templateEl.parentElement.parentElement.parentElement.parentElement.getAttribute('id')
672          // observerOptions.root = document.querySelector('#' + carouselId + '.slick-slide.slick-current.slick-active')
673          
674          // observerOptions.root = document.querySelector('.slick-slide.slick-current.slick-active')
675          // observerOptions.root =  templateEl.parentElement.parentElement.parentElement.parentElement.querySelector('.slick-slide.slick-current.slick-active')
676        } else {
677          observerOptions.root = templateEl.parentElement
678        }
679      }
680
681      if (doObserve) {
682        var id = element.getAttribute('data-id')
683        // initialize intersection observer
684        if (!observersDefault[id]) {
685          // initialize intersection observer
686          observersLetter[id] = new IntersectionObserver(observerCallbackLetter, observerOptions);
687  
688          // observe wrapper element
689          observersLetter[id].observe(element);
690        }
691      }
692
693    }
694
695    do_frontend_reveal() {
696      this.do_frontend_reveal_default()
697      this.do_frontend_reveal_curtain()
698      this.do_frontend_reveal_letter()
699    }
700
701    do_carousel_trigger() {
702      // jQuery('.dethemekit-carousel-wrapper').on("init", function (event, slick) {
703      //   console.log('init')
704      // })
705      // jQuery('.dethemekit-carousel-wrapper').on("beforeChange", function (event, slick, currentSlide, nextSlide) {
706      //   console.log('beforeChange')
707      // })
708      // jQuery('.dethemekit-carousel-wrapper').on("afterChange", function (event, slick, currentSlide) {
709      //   console.log('afterChange')
710      // })
711      // jQuery('.dethemekit-carousel-wrapper').on("reInit", function (event, slick) {
712      //   console.log('reInit')
713      // })
714
715      // ON SET POSITION REVEAL DEFAULT
716      jQuery('.dethemekit-carousel-wrapper').on("setPosition", function (event, slick) {
717        if (slick.$slider.hasClass('slick-loading')) return
718
719        var elements = slick.$slides[slick.currentSlide].querySelectorAll('.de_reveal_animation_yes.de_reveal_animation_type_default')
720
721        Array.prototype.forEach.call(elements, function (element, index) {
722          do_reveal_default_animation(element)
723        }) //Array.prototype.forEach.call(elements, function (element, index)
724
725      })
726
727      // ON SET POSITION REVEAL CURTAIN
728      jQuery('.dethemekit-carousel-wrapper').on("setPosition", function (event, slick) {
729        if (slick.$slider.hasClass('slick-loading')) return
730
731        var elements = slick.$slides[slick.currentSlide].querySelectorAll('.de_reveal_animation_yes.de_reveal_animation_type_blockcurtain')
732
733        Array.prototype.forEach.call(elements, function (element, index) {
734          do_reveal_curtain_animation(element)
735        }) //Array.prototype.forEach.call(elements, function (element, index)
736      })
737
738      // ON SET POSITION REVEAL LETTER
739      jQuery('.dethemekit-carousel-wrapper').on("setPosition", function (event, slick) {
740        if (slick.$slider.hasClass('slick-loading')) return
741
742        var elements = slick.$slides[slick.currentSlide].querySelectorAll('.de_reveal_animation_yes.de_reveal_animation_type_letter')
743        // console.log(elements.length)
744        Array.prototype.forEach.call(elements, function (element, index) {
745          // console.log('setPosition Letter')
746          // console.log('index : ' + index)
747          // console.log(element)
748          // do_reveal_letter_animation(element)
749        }) //Array.prototype.forEach.call(elements, function (element, index)
750      })
751
752      jQuery('.dethemekit-carousel-wrapper').on("beforeChange", function (event, slick, currentSlide) {
753        var elements = slick.$slides[currentSlide].querySelectorAll('.de_reveal_animation_yes.de_reveal_animation_type_default')
754
755        Array.prototype.forEach.call(elements, function (element, index) {
756          if (!element) {
757            return
758          }
759          
760          element.style.opacity = 0
761        })
762      })
763
764    }
765
766    onInit() {
767      var editMode = document.querySelector('.elementor-editor-active')
768
769      // Is in elementor editor
770      if (editMode) {
771        var animObject
772  
773        var observer = new MutationObserver(function(mutations) {
774          mutations.forEach(function(mutation) {
775            if (mutation.attributeName === "class") {
776              var attributeValue = $(mutation.target).prop(mutation.attributeName);
777              
778              var $arr_classes = attributeValue.split(' ')
779
780              var do_animation = false, de_reveal_animation_yes = false, run_animation = false, $animation_type = 'default', $id, $duration = '2000', $curtain_color = '#000000', $curtain_direction = 'lr', $direction = '
780normal', $easing = 'linear', $animation_style = 'fu', $loop_type = 'custom', $loop = '1', is_stagger = false, is_section = false, $letter_effect = 'fx1', letterAnim, initial_state = 'hidden'
781        
782              jQuery.each($arr_classes, (index, value) => {
783                if ( value.search('de_reveal_animation_yes') === 0 ) {
784                  de_reveal_animation_yes = true;
785                }
786
787                if ( value.search('de_reveal_run_animation') === 0 ) {
788                  run_animation = true;
789                }
790
791                if ( value.search('de_reveal_animation_type_') === 0 ) {
792                  $animation_type = value.replace('de_reveal_animation_type_','')
793                }          
794
795                if ( value.search('elementor-section') === 0 ) {
796                  is_section = true;
797                }
798
799                if ( value.length === 25 && value.search('elementor-element-') === 0 ) {
800                  $id = value.replace('elementor-element-','')
801                }
802          
803                if ( value.search('de_reveal_curtain_direction_') === 0 ) {
804                  $curtain_direction = value.replace('de_reveal_curtain_direction_','')
805                }
806
807                if ( value.search('de_reveal_letter_effects_') === 0 ) {
808                  $letter_effect = value.replace('de_reveal_letter_effects_','')
809                }
810
811                if ( value.search('de_reveal_letter_initial_state_') === 0 ) {
812                  initial_state = value.replace('de_reveal_letter_initial_state_','')
813                }
814
815                if ( value.search('de_reveal_duration_') === 0 ) {
816                  $duration = value.replace('de_reveal_duration_','')
817                }
818        
819                if ( value.search('de_reveal_direction_') === 0 ) {
820                  $direction = value.replace('de_reveal_direction_','')
821                }
822        
823                if ( value.search('de_reveal_easing_') === 0 ) {
824                  $easing = value.replace('de_reveal_easing_','')
825                }
826
827                if ( value.search('de_reveal_loop_') === 0 ) {
828                  $loop_type = value.replace('de_reveal_loop_','')
829
830                  if ( $loop_type === 'infinite' ) {
831                    $loop = true
832                  }
833                }
834
835                if (( value.search('de_reveal_custom_loop_') === 0 ) && ($loop_type === 'custom')) {
836                  $loop = value.replace('de_reveal_custom_loop_','')
837                }
838
839                if ( value.search('de_reveal_animation_style_') === 0 ) {
840                  $animation_style = value.replace('de_reveal_animation_style_','')
841                }
842
843                if ( value.search('de_reveal_stagger_yes') === 0 ) {
844                  is_stagger = true;
845                }
846
847              })
848
849              var elementSelector
850              var $target = ''
851
852              if (de_reveal_animation_yes && run_animation) {
853                do_animation = true
854              }
855
856              if (do_animation) {
857                if (is_stagger) {
858                  $target = ".de_reveal_animation_yes.elementor-element-" + $id + " > .elementor-container > .elementor-column"                        
859                } else {
860                  if (is_section) {
861                    $target = ".de_reveal_animation_yes.elementor-section.elementor-element-" + $id
862                  } else {
863                    switch ($animation_type) {
864                      case 'letter':
865                        $target = ".de_reveal_animation_yes.elementor-element-" + $id + " > .elementor-widget-container > *" 
866                        break;
867                      case 'blockcurtain':
868                        $target = ".de_reveal_animation_yes.elementor-element-" + $id 
869                        break;                          
870                      default:
871                        $target = ".de_reveal_animation_yes.elementor-element-" + $id + " > .elementor-widget-container"
872                        break;
873                    }
874                    
875                    // if ( $animation_type === 'letter' ) {
876                    //   $target = ".de_reveal_animation_yes.elementor-element-" + $id + " > .elementor-widget-container > *" 
877                    // } else {
878                    //   $target = ".de_reveal_animation_yes.elementor-element-" + $id + " > .elementor-widget-container"
879                    // }
880                  }
881                }
882
883                elementSelector = document.querySelector($target)
884              } else {
885                if (is_stagger) {
886                  $target = ".de_reveal_animation_no.elementor-element-" + $id + " > .elementor-container > .elementor-column"                        
887                } else {
888                  if (is_section) {
889                    $target = ".de_reveal_animation_no.elementor-section.elementor-element-" + $id
890                  } else {
891                    if ( $animation_type === 'letter' ) {
892                      $target = ".de_reveal_animation_no.elementor-element-" + $id + " > .elementor-widget-container > *"
893                    } else {
894                      $target = ".de_reveal_animation_no.elementor-element-" + $id + " > .elementor-widget-container"
895                    }
896                  }
897                }
898
899                elementSelector = document.querySelector($target)
900              }
901
902
903              if (do_animation && elementSelector) {
904                if ( $animation_type === 'blockcurtain' ) {
905                  
906                  var revealer = new RevealFx(elementSelector);
907
908                  revealer.reveal({
909                    duration: $duration,
910                    direction: $curtain_direction,
911                    easing: $easing,
912                    onStart: function(contentEl, revealerEl) { if (contentEl) contentEl.style.opacity = 0; },
913                    onCover: function(contentEl, revealerEl) { if (contentEl) contentEl.style.opacity = 1; },
914                    onComplete: function(contentEl, revealerEl) { if (contentEl) contentEl.style.opacity = 1; },
915                  });
916
917                } else if ( $animation_type === 'letter' ) { //if ( $animation_type === 'blockcurtain' )
918
919                  var hasLetterEffect = elementSelector.classList.contains('letter-effect')
920                  var tempInnerText = elementSelector.innerText
921
922                  if ( !hasLetterEffect ) {
923                    letterAnim = new TextFx(elementSelector)
924
925                    if ( initial_state==='hidden' ) {
926                      letterAnim.hide()
927                    } else {
928                      letterAnim.show()  
929                    }
930
931                    letterAnim.show($letter_effect, function(){
932                      elementSelector.classList.remove('letter-effect')
933                      elementSelector.innerText = tempInnerText
934                    })
935                  }
936
937                } else { //if ( $animation_type === 'blockcurtain' )
938                } //if ( $animation_type === 'blockcurtain' )
939
940              } else { //if (do_animation)
941                if (elementSelector) {
942                  elementSelector.style.transform = "none"
943                }
944              } //if (do_animation)
945            }
946          });
947        });
948  
949        if (this.$element) {
950          var elementId = this.$element.context.attributes['data-id'].nodeValue;
951          var elementSelector = document.querySelector("[data-id='" + elementId + "']");
952          if (elementSelector) {
953            this.do_frontend_reveal()
954          }
955        }
956      } else { //if (editMode)
957        this.do_frontend_reveal()
958        this.do_carousel_trigger()
959      } //if (editMode)
960    } //onInit()
961
962    bindEvents() {
963    }
964}
965
966function do_preview_default_animation() {
967  // find all edited element wrappers
968  var animNodes = document.querySelectorAll(".de_reveal_animation_yes.de_reveal_animation_type_default.elementor-element-editable");
969
970  // For each animated element, set initial state based on animation object in animations array
971  Array.prototype.forEach.call(animNodes, function (element, index) { 
972
973    // initial variables values
974    var do_animation = false
975    var $animation_type = 'default'
976    var $id, $duration = 2000, $distance = '200', $rotation = '0', $scale = '1'
977    var $direction = 'normal'
978    var $easing = 'linear'
979    var $animation_style = 'fu'
980    var $loop_type = 'custom'
981    var $loop = '1'
982    var is_stagger = false
983    var is_section = false
984    var $delay = '0'
985    var stagger_delay = '500'
986    
987    var classes = element.getAttribute("class")
988    var arr_classes = classes.split(' ')
989
990    $id = element.getAttribute('data-id')
991        
992    Array.prototype.forEach.call(arr_classes, function(item, num){
993      if ( item.search('de_reveal_animation_yes') === 0 ) {
994        do_animation = true
995      }
996    
997      if ( item.search('de_reveal_animation_type_') === 0 ) {
998        $animation_type = item.replace('de_reveal_animation_type_','')
999      }          
1000    
1001      if ( item.search('elementor-section') === 0 ) {
1002        is_section = true
1003      }
1004    
1005      if ( item.search('de_reveal_distance_') === 0 ) {
1006        $distance = item.replace('de_reveal_distance_','')
1007      }
1008
1009      if ( item.search('de_reveal_default_rotation_') === 0 ) {
1010        $rotation = item.replace('de_reveal_default_rotation_','')
1011      }
1012
1013      if ( item.search('de_reveal_default_scale_') === 0 ) {
1014        $scale = item.replace('de_reveal_default_scale_','')
1015      }
1016
1017      if ( item.search('de_reveal_default_delay_') === 0 ) {
1018        $delay = item.replace('de_reveal_default_delay_','')
1019      }
1020
1021      if ( item.search('de_reveal_duration_') === 0 ) {
1022        $duration = item.replace('de_reveal_duration_','')
1023      }
1024    
1025      if ( item.search('de_reveal_direction_') === 0 ) {
1026        $direction = item.replace('de_reveal_direction_','')
1027      }
1028    
1029      if ( item.search('de_reveal_easing_') === 0 ) {
1030        $easing = item.replace('de_reveal_easing_','')
1031      }
1032    
1033      if ( item.search('de_reveal_loop_') === 0 ) {
1034        $loop_type = item.replace('de_reveal_loop_','')
1035    
1036        if ( $loop_type === 'infinite' ) {
1037          $loop = true
1038        }
1039      }
1040    
1041      if (( item.search('de_reveal_custom_loop_') === 0 ) && ($loop_type === 'custom')) {
1042        $loop = item.replace('de_reveal_custom_loop_','')
1043      }
1044    
1045      if ( item.search('de_reveal_animation_style_') === 0 ) {
1046        $animation_style = item.replace('de_reveal_animation_style_','')
1047      }
1048    
1049      if ( item.search('de_reveal_stagger_yes') === 0 ) {
1050        is_stagger = true
1051      }    
1052
1053      if ( item.search('de_reveal_stagger_child_delay_') === 0 ) {
1054        stagger_delay = item.replace('de_reveal_stagger_child_delay_','')
1055      }
1056    })
1057
1058    var elementSelector
1059    var $target = ''
1060
1061    if (do_animation) {
1062      if (is_stagger) {
1063        $target = ".de_reveal_animation_yes.elementor-element-" + $id + " > .elementor-container > .elementor-column"                        
1064      } else {
1065        if (is_section) {
1066          $target = ".de_reveal_animation_yes.elementor-section.elementor-element-" + $id 
1067        } else {
1068          $target = ".de_reveal_animation_yes.elementor-element-" + $id
1069        }
1070      }
1071
1072      elementSelector = document.querySelector($target)
1073    } else {
1074      if (is_stagger) {
1075        $target = ".de_reveal_animation_no.elementor-element-" + $id + " > .elementor-container > .elementor-column"                        
1076      } else {
1077        if (is_section) {
1078          $target = ".de_reveal_animation_no.elementor-section.elementor-element-" + $id
1079        } else {
1080          $target = ".de_reveal_animation_no.elementor-element-" + $id
1081        }
1082      }
1083
1084      elementSelector = document.querySelector($target)
1085    }
1086
1087    if (do_animation && elementSelector) {    
1088
1089      if (animObject) {
1090        animObject.remove(elementSelector)
1091      }
1092      
1093      var animObj = getDefaultPreviewAnimObj($target,$animation_style,$distance,$rotation,$scale,$duration,$direction,$loop,$easing,is_stagger,$delay,stagger_delay)
1094      animObject = anime(animObj)
1095
1096    } else { //if (do_animation)
1097      if (elementSelector) {
1098        elementSelector.style.transform = "none"
1099      }
1100    } //if (do_animation)    
1101  })
1102}
1103
1104function do_preview_curtain_animation() {
1105  // find all animated element wrappers with data-anim attribute
1106  var animNodes = document.querySelectorAll(".de_reveal_animation_yes.de_reveal_animation_type_blockcurtain.elementor-element-editable");
1107
1108  // For each animated element, set initial state based on animation object in animations array
1109  Array.prototype.forEach.call(animNodes, function (element, index) { 
1110      // Get threshold settings from class de_reveal_start_
1111      var classes = element.getAttribute("class")
1112      var arr_classes = classes.split(' ')
1113      var de_reveal_start = 0
1114      var de_reveal_curtain_direction = 'lr'
1115      var de_reveal_easing = 'linier'
1116      var de_reveal_duration = 2000
1117      var de_reveal_curtain_delay = 0
1118      Array.prototype.forEach.call(arr_classes, function(item, num){
1119        if ( item.search('de_reveal_start_') === 0 ) {
1120          de_reveal_start = item.replace('de_reveal_start_','')
1121        }
1122
1123        if ( item.search('de_reveal_curtain_direction_') === 0 ) {
1124          de_reveal_curtain_direction = item.replace('de_reveal_curtain_direction_','')
1125
1126          element.setAttribute("data-de-reveal-curtain-direction", de_reveal_curtain_direction)
1127        }
1128
1129        if ( item.search('de_reveal_curtain_delay_') === 0 ) {
1130          de_reveal_curtain_delay = item.replace('de_reveal_curtain_delay_','')
1131
1132          element.setAttribute("data-de-reveal-curtain-delay", de_reveal_curtain_delay)
1133        }
1134
1135        if ( item.search('de_reveal_easing_') === 0 ) {
1136          de_reveal_easing = item.replace('de_reveal_easing_','')
1137
1138          element.setAttribute("data-de-reveal-easing", de_reveal_easing)
1139        }
1140
1141        if ( item.search('de_reveal_duration_') === 0 ) {
1142          de_reveal_duration = item.replace('de_reveal_duration_','')
1143
1144          element.setAttribute("data-de-reveal-duration", de_reveal_duration)
1145        }  
1146      })
1147      
1148      var revealer = new RevealFx(element);
1149
1150      revealer.reveal({
1151        duration: de_reveal_duration,
1152        direction: de_reveal_curtain_direction,
1153        easing: de_reveal_easing,
1154        delay: de_reveal_curtain_delay,
1155        onStart: function(contentEl, revealerEl) { 
1156          if (contentEl) { contentEl.style.opacity = 0 }
1157        },
1158        onCover: function(contentEl, revealerEl) { 
1159          if (contentEl) { contentEl.style.opacity = 1 }
1160        },
1161        onComplete: function(contentEl, revealerEl) { 
1162          if (contentEl) { contentEl.style.opacity = 1 }
1163        },
1164      });
1165
1166      delete revealer
1167    
1168  })
1169}
1170
1171function do_preview_letter_animation() {
1172  // find all animated element wrappers with data-anim attribute
1173  var animNodes = document.querySelectorAll(".de_reveal_animation_yes.de_reveal_animation_type_letter.elementor-element-editable");
1174
1175  // For each animated element, set initial state based on animation object in animations array
1176  Array.prototype.forEach.call(animNodes, function (element, index) {
1177    // Get threshold settings from class de_reveal_start_
1178    var classes = element.getAttribute("class")
1179    var arr_classes = classes.split(' ')
1180    var de_reveal_start = 0
1181    var initial_state = 'hidden'
1182
1183    Array.prototype.forEach.call(arr_classes, function(item, num){
1184      if ( item.search('de_reveal_start_') === 0 ) {
1185        de_reveal_start = item.replace('de_reveal_start_','')
1186      }
1187
1188      if ( item.search('de_reveal_letter_initial_state_') === 0 ) {
1189        initial_state = item.replace('de_reveal_letter_initial_state_','')
1190      }
1191
1192      if ( item.search('de_reveal_letter_effects_') === 0 ) {
1193        var de_reveal_letter_effects = item.replace('de_reveal_letter_effects_','')
1194
1195        element.setAttribute("data-dereveal-letter-effects", de_reveal_letter_effects)
1196      }
1197    })
1198    var threshold = de_reveal_start;
1199
1200    var animated = element.querySelectorAll(".elementor-widget-container > *:not(style)");
1201
1202    Array.prototype.forEach.call(animated, function(el, i){
1203      var hasLetterEffect = el.classList.contains('letter-effect')
1204
1205      // if ( !hasLetterEffect ) {
1206        var de_reveal_letter_effects = element.getAttribute("data-dereveal-letter-effects")
1207        originalLetters = el.innerText
1208        letterAnim = new TextFx(el)
1209        if ( initial_state==='hidden' ) {
1210          letterAnim.hide()
1211        } else {
1212          letterAnim.show()  
1213        }
1214        letterAnim.show(de_reveal_letter_effects, callback_after_letter_animation)
1215      // }      
1216    })
1217  })
1218}
1219
1220function callback_after_letter_animation() {
1221  if (letterAnim) {
1222    letterAnim.el.innerText = originalLetters
1223    letterAnim.el.classList.remove('letter-effect')    
1224  }
1225}
1226
1227function do_reveal_default_animation(element) {
1228  if (!element) return
1229
1230  var classes = element.getAttribute("class")
1231  var arr_classes = classes.split(' ')
1232
1233  var animation_style, distance, rotation, scale, duration, direction, delay, easing, is_stagger, is_section, run_animation, stagger_delay
1234
1235  Array.prototype.forEach.call(arr_classes, function(item, num){
1236    // if ( item.search('de_reveal_start_') === 0 ) {
1237    //   de_reveal_start = item.replace('de_reveal_start_','')
1238    // }
1239
1240    if ( item.search('de_reveal_animation_style_') === 0 ) {
1241      animation_style = item.replace('de_reveal_animation_style_','')
1242    }
1243
1244    if ( item.search('de_reveal_distance_') === 0 ) {
1245      distance = item.replace('de_reveal_distance_','')
1246    }
1247
1248    if ( item.search('de_reveal_default_rotation_') === 0 ) {
1249      rotation = item.replace('de_reveal_default_rotation_','')
1250    }
1251
1252    if ( item.search('de_reveal_default_scale_') === 0 ) {
1253      scale = item.replace('de_reveal_default_scale_','')
1254    }
1255
1256    if ( item.search('de_reveal_default_delay_') === 0 ) {
1257      delay = item.replace('de_reveal_default_delay_','')
1258    }
1259
1260    if ( item.search('de_reveal_duration_') === 0 ) {
1261      duration = item.replace('de_reveal_duration_','')
1262    }
1263
1264    if ( item.search('de_reveal_direction_') === 0 ) {
1265      direction = item.replace('de_reveal_direction_','')
1266    }
1267
1268    if ( item.search('de_reveal_easing_') === 0 ) {
1269      easing = item.replace('de_reveal_easing_','')
1270    }
1271
1272    // var $loop_type = 'custom'
1273    // var $loop 
1274    // if ( item.search('de_reveal_loop_') === 0 ) {
1275    //   $loop_type = item.replace('de_reveal_loop_','')
1276
1277    //   if ( $loop_type === 'infinite' ) {
1278    //     $loop = true
1279    //     element.setAttribute("data-de-reveal-animation-loop-infinite", true)
1280    //   }
1281    // }
1282
1283    // if (( item.search('de_reveal_custom_loop_') === 0 ) && ($loop_type === 'custom')) {
1284    //   $loop = item.replace('de_reveal_custom_loop_','')
1285    //   element.setAttribute("data-de-reveal-animation-loop", $loop)
1286    // }
1287
1288    if ( item.search('de_reveal_stagger_yes') === 0 ) {
1289      is_stagger = true
1290    }
1291
1292    if ( item.search('elementor-section') === 0 ) {
1293      is_section = true
1294    }
1295
1296    if ( item.search('de_reveal_run_animation') === 0 ) {
1297      run_animation = true
1298    }
1299
1300    if ( item.search('de_reveal_stagger_child_delay_') === 0 ) {
1301      stagger_delay = item.replace('de_reveal_stagger_child_delay_','')
1302    }
1303  })
1304
1305  var animating = false
1306  if ( element.hasAttribute("data-de-reveal-animated") ) {
1307    if ( element.getAttribute("data-de-reveal-animated") === "true" ) {
1308      animating = true 
1309    }
1310  }
1311
1312  var infinite = element.hasAttribute("data-anim-infinite") ? true : false;
1313
1314  // var animation_style = element.getAttribute("data-de-reveal-animation-style")
1315  // var distance = element.getAttribute("data-de-reveal-distance")
1316  // var rotation = element.getAttribute("data-de-reveal-default-rotation")
1317  // var scale = element.getAttribute("data-de-reveal-default-scale")
1318  // var duration = element.getAttribute("data-de-reveal-duration")
1319  // var direction = element.getAttribute("data-de-reveal-direction")
1320  // var easing = element.hasAttribute("data-de-reveal-easing") ? element.getAttribute("data-de-reveal-easing") : 'linear'
1321  
1322
1323  // var easing = 'easeInOutExpo'
1324  // var loop = element.getAttribute("data-de-reveal-animation-loop")
1325  var loop = element.hasAttribute("data-de-reveal-animation-loop-infinite") ? true : element.getAttribute("data-de-reveal-animation-loop")
1326
1327  var id = element.getAttribute("data-id")
1328
1329  // var is_section = element.hasAttribute("data-de-reveal-section") ? true : false;
1330  // var is_stagger = element.hasAttribute("data-de-reveal-stagger") ? true : false;
1331  // var run_animation = element.hasAttribute("data-de-reveal-run-animation") ? true : false;
1332  
1333  // var delay = element.getAttribute("data-de-reveal-default-delay")
1334  // var stagger_delay = element.getAttribute("de-reveal-stagger-child-delay")
1335
1336  var targets
1337
1338  if (is_stagger) {
1339    targets = ".de_reveal_animation_yes.elementor-element-" + id + " > .elementor-container > .elementor-column"
1340  } else {
1341    if (is_section) {
1342      targets = ".de_reveal_animation_yes.elementor-section.elementor-element-" + id
1343    } else {
1344      targets = ".de_reveal_animation_yes.elementor-element-" + id
1345    }
1346  }
1347
1348  var animObj = getDefaultPreviewAnimObj(targets,animation_style,distance,rotation,scale,duration,direction,loop,easing,is_stagger,delay,stagger_delay,element)
1349  anime(animObj)
1350}
1351
1352function do_reveal_curtain_animation(element) {
1353  if (!element) return
1354
1355  // Get threshold settings from class de_reveal_start_
1356  var classes = element.getAttribute("class")
1357  var arr_classes = classes.split(' ')
1358  var de_reveal_start = 0
1359  var de_reveal_curtain_direction = 'lr'
1360  var de_reveal_easing = 'linier'
1361  var de_reveal_duration = 2000
1362  var de_reveal_curtain_delay = 0
1363  
1364  Array.prototype.forEach.call(arr_classes, function(item, num){
1365    if ( item.search('de_reveal_start_') === 0 ) {
1366      de_reveal_start = item.replace('de_reveal_start_','')
1367    }
1368
1369    if ( item.search('de_reveal_curtain_direction_') === 0 ) {
1370      de_reveal_curtain_direction = item.replace('de_reveal_curtain_direction_','')
1371    }
1372
1373    if ( item.search('de_reveal_curtain_delay_') === 0 ) {
1374      de_reveal_curtain_delay = item.replace('de_reveal_curtain_delay_','')
1375    }
1376
1377    if ( item.search('de_reveal_easing_') === 0 ) {
1378      de_reveal_easing = item.replace('de_reveal_easing_','')
1379    }
1380
1381    if ( item.search('de_reveal_duration_') === 0 ) {
1382      de_reveal_duration = item.replace('de_reveal_duration_','')
1383    }  
1384  })
1385  
1386  var revealer = new RevealFx(element);
1387
1388  revealer.reveal({
1389    duration: de_reveal_duration,
1390    direction: de_reveal_curtain_direction,
1391    easing: de_reveal_easing,
1392    delay: de_reveal_curtain_delay,
1393    onStart: function(contentEl, revealerEl) { 
1394      if (contentEl) { contentEl.style.opacity = 0 }
1395    },
1396    onCover: function(contentEl, revealerEl) { 
1397      if (contentEl) { contentEl.style.opacity = 1 }
1398    },
1399    onComplete: function(contentEl, revealerEl) { 
1400      if (contentEl) { contentEl.style.opacity = 1 }
1401    },
1402  });
1403
1404  delete revealer
1405}
1406
1407function do_reveal_letter_animation(element) {
1408  if (!element) return
1409
1410  // Get threshold settings from class de_reveal_start_
1411  var classes = element.getAttribute("class")
1412  var arr_classes = classes.split(' ')
1413  var de_reveal_start = 0
1414  var initial_state = 'hidden'
1415  var de_reveal_letter_effects = 'fx1'
1416
1417  Array.prototype.forEach.call(arr_classes, function(item, num){
1418    if ( item.search('de_reveal_start_') === 0 ) {
1419      de_reveal_start = item.replace('de_reveal_start_','')
1420    }
1421
1422    if ( item.search('de_reveal_letter_initial_state_') === 0 ) {
1423      initial_state = item.replace('de_reveal_letter_initial_state_','')
1424    }
1425
1426    if ( item.search('de_reveal_letter_effects_') === 0 ) {
1427      de_reveal_letter_effects = item.replace('de_reveal_letter_effects_','')
1428    }
1429  })
1430  var threshold = de_reveal_start;
1431
1432  var animated = element.querySelectorAll(".elementor-widget-container > *:not(style)");
1433
1434  Array.prototype.forEach.call(animated, function(el, i){
1435    var hasLetterEffect = el.classList.contains('letter-effect')
1436
1437    // if ( !hasLetterEffect ) {
1438      originalLetters = el.innerText
1439      letterAnim = new TextFx(el)
1440      if ( initial_state==='hidden' ) {
1441        letterAnim.hide()
1442      } else {
1443        letterAnim.show()  
1444      }
1445      letterAnim.show(de_reveal_letter_effects, callback_after_letter_animation)
1446    // }      
1447  })
1448}
1449
1450
1451jQuery( window ).on( 'elementor/frontend/init', () => {  
1452  const addHandler = ( $element ) => {
1453    elementorFrontend.elementsHandler.addHandler( DeRevealAnimationHandlerClass, {
1454      $element,
1455    } );
1456  };
1457
1458  elementorFrontend.hooks.addAction( 'frontend/element_ready/global', addHandler );
1459  
1460  if ( undefined !== window.elementor ) {
1461    elementor.channels.editor.on( 'RunPreviewDefault', () => do_preview_default_animation() )
1462    elementor.channels.editor.on( 'RunPreviewCurtain', () => do_preview_curtain_animation() )
1463    elementor.channels.editor.on( 'RunPreviewLetter', () => do_preview_letter_animation() )
1464  }
1465});
1466
1467jQuery( document ).ready( () => {
1468  de_reveal_init_responsive()
1469})
1470
1471jQuery( window ).on( 'resize', () => {
1472  de_reveal_init_responsive()
1473})
1474
1475function de_reveal_init_responsive() {
1476  var onDesktop = false
1477  var onTablet = false
1478  var onMobile = false
1479  var docWidth = document.body.clientWidth
1480  var tabletBreakpoint = elementorFrontend.config.responsive.breakpoints.tablet.value
1481  var mobileBreakpoint = elementorFrontend.config.responsive.breakpoints.mobile.value
1482
1483  if ( docWidth > tabletBreakpoint ) {
1484    onDesktop = true 
1485  } else if ( docWidth <= mobileBreakpoint ) {
1486    onMobile = true
1487  } else {
1488    onTablet = true
1489  }
1490
1491  const editMode = document.querySelector('.elementor-editor-active')
1492
1493  if (!editMode) {
1494    const elements = document.querySelectorAll(".de_reveal_animation_yes")
1495  
1496    Array.prototype.forEach.call(elements, function (element, index) { 
1497      element.classList.remove('de_reveal_run_animation')
1498      element.removeAttribute("data-de-reveal-run-animation")
1499      
1500      if ( onDesktop && element.classList.contains('de_reveal_on_desktop_yes') ) {
1501        if (!element.classList.contains('de_reveal_run_animation')) {
1502          element.classList.add('de_reveal_run_animation')
1503          element.setAttribute("data-de-reveal-run-animation", "true")
1504        }
1505      }
1506  
1507      if ( onTablet && element.classList.contains('de_reveal_on_tablet_yes') ) {
1508        if (!element.classList.contains('de_reveal_run_animation')) {
1509          element.classList.add('de_reveal_run_animation')
1510          element.setAttribute("data-de-reveal-run-animation", "true")
1511        }
1512      }
1513  
1514      if ( onMobile && element.classList.contains('de_reveal_on_mobile_yes') ) {
1515        if (!element.classList.contains('de_reveal_run_animation')) {
1516          element.classList.add('de_reveal_run_animation')
1517          element.setAttribute("data-de-reveal-run-animation", "true")
1518        }
1519      }
1520  
1521    })
1522  }
1523}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.