PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.8
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.8
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
← All changes | assets/src/js/elementor/courses.js +413 -413 4.3.84.4.8 View file →
@@ -1,413 +1,413 @@
1 -import { lpAddQueryArgs, lpFetchAPI, lpGetCurrentURLNoParam } from '../../apps/js/utils/utils';
2 -import Cookie from '../utils/cookie';
3 -
4 -window.lpElWidgetCoursesByPage = ( () => {
5 - const classCoursesWrapper = 'list-courses-elm-wrapper';
6 - const classListCourse = 'list-courses-elm';
7 - const classPaginationCourse = 'learn-press-pagination';
8 - const classCoursesPageResult = 'courses-page-result';
9 - const classSkeleton = 'lp-skeleton-animation';
10 - let filterCourses = {};
11 - const currentUrl = lpGetCurrentURLNoParam();
12 - let urlAPI;
13 - let typePagination = 'number';
14 - let firstLoad = true;
15 - let timeOutSearch;
16 - let isLoadingInfinite = false;
17 - const isLoadRest = false;
18 - const fetchAPI = ( args, callBack = {} ) => {
19 - //console.log( 'Fetch API Courses' );
20 - const paramsFetch = {
21 - method: 'POST',
22 - body: JSON.stringify( args ),
23 - headers: {
24 - 'Content-Type': 'application/json', // Set the content type to JSON
25 - },
26 - };
27 -
28 - if ( 'undefined' !== typeof args.nonce ) {
29 - paramsFetch.headers[ 'X-WP-Nonce' ] = args.nonce;
30 - }
31 -
32 - lpFetchAPI( urlAPI + 'lp/v1/courses/courses-widget-by-page', paramsFetch, callBack );
33 - };
34 - const callBackFilter = ( elCoursesWrapper ) => {
35 - if ( ! elCoursesWrapper ) {
36 - return;
37 - }
38 - const skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );
39 - const elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );
40 - const elPagination = elCoursesWrapper.querySelector( `.${ classPaginationCourse }` );
41 - const elCoursesPageResult = elCoursesWrapper.querySelector( `.${ classCoursesPageResult }` );
42 -
43 - return {
44 - before: () => {
45 -
46 - },
47 - success: ( res ) => {
48 - const divTmp = document.createElement( 'div' );
49 - divTmp.innerHTML = res.data.content || '';
50 - const elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );
51 - const elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );
52 - const elCoursesPageResultTmp = divTmp.querySelector( `.${ classCoursesPageResult }` );
53 -
54 - if ( elListCourse ) {
55 - elListCourse.innerHTML = elListCourseTmp.innerHTML;
56 -
57 - if ( elPagination ) {
58 - elPagination.innerHTML = elPaginationTmp.innerHTML;
59 - }
60 -
61 - if ( elCoursesPageResult ) {
62 - elCoursesPageResult.innerHTML = elCoursesPageResultTmp.innerHTML;
63 - }
64 -
65 - // Scroll to el
66 - const optionScroll = { behavior: 'smooth' };
67 - elListCourse.scrollIntoView( optionScroll );
68 - } else {
69 - elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );
70 - }
71 -
72 - if ( res.data.pagination ) {
73 - elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );
74 - }
75 - },
76 - error: ( error ) => {
77 -
78 - },
79 - completed: () => {
80 - if ( skeleton ) {
81 - skeleton.style.display = 'none';
82 - }
83 - },
84 - };
85 - };
86 - const callBackPaginationTypeLoadMore = ( elCoursesWrapper ) => {
87 - const btnLoadMore = elCoursesWrapper.querySelector( '.courses-btn-load-more' );
88 - let elLoading;
89 - if ( btnLoadMore ) {
90 - elLoading = btnLoadMore.querySelector( '.lp-loading-circle' );
91 - }
92 - const skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );
93 - const elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );
94 -
95 - return {
96 - before: () => {
97 - if ( btnLoadMore ) {
98 - elLoading.classList.remove( 'hide' );
99 - btnLoadMore.setAttribute( 'disabled', 'disabled' );
100 - }
101 - },
102 - success: ( res ) => {
103 - const divTmp = document.createElement( 'div' );
104 - divTmp.innerHTML = res.data.content || '';
105 - const elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );
106 - const elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );
107 -
108 - if ( elListCourse ) {
109 - elListCourse.insertAdjacentHTML( 'beforeend', elListCourseTmp.innerHTML );
110 - if ( ! elPaginationTmp ) {
111 - btnLoadMore.remove();
112 - }
113 - } else {
114 - elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );
115 - }
116 -
117 - if ( res.data.pagination ) {
118 - elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );
119 - }
120 - },
121 - error: ( error ) => {
122 -
123 - },
124 - completed: () => {
125 - if ( skeleton ) {
126 - skeleton.style.display = 'none';
127 - }
128 - if ( btnLoadMore ) {
129 - elLoading.classList.add( 'hide' );
130 - btnLoadMore.removeAttribute( 'disabled' );
131 - }
132 - },
133 - };
134 - };
135 - const callBackPaginationTypeInfinite = ( elCoursesWrapper ) => {
136 - const skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );
137 - const elInfinite = elCoursesWrapper.querySelector( '.courses-load-infinite' );
138 - let loading;
139 - if ( elInfinite ) {
140 - loading = elInfinite.querySelector( '.lp-loading-circle' );
141 - }
142 - const elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );
143 -
144 - return {
145 - before: () => {
146 - isLoadingInfinite = true;
147 - if ( loading ) {
148 - loading.classList.remove( 'hide' );
149 - }
150 - },
151 - success: ( res ) => {
152 - const divTmp = document.createElement( 'div' );
153 - divTmp.innerHTML = res.data.content || '';
154 - const elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );
155 - const elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );
156 -
157 - if ( elListCourse ) {
158 - elListCourse.insertAdjacentHTML( 'beforeend', elListCourseTmp.innerHTML );
159 - if ( ! elPaginationTmp ) {
160 - elInfinite.remove();
161 - }
162 - } else {
163 - elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );
164 - }
165 -
166 - if ( res.data.pagination ) {
167 - elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );
168 - }
169 - },
170 - error: ( error ) => {
171 -
172 - },
173 - completed: () => {
174 - isLoadingInfinite = false;
175 - if ( skeleton ) {
176 - skeleton.style.display = 'none';
177 - }
178 - if ( elInfinite ) {
179 - loading.classList.add( 'hide' );
180 - }
181 - },
182 - };
183 - };
184 - const callApiCoursesOfWidget = ( elCoursesWrapper, args = {} ) => {
185 - console.log( '/*** loadApiCoursesOfWidget ***/' );
186 - const idWidget = elCoursesWrapper.dataset.widgetId;
187 - let settingsWidget = window[ `lpWidget_${ idWidget }` ];
188 -
189 - if ( ! settingsWidget ) {
190 - return;
191 - }
192 - if ( 'yes' !== settingsWidget.courses_rest ) {
193 - return;
194 - }
195 - if ( 'yes' === settingsWidget.courses_rest_no_load_page && firstLoad ) {
196 - firstLoad = false;
197 - return;
198 - }
199 -
200 - settingsWidget = { ...settingsWidget, ...args };
201 -
202 - urlAPI = settingsWidget.lp_rest_url ?? '';
203 - typePagination = settingsWidget.courses_rest_pagination_type ?? 'number';
204 -
205 - let callBack;
206 - switch ( typePagination ) {
207 - case 'load-more':
208 - callBack = callBackPaginationTypeLoadMore( elCoursesWrapper );
209 - break;
210 - case 'infinite':
211 - callBack = callBackPaginationTypeInfinite( elCoursesWrapper );
212 - break;
213 - default: // number
214 - callBack = callBackFilter( elCoursesWrapper );
215 - break;
216 - }
217 -
218 - if ( ! callBack ) {
219 - return;
220 - }
221 -
222 - fetchAPI( settingsWidget, callBack );
223 - };
224 - const findAllWidgetCoursesByPage = () => {
225 - const elCoursesWrappers = document.querySelectorAll( `.${ classCoursesWrapper }` );
226 - if ( ! elCoursesWrappers ) {
227 - return;
228 - }
229 -
230 - elCoursesWrappers.forEach( ( el ) => {
231 - callApiCoursesOfWidget( el );
232 - } );
233 - };
234 - const onChangeSortBy = ( e, target ) => {
235 - if ( ! target.classList.contains( 'courses-order-by' ) ) {
236 - return;
237 - }
238 - const elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );
239 - if ( ! elCoursesWrapper ) {
240 - return;
241 - }
242 -
243 - e.preventDefault();
244 - const idWidget = elCoursesWrapper.dataset.widgetId;
245 - const settingsWidget = window[ `lpWidget_${ idWidget }` ];
246 - filterCourses.order_by = target.value;
247 - filterCourses.paged = 1;
248 -
249 - if ( 'yes' !== settingsWidget.courses_rest ) {
250 - window.location.href = lpAddQueryArgs( currentUrl, filterCourses );
251 - } else {
252 - callApiCoursesOfWidget( elCoursesWrapper, filterCourses );
253 - }
254 - };
255 - const onChangeLayout = ( e, target ) => {
256 - if ( ! target.classList.contains( 'courses-layout' ) ) {
257 - if ( ! target.closest( '.courses-layout' ) ) {
258 - return;
259 - }
260 - target = target.closest( '.courses-layout' );
261 - }
262 - const elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );
263 - if ( ! elCoursesWrapper ) {
264 - return;
265 - }
266 - e.preventDefault();
267 - const elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );
268 - const elUlLayouts = target.closest( '.courses-layouts-display-list' );
269 - const widgetId = elCoursesWrapper.dataset.widgetId;
270 - const elLayouts = elUlLayouts.querySelectorAll( 'li' );
271 - elLayouts.forEach( ( el ) => {
272 - el.classList.remove( 'active' );
273 - } );
274 - const layout = target.dataset.layout;
275 - target.classList.add( 'active' );
276 - elListCourse.classList.remove( 'grid', 'list' );
277 - elListCourse.classList.add( layout );
278 - Cookie.set( `layout_widget_${ widgetId }`, layout, 7 );
279 - };
280 - const events = () => {
281 - document.addEventListener( 'change', function( e ) {
282 - const target = e.target;
283 -
284 - onChangeSortBy( e, target );
285 - } );
286 - document.addEventListener( 'click', function( e ) {
287 - const target = e.target;
288 -
289 - clickLoadMore( e, target );
290 - clickNumberPage( e, target );
291 - onChangeLayout( e, target );
292 - } );
293 - document.addEventListener( 'scroll', function( e ) {
294 - const target = e.target;
295 -
296 - scrollInfinite( e, target );
297 - } );
298 - document.addEventListener( 'keyup', function( e ) {
299 - const target = e.target;
300 -
301 - //window.lpCourseList.searchCourse( e, target );
302 - } );
303 - document.addEventListener( 'submit', function( e ) {
304 - const target = e.target;
305 -
306 - //window.lpCourseList.searchCourse( e, target );
307 - } );
308 - };
309 - const clickNumberPage = ( e, target ) => {
310 - if ( ! target.classList.contains( 'page-numbers' ) ) {
311 - if ( ! target.closest( '.page-numbers' ) ) {
312 - return;
313 - }
314 - target = target.closest( '.page-numbers' );
315 - }
316 - const elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );
317 - if ( ! elCoursesWrapper ) {
318 - return;
319 - }
320 - const idWidget = elCoursesWrapper.dataset.widgetId;
321 - const settingsWidget = window[ `lpWidget_${ idWidget }` ];
322 - if ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {
323 - return;
324 - }
325 -
326 - e.preventDefault();
327 - const pageCurrent = filterCourses.paged;
328 - if ( target.classList.contains( 'prev' ) ) {
329 - filterCourses.paged = pageCurrent - 1;
330 - } else if ( target.classList.contains( 'next' ) ) {
331 - filterCourses.paged = pageCurrent + 1;
332 - } else {
333 - filterCourses.paged = parseInt( target.textContent );
334 - }
335 -
336 - callApiCoursesOfWidget( elCoursesWrapper, filterCourses );
337 - };
338 - const clickLoadMore = ( e, target ) => {
339 - if ( ! target.classList.contains( 'courses-btn-load-more' ) ) {
340 - if ( ! target.closest( '.courses-btn-load-more' ) ) {
341 - return;
342 - }
343 - target = target.closest( '.courses-btn-load-more' );
344 - }
345 - const elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );
346 - if ( ! elCoursesWrapper ) {
347 - return;
348 - }
349 - const idWidget = elCoursesWrapper.dataset.widgetId;
350 - const settingsWidget = window[ `lpWidget_${ idWidget }` ];
351 - if ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {
352 - return;
353 - }
354 -
355 - e.preventDefault();
356 - ++filterCourses.paged;
357 -
358 - callApiCoursesOfWidget( elCoursesWrapper, filterCourses );
359 - };
360 - const scrollInfinite = ( e, target ) => {
361 - const elCoursesWrapper = document.querySelector( `.${ classCoursesWrapper }` );
362 - if ( ! elCoursesWrapper ) {
363 - return;
364 - }
365 - const elInfinite = elCoursesWrapper.querySelector( '.courses-load-infinite' );
366 - if ( ! elInfinite ) {
367 - return;
368 - }
369 - const idWidget = elCoursesWrapper.dataset.widgetId;
370 - const settingsWidget = window[ `lpWidget_${ idWidget }` ];
371 - if ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {
372 - return;
373 - }
374 -
375 - // Create an IntersectionObserver object.
376 - const observer = new IntersectionObserver( function( entries ) {
377 - for ( const entry of entries ) {
378 - // If the entry is intersecting, load the image.
379 - if ( entry.isIntersecting ) {
380 - if ( isLoadingInfinite ) {
381 - return;
382 - }
383 -
384 - ++filterCourses.paged;
385 - callApiCoursesOfWidget( elCoursesWrapper, filterCourses );
386 - observer.unobserve( entry.target );
387 - }
388 - }
389 - } );
390 -
391 - observer.observe( elInfinite );
392 - };
393 - return {
394 - init: () => {
395 - const urlParams = {};
396 - const urlQueryString = window.location.search;
397 - const urlSearchParams = new URLSearchParams( urlQueryString );
398 - for ( const [ key, val ] of urlSearchParams.entries() ) {
399 - urlParams[ key ] = val;
400 - }
401 -
402 - //filterCourses = { ...lpArchiveSkeletonParam, ...urlParams };
403 - filterCourses = { ...urlParams };
404 - filterCourses.paged = parseInt( filterCourses.paged || 1 );
405 - findAllWidgetCoursesByPage();
406 - events();
407 - },
408 - };
409 -} )();
410 -
411 -document.addEventListener( 'DOMContentLoaded', function() {
412 - window.lpElWidgetCoursesByPage.init();
413 -} );
1 +import { lpAddQueryArgs, lpFetchAPI, lpGetCurrentURLNoParam } from '../../apps/js/utils/utils';
2 +import Cookie from '../utils/cookie';
3 +
4 +window.lpElWidgetCoursesByPage = ( () => {
5 + const classCoursesWrapper = 'list-courses-elm-wrapper';
6 + const classListCourse = 'list-courses-elm';
7 + const classPaginationCourse = 'learn-press-pagination';
8 + const classCoursesPageResult = 'courses-page-result';
9 + const classSkeleton = 'lp-skeleton-animation';
10 + let filterCourses = {};
11 + const currentUrl = lpGetCurrentURLNoParam();
12 + let urlAPI;
13 + let typePagination = 'number';
14 + let firstLoad = true;
15 + let timeOutSearch;
16 + let isLoadingInfinite = false;
17 + const isLoadRest = false;
18 + const fetchAPI = ( args, callBack = {} ) => {
19 + //console.log( 'Fetch API Courses' );
20 + const paramsFetch = {
21 + method: 'POST',
22 + body: JSON.stringify( args ),
23 + headers: {
24 + 'Content-Type': 'application/json', // Set the content type to JSON
25 + },
26 + };
27 +
28 + if ( 'undefined' !== typeof args.nonce ) {
29 + paramsFetch.headers[ 'X-WP-Nonce' ] = args.nonce;
30 + }
31 +
32 + lpFetchAPI( urlAPI + 'lp/v1/courses/courses-widget-by-page', paramsFetch, callBack );
33 + };
34 + const callBackFilter = ( elCoursesWrapper ) => {
35 + if ( ! elCoursesWrapper ) {
36 + return;
37 + }
38 + const skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );
39 + const elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );
40 + const elPagination = elCoursesWrapper.querySelector( `.${ classPaginationCourse }` );
41 + const elCoursesPageResult = elCoursesWrapper.querySelector( `.${ classCoursesPageResult }` );
42 +
43 + return {
44 + before: () => {
45 +
46 + },
47 + success: ( res ) => {
48 + const divTmp = document.createElement( 'div' );
49 + divTmp.innerHTML = res.data.content || '';
50 + const elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );
51 + const elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );
52 + const elCoursesPageResultTmp = divTmp.querySelector( `.${ classCoursesPageResult }` );
53 +
54 + if ( elListCourse ) {
55 + elListCourse.innerHTML = elListCourseTmp.innerHTML;
56 +
57 + if ( elPagination ) {
58 + elPagination.innerHTML = elPaginationTmp.innerHTML;
59 + }
60 +
61 + if ( elCoursesPageResult ) {
62 + elCoursesPageResult.innerHTML = elCoursesPageResultTmp.innerHTML;
63 + }
64 +
65 + // Scroll to el
66 + const optionScroll = { behavior: 'smooth' };
67 + elListCourse.scrollIntoView( optionScroll );
68 + } else {
69 + elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );
70 + }
71 +
72 + if ( res.data.pagination ) {
73 + elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );
74 + }
75 + },
76 + error: ( error ) => {
77 +
78 + },
79 + completed: () => {
80 + if ( skeleton ) {
81 + skeleton.style.display = 'none';
82 + }
83 + },
84 + };
85 + };
86 + const callBackPaginationTypeLoadMore = ( elCoursesWrapper ) => {
87 + const btnLoadMore = elCoursesWrapper.querySelector( '.courses-btn-load-more' );
88 + let elLoading;
89 + if ( btnLoadMore ) {
90 + elLoading = btnLoadMore.querySelector( '.lp-loading-circle' );
91 + }
92 + const skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );
93 + const elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );
94 +
95 + return {
96 + before: () => {
97 + if ( btnLoadMore ) {
98 + elLoading.classList.remove( 'hide' );
99 + btnLoadMore.setAttribute( 'disabled', 'disabled' );
100 + }
101 + },
102 + success: ( res ) => {
103 + const divTmp = document.createElement( 'div' );
104 + divTmp.innerHTML = res.data.content || '';
105 + const elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );
106 + const elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );
107 +
108 + if ( elListCourse ) {
109 + elListCourse.insertAdjacentHTML( 'beforeend', elListCourseTmp.innerHTML );
110 + if ( ! elPaginationTmp ) {
111 + btnLoadMore.remove();
112 + }
113 + } else {
114 + elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );
115 + }
116 +
117 + if ( res.data.pagination ) {
118 + elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );
119 + }
120 + },
121 + error: ( error ) => {
122 +
123 + },
124 + completed: () => {
125 + if ( skeleton ) {
126 + skeleton.style.display = 'none';
127 + }
128 + if ( btnLoadMore ) {
129 + elLoading.classList.add( 'hide' );
130 + btnLoadMore.removeAttribute( 'disabled' );
131 + }
132 + },
133 + };
134 + };
135 + const callBackPaginationTypeInfinite = ( elCoursesWrapper ) => {
136 + const skeleton = elCoursesWrapper.querySelector( `.${ classSkeleton }` );
137 + const elInfinite = elCoursesWrapper.querySelector( '.courses-load-infinite' );
138 + let loading;
139 + if ( elInfinite ) {
140 + loading = elInfinite.querySelector( '.lp-loading-circle' );
141 + }
142 + const elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );
143 +
144 + return {
145 + before: () => {
146 + isLoadingInfinite = true;
147 + if ( loading ) {
148 + loading.classList.remove( 'hide' );
149 + }
150 + },
151 + success: ( res ) => {
152 + const divTmp = document.createElement( 'div' );
153 + divTmp.innerHTML = res.data.content || '';
154 + const elListCourseTmp = divTmp.querySelector( `.${ classListCourse }` );
155 + const elPaginationTmp = divTmp.querySelector( `.${ classPaginationCourse }` );
156 +
157 + if ( elListCourse ) {
158 + elListCourse.insertAdjacentHTML( 'beforeend', elListCourseTmp.innerHTML );
159 + if ( ! elPaginationTmp ) {
160 + elInfinite.remove();
161 + }
162 + } else {
163 + elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.content || '' );
164 + }
165 +
166 + if ( res.data.pagination ) {
167 + elCoursesWrapper.insertAdjacentHTML( 'beforeend', res.data.pagination || '' );
168 + }
169 + },
170 + error: ( error ) => {
171 +
172 + },
173 + completed: () => {
174 + isLoadingInfinite = false;
175 + if ( skeleton ) {
176 + skeleton.style.display = 'none';
177 + }
178 + if ( elInfinite ) {
179 + loading.classList.add( 'hide' );
180 + }
181 + },
182 + };
183 + };
184 + const callApiCoursesOfWidget = ( elCoursesWrapper, args = {} ) => {
185 + console.log( '/*** loadApiCoursesOfWidget ***/' );
186 + const idWidget = elCoursesWrapper.dataset.widgetId;
187 + let settingsWidget = window[ `lpWidget_${ idWidget }` ];
188 +
189 + if ( ! settingsWidget ) {
190 + return;
191 + }
192 + if ( 'yes' !== settingsWidget.courses_rest ) {
193 + return;
194 + }
195 + if ( 'yes' === settingsWidget.courses_rest_no_load_page && firstLoad ) {
196 + firstLoad = false;
197 + return;
198 + }
199 +
200 + settingsWidget = { ...settingsWidget, ...args };
201 +
202 + urlAPI = settingsWidget.lp_rest_url ?? '';
203 + typePagination = settingsWidget.courses_rest_pagination_type ?? 'number';
204 +
205 + let callBack;
206 + switch ( typePagination ) {
207 + case 'load-more':
208 + callBack = callBackPaginationTypeLoadMore( elCoursesWrapper );
209 + break;
210 + case 'infinite':
211 + callBack = callBackPaginationTypeInfinite( elCoursesWrapper );
212 + break;
213 + default: // number
214 + callBack = callBackFilter( elCoursesWrapper );
215 + break;
216 + }
217 +
218 + if ( ! callBack ) {
219 + return;
220 + }
221 +
222 + fetchAPI( settingsWidget, callBack );
223 + };
224 + const findAllWidgetCoursesByPage = () => {
225 + const elCoursesWrappers = document.querySelectorAll( `.${ classCoursesWrapper }` );
226 + if ( ! elCoursesWrappers ) {
227 + return;
228 + }
229 +
230 + elCoursesWrappers.forEach( ( el ) => {
231 + callApiCoursesOfWidget( el );
232 + } );
233 + };
234 + const onChangeSortBy = ( e, target ) => {
235 + if ( ! target.classList.contains( 'courses-order-by' ) ) {
236 + return;
237 + }
238 + const elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );
239 + if ( ! elCoursesWrapper ) {
240 + return;
241 + }
242 +
243 + e.preventDefault();
244 + const idWidget = elCoursesWrapper.dataset.widgetId;
245 + const settingsWidget = window[ `lpWidget_${ idWidget }` ];
246 + filterCourses.order_by = target.value;
247 + filterCourses.paged = 1;
248 +
249 + if ( 'yes' !== settingsWidget.courses_rest ) {
250 + window.location.href = lpAddQueryArgs( currentUrl, filterCourses );
251 + } else {
252 + callApiCoursesOfWidget( elCoursesWrapper, filterCourses );
253 + }
254 + };
255 + const onChangeLayout = ( e, target ) => {
256 + if ( ! target.classList.contains( 'courses-layout' ) ) {
257 + if ( ! target.closest( '.courses-layout' ) ) {
258 + return;
259 + }
260 + target = target.closest( '.courses-layout' );
261 + }
262 + const elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );
263 + if ( ! elCoursesWrapper ) {
264 + return;
265 + }
266 + e.preventDefault();
267 + const elListCourse = elCoursesWrapper.querySelector( `.${ classListCourse }` );
268 + const elUlLayouts = target.closest( '.courses-layouts-display-list' );
269 + const widgetId = elCoursesWrapper.dataset.widgetId;
270 + const elLayouts = elUlLayouts.querySelectorAll( 'li' );
271 + elLayouts.forEach( ( el ) => {
272 + el.classList.remove( 'active' );
273 + } );
274 + const layout = target.dataset.layout;
275 + target.classList.add( 'active' );
276 + elListCourse.classList.remove( 'grid', 'list' );
277 + elListCourse.classList.add( layout );
278 + Cookie.set( `layout_widget_${ widgetId }`, layout, 7 );
279 + };
280 + const events = () => {
281 + document.addEventListener( 'change', function( e ) {
282 + const target = e.target;
283 +
284 + onChangeSortBy( e, target );
285 + } );
286 + document.addEventListener( 'click', function( e ) {
287 + const target = e.target;
288 +
289 + clickLoadMore( e, target );
290 + clickNumberPage( e, target );
291 + onChangeLayout( e, target );
292 + } );
293 + document.addEventListener( 'scroll', function( e ) {
294 + const target = e.target;
295 +
296 + scrollInfinite( e, target );
297 + } );
298 + document.addEventListener( 'keyup', function( e ) {
299 + const target = e.target;
300 +
301 + //window.lpCourseList.searchCourse( e, target );
302 + } );
303 + document.addEventListener( 'submit', function( e ) {
304 + const target = e.target;
305 +
306 + //window.lpCourseList.searchCourse( e, target );
307 + } );
308 + };
309 + const clickNumberPage = ( e, target ) => {
310 + if ( ! target.classList.contains( 'page-numbers' ) ) {
311 + if ( ! target.closest( '.page-numbers' ) ) {
312 + return;
313 + }
314 + target = target.closest( '.page-numbers' );
315 + }
316 + const elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );
317 + if ( ! elCoursesWrapper ) {
318 + return;
319 + }
320 + const idWidget = elCoursesWrapper.dataset.widgetId;
321 + const settingsWidget = window[ `lpWidget_${ idWidget }` ];
322 + if ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {
323 + return;
324 + }
325 +
326 + e.preventDefault();
327 + const pageCurrent = filterCourses.paged;
328 + if ( target.classList.contains( 'prev' ) ) {
329 + filterCourses.paged = pageCurrent - 1;
330 + } else if ( target.classList.contains( 'next' ) ) {
331 + filterCourses.paged = pageCurrent + 1;
332 + } else {
333 + filterCourses.paged = parseInt( target.textContent );
334 + }
335 +
336 + callApiCoursesOfWidget( elCoursesWrapper, filterCourses );
337 + };
338 + const clickLoadMore = ( e, target ) => {
339 + if ( ! target.classList.contains( 'courses-btn-load-more' ) ) {
340 + if ( ! target.closest( '.courses-btn-load-more' ) ) {
341 + return;
342 + }
343 + target = target.closest( '.courses-btn-load-more' );
344 + }
345 + const elCoursesWrapper = target.closest( `.${ classCoursesWrapper }` );
346 + if ( ! elCoursesWrapper ) {
347 + return;
348 + }
349 + const idWidget = elCoursesWrapper.dataset.widgetId;
350 + const settingsWidget = window[ `lpWidget_${ idWidget }` ];
351 + if ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {
352 + return;
353 + }
354 +
355 + e.preventDefault();
356 + ++filterCourses.paged;
357 +
358 + callApiCoursesOfWidget( elCoursesWrapper, filterCourses );
359 + };
360 + const scrollInfinite = ( e, target ) => {
361 + const elCoursesWrapper = document.querySelector( `.${ classCoursesWrapper }` );
362 + if ( ! elCoursesWrapper ) {
363 + return;
364 + }
365 + const elInfinite = elCoursesWrapper.querySelector( '.courses-load-infinite' );
366 + if ( ! elInfinite ) {
367 + return;
368 + }
369 + const idWidget = elCoursesWrapper.dataset.widgetId;
370 + const settingsWidget = window[ `lpWidget_${ idWidget }` ];
371 + if ( ! settingsWidget || 'yes' !== settingsWidget.courses_rest ) {
372 + return;
373 + }
374 +
375 + // Create an IntersectionObserver object.
376 + const observer = new IntersectionObserver( function( entries ) {
377 + for ( const entry of entries ) {
378 + // If the entry is intersecting, load the image.
379 + if ( entry.isIntersecting ) {
380 + if ( isLoadingInfinite ) {
381 + return;
382 + }
383 +
384 + ++filterCourses.paged;
385 + callApiCoursesOfWidget( elCoursesWrapper, filterCourses );
386 + observer.unobserve( entry.target );
387 + }
388 + }
389 + } );
390 +
391 + observer.observe( elInfinite );
392 + };
393 + return {
394 + init: () => {
395 + const urlParams = {};
396 + const urlQueryString = window.location.search;
397 + const urlSearchParams = new URLSearchParams( urlQueryString );
398 + for ( const [ key, val ] of urlSearchParams.entries() ) {
399 + urlParams[ key ] = val;
400 + }
401 +
402 + //filterCourses = { ...lpArchiveSkeletonParam, ...urlParams };
403 + filterCourses = { ...urlParams };
404 + filterCourses.paged = parseInt( filterCourses.paged || 1 );
405 + findAllWidgetCoursesByPage();
406 + events();
407 + },
408 + };
409 +} )();
410 +
411 +document.addEventListener( 'DOMContentLoaded', function() {
412 + window.lpElWidgetCoursesByPage.init();
413 +} );