PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.2.0
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.2.0
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
learnpress / assets / js / dist / frontend / courses.js

courses.js in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.2.0, at assets/js/dist/frontend/courses.js

225 lines 7.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /******/ (() => { // webpackBootstrap
2 var __webpack_exports__ = {};
3 /*!************************************************!*\
4 !*** ./assets/src/apps/js/frontend/courses.js ***!
5 \************************************************/
6 const urlCourses = lpGlobalSettings.courses_url || '';
7 const urlCurrent = document.location.href;
8 let filterCourses = JSON.parse(window.localStorage.getItem('lp_filter_courses')) || {};
9 let skeleton;
10 let skeletonClone;
11 let isLoading = false;
12 let firstLoad = 1;
13 let elNoLoadAjaxFirst;
14 let elArchive;
15 if (lpGlobalSettings.is_course_archive) {
16 const queryString = window.location.search;
17 if (!queryString.length && urlCurrent.search('page') === -1) {
18 filterCourses = {};
19 }
20 }
21 const lpArchiveAddQueryArgs = (endpoint, args) => {
22 const url = new URL(endpoint);
23 Object.keys(args).forEach(arg => {
24 url.searchParams.set(arg, args[arg]);
25 });
26 return url;
27 };
28 const lpArchiveCourse = () => {
29 skeleton = document.querySelector('.lp-archive-course-skeleton');
30 elNoLoadAjaxFirst = document.querySelector('.no-first-load-ajax');
31 if (!skeleton) {
32 return;
33 }
34 if (!elNoLoadAjaxFirst) {
35 lpArchiveRequestCourse(filterCourses);
36 }
37 lpArchivePaginationCourse();
38 lpArchiveSearchCourse();
39 };
40 window.lpArchiveRequestCourse = (args, callBackSuccess) => {
41 const wpRestUrl = lpGlobalSettings.lp_rest_url;
42 if (!wpRestUrl) {
43 return;
44 }
45 if (!skeleton) {
46 return;
47 }
48 const archiveCourse = elArchive && elArchive.querySelector('div.lp-archive-courses .lp-content-area');
49 const listCourse = archiveCourse && archiveCourse.querySelector('ul.learn-press-courses');
50 if (!listCourse) {
51 return;
52 }
53 if (isLoading) {
54 return;
55 }
56 isLoading = true;
57 if (!skeletonClone) {
58 skeletonClone = skeleton.outerHTML;
59 } else {
60 listCourse.append(skeleton);
61 // return;
62 }
63
64 const urlCourseArchive = lpArchiveAddQueryArgs(wpRestUrl + 'lp/v1/courses/archive-course', {
65 ...lpGlobalSettings.lpArchiveSkeleton,
66 ...args
67 });
68 const url = lpGlobalSettings.lp_rest_url + 'lp/v1/courses/archive-course' + urlCourseArchive.search;
69 fetch(url, {
70 method: 'GET'
71 }).then(response => response.json()).then(response => {
72 if (typeof response.data.content !== 'undefined' && listCourse) {
73 listCourse.innerHTML = response.data.content || '';
74 }
75 const pagination = response.data.pagination;
76
77 // lpArchiveSearchCourse();
78
79 const paginationEle = document.querySelector('.learn-press-pagination');
80 if (paginationEle) {
81 paginationEle.remove();
82 }
83 if (typeof pagination !== 'undefined') {
84 const paginationHTML = new DOMParser().parseFromString(pagination, 'text/html');
85 const paginationNewNode = paginationHTML.querySelector('.learn-press-pagination');
86 //const paginationInnerHTML = paginationSelector && paginationSelector.innerHTML;
87
88 if (paginationNewNode) {
89 listCourse.after(paginationNewNode);
90 lpArchivePaginationCourse();
91 }
92 }
93 wp.hooks.doAction('lp-js-get-courses', response);
94 if (typeof callBackSuccess === 'function') {
95 callBackSuccess(response);
96 }
97 }).catch(error => {
98 listCourse.innerHTML += `<div class="lp-ajax-message error" style="display:block">${error.message || 'Error: Query lp/v1/courses/archive-course'}</div>`;
99 console.log(error);
100 }).finally(() => {
101 isLoading = false;
102 // skeleton && skeleton.remove();
103
104 jQuery('form.search-courses button').removeClass('loading');
105 if (!firstLoad) {
106 // Scroll to archive element
107 const optionScroll = {
108 behavior: 'smooth'
109 };
110 elArchive.scrollIntoView(optionScroll);
111 } else {
112 firstLoad = 0;
113 }
114
115 // Save filter courses to Storage
116 window.localStorage.setItem('lp_filter_courses', JSON.stringify(args));
117 // Change url by params filter courses
118 const urlPush = lpArchiveAddQueryArgs(document.location, args);
119 window.history.pushState('', '', urlPush);
120 });
121 };
122 const lpArchiveSearchCourse = () => {
123 const searchForm = document.querySelectorAll('form.search-courses');
124 const filterCourses = JSON.parse(window.localStorage.getItem('lp_filter_courses')) || {};
125 searchForm.forEach(s => {
126 const search = s.querySelector('input[name="c_search"]');
127 const btn = s.querySelector('[type="submit"]');
128 let timeOutSearch;
129 search.addEventListener('keyup', event => {
130 if (skeleton) {
131 skeleton.style.display = 'block';
132 }
133 event.preventDefault();
134 const s = event.target.value.trim();
135 if (!s || s && s.length > 2) {
136 if (undefined !== timeOutSearch) {
137 clearTimeout(timeOutSearch);
138 }
139 timeOutSearch = setTimeout(function () {
140 btn.classList.add('loading');
141 filterCourses.c_search = s;
142 filterCourses.paged = 1;
143 lpArchiveRequestCourse({
144 ...filterCourses
145 });
146 }, 800);
147 }
148 });
149 s.addEventListener('submit', e => {
150 e.preventDefault();
151 const eleSearch = s.querySelector('input[name="c_search"]');
152 eleSearch && eleSearch.dispatchEvent(new Event('keyup'));
153 });
154 });
155 };
156 const lpArchivePaginationCourse = () => {
157 const paginationEle = document.querySelectorAll('.lp-archive-courses .learn-press-pagination .page-numbers');
158 paginationEle.length > 0 && paginationEle.forEach(ele => ele.addEventListener('click', event => {
159 event.preventDefault();
160 event.stopPropagation();
161 if (!elArchive) {
162 return;
163 }
164 if (skeleton) {
165 skeleton.style.display = 'block';
166 }
167
168 // Scroll to archive element
169 elArchive.scrollIntoView({
170 behavior: 'smooth'
171 });
172 let filterCourses = {};
173 filterCourses = JSON.parse(window.localStorage.getItem('lp_filter_courses')) || {};
174 const urlString = event.currentTarget.getAttribute('href');
175 if (urlString) {
176 const current = [...paginationEle].filter(el => el.classList.contains('current'));
177 const paged = event.currentTarget.textContent || ele.classList.contains('next') && parseInt(current[0].textContent) + 1 || ele.classList.contains('prev') && parseInt(current[0].textContent) - 1;
178 filterCourses.paged = paged;
179 lpArchiveRequestCourse({
180 ...filterCourses
181 });
182 }
183 }));
184 };
185 const lpArchiveGridListCourse = () => {
186 const layout = LP.Cookies.get('courses-layout');
187 const switches = document.querySelectorAll('.lp-courses-bar .switch-layout [name="lp-switch-layout-btn"]');
188 switches.length > 0 && [...switches].map(ele => ele.value === layout && (ele.checked = true));
189 };
190 const lpArchiveGridListCourseHandle = () => {
191 const gridList = document.querySelectorAll('.lp-archive-courses input[name="lp-switch-layout-btn"]');
192 gridList.length > 0 && gridList.forEach(element => element.addEventListener('change', e => {
193 e.preventDefault();
194 const layout = e.target.value;
195 if (layout) {
196 const dataLayout = document.querySelector('.lp-archive-courses .learn-press-courses[data-layout]');
197 dataLayout && (dataLayout.dataset.layout = layout);
198 LP.Cookies.set('courses-layout', layout);
199 }
200 }));
201 };
202 function LPArchiveCourseInit() {
203 lpArchiveCourse();
204 lpArchiveGridListCourseHandle();
205 lpArchiveGridListCourse();
206 }
207
208 // document.addEventListener( 'DOMContentLoaded', function( event ) {
209 // LPArchiveCourseInit();
210 // } );
211
212 const detectedElArchive = setInterval(function () {
213 if (typeof lpGlobalSettings.lpArchiveSkeleton === 'undefined') {
214 return;
215 }
216 skeleton = document.querySelector('.lp-archive-course-skeleton');
217 elArchive = document.querySelector('.lp-archive-courses');
218 if (elArchive && skeleton) {
219 LPArchiveCourseInit();
220 clearInterval(detectedElArchive);
221 }
222 }, 1);
223 /******/ })()
224 ;
225 //# sourceMappingURL=courses.js.map