PageSourceSearch

https://www.rettsyndrome.org/wp-content/plugins/tutor-lms-elemento…/assets/js/tutor-elementor.js?ver=4.0.2

js rettsyndrome.org collected 2026-09-24 17:40:07 UTC 6,449 bytes, 176 lines download raw bytes

1'use strict';
2(function ($) {
3
4	jQuery(window).on('elementor/frontend/init', function () {
5		elementorFrontend.hooks.addAction('frontend/element_ready/etlms-course-thumbnail.default', function ($scope, $) {
6			// remove course play and spining class
7			if (etlmsUtility.is_editor_mode) {
8				const coursePlayers = document.querySelectorAll('.course-players');
9				if (coursePlayers.length) {
10					coursePlayers.forEach( (player) => {
11						player.setAttribute('class', '');
12						const spinner = player.querySelector('.loading-spinner');
13						if (spinner) {
14							spinner.setAttribute('class', '');
15						}
16					})	
17				}
18			}
19		});
20		/**
21		 * Course Curriculum
22		 * @since 1.0.0
23		 */
24		elementorFrontend.hooks.addAction('frontend/element_ready/etlms-course-curriculum.default', function ($scope, $) {
25			if (etlmsUtility.is_editor_mode) {
26				const accordionItemHeaders = document.querySelectorAll('.tutor-accordion-item-header');
27				if (accordionItemHeaders) {
28					accordionItemHeaders.forEach((accordionItemHeader) => {
29						accordionItemHeader.addEventListener('click', () => {
30							accordionItemHeader.classList.toggle('is-active');
31							const accordionItemBody = accordionItemHeader.nextElementSibling;
32							if (accordionItemHeader.classList.contains('is-active')) {
33								accordionItemBody.style.maxHeight = accordionItemBody.scrollHeight + 'px';
34							} else {
35								accordionItemBody.style.maxHeight = 0;
36							}
37						});
38					});
39				}
40			}
41		});
42		elementorFrontend.hooks.addAction('frontend/element_ready/etlms-course-content.default', function ($scope, $) {
43			if (etlmsUtility.is_editor_mode) {
44				const accordionItemHeaders = document.querySelectorAll('.tutor-accordion-item-header');
45				if (accordionItemHeaders) {
46					accordionItemHeaders.forEach((accordionItemHeader) => {
47						accordionItemHeader.addEventListener('click', () => {
48							accordionItemHeader.classList.toggle('is-active');
49							const accordionItemBody = accordionItemHeader.nextElementSibling;
50							if (accordionItemHeader.classList.contains('is-active')) {
51								accordionItemBody.style.maxHeight = accordionItemBody.scrollHeight + 'px';
52							} else {
53								accordionItemBody.style.maxHeight = 0;
54							}
55						});
56					});
57				}
58			}
59		});
60
61		/**
62		 * Course Carousel
63		 * @since 1.0.0
64		 */
65		elementorFrontend.hooks.addAction('frontend/element_ready/etlms-course-carousel.default', function ($scope, $) {
66			/**
67			 * get all carousel settings
68			 */
69			var desktop = $scope.find("#etlms_carousel_settings").attr('desktop');
70			var medium = $scope.find("#etlms_carousel_settings").attr('medium');
71			var mobile = $scope.find("#etlms_carousel_settings").attr('mobile');
72			var carousel_arrows = $scope.find("#etlms_carousel_settings").attr('arrows');
73			var carousel_dots = $scope.find("#etlms_carousel_settings").attr('dots');
74			var carousel_transition = $scope.find("#etlms_carousel_settings").attr('transition');
75			var carousel_center = $scope.find("#etlms_carousel_settings").attr('center');
76			var smooth_scroll = $scope.find("#etlms_carousel_settings").attr('smoth_scroll');
77			var carousel_autoplay = $scope.find("#etlms_carousel_settings").attr('auto_play');
78			var carousel_auto_play_speed = $scope.find("#etlms_carousel_settings").attr('auto_play_speed');
79			var carousel_infinite_loop = $scope.find("#etlms_carousel_settings").attr('infinite_loop');
80			var carousel_pause_on_hover = $scope.find("#etlms_carousel_settings").attr('pause_on_hover');
81		
82
83			carousel_arrows == 'yes' ? carousel_arrows = true : carousel_arrows = false;
84			carousel_dots == 'yes' ? carousel_dots = true : carousel_dots = false;
85			carousel_transition = Number(carousel_transition);
86			carousel_center == 'yes' ? carousel_center = true : carousel_center = false;
87			carousel_autoplay == 'yes' ? carousel_autoplay = true : carousel_autoplay = false;
88			Number(carousel_auto_play_speed);
89			carousel_infinite_loop == 'yes' ? carousel_infinite_loop = true : carousel_infinite_loop = false;
90			carousel_pause_on_hover == 'yes' ? carousel_pause_on_hover = true : carousel_pause_on_hover = false;
91			
92			/**
93			 * applying all settings here
94			 */
95			$scope.find('#etlms-slick-responsive').slick({
96				dots: carousel_dots,
97				arrows: carousel_arrows,
98				infinite: carousel_infinite_loop,
99				autoplay: carousel_autoplay,
100				autoplaySpeed: carousel_auto_play_speed,				
101				slidesToShow: Number(desktop),
102				slidesToScroll: 1,
103				speed: carousel_transition,
104				centerMode: carousel_center,
105				pauseOnHover: carousel_pause_on_hover,
106
107				cssEase: smooth_scroll,
108
109				prevArrow: $scope.find('.etlms-carousel-arrow-prev'),
110				nextArrow: $scope.find('.etlms-carousel-arrow-next'),
111
112				rtl: elementorFrontend.config.is_rtl ? true : false,
113
114				responsive: [
115					{
116						breakpoint: 1024,
117						settings: {
118							slidesToShow: Number(medium),
119							slidesToScroll: 1,
120							infinite: true,
121							dots: true
122						}
123					},
124					{
125						breakpoint: 576,
126						settings: {
127							slidesToShow: Number(mobile),
128							slidesToScroll: 1
129						}
130					}
131				]
132			});
133
134		});
135
136		// Sticky Sidebar In Course Details Page and Bundle Details Page of Elementor
137
138		const isSidebarSticky = window?.tutorElementorData?.is_sidebar_sticky ?? false;
139		let isSticky = false;
140		
141		if (isSidebarSticky) {
142			const courseSidebar = document.querySelector('.tutor-single-course-sidebar');
143			if (courseSidebar) {
144				const header = document.getElementsByTagName('header')[0];
145				const headerHeight = `${header.offsetHeight}px`;
146				const isHeaderSticky = header.classList.value.includes('sticky');
147
148				function handleScroll() {
149					const scrollFromTop = window.scrollY;
150					const SPACE_FROM_TOP = 200;
151					const isValidToStick = scrollFromTop >= SPACE_FROM_TOP;
152					const isValidDevice = window.innerWidth >= 1200;
153
154					if (isValidDevice) {
155						if (isValidToStick) {
156							if (!isSticky) {
157								courseSidebar.classList.add('tutor-elementor-sidebar-sticky');
158								const style = `max-height: 80vh; overflow-y: scroll; top: ${isHeaderSticky ? headerHeight : ''}`;
159								courseSidebar.setAttribute('style', style);
160								courseSidebar.scrollTop = 0;
161								isSticky = true;
162							}
163						} else {
164							courseSidebar.classList.remove('tutor-elementor-sidebar-sticky');
165							courseSidebar.removeAttribute('style');
166							isSticky = false;
167						}
168					}
169				}
170
171				window.addEventListener('scroll', handleScroll);
172			}
173		}
174
175	});
176})(jQuery);

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.