PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.5
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.5
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 / admin / pages / tools.js

tools.js in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.4.5, at assets/js/dist/admin/pages/tools.js

2,816 lines 103.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /******/ (() => { // webpackBootstrap
2 /******/ var __webpack_modules__ = ({
3
4 /***/ "./assets/src/apps/js/admin/pages/tools/database/clean_database.js"
5 /*!*************************************************************************!*\
6 !*** ./assets/src/apps/js/admin/pages/tools/database/clean_database.js ***!
7 \*************************************************************************/
8 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
9
10 "use strict";
11 __webpack_require__.r(__webpack_exports__);
12 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
13 /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
14 /* harmony export */ });
15 /* harmony import */ var _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../utils/lp-modal-overlay */ "./assets/src/apps/js/utils/lp-modal-overlay.js");
16 /* harmony import */ var _utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../utils/handle-ajax-api */ "./assets/src/apps/js/utils/handle-ajax-api.js");
17
18
19 const cleanDatabases = () => {
20 const elCleanDatabases = document.querySelector('#lp-tool-clean-database');
21 if (!elCleanDatabases) {
22 return;
23 }
24 const elBtnCleanDatabases = elCleanDatabases.querySelector('.lp-btn-clean-db');
25 elBtnCleanDatabases.addEventListener('click', function (e) {
26 e.preventDefault();
27 const elToolsSelect = document.querySelector('#tools-select__id');
28 const ElToolSelectLi = elToolsSelect.querySelectorAll('ul li input');
29 const checkedOne = Array.prototype.slice.call(ElToolSelectLi).some(x => x.checked);
30 const prepareMessage = elCleanDatabases.querySelector('.tools-prepare__message');
31 if (checkedOne == false) {
32 prepareMessage.style.display = 'block';
33 prepareMessage.textContent = 'You must choose at least one table to take this action';
34 return;
35 }
36 prepareMessage.style.display = 'none';
37 const elLoading = elCleanDatabases.querySelector('.wrapper-lp-loading');
38 if (!_utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].init()) {
39 return;
40 }
41 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elLPOverlay.show();
42 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setContentModal(elLoading.innerHTML);
43 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setTitleModal(elCleanDatabases.querySelector('h2').textContent);
44 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes[0].style.display = 'inline-block';
45 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes[0].textContent = 'Run';
46 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo[0].textContent = 'Close';
47 const listTables = new Array();
48 const ElToolSelectLiCheked = elToolsSelect.querySelectorAll('ul li input:checked');
49 ElToolSelectLiCheked.forEach(e => {
50 listTables.push(e.value);
51 });
52 const tables = listTables[0];
53 const item = elLoading.querySelector('.progressbar__item');
54 const itemtotal = item.getAttribute('data-total');
55 const modal = document.querySelector('.lp-modal-body .main-content');
56 const notice = modal.querySelector('.lp-tool__message');
57 if (itemtotal <= 0) {
58 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes[0].style.display = 'none';
59 notice.textContent = 'There is no data that need to be repaired in the chosen tables';
60 notice.style.display = 'block';
61 return;
62 }
63 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].callBackYes = () => {
64 // warn user before doing
65 const r = confirm('The modified data is impossible to be restored. Please backup your website before doing this.');
66 if (r == false) {
67 return;
68 }
69 const modal = document.querySelector('.lp-modal-body .main-content');
70 const notice = modal.querySelector('.lp-tool__message');
71 notice.textContent = 'This action is in processing. Don\'t close this page';
72 notice.style.display = 'block';
73 const url = '/lp/v1/admin/tools/clean-tables';
74 const params = {
75 tables,
76 itemtotal
77 };
78 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo[0].style.display = 'none';
79 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes[0].style.display = 'none';
80 const functions = {
81 success: res => {
82 const {
83 status,
84 message,
85 data: {
86 processed,
87 percent
88 }
89 } = res;
90 const modalItem = modal.querySelector('.progressbar__item');
91 const progressBarRows = modalItem.querySelector('.progressbar__rows');
92 const progressPercent = modalItem.querySelector('.progressbar__percent');
93 const progressValue = modalItem.querySelector('.progressbar__value');
94 console.log(status);
95 if ('success' === status) {
96 setTimeout(() => {
97 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])(url, params, functions);
98 }, 2000);
99 // update processed quantity
100 progressBarRows.textContent = processed + ' / ' + itemtotal;
101 // update percent
102 progressPercent.textContent = '( ' + percent + '%' + ' )';
103 // update percent width
104 progressValue.style.width = percent + '%';
105 } else if ('finished' === status) {
106 // Re-update indexs
107 progressBarRows.textContent = itemtotal + ' / ' + itemtotal;
108 progressPercent.textContent = '( 100% )';
109 // Update complete nofication
110 const modal = document.querySelector('.lp-modal-body .main-content');
111 const notice = modal.querySelector('.lp-tool__message');
112 notice.textContent = 'Process has been completed. Press click the finish button to close this popup';
113 notice.style.color = 'white';
114 notice.style.background = 'green';
115 progressValue.style.width = '100%';
116 // Show finish button
117 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo[0].style.display = 'inline-block';
118 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo[0].textContent = 'Finish';
119 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo[0].addEventListener('click', function () {
120 location.reload();
121 });
122 } else {
123 console.log(message);
124 }
125 },
126 error: err => {
127 console.log(err);
128 },
129 completed: () => {}
130 };
131 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])(url, params, functions);
132 };
133 });
134 };
135 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cleanDatabases);
136
137 /***/ },
138
139 /***/ "./assets/src/apps/js/admin/pages/tools/database/create_indexs.js"
140 /*!************************************************************************!*\
141 !*** ./assets/src/apps/js/admin/pages/tools/database/create_indexs.js ***!
142 \************************************************************************/
143 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
144
145 "use strict";
146 __webpack_require__.r(__webpack_exports__);
147 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
148 /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
149 /* harmony export */ });
150 /* harmony import */ var _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../utils/lp-modal-overlay */ "./assets/src/apps/js/utils/lp-modal-overlay.js");
151 /* harmony import */ var _utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../utils/handle-ajax-api */ "./assets/src/apps/js/utils/handle-ajax-api.js");
152
153
154 const createIndexes = () => {
155 const elCreateIndexTables = document.querySelector('#lp-tool-create-indexes-tables');
156 if (!elCreateIndexTables) {
157 return;
158 }
159 const elBtnCreateIndexes = elCreateIndexTables.querySelector('.lp-btn-create-indexes');
160 elBtnCreateIndexes.addEventListener('click', e => {
161 e.preventDefault();
162 const elLoading = elCreateIndexTables.querySelector('.wrapper-lp-loading');
163 if (!_utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].init()) {
164 return;
165 }
166 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elLPOverlay.show();
167 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setContentModal(elLoading.innerHTML);
168 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setTitleModal(elCreateIndexTables.querySelector('h2').textContent);
169 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes[0].style.display = 'inline-block';
170 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes[0].textContent = 'Run';
171 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo[0].textContent = 'Close';
172 const url = '/lp/v1/admin/tools/list-tables-indexs';
173 const params = {};
174 const functions = {
175 success: res => {
176 const {
177 status,
178 message,
179 data: {
180 tables,
181 table
182 }
183 } = res;
184 const elSteps = document.querySelector('.example-lp-group-step');
185 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setContentModal(elSteps.innerHTML);
186 const elGroupStep = _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elLPOverlay[0].querySelector('.lp-group-step ');
187
188 // Show progress when upgrading.
189 const showProgress = (stepCurrent, percent) => {
190 const elItemStepCurrent = elGroupStep.querySelector('input[value=' + stepCurrent + ']').closest('.lp-item-step');
191 elItemStepCurrent.classList.add('running');
192 if (100 === percent) {
193 elItemStepCurrent.classList.remove('running');
194 elItemStepCurrent.classList.add('completed');
195 }
196 const progressBar = elItemStepCurrent.querySelector('.progress-bar');
197 progressBar.style.width = percent;
198 };
199
200 // Scroll to step current.
201 const scrollToStepCurrent = stepCurrent => {
202 const elItemStepCurrent = elGroupStep.querySelector('input[value=' + stepCurrent + ']').closest('.lp-item-step');
203 const offset = elItemStepCurrent.offsetTop - _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elMainContent[0].offsetTop + _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elMainContent[0].scrollTop;
204 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elMainContent.stop().animate({
205 scrollTop: offset
206 }, 600);
207 };
208 for (const table in tables) {
209 const elItemStep = _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elLPOverlay[0].querySelector('.lp-item-step').cloneNode(true);
210 const input = elItemStep.querySelector('input');
211 const label = elItemStep.querySelector('label');
212 label.textContent = `Table: ${table}`;
213 input.value = table;
214 elGroupStep.append(elItemStep);
215 }
216 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].callBackYes = () => {
217 const url = '/lp/v1/admin/tools/create-indexs';
218 const params = {
219 tables,
220 table
221 };
222 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo[0].style.display = 'none';
223 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes[0].style.display = 'none';
224 showProgress(table, 0.1);
225 const functions = {
226 success: res => {
227 const {
228 status,
229 message,
230 data: {
231 table,
232 percent
233 }
234 } = res;
235 showProgress(params.table, percent);
236 if (undefined !== table) {
237 if (params.table !== table) {
238 showProgress(table, 0.1);
239 scrollToStepCurrent(table);
240 }
241 params.table = table;
242 }
243 if ('success' === status) {
244 setTimeout(() => {
245 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])(url, params, functions);
246 }, 2000);
247 } else if ('finished' === status) {
248 console.log('finished');
249 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo[0].style.display = 'inline-block';
250 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo[0].textContent = 'Finish';
251 } else {
252 console.log(message);
253 }
254 },
255 error: err => {
256 console.log(err);
257 },
258 completed: () => {}
259 };
260 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])(url, params, functions);
261 };
262 },
263 error: err => {},
264 completed: () => {}
265 };
266 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])(url, params, functions);
267 });
268 };
269 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createIndexes);
270
271 /***/ },
272
273 /***/ "./assets/src/apps/js/admin/pages/tools/database/re-upgrade-db.js"
274 /*!************************************************************************!*\
275 !*** ./assets/src/apps/js/admin/pages/tools/database/re-upgrade-db.js ***!
276 \************************************************************************/
277 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
278
279 "use strict";
280 __webpack_require__.r(__webpack_exports__);
281 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
282 /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
283 /* harmony export */ });
284 /* harmony import */ var _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../utils/lp-modal-overlay */ "./assets/src/apps/js/utils/lp-modal-overlay.js");
285 /* harmony import */ var _utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../utils/handle-ajax-api */ "./assets/src/apps/js/utils/handle-ajax-api.js");
286
287
288 const reUpgradeDB = () => {
289 const elToolReUpgradeDB = document.querySelector('#lp-tool-re-upgrade-db');
290 if (!elToolReUpgradeDB) {
291 return;
292 }
293
294 // Check valid to show popup re-upgrade
295 let url = 'lp/v1/database/check-db-valid-re-upgrade';
296 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])(url, {}, {
297 success(res) {
298 const {
299 data: {
300 can_re_upgrade
301 }
302 } = res;
303 if (!can_re_upgrade) {
304 return;
305 }
306 elToolReUpgradeDB.style.display = 'block';
307 const elBtnReUpradeDB = elToolReUpgradeDB.querySelector('.lp-btn-re-upgrade-db');
308 const elMessage = elToolReUpgradeDB.querySelector('.learn-press-message');
309 elBtnReUpradeDB.addEventListener('click', () => {
310 // eslint-disable-next-line no-alert
311 if (confirm('Are you want to Re Upgrade!')) {
312 url = 'lp/v1/database/del-tb-lp-upgrade-db';
313 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])(url, {}, {
314 success(res) {
315 const {
316 status,
317 message,
318 data: {
319 url
320 }
321 } = res;
322 if ('success' === status && undefined !== url) {
323 window.location.href = url;
324 }
325 },
326 error(err) {
327 elMessage.classList.add('error');
328 elMessage.textContent = err.message;
329 elMessage.style.display = 'block';
330 }
331 });
332 }
333 });
334 },
335 error(err) {}
336 });
337 };
338 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (reUpgradeDB);
339
340 /***/ },
341
342 /***/ "./assets/src/apps/js/admin/pages/tools/database/upgrade.js"
343 /*!******************************************************************!*\
344 !*** ./assets/src/apps/js/admin/pages/tools/database/upgrade.js ***!
345 \******************************************************************/
346 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
347
348 "use strict";
349 __webpack_require__.r(__webpack_exports__);
350 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
351 /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
352 /* harmony export */ });
353 /* harmony import */ var _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../utils/lp-modal-overlay */ "./assets/src/apps/js/utils/lp-modal-overlay.js");
354 /* harmony import */ var _utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../utils/handle-ajax-api */ "./assets/src/apps/js/utils/handle-ajax-api.js");
355
356
357 const $ = jQuery;
358 const elToolUpgradeDB = $('#lp-tool-upgrade-db');
359 const upgradeDB = () => {
360 let isUpgrading = 0;
361 const elWrapperTermsUpgrade = elToolUpgradeDB.find('.wrapper-terms-upgrade');
362 const elStatusUpgrade = elToolUpgradeDB.find('.wrapper-lp-status-upgrade');
363 const elWrapperUpgradeMessage = elToolUpgradeDB.find('.wrapper-lp-upgrade-message');
364 let checkValidBeforeUpgrade = null;
365 const elMessageUpgrading = $('input[name=message-when-upgrading]').val();
366 if (elWrapperTermsUpgrade.length) {
367 // Show Terms Upgrade.
368 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setContentModal(elWrapperTermsUpgrade.html());
369 const elTermUpdate = _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elLPOverlay.find('.terms-upgrade');
370 const elLPAgreeTerm = elTermUpdate.find('input[name=lp-agree-term]');
371 const elTermMessage = elTermUpdate.find('.error');
372 checkValidBeforeUpgrade = function () {
373 elTermMessage.hide();
374 elTermMessage.removeClass('learn-press-message');
375 if (elLPAgreeTerm.is(':checked')) {
376 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])('/lp/v1/database/agree_terms', {
377 agree_terms: 1
378 }, {});
379 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elFooter.find('.learn-press-notice').remove();
380 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setContentModal(elStatusUpgrade.html());
381 return true;
382 }
383 elTermMessage.show();
384 elTermMessage.addClass('learn-press-message');
385 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elMainContent.animate({
386 scrollTop: elTermMessage.offset().top
387 });
388 return false;
389 };
390 } else {
391 // Show Steps Upgrade.
392 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setContentModal(elStatusUpgrade.html());
393 checkValidBeforeUpgrade = function () {
394 return true;
395 };
396 }
397 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setTitleModal(elToolUpgradeDB.find('h2').html());
398 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes.text('Upgrade');
399 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes.show();
400 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo.text('Cancel');
401 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].callBackYes = function (e) {
402 if (!checkValidBeforeUpgrade()) {
403 return;
404 }
405 const target = e.target;
406 // Show message note when upgrading.
407 if (target.innerText === 'Upgrade') {
408 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elFooter.prepend('<span class="learn-press-notice">' + elMessageUpgrading + '</span>');
409 }
410 isUpgrading = 1;
411 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes.hide();
412 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo.hide();
413 const urlHandle = '/lp/v1/database/upgrade';
414 const elGroupStep = _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elLPOverlay.find('.lp-group-step');
415 const elItemSteps = elToolUpgradeDB.find('.lp-item-step');
416
417 // Get params.
418 const steps = [];
419 $.each(elItemSteps, function (i, el) {
420 const elItemStepsTmp = $(el);
421 if (!elItemStepsTmp.hasClass('completed')) {
422 const step = elItemStepsTmp.find('input').val();
423 steps.push(step);
424 }
425 });
426 const params = {
427 steps,
428 step: steps[0]
429 };
430 let elItemStepCurrent = null;
431
432 // Show progress when upgrading.
433 const showProgress = (stepCurrent, percent) => {
434 elItemStepCurrent = elGroupStep.find('input[value=' + stepCurrent + ']').closest('.lp-item-step');
435 elItemStepCurrent.addClass('running');
436 if (100 === percent) {
437 elItemStepCurrent.removeClass('running').addClass('completed');
438 }
439 elItemStepCurrent.find('.progress-bar').css('width', percent + '%');
440 elItemStepCurrent.find('.percent').text(percent + '%');
441 };
442
443 // Scroll to step current.
444 const scrollToStepCurrent = stepCurrent => {
445 elItemStepCurrent = elGroupStep.find('input[value=' + stepCurrent + ']').closest('.lp-item-step');
446 if (!elItemStepCurrent.length) {
447 return;
448 }
449 const offset = elItemStepCurrent.offset().top - _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elMainContent.offset().top + _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elMainContent.scrollTop();
450 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elMainContent.stop().animate({
451 scrollTop: offset
452 }, 600);
453 };
454 showProgress(steps[0], 0.1);
455 const funcCallBack = {
456 success: res => {
457 showProgress(params.step, res.percent);
458 if (params.step !== res.name) {
459 showProgress(res.name, 0.1);
460 }
461 scrollToStepCurrent(params.step);
462 if ('success' === res.status) {
463 params.step = res.name;
464 params.data = res.data;
465 setTimeout(() => {
466 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])(urlHandle, params, funcCallBack);
467 }, 800);
468 } else if ('finished' === res.status) {
469 isUpgrading = 0;
470 elItemStepCurrent.removeClass('running').addClass('completed');
471 setTimeout(() => {
472 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setContentModal(elWrapperUpgradeMessage.html());
473 }, 1000);
474 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elFooter.find('.learn-press-notice').remove();
475 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo.text('Close');
476 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo.show();
477 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo.on('click', () => {
478 window.location.reload();
479 });
480 } else {
481 isUpgrading = 0;
482 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elFooter.find('.learn-press-notice').remove();
483 elItemStepCurrent.removeClass('running').addClass('error');
484 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setContentModal(elWrapperUpgradeMessage.html(), function () {
485 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes.text('Retry').show();
486 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].callBackYes = () => {
487 window.location.href = lpGlobalSettings.siteurl + '/wp-admin/admin.php?page=learn-press-tools&tab=database&action=upgrade-db';
488 };
489 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo.show();
490 if (!res.message) {
491 res.message = 'Upgrade not success! Please clear cache, restart sever then retry or contact to LP to help';
492 }
493 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elMainContent.find('.learn-press-message').addClass('error').html(res.message);
494 });
495 }
496 },
497 error: err => {
498 isUpgrading = 0;
499 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setContentModal(elWrapperUpgradeMessage.html(), function () {
500 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnYes.text('Retry').show();
501 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].callBackYes = () => {
502 window.location.location = 'wp-admin/admin.php?page=learn-press-tools&tab=database&action=upgrade-db';
503 };
504 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elBtnNo.show();
505 if (!err.message) {
506 err.message = 'Upgrade not success! Something wrong. Please clear cache, restart sever then retry or contact to LP to help';
507 }
508 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elMainContent.find('.learn-press-message').addClass('error').html(err.message);
509 });
510 },
511 completed: () => {}
512 };
513 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])(urlHandle, params, funcCallBack);
514 };
515
516 // Show confirm if, within upgrading, the user reload the page.
517 window.onbeforeunload = function () {
518 if (isUpgrading) {
519 return 'LP is upgrading Database. Are you want to reload page?';
520 }
521 };
522
523 // Show confirm if, within upgrading, the user close the page.
524 window.onclose = function () {
525 if (isUpgrading) {
526 return 'LP is upgrading Database. Are you want to close page?';
527 }
528 };
529 };
530 const getStepsUpgradeStatus = () => {
531 if (!elToolUpgradeDB.length) {
532 return;
533 }
534
535 // initial LP Modal Overlay
536 if (!_utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].init()) {
537 return;
538 }
539 const elWrapperStatusUpgrade = $('.wrapper-lp-status-upgrade');
540 const urlHandle = '/lp/v1/database/get_steps';
541
542 // Show dialog upgrade database.
543 const queryString = window.location.search;
544 const urlParams = new URLSearchParams(queryString);
545 const action = urlParams.get('action');
546 if ('upgrade-db' === action) {
547 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elLPOverlay.show();
548 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setTitleModal(elToolUpgradeDB.find('h2').html());
549 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].setContentModal($('.wrapper-lp-loading').html());
550 }
551 const funcCallBack = {
552 success: res => {
553 const {
554 steps_completed,
555 steps_default
556 } = res;
557 if (undefined === steps_completed || undefined === steps_default) {
558 console.log('invalid steps_completed and steps_default');
559 return false;
560 }
561
562 // Render show Steps.
563 let htmlStep = '';
564 for (const k_gr_steps in steps_default) {
565 const step_group = steps_default[k_gr_steps];
566 const steps = step_group.steps;
567 htmlStep = '<div class="lp-group-step">';
568 htmlStep += '<h3>' + step_group.label + '</h3>';
569 for (const k_step in steps) {
570 const step = steps[k_step];
571 let completed = '';
572 if (undefined !== steps_completed[k_step]) {
573 completed = 'completed';
574 }
575 htmlStep += '<div class="lp-item-step ' + completed + '">';
576 htmlStep += '<div class="lp-item-step-left"><input type="hidden" name="lp_steps_upgrade_db[]" value="' + step.name + '" /></div>';
577 htmlStep += '<div class="lp-item-step-right">';
578 htmlStep += '<label for=""><strong></strong>' + step.label + '</label>';
579 htmlStep += '<div class="description">' + step.description + '</div>';
580 htmlStep += '<div class="percent"></div>';
581 htmlStep += '<span class="progress-bar"></span>';
582 htmlStep += '</div>';
583 htmlStep += '</div>';
584 }
585 htmlStep += '</div>';
586 elWrapperStatusUpgrade.append(htmlStep);
587 const elBtnUpgradeDB = $('.lp-btn-upgrade-db');
588 if ('upgrade-db' === action) {
589 upgradeDB();
590 }
591 elBtnUpgradeDB.on('click', function () {
592 _utils_lp_modal_overlay__WEBPACK_IMPORTED_MODULE_0__["default"].elLPOverlay.show();
593 upgradeDB();
594 });
595 }
596 },
597 error: err => {},
598 completed: () => {}
599 };
600 (0,_utils_handle_ajax_api__WEBPACK_IMPORTED_MODULE_1__["default"])(urlHandle, {}, funcCallBack);
601 };
602 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getStepsUpgradeStatus);
603
604 /***/ },
605
606 /***/ "./assets/src/apps/js/admin/pages/tools/handle-sample-data.js"
607 /*!********************************************************************!*\
608 !*** ./assets/src/apps/js/admin/pages/tools/handle-sample-data.js ***!
609 \********************************************************************/
610 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
611
612 "use strict";
613 __webpack_require__.r(__webpack_exports__);
614 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
615 /* harmony export */ "default": () => (/* binding */ HandleSampleData)
616 /* harmony export */ });
617 /* harmony import */ var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lpAssetsJsPath/utils.js */ "./assets/src/js/utils.js");
618 /* harmony import */ var lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lpAssetsJsPath/lpToastify.js */ "./assets/src/js/lpToastify.js");
619 /**
620 * Handle install/uninstall sample course data on the Tools page.
621 *
622 * @since 4.4.5
623 * @version 1.0.0
624 */
625
626
627 class HandleSampleData {
628 static selectors = {
629 wrapper: '.lp-install-sample',
630 form: '.lp-form-handle-sample-data',
631 elBtnHandleSampleData: '.lp-btn-install-sample-handle',
632 elTriggerToggle: '.lp-install-sample__toggle-options',
633 elMessage: '.lp-install-sample-message'
634 };
635 constructor() {
636 this.wrapper = null;
637 }
638 init() {
639 this.wrapper = document.querySelector(HandleSampleData.selectors.wrapper);
640 if (!this.wrapper) {
641 return;
642 }
643 this.preventFormSubmit();
644 this.events();
645 }
646 preventFormSubmit() {
647 const form = this.wrapper.querySelector(HandleSampleData.selectors.form);
648 if (form) {
649 form.addEventListener('submit', e => {
650 e.preventDefault();
651 });
652 }
653 }
654 events() {
655 if (HandleSampleData._loadedEvents) {
656 return;
657 }
658 HandleSampleData._loadedEvents = this;
659 lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.eventHandlers('click', [{
660 selector: HandleSampleData.selectors.elBtnHandleSampleData,
661 class: this,
662 callBack: this.handleAction.name
663 }, {
664 selector: HandleSampleData.selectors.elTriggerToggle,
665 callBack: args => {
666 const {
667 e,
668 target
669 } = args;
670 const elForm = this.wrapper.querySelector(HandleSampleData.selectors.form);
671 if (elForm) {
672 elForm.classList.toggle('lp-hidden');
673 const textShow = target.dataset.showText;
674 const textHide = target.dataset.hideText;
675 target.textContent = elForm.classList.contains('lp-hidden') ? textShow : textHide;
676 }
677 }
678 }]);
679 }
680 handleAction(args) {
681 const {
682 e,
683 target
684 } = args;
685 const button = target.closest(HandleSampleData.selectors.elBtnHandleSampleData);
686 e.preventDefault();
687 const elMessage = this.wrapper.querySelector(HandleSampleData.selectors.elMessage);
688 const message = button.dataset.message;
689 if (!message || !confirm(message)) {
690 return;
691 }
692 elMessage.innerHTML = '';
693 lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(button, true);
694 const wrapper = button.closest(HandleSampleData.selectors.wrapper);
695 const elForm = wrapper.querySelector(HandleSampleData.selectors.form);
696 let dataSend = lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.getDataOfForm(elForm);
697 dataSend.action = button.dataset.action;
698 dataSend.id_url = 'handle-sample-data';
699 const callBack = {
700 success: response => {
701 const {
702 status,
703 message,
704 data
705 } = response;
706 if ('success' === status) {
707 this.wrapper.querySelector(HandleSampleData.selectors.elMessage).innerHTML = data.html;
708 } else {
709 throw new Error(message);
710 }
711 },
712 error: error => {
713 lpAssetsJsPath_lpToastify_js__WEBPACK_IMPORTED_MODULE_1__.show(error, 'error');
714 },
715 completed: () => {
716 lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl(button, false);
717 setTimeout(() => {
718 elMessage.innerHTML = '';
719 }, 3000);
720 }
721 };
722 window.lpAJAXG.fetchAJAX(dataSend, callBack);
723 }
724 }
725
726 /***/ },
727
728 /***/ "./assets/src/apps/js/admin/pages/tools/reset-data/course.js"
729 /*!*******************************************************************!*\
730 !*** ./assets/src/apps/js/admin/pages/tools/reset-data/course.js ***!
731 \*******************************************************************/
732 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
733
734 "use strict";
735 __webpack_require__.r(__webpack_exports__);
736 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
737 /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
738 /* harmony export */ });
739 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
740 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
741
742 /**
743 * Reset course progress.
744 *
745 * @since 4.0.5.
746 * @author Nhamdv - Code choi choi in Physcode.
747 */
748 const {
749 __
750 } = wp.i18n;
751 const {
752 TextControl,
753 Button,
754 Spinner,
755 CheckboxControl,
756 Notice
757 } = wp.components;
758 const {
759 useState,
760 useEffect
761 } = wp.element;
762 const {
763 addQueryArgs
764 } = wp.url;
765 const ResetCourse = () => {
766 const [loading, setLoading] = useState(false);
767 const [search, setSearch] = useState('');
768 const [data, setData] = useState([]);
769 const [checkData, setCheckData] = useState([]);
770 const [message, setMessage] = useState([]);
771 const [loadingReset, setLoadingReset] = useState(false);
772 useEffect(() => {
773 responsiveData(search);
774 }, [search]);
775 const responsiveData = async s => {
776 try {
777 if (!s || loading) {
778 setMessage([]);
779 setData([]);
780 return;
781 }
782 if (s.length < 3) {
783 setMessage([{
784 status: 'error',
785 message: 'Please enter at least 3 characters to searching course.'
786 }]);
787 setData([]);
788 return;
789 }
790 setLoading(true);
791 const response = await wp.apiFetch({
792 path: addQueryArgs('lp/v1/admin/tools/reset-data/search-courses', {
793 s
794 }),
795 method: 'GET'
796 });
797 const {
798 status,
799 data
800 } = response;
801 setLoading(false);
802 if (status === 'success') {
803 setData(data);
804 setMessage([]);
805 } else {
806 setMessage([{
807 status: 'error',
808 message: response.message || 'LearnPress: Search Course Fail!'
809 }]);
810 setData([]);
811 }
812 } catch (error) {
813 console.log(error.message);
814 }
815 };
816 function checkItems(id) {
817 const datas = [...checkData];
818 if (datas.includes(id)) {
819 const index = datas.indexOf(id);
820 if (index > -1) {
821 datas.splice(index, 1);
822 }
823 } else {
824 datas.push(id);
825 }
826 setCheckData(datas);
827 }
828 const resetCourse = async () => {
829 if (checkData.length === 0) {
830 setMessage([{
831 status: 'error',
832 message: 'Please chooce Course for reset data!'
833 }]);
834 return;
835 }
836
837 // eslint-disable-next-line no-alert
838 if (!confirm('Are you sure to reset course progress of all users enrolled this course?')) {
839 return;
840 }
841 const notice = [];
842 try {
843 setLoadingReset(true);
844 for (const courseId of checkData) {
845 const response = await wp.apiFetch({
846 path: addQueryArgs('lp/v1/admin/tools/reset-data/reset-courses', {
847 courseId
848 }),
849 method: 'GET'
850 });
851 const {
852 status,
853 data,
854 message
855 } = response;
856 notice.push({
857 status,
858 message: message || `Course #${courseId} reset successfully!`
859 });
860 }
861 setLoadingReset(false);
862 } catch (error) {
863 notice.push({
864 status: 'error',
865 message: error.message || `LearnPress Error: Reset Course Data.`
866 });
867 }
868 setMessage(notice);
869 };
870 return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", null, __('Reset Course Progress', 'learnpress')), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
871 className: "description"
872 }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", null, __('This action will reset course progress of all users who have enrolled.', 'learnpress')), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", null, __('Search results only show if courses have user data.', 'learnpress')), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(TextControl, {
873 placeholder: __('Search course by name', 'learnpress'),
874 value: search,
875 onChange: value => setSearch(value),
876 style: {
877 width: 300
878 }
879 }))), loading && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(Spinner, null), data.length > 0 && (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
880 className: "lp-reset-course_progress",
881 style: {
882 border: '1px solid #eee'
883 }
884 }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
885 style: {
886 background: '#eee'
887 }
888 }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(CheckboxControl, {
889 checked: checkData.length === data.length,
890 onChange: () => {
891 if (checkData.length === data.length) {
892 setCheckData([]);
893 } else {
894 setCheckData(data.map(dt => dt.id));
895 }
896 },
897 style: {
898 margin: 0
899 }
900 })), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, __('ID', 'learnpress')), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, __('Name', 'learnpress')), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, __('Students', 'learnpress')))), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
901 style: {
902 height: '100%',
903 maxHeight: 200,
904 overflow: 'auto'
905 }
906 }, data.map(dt => {
907 return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
908 style: {
909 borderTop: '1px solid #eee'
910 },
911 key: dt.id
912 }, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(CheckboxControl, {
913 checked: checkData.includes(dt.id),
914 onChange: () => checkItems(dt.id)
915 })), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, "#", dt.id), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, dt.title), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, dt.students));
916 }))), loadingReset ? (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(Spinner, null) : (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(Button, {
917 isPrimary: true,
918 onClick: () => resetCourse(),
919 style: {
920 marginTop: 10,
921 height: 30
922 }
923 }, __('Reset now', 'learnpress'))), message.length > 0 && message.map((mess, index) => {
924 return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(Notice, {
925 status: mess.status,
926 key: index,
927 isDismissible: false
928 }, mess.message);
929 }), (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)("style", null, '\
930 .lp-reset-course_progress .components-base-control__field {\
931 margin: 0;\
932 }\
933 .components-notice{\
934 margin-left: 0;\
935 }\
936 .lp-reset-course_progress > div > div{\
937 display: grid;\
938 grid-template-columns: 80px 50px 1fr 80px;\
939 align-items: center;\
940 }\
941 .lp-reset-course_progress > div > div > div{\
942 maegin: 0;\
943 padding: 8px 10px;\
944 }\
945 '));
946 };
947 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ResetCourse);
948
949 /***/ },
950
951 /***/ "./assets/src/apps/js/admin/pages/tools/reset-data/index.js"
952 /*!******************************************************************!*\
953 !*** ./assets/src/apps/js/admin/pages/tools/reset-data/index.js ***!
954 \******************************************************************/
955 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
956
957 "use strict";
958 __webpack_require__.r(__webpack_exports__);
959 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
960 /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
961 /* harmony export */ });
962 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
963 /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
964 /* harmony import */ var _course__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./course */ "./assets/src/apps/js/admin/pages/tools/reset-data/course.js");
965
966
967 const resetData = () => {
968 if (document.querySelectorAll('#learn-press-reset-course-users').length > 0) {
969 wp.element.render((0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_course__WEBPACK_IMPORTED_MODULE_1__["default"], null), [...document.querySelectorAll('#learn-press-reset-course-users')][0]);
970 }
971 };
972 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (resetData);
973
974 /***/ },
975
976 /***/ "./assets/src/apps/js/utils/handle-ajax-api.js"
977 /*!*****************************************************!*\
978 !*** ./assets/src/apps/js/utils/handle-ajax-api.js ***!
979 \*****************************************************/
980 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
981
982 "use strict";
983 __webpack_require__.r(__webpack_exports__);
984 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
985 /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
986 /* harmony export */ });
987 const handleAjax = function (url, params, functions) {
988 wp.apiFetch({
989 path: url,
990 method: 'POST',
991 data: params
992 }).then(res => {
993 if ('function' === typeof functions.success) {
994 functions.success(res);
995 }
996 }).catch(err => {
997 if ('function' === typeof functions.error) {
998 functions.error(err);
999 }
1000 }).then(() => {
1001 if ('function' === typeof functions.completed) {
1002 functions.completed();
1003 }
1004 });
1005 };
1006 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (handleAjax);
1007
1008 /***/ },
1009
1010 /***/ "./assets/src/apps/js/utils/lp-modal-overlay.js"
1011 /*!******************************************************!*\
1012 !*** ./assets/src/apps/js/utils/lp-modal-overlay.js ***!
1013 \******************************************************/
1014 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1015
1016 "use strict";
1017 __webpack_require__.r(__webpack_exports__);
1018 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1019 /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1020 /* harmony export */ });
1021 const $ = jQuery;
1022 let elLPOverlay = null;
1023 const lpModalOverlay = {
1024 elLPOverlay: null,
1025 elMainContent: null,
1026 elTitle: null,
1027 elBtnYes: null,
1028 elBtnNo: null,
1029 elFooter: null,
1030 elCalledModal: null,
1031 callBackYes: null,
1032 instance: null,
1033 init() {
1034 if (this.instance) {
1035 return true;
1036 }
1037 this.elLPOverlay = $('.lp-overlay');
1038 if (!this.elLPOverlay.length) {
1039 return false;
1040 }
1041 elLPOverlay = this.elLPOverlay;
1042 this.elMainContent = elLPOverlay.find('.main-content');
1043 this.elTitle = elLPOverlay.find('.modal-title');
1044 this.elBtnYes = elLPOverlay.find('.btn-yes');
1045 this.elBtnNo = elLPOverlay.find('.btn-no');
1046 this.elFooter = elLPOverlay.find('.lp-modal-footer');
1047 $(document).on('click', '.close, .btn-no', function () {
1048 elLPOverlay.hide();
1049 });
1050 $(document).on('click', '.btn-yes', function (e) {
1051 e.preventDefault();
1052 e.stopPropagation();
1053 if ('function' === typeof lpModalOverlay.callBackYes) {
1054 lpModalOverlay.callBackYes(e);
1055 }
1056 });
1057 this.instance = this;
1058 return true;
1059 },
1060 setElCalledModal(elCalledModal) {
1061 this.elCalledModal = elCalledModal;
1062 },
1063 setContentModal(content, event) {
1064 this.elMainContent.html(content);
1065 if ('function' === typeof event) {
1066 event();
1067 }
1068 },
1069 setTitleModal(content) {
1070 this.elTitle.html(content);
1071 }
1072 };
1073 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (lpModalOverlay);
1074
1075 /***/ },
1076
1077 /***/ "./assets/src/js/lpToastify.js"
1078 /*!*************************************!*\
1079 !*** ./assets/src/js/lpToastify.js ***!
1080 \*************************************/
1081 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1082
1083 "use strict";
1084 __webpack_require__.r(__webpack_exports__);
1085 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1086 /* harmony export */ show: () => (/* binding */ show)
1087 /* harmony export */ });
1088 /* harmony import */ var toastify_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! toastify-js */ "./node_modules/toastify-js/src/toastify.js");
1089 /* harmony import */ var toastify_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(toastify_js__WEBPACK_IMPORTED_MODULE_0__);
1090 /* harmony import */ var toastify_js_src_toastify_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! toastify-js/src/toastify.css */ "./node_modules/toastify-js/src/toastify.css");
1091 /**
1092 * Utils functions
1093 *
1094 * @param url
1095 * @param data
1096 * @param functions
1097 * @since 4.3.0
1098 * @version 1.0.0
1099 */
1100
1101
1102 const argsToastify = {
1103 text: '',
1104 gravity: lpData.toast.gravity,
1105 // `top` or `bottom`
1106 position: lpData.toast.position,
1107 // `left`, `center` or `right`
1108 className: `${lpData.toast.classPrefix}`,
1109 close: lpData.toast.close == 1,
1110 stopOnFocus: lpData.toast.stopOnFocus == 1,
1111 duration: lpData.toast.duration
1112 };
1113 const show = (message, status = 'success', argsCustom) => {
1114 let args = argsToastify;
1115 if (argsCustom) {
1116 args = {
1117 ...args,
1118 ...argsCustom
1119 };
1120 }
1121 const toastify = new (toastify_js__WEBPACK_IMPORTED_MODULE_0___default())({
1122 ...args,
1123 text: message,
1124 className: `${lpData.toast.classPrefix} ${status}`
1125 });
1126 toastify.showToast();
1127 };
1128
1129 /***/ },
1130
1131 /***/ "./assets/src/js/utils.js"
1132 /*!********************************!*\
1133 !*** ./assets/src/js/utils.js ***!
1134 \********************************/
1135 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1136
1137 "use strict";
1138 __webpack_require__.r(__webpack_exports__);
1139 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1140 /* harmony export */ debounce: () => (/* binding */ debounce),
1141 /* harmony export */ eventHandlers: () => (/* binding */ eventHandlers),
1142 /* harmony export */ fullScreenView: () => (/* binding */ fullScreenView),
1143 /* harmony export */ getDataOfForm: () => (/* binding */ getDataOfForm),
1144 /* harmony export */ getFieldKeysOfForm: () => (/* binding */ getFieldKeysOfForm),
1145 /* harmony export */ listenElementCreated: () => (/* binding */ listenElementCreated),
1146 /* harmony export */ listenElementViewed: () => (/* binding */ listenElementViewed),
1147 /* harmony export */ lpAddQueryArgs: () => (/* binding */ lpAddQueryArgs),
1148 /* harmony export */ lpAjaxParseJsonOld: () => (/* binding */ lpAjaxParseJsonOld),
1149 /* harmony export */ lpClassName: () => (/* binding */ lpClassName),
1150 /* harmony export */ lpFetchAPI: () => (/* binding */ lpFetchAPI),
1151 /* harmony export */ lpGetCurrentURLNoParam: () => (/* binding */ lpGetCurrentURLNoParam),
1152 /* harmony export */ lpOnElementReady: () => (/* binding */ lpOnElementReady),
1153 /* harmony export */ lpSetLoadingEl: () => (/* binding */ lpSetLoadingEl),
1154 /* harmony export */ lpShowHideEl: () => (/* binding */ lpShowHideEl),
1155 /* harmony export */ mergeDataWithDatForm: () => (/* binding */ mergeDataWithDatForm),
1156 /* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse),
1157 /* harmony export */ toggleEnable: () => (/* binding */ toggleEnable)
1158 /* harmony export */ });
1159 /**
1160 * Utils functions
1161 *
1162 * @param url
1163 * @param data
1164 * @param functions
1165 * @since 4.2.5.1
1166 * @version 1.0.7
1167 */
1168 const lpClassName = {
1169 hidden: 'lp-hidden',
1170 loading: 'loading',
1171 elCollapse: 'lp-collapse',
1172 elSectionToggle: '.lp-section-toggle',
1173 elTriggerToggle: '.lp-trigger-toggle',
1174 elBtnFullScreen: '.lp-btn-full-screen-view',
1175 elFullScreen: 'lp-full-screen-view',
1176 elBtnFullScreenClose: 'lp-full-screen-view__close'
1177 };
1178 const lpFetchAPI = (url, data = {}, functions = {}) => {
1179 if ('function' === typeof functions.before) {
1180 functions.before();
1181 }
1182 fetch(url, {
1183 method: 'GET',
1184 ...data
1185 }).then(response => response.json()).then(response => {
1186 if ('function' === typeof functions.success) {
1187 functions.success(response);
1188 }
1189 }).catch(err => {
1190 if ('function' === typeof functions.error) {
1191 functions.error(err);
1192 }
1193 }).finally(() => {
1194 if ('function' === typeof functions.completed) {
1195 functions.completed();
1196 }
1197 });
1198 };
1199
1200 /**
1201 * Get current URL without params.
1202 *
1203 * @since 4.2.5.1
1204 */
1205 const lpGetCurrentURLNoParam = () => {
1206 let currentUrl = window.location.href;
1207 const hasParams = currentUrl.includes('?');
1208 if (hasParams) {
1209 currentUrl = currentUrl.split('?')[0];
1210 }
1211 return currentUrl;
1212 };
1213 const lpAddQueryArgs = (endpoint, args) => {
1214 const url = new URL(endpoint);
1215 Object.keys(args).forEach(arg => {
1216 url.searchParams.set(arg, args[arg]);
1217 });
1218 return url;
1219 };
1220
1221 /**
1222 * Listen element viewed.
1223 *
1224 * @param el
1225 * @param callback
1226 * @since 4.2.5.8
1227 */
1228 const listenElementViewed = (el, callback) => {
1229 const observerSeeItem = new IntersectionObserver(function (entries) {
1230 for (const entry of entries) {
1231 if (entry.isIntersecting) {
1232 callback(entry);
1233 }
1234 }
1235 });
1236 observerSeeItem.observe(el);
1237 };
1238
1239 /**
1240 * Listen element created.
1241 *
1242 * @param callback
1243 * @since 4.2.5.8
1244 */
1245 const listenElementCreated = callback => {
1246 const observerCreateItem = new MutationObserver(function (mutations) {
1247 mutations.forEach(function (mutation) {
1248 if (mutation.addedNodes) {
1249 mutation.addedNodes.forEach(function (node) {
1250 if (node.nodeType === 1) {
1251 callback(node);
1252 }
1253 });
1254 }
1255 });
1256 });
1257 observerCreateItem.observe(document, {
1258 childList: true,
1259 subtree: true
1260 });
1261 // End.
1262 };
1263
1264 /**
1265 * Listen element created.
1266 *
1267 * @param selector
1268 * @param callback
1269 * @since 4.2.7.1
1270 */
1271 const lpOnElementReady = (selector, callback) => {
1272 const element = document.querySelector(selector);
1273 if (element) {
1274 callback(element);
1275 return;
1276 }
1277 const observer = new MutationObserver((mutations, obs) => {
1278 const element = document.querySelector(selector);
1279 if (element) {
1280 obs.disconnect();
1281 callback(element);
1282 }
1283 });
1284 observer.observe(document.documentElement, {
1285 childList: true,
1286 subtree: true
1287 });
1288 };
1289
1290 // Parse JSON from string with content include LP_AJAX_START.
1291 const lpAjaxParseJsonOld = data => {
1292 if (typeof data !== 'string') {
1293 return data;
1294 }
1295 const m = String.raw({
1296 raw: data
1297 }).match(/<-- LP_AJAX_START -->(.*)<-- LP_AJAX_END -->/s);
1298 try {
1299 if (m) {
1300 data = JSON.parse(m[1].replace(/(?:\r\n|\r|\n)/g, ''));
1301 } else {
1302 data = JSON.parse(data);
1303 }
1304 } catch (e) {
1305 data = {};
1306 }
1307 return data;
1308 };
1309
1310 // status 0: hide, 1: show
1311 const lpShowHideEl = (el, status = 0) => {
1312 if (!el) {
1313 return;
1314 }
1315 if (!status) {
1316 el.classList.add(lpClassName.hidden);
1317 } else {
1318 el.classList.remove(lpClassName.hidden);
1319 }
1320 };
1321
1322 // status 0: hide, 1: show
1323 const lpSetLoadingEl = (el, status) => {
1324 if (!el) {
1325 return;
1326 }
1327 if (!status) {
1328 el.classList.remove(lpClassName.loading);
1329 } else {
1330 el.classList.add(lpClassName.loading);
1331 }
1332 };
1333
1334 // Toggle collapse section
1335 const toggleCollapse = (e, target, elTriggerClassName = '', elsExclude = [], callback) => {
1336 if (!elTriggerClassName) {
1337 elTriggerClassName = lpClassName.elTriggerToggle;
1338 }
1339
1340 // Exclude elements, which should not trigger the collapse toggle
1341 if (elsExclude && elsExclude.length > 0) {
1342 for (const elExclude of elsExclude) {
1343 if (target.closest(elExclude)) {
1344 return;
1345 }
1346 }
1347 }
1348 const elTrigger = target.closest(elTriggerClassName);
1349 if (!elTrigger) {
1350 return;
1351 }
1352
1353 //console.log( 'elTrigger', elTrigger );
1354
1355 const elSectionToggle = elTrigger.closest(`${lpClassName.elSectionToggle}`);
1356 if (!elSectionToggle) {
1357 return;
1358 }
1359 elSectionToggle.classList.toggle(`${lpClassName.elCollapse}`);
1360 if ('function' === typeof callback) {
1361 callback(elSectionToggle);
1362 }
1363 };
1364
1365 // Get data of form
1366 const getDataOfForm = form => {
1367 const dataSend = {};
1368 const formData = new FormData(form);
1369 for (const pair of formData.entries()) {
1370 const key = pair[0];
1371 const value = formData.getAll(key);
1372 if (!dataSend.hasOwnProperty(key)) {
1373 // Convert value array to string.
1374 dataSend[key] = value.join(',');
1375 }
1376 }
1377 return dataSend;
1378 };
1379
1380 // Get field keys of form
1381 const getFieldKeysOfForm = form => {
1382 const keys = [];
1383 const elements = form.elements;
1384 for (let i = 0; i < elements.length; i++) {
1385 const name = elements[i].name;
1386 if (name && !keys.includes(name)) {
1387 keys.push(name);
1388 }
1389 }
1390 return keys;
1391 };
1392
1393 // Merge data handle with data form.
1394 const mergeDataWithDatForm = (elForm, dataHandle) => {
1395 const dataForm = getDataOfForm(elForm);
1396 const keys = getFieldKeysOfForm(elForm);
1397 keys.forEach(key => {
1398 if (!dataForm.hasOwnProperty(key)) {
1399 delete dataHandle[key];
1400 } else if (dataForm[key][0] === '') {
1401 delete dataForm[key];
1402 delete dataHandle[key];
1403 }
1404 });
1405 dataHandle = {
1406 ...dataHandle,
1407 ...dataForm
1408 };
1409 return dataHandle;
1410 };
1411
1412 /**
1413 * Event trigger
1414 * For each list of event handlers, listen event on document.
1415 *
1416 * eventName: 'click', 'change', ...
1417 * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ]
1418 *
1419 * @param eventName
1420 * @param eventHandlers
1421 */
1422 const eventHandlers = (eventName, eventHandlers) => {
1423 document.addEventListener(eventName, e => {
1424 const target = e.target;
1425 let args = {
1426 e,
1427 target
1428 };
1429 eventHandlers.forEach(eventHandler => {
1430 args = {
1431 ...args,
1432 ...eventHandler
1433 };
1434
1435 //console.log( args );
1436
1437 // Check condition before call back
1438 if (eventHandler.conditionBeforeCallBack) {
1439 if (eventHandler.conditionBeforeCallBack(args) !== true) {
1440 return;
1441 }
1442 }
1443
1444 // Special check for keydown event with checkIsEventEnter = true
1445 if (eventName === 'keydown' && eventHandler.checkIsEventEnter) {
1446 if (e.key !== 'Enter') {
1447 return;
1448 }
1449 }
1450 if (target.closest(eventHandler.selector)) {
1451 if (eventHandler.class) {
1452 // Call method of class, function callBack will understand exactly {this} is class object.
1453 eventHandler.class[eventHandler.callBack](args);
1454 } else {
1455 // For send args is objected, {this} is eventHandler object, not class object.
1456 eventHandler.callBack(args);
1457 }
1458 }
1459 });
1460 });
1461 };
1462
1463 /**
1464 * Debounce - delays function execution until after `wait` ms of inactivity.
1465 *
1466 * Each call resets the timer. Only the last call in a burst executes.
1467 *
1468 * USE CASES:
1469 * - Search inputs, form validation, window resize
1470 * - Multiple elements need independent timers
1471 * - When you need to call with different arguments
1472 *
1473 * EXAMPLES:
1474 * const debouncedSearch = debounce( (query) => fetchResults(query), 300 );
1475 * searchInput.addEventListener('input', (e) => debouncedSearch(e.target.value));
1476 *
1477 * const debouncedResize = debounce( recalculateLayout, 250 );
1478 * window.addEventListener('resize', debouncedResize);
1479 *
1480 * ⚠️ Create ONCE outside event handlers, not inside.
1481 *
1482 * @param {Function} func - Function to debounce (can be anonymous)
1483 * @param {number} wait - Milliseconds to wait (default: 500)
1484 * @return {Function} Debounced wrapper function
1485 * @since 4.3.7
1486 * @version 1.0.0
1487 */
1488 const debounce = (func, wait = 500) => {
1489 let timer;
1490 return args => {
1491 clearTimeout(timer);
1492 timer = setTimeout(() => func(args), wait);
1493 };
1494 };
1495
1496 /**
1497 * Initialize lp-toggle-enable components.
1498 *
1499 * Finds all `.lp-toggle-enable` elements and wires up toggle behavior.
1500 * Reads initial state from `data-enabled` attribute ("true"/"false").
1501 * Calls `data-on-toggle` callback (if provided via options) on state change.
1502 *
1503 * HTML structure:
1504 * <label class="lp-toggle-enable" data-enabled="true">
1505 * <input type="checkbox" class="lp-toggle-enable__input" />
1506 * <span class="lp-toggle-enable__track"></span>
1507 * </label>
1508 *
1509 * @param {string} selector CSS selector for toggle elements (default: '.lp-toggle-enable')
1510 * @param {Function} onToggle Optional callback( el, isEnabled ) called on state change
1511 * @since 4.4.5
1512 * @version 1.0.0
1513 */
1514 window.lpToggleEnableInit = 0;
1515 const toggleEnable = (onToggle = null) => {
1516 if (window.lpToggleEnableInit) {
1517 return;
1518 }
1519 window.lpToggleEnableInit = 1;
1520 const selector = '.lp-toggle-enable';
1521 const updateUI = (toggle, isEnabled) => {
1522 toggle.classList.toggle('is-enabled', isEnabled);
1523 const input = toggle.querySelector('.lp-toggle-enable__input');
1524 if (input) {
1525 input.checked = isEnabled;
1526 input.value = isEnabled ? '1' : '0';
1527 }
1528 };
1529
1530 // Delegate click handling via eventHandlers.
1531 eventHandlers('click', [{
1532 selector,
1533 callBack: args => {
1534 const {
1535 e,
1536 target
1537 } = args;
1538 const toggle = target.closest(selector);
1539 if (!toggle || toggle.classList.contains('is-disabled')) {
1540 return;
1541 }
1542 e.preventDefault();
1543 const isEnabled = !toggle.classList.contains('is-enabled');
1544 updateUI(toggle, isEnabled);
1545 if ('function' === typeof onToggle) {
1546 onToggle(toggle, isEnabled);
1547 }
1548 }
1549 }]);
1550 };
1551
1552 /**
1553 * Initialize custom fullscreen view buttons.
1554 *
1555 * Delegates clicks on `.lp-btn-full-screen-view` buttons to
1556 * `lpToggleFullscreenView`. Reads the `data-target` attribute to find the
1557 * target element. Falls back to the button's parent element when
1558 * `data-target` is not provided.
1559 *
1560 * @since 4.4.5
1561 * @version 1.0.0
1562 */
1563 window.lpFullScreenViewInit = 0;
1564 const fullScreenView = () => {
1565 if (window.lpFullScreenViewInit) {
1566 return;
1567 }
1568 window.lpFullScreenViewInit = 1;
1569 let lastScrollY = 0;
1570 const lpToggleFullscreenView = (elTarget, elBtnFullScreen = null) => {
1571 const isFullscreen = elTarget.classList.contains(lpClassName.elFullScreen);
1572 if (isFullscreen) {
1573 elTarget.classList.remove(lpClassName.elFullScreen);
1574 document.documentElement.classList.remove('lp-full-screen-active');
1575 window.scrollTo(0, lastScrollY);
1576 } else {
1577 lastScrollY = window.scrollY;
1578 elTarget.classList.add(lpClassName.elFullScreen);
1579 document.documentElement.classList.add('lp-full-screen-active');
1580 }
1581 if (!isFullscreen) {
1582 if (!elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`)) {
1583 const closeButton = document.createElement('button');
1584 closeButton.type = 'button';
1585 closeButton.className = lpClassName.elBtnFullScreenClose;
1586 closeButton.setAttribute('aria-label', 'Close');
1587 closeButton.innerHTML = lpData.i18n.closeButtonFullScreen || 'Close &times;';
1588 closeButton.addEventListener('click', e => {
1589 e.preventDefault();
1590 lpToggleFullscreenView(elTarget);
1591 });
1592 elTarget.appendChild(closeButton);
1593 }
1594 } else {
1595 const closeButton = elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`);
1596 if (closeButton) {
1597 closeButton.remove();
1598 }
1599 }
1600 };
1601 eventHandlers('click', [{
1602 selector: lpClassName.elBtnFullScreen,
1603 callBack: args => {
1604 const {
1605 e,
1606 target
1607 } = args;
1608 const elBtnFullScreen = target.closest(lpClassName.elBtnFullScreen);
1609 if (!elBtnFullScreen) {
1610 console.log('No full screen button found');
1611 return;
1612 }
1613 e.preventDefault();
1614 let elTarget = null;
1615 const targetSelector = elBtnFullScreen.dataset.targetFullscreen;
1616 console.log(targetSelector);
1617 if (targetSelector) {
1618 elTarget = document.querySelector(targetSelector);
1619 }
1620 if (!elTarget) {
1621 console.log('No target element found');
1622 return;
1623 }
1624 lpToggleFullscreenView(elTarget, elBtnFullScreen);
1625 }
1626 }]);
1627 };
1628
1629 /***/ },
1630
1631 /***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/toastify-js/src/toastify.css"
1632 /*!*****************************************************************************************!*\
1633 !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/toastify-js/src/toastify.css ***!
1634 \*****************************************************************************************/
1635 (module, __webpack_exports__, __webpack_require__) {
1636
1637 "use strict";
1638 __webpack_require__.r(__webpack_exports__);
1639 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1640 /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1641 /* harmony export */ });
1642 /* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
1643 /* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
1644 /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
1645 /* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
1646 // Imports
1647
1648
1649 var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
1650 // Module
1651 ___CSS_LOADER_EXPORT___.push([module.id, `/*!
1652 * Toastify js 1.12.0
1653 * https://github.com/apvarun/toastify-js
1654 * @license MIT licensed
1655 *
1656 * Copyright (C) 2018 Varun A P
1657 */
1658
1659 .toastify {
1660 padding: 12px 20px;
1661 color: #ffffff;
1662 display: inline-block;
1663 box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);
1664 background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);
1665 background: linear-gradient(135deg, #73a5ff, #5477f5);
1666 position: fixed;
1667 opacity: 0;
1668 transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);
1669 border-radius: 2px;
1670 cursor: pointer;
1671 text-decoration: none;
1672 max-width: calc(50% - 20px);
1673 z-index: 2147483647;
1674 }
1675
1676 .toastify.on {
1677 opacity: 1;
1678 }
1679
1680 .toast-close {
1681 background: transparent;
1682 border: 0;
1683 color: white;
1684 cursor: pointer;
1685 font-family: inherit;
1686 font-size: 1em;
1687 opacity: 0.4;
1688 padding: 0 5px;
1689 }
1690
1691 .toastify-right {
1692 right: 15px;
1693 }
1694
1695 .toastify-left {
1696 left: 15px;
1697 }
1698
1699 .toastify-top {
1700 top: -150px;
1701 }
1702
1703 .toastify-bottom {
1704 bottom: -150px;
1705 }
1706
1707 .toastify-rounded {
1708 border-radius: 25px;
1709 }
1710
1711 .toastify-avatar {
1712 width: 1.5em;
1713 height: 1.5em;
1714 margin: -7px 5px;
1715 border-radius: 2px;
1716 }
1717
1718 .toastify-center {
1719 margin-left: auto;
1720 margin-right: auto;
1721 left: 0;
1722 right: 0;
1723 max-width: fit-content;
1724 max-width: -moz-fit-content;
1725 }
1726
1727 @media only screen and (max-width: 360px) {
1728 .toastify-right, .toastify-left {
1729 margin-left: auto;
1730 margin-right: auto;
1731 left: 0;
1732 right: 0;
1733 max-width: fit-content;
1734 }
1735 }
1736 `, "",{"version":3,"sources":["webpack://./node_modules/toastify-js/src/toastify.css"],"names":[],"mappings":"AAAA;;;;;;EAME;;AAEF;IACI,kBAAkB;IAClB,cAAc;IACd,qBAAqB;IACrB,uFAAuF;IACvF,6DAA6D;IAC7D,qDAAqD;IACrD,eAAe;IACf,UAAU;IACV,wDAAwD;IACxD,kBAAkB;IAClB,eAAe;IACf,qBAAqB;IACrB,2BAA2B;IAC3B,mBAAmB;AACvB;;AAEA;IACI,UAAU;AACd;;AAEA;IACI,uBAAuB;IACvB,SAAS;IACT,YAAY;IACZ,eAAe;IACf,oBAAoB;IACpB,cAAc;IACd,YAAY;IACZ,cAAc;AAClB;;AAEA;IACI,WAAW;AACf;;AAEA;IACI,UAAU;AACd;;AAEA;IACI,WAAW;AACf;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,kBAAkB;AACtB;;AAEA;IACI,iBAAiB;IACjB,kBAAkB;IAClB,OAAO;IACP,QAAQ;IACR,sBAAsB;IACtB,2BAA2B;AAC/B;;AAEA;IACI;QACI,iBAAiB;QACjB,kBAAkB;QAClB,OAAO;QACP,QAAQ;QACR,sBAAsB;IAC1B;AACJ","sourcesContent":["/*!\n * Toastify js 1.12.0\n * https://github.com/apvarun/toastify-js\n * @license MIT licensed\n *\n * Copyright (C) 2018 Varun A P\n */\n\n.toastify {\n padding: 12px 20px;\n color: #ffffff;\n display: inline-block;\n box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);\n background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\n background: linear-gradient(135deg, #73a5ff, #5477f5);\n position: fixed;\n opacity: 0;\n transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\n border-radius: 2px;\n cursor: pointer;\n text-decoration: none;\n max-width: calc(50% - 20px);\n z-index: 2147483647;\n}\n\n.toastify.on {\n opacity: 1;\n}\n\n.toast-close {\n background: transparent;\n border: 0;\n color: white;\n cursor: pointer;\n font-family: inherit;\n font-size: 1em;\n opacity: 0.4;\n padding: 0 5px;\n}\n\n.toastify-right {\n right: 15px;\n}\n\n.toastify-left {\n left: 15px;\n}\n\n.toastify-top {\n top: -150px;\n}\n\n.toastify-bottom {\n bottom: -150px;\n}\n\n.toastify-rounded {\n border-radius: 25px;\n}\n\n.toastify-avatar {\n width: 1.5em;\n height: 1.5em;\n margin: -7px 5px;\n border-radius: 2px;\n}\n\n.toastify-center {\n margin-left: auto;\n margin-right: auto;\n left: 0;\n right: 0;\n max-width: fit-content;\n max-width: -moz-fit-content;\n}\n\n@media only screen and (max-width: 360px) {\n .toastify-right, .toastify-left {\n margin-left: auto;\n margin-right: auto;\n left: 0;\n right: 0;\n max-width: fit-content;\n }\n}\n"],"sourceRoot":""}]);
1737 // Exports
1738 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
1739
1740
1741 /***/ },
1742
1743 /***/ "./node_modules/css-loader/dist/runtime/api.js"
1744 /*!*****************************************************!*\
1745 !*** ./node_modules/css-loader/dist/runtime/api.js ***!
1746 \*****************************************************/
1747 (module) {
1748
1749 "use strict";
1750
1751
1752 /*
1753 MIT License http://www.opensource.org/licenses/mit-license.php
1754 Author Tobias Koppers @sokra
1755 */
1756 module.exports = function (cssWithMappingToString) {
1757 var list = [];
1758
1759 // return the list of modules as css string
1760 list.toString = function toString() {
1761 return this.map(function (item) {
1762 var content = "";
1763 var needLayer = typeof item[5] !== "undefined";
1764 if (item[4]) {
1765 content += "@supports (".concat(item[4], ") {");
1766 }
1767 if (item[2]) {
1768 content += "@media ".concat(item[2], " {");
1769 }
1770 if (needLayer) {
1771 content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
1772 }
1773 content += cssWithMappingToString(item);
1774 if (needLayer) {
1775 content += "}";
1776 }
1777 if (item[2]) {
1778 content += "}";
1779 }
1780 if (item[4]) {
1781 content += "}";
1782 }
1783 return content;
1784 }).join("");
1785 };
1786
1787 // import a list of modules into the list
1788 list.i = function i(modules, media, dedupe, supports, layer) {
1789 if (typeof modules === "string") {
1790 modules = [[null, modules, undefined]];
1791 }
1792 var alreadyImportedModules = {};
1793 if (dedupe) {
1794 for (var k = 0; k < this.length; k++) {
1795 var id = this[k][0];
1796 if (id != null) {
1797 alreadyImportedModules[id] = true;
1798 }
1799 }
1800 }
1801 for (var _k = 0; _k < modules.length; _k++) {
1802 var item = [].concat(modules[_k]);
1803 if (dedupe && alreadyImportedModules[item[0]]) {
1804 continue;
1805 }
1806 if (typeof layer !== "undefined") {
1807 if (typeof item[5] === "undefined") {
1808 item[5] = layer;
1809 } else {
1810 item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
1811 item[5] = layer;
1812 }
1813 }
1814 if (media) {
1815 if (!item[2]) {
1816 item[2] = media;
1817 } else {
1818 item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
1819 item[2] = media;
1820 }
1821 }
1822 if (supports) {
1823 if (!item[4]) {
1824 item[4] = "".concat(supports);
1825 } else {
1826 item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
1827 item[4] = supports;
1828 }
1829 }
1830 list.push(item);
1831 }
1832 };
1833 return list;
1834 };
1835
1836 /***/ },
1837
1838 /***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js"
1839 /*!************************************************************!*\
1840 !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
1841 \************************************************************/
1842 (module) {
1843
1844 "use strict";
1845
1846
1847 module.exports = function (item) {
1848 var content = item[1];
1849 var cssMapping = item[3];
1850 if (!cssMapping) {
1851 return content;
1852 }
1853 if (typeof btoa === "function") {
1854 var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
1855 var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
1856 var sourceMapping = "/*# ".concat(data, " */");
1857 return [content].concat([sourceMapping]).join("\n");
1858 }
1859 return [content].join("\n");
1860 };
1861
1862 /***/ },
1863
1864 /***/ "./node_modules/toastify-js/src/toastify.css"
1865 /*!***************************************************!*\
1866 !*** ./node_modules/toastify-js/src/toastify.css ***!
1867 \***************************************************/
1868 (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1869
1870 "use strict";
1871 __webpack_require__.r(__webpack_exports__);
1872 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1873 /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1874 /* harmony export */ });
1875 /* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
1876 /* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
1877 /* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
1878 /* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
1879 /* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
1880 /* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
1881 /* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
1882 /* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
1883 /* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
1884 /* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
1885 /* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
1886 /* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
1887 /* harmony import */ var _css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../css-loader/dist/cjs.js!./toastify.css */ "./node_modules/css-loader/dist/cjs.js!./node_modules/toastify-js/src/toastify.css");
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899 var options = {};
1900
1901 options.styleTagTransform = (_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
1902 options.setAttributes = (_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
1903
1904 options.insert = _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
1905
1906 options.domAPI = (_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
1907 options.insertStyleElement = (_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
1908
1909 var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
1910
1911
1912
1913
1914 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
1915
1916
1917 /***/ },
1918
1919 /***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"
1920 /*!****************************************************************************!*\
1921 !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
1922 \****************************************************************************/
1923 (module) {
1924
1925 "use strict";
1926
1927
1928 var stylesInDOM = [];
1929 function getIndexByIdentifier(identifier) {
1930 var result = -1;
1931 for (var i = 0; i < stylesInDOM.length; i++) {
1932 if (stylesInDOM[i].identifier === identifier) {
1933 result = i;
1934 break;
1935 }
1936 }
1937 return result;
1938 }
1939 function modulesToDom(list, options) {
1940 var idCountMap = {};
1941 var identifiers = [];
1942 for (var i = 0; i < list.length; i++) {
1943 var item = list[i];
1944 var id = options.base ? item[0] + options.base : item[0];
1945 var count = idCountMap[id] || 0;
1946 var identifier = "".concat(id, " ").concat(count);
1947 idCountMap[id] = count + 1;
1948 var indexByIdentifier = getIndexByIdentifier(identifier);
1949 var obj = {
1950 css: item[1],
1951 media: item[2],
1952 sourceMap: item[3],
1953 supports: item[4],
1954 layer: item[5]
1955 };
1956 if (indexByIdentifier !== -1) {
1957 stylesInDOM[indexByIdentifier].references++;
1958 stylesInDOM[indexByIdentifier].updater(obj);
1959 } else {
1960 var updater = addElementStyle(obj, options);
1961 options.byIndex = i;
1962 stylesInDOM.splice(i, 0, {
1963 identifier: identifier,
1964 updater: updater,
1965 references: 1
1966 });
1967 }
1968 identifiers.push(identifier);
1969 }
1970 return identifiers;
1971 }
1972 function addElementStyle(obj, options) {
1973 var api = options.domAPI(options);
1974 api.update(obj);
1975 var updater = function updater(newObj) {
1976 if (newObj) {
1977 if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
1978 return;
1979 }
1980 api.update(obj = newObj);
1981 } else {
1982 api.remove();
1983 }
1984 };
1985 return updater;
1986 }
1987 module.exports = function (list, options) {
1988 options = options || {};
1989 list = list || [];
1990 var lastIdentifiers = modulesToDom(list, options);
1991 return function update(newList) {
1992 newList = newList || [];
1993 for (var i = 0; i < lastIdentifiers.length; i++) {
1994 var identifier = lastIdentifiers[i];
1995 var index = getIndexByIdentifier(identifier);
1996 stylesInDOM[index].references--;
1997 }
1998 var newLastIdentifiers = modulesToDom(newList, options);
1999 for (var _i = 0; _i < lastIdentifiers.length; _i++) {
2000 var _identifier = lastIdentifiers[_i];
2001 var _index = getIndexByIdentifier(_identifier);
2002 if (stylesInDOM[_index].references === 0) {
2003 stylesInDOM[_index].updater();
2004 stylesInDOM.splice(_index, 1);
2005 }
2006 }
2007 lastIdentifiers = newLastIdentifiers;
2008 };
2009 };
2010
2011 /***/ },
2012
2013 /***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js"
2014 /*!********************************************************************!*\
2015 !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
2016 \********************************************************************/
2017 (module) {
2018
2019 "use strict";
2020
2021
2022 var memo = {};
2023
2024 /* istanbul ignore next */
2025 function getTarget(target) {
2026 if (typeof memo[target] === "undefined") {
2027 var styleTarget = document.querySelector(target);
2028
2029 // Special case to return head of iframe instead of iframe itself
2030 if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
2031 try {
2032 // This will throw an exception if access to iframe is blocked
2033 // due to cross-origin restrictions
2034 styleTarget = styleTarget.contentDocument.head;
2035 } catch (e) {
2036 // istanbul ignore next
2037 styleTarget = null;
2038 }
2039 }
2040 memo[target] = styleTarget;
2041 }
2042 return memo[target];
2043 }
2044
2045 /* istanbul ignore next */
2046 function insertBySelector(insert, style) {
2047 var target = getTarget(insert);
2048 if (!target) {
2049 throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
2050 }
2051 target.appendChild(style);
2052 }
2053 module.exports = insertBySelector;
2054
2055 /***/ },
2056
2057 /***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"
2058 /*!**********************************************************************!*\
2059 !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
2060 \**********************************************************************/
2061 (module) {
2062
2063 "use strict";
2064
2065
2066 /* istanbul ignore next */
2067 function insertStyleElement(options) {
2068 var element = document.createElement("style");
2069 options.setAttributes(element, options.attributes);
2070 options.insert(element, options.options);
2071 return element;
2072 }
2073 module.exports = insertStyleElement;
2074
2075 /***/ },
2076
2077 /***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"
2078 /*!**********************************************************************************!*\
2079 !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
2080 \**********************************************************************************/
2081 (module, __unused_webpack_exports, __webpack_require__) {
2082
2083 "use strict";
2084
2085
2086 /* istanbul ignore next */
2087 function setAttributesWithoutAttributes(styleElement) {
2088 var nonce = true ? __webpack_require__.nc : 0;
2089 if (nonce) {
2090 styleElement.setAttribute("nonce", nonce);
2091 }
2092 }
2093 module.exports = setAttributesWithoutAttributes;
2094
2095 /***/ },
2096
2097 /***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"
2098 /*!***************************************************************!*\
2099 !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
2100 \***************************************************************/
2101 (module) {
2102
2103 "use strict";
2104
2105
2106 /* istanbul ignore next */
2107 function apply(styleElement, options, obj) {
2108 var css = "";
2109 if (obj.supports) {
2110 css += "@supports (".concat(obj.supports, ") {");
2111 }
2112 if (obj.media) {
2113 css += "@media ".concat(obj.media, " {");
2114 }
2115 var needLayer = typeof obj.layer !== "undefined";
2116 if (needLayer) {
2117 css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
2118 }
2119 css += obj.css;
2120 if (needLayer) {
2121 css += "}";
2122 }
2123 if (obj.media) {
2124 css += "}";
2125 }
2126 if (obj.supports) {
2127 css += "}";
2128 }
2129 var sourceMap = obj.sourceMap;
2130 if (sourceMap && typeof btoa !== "undefined") {
2131 css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
2132 }
2133
2134 // For old IE
2135 /* istanbul ignore if */
2136 options.styleTagTransform(css, styleElement, options.options);
2137 }
2138 function removeStyleElement(styleElement) {
2139 // istanbul ignore if
2140 if (styleElement.parentNode === null) {
2141 return false;
2142 }
2143 styleElement.parentNode.removeChild(styleElement);
2144 }
2145
2146 /* istanbul ignore next */
2147 function domAPI(options) {
2148 if (typeof document === "undefined") {
2149 return {
2150 update: function update() {},
2151 remove: function remove() {}
2152 };
2153 }
2154 var styleElement = options.insertStyleElement(options);
2155 return {
2156 update: function update(obj) {
2157 apply(styleElement, options, obj);
2158 },
2159 remove: function remove() {
2160 removeStyleElement(styleElement);
2161 }
2162 };
2163 }
2164 module.exports = domAPI;
2165
2166 /***/ },
2167
2168 /***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"
2169 /*!*********************************************************************!*\
2170 !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
2171 \*********************************************************************/
2172 (module) {
2173
2174 "use strict";
2175
2176
2177 /* istanbul ignore next */
2178 function styleTagTransform(css, styleElement) {
2179 if (styleElement.styleSheet) {
2180 styleElement.styleSheet.cssText = css;
2181 } else {
2182 while (styleElement.firstChild) {
2183 styleElement.removeChild(styleElement.firstChild);
2184 }
2185 styleElement.appendChild(document.createTextNode(css));
2186 }
2187 }
2188 module.exports = styleTagTransform;
2189
2190 /***/ },
2191
2192 /***/ "./node_modules/toastify-js/src/toastify.js"
2193 /*!**************************************************!*\
2194 !*** ./node_modules/toastify-js/src/toastify.js ***!
2195 \**************************************************/
2196 (module) {
2197
2198 /*!
2199 * Toastify js 1.12.0
2200 * https://github.com/apvarun/toastify-js
2201 * @license MIT licensed
2202 *
2203 * Copyright (C) 2018 Varun A P
2204 */
2205 (function(root, factory) {
2206 if ( true && module.exports) {
2207 module.exports = factory();
2208 } else {
2209 root.Toastify = factory();
2210 }
2211 })(this, function(global) {
2212 // Object initialization
2213 var Toastify = function(options) {
2214 // Returning a new init object
2215 return new Toastify.lib.init(options);
2216 },
2217 // Library version
2218 version = "1.12.0";
2219
2220 // Set the default global options
2221 Toastify.defaults = {
2222 oldestFirst: true,
2223 text: "Toastify is awesome!",
2224 node: undefined,
2225 duration: 3000,
2226 selector: undefined,
2227 callback: function () {
2228 },
2229 destination: undefined,
2230 newWindow: false,
2231 close: false,
2232 gravity: "toastify-top",
2233 positionLeft: false,
2234 position: '',
2235 backgroundColor: '',
2236 avatar: "",
2237 className: "",
2238 stopOnFocus: true,
2239 onClick: function () {
2240 },
2241 offset: {x: 0, y: 0},
2242 escapeMarkup: true,
2243 ariaLive: 'polite',
2244 style: {background: ''}
2245 };
2246
2247 // Defining the prototype of the object
2248 Toastify.lib = Toastify.prototype = {
2249 toastify: version,
2250
2251 constructor: Toastify,
2252
2253 // Initializing the object with required parameters
2254 init: function(options) {
2255 // Verifying and validating the input object
2256 if (!options) {
2257 options = {};
2258 }
2259
2260 // Creating the options object
2261 this.options = {};
2262
2263 this.toastElement = null;
2264
2265 // Validating the options
2266 this.options.text = options.text || Toastify.defaults.text; // Display message
2267 this.options.node = options.node || Toastify.defaults.node; // Display content as node
2268 this.options.duration = options.duration === 0 ? 0 : options.duration || Toastify.defaults.duration; // Display duration
2269 this.options.selector = options.selector || Toastify.defaults.selector; // Parent selector
2270 this.options.callback = options.callback || Toastify.defaults.callback; // Callback after display
2271 this.options.destination = options.destination || Toastify.defaults.destination; // On-click destination
2272 this.options.newWindow = options.newWindow || Toastify.defaults.newWindow; // Open destination in new window
2273 this.options.close = options.close || Toastify.defaults.close; // Show toast close icon
2274 this.options.gravity = options.gravity === "bottom" ? "toastify-bottom" : Toastify.defaults.gravity; // toast position - top or bottom
2275 this.options.positionLeft = options.positionLeft || Toastify.defaults.positionLeft; // toast position - left or right
2276 this.options.position = options.position || Toastify.defaults.position; // toast position - left or right
2277 this.options.backgroundColor = options.backgroundColor || Toastify.defaults.backgroundColor; // toast background color
2278 this.options.avatar = options.avatar || Toastify.defaults.avatar; // img element src - url or a path
2279 this.options.className = options.className || Toastify.defaults.className; // additional class names for the toast
2280 this.options.stopOnFocus = options.stopOnFocus === undefined ? Toastify.defaults.stopOnFocus : options.stopOnFocus; // stop timeout on focus
2281 this.options.onClick = options.onClick || Toastify.defaults.onClick; // Callback after click
2282 this.options.offset = options.offset || Toastify.defaults.offset; // toast offset
2283 this.options.escapeMarkup = options.escapeMarkup !== undefined ? options.escapeMarkup : Toastify.defaults.escapeMarkup;
2284 this.options.ariaLive = options.ariaLive || Toastify.defaults.ariaLive;
2285 this.options.style = options.style || Toastify.defaults.style;
2286 if(options.backgroundColor) {
2287 this.options.style.background = options.backgroundColor;
2288 }
2289
2290 // Returning the current object for chaining functions
2291 return this;
2292 },
2293
2294 // Building the DOM element
2295 buildToast: function() {
2296 // Validating if the options are defined
2297 if (!this.options) {
2298 throw "Toastify is not initialized";
2299 }
2300
2301 // Creating the DOM object
2302 var divElement = document.createElement("div");
2303 divElement.className = "toastify on " + this.options.className;
2304
2305 // Positioning toast to left or right or center
2306 if (!!this.options.position) {
2307 divElement.className += " toastify-" + this.options.position;
2308 } else {
2309 // To be depreciated in further versions
2310 if (this.options.positionLeft === true) {
2311 divElement.className += " toastify-left";
2312 console.warn('Property `positionLeft` will be depreciated in further versions. Please use `position` instead.')
2313 } else {
2314 // Default position
2315 divElement.className += " toastify-right";
2316 }
2317 }
2318
2319 // Assigning gravity of element
2320 divElement.className += " " + this.options.gravity;
2321
2322 if (this.options.backgroundColor) {
2323 // This is being deprecated in favor of using the style HTML DOM property
2324 console.warn('DEPRECATION NOTICE: "backgroundColor" is being deprecated. Please use the "style.background" property.');
2325 }
2326
2327 // Loop through our style object and apply styles to divElement
2328 for (var property in this.options.style) {
2329 divElement.style[property] = this.options.style[property];
2330 }
2331
2332 // Announce the toast to screen readers
2333 if (this.options.ariaLive) {
2334 divElement.setAttribute('aria-live', this.options.ariaLive)
2335 }
2336
2337 // Adding the toast message/node
2338 if (this.options.node && this.options.node.nodeType === Node.ELEMENT_NODE) {
2339 // If we have a valid node, we insert it
2340 divElement.appendChild(this.options.node)
2341 } else {
2342 if (this.options.escapeMarkup) {
2343 divElement.innerText = this.options.text;
2344 } else {
2345 divElement.innerHTML = this.options.text;
2346 }
2347
2348 if (this.options.avatar !== "") {
2349 var avatarElement = document.createElement("img");
2350 avatarElement.src = this.options.avatar;
2351
2352 avatarElement.className = "toastify-avatar";
2353
2354 if (this.options.position == "left" || this.options.positionLeft === true) {
2355 // Adding close icon on the left of content
2356 divElement.appendChild(avatarElement);
2357 } else {
2358 // Adding close icon on the right of content
2359 divElement.insertAdjacentElement("afterbegin", avatarElement);
2360 }
2361 }
2362 }
2363
2364 // Adding a close icon to the toast
2365 if (this.options.close === true) {
2366 // Create a span for close element
2367 var closeElement = document.createElement("button");
2368 closeElement.type = "button";
2369 closeElement.setAttribute("aria-label", "Close");
2370 closeElement.className = "toast-close";
2371 closeElement.innerHTML = "&#10006;";
2372
2373 // Triggering the removal of toast from DOM on close click
2374 closeElement.addEventListener(
2375 "click",
2376 function(event) {
2377 event.stopPropagation();
2378 this.removeElement(this.toastElement);
2379 window.clearTimeout(this.toastElement.timeOutValue);
2380 }.bind(this)
2381 );
2382
2383 //Calculating screen width
2384 var width = window.innerWidth > 0 ? window.innerWidth : screen.width;
2385
2386 // Adding the close icon to the toast element
2387 // Display on the right if screen width is less than or equal to 360px
2388 if ((this.options.position == "left" || this.options.positionLeft === true) && width > 360) {
2389 // Adding close icon on the left of content
2390 divElement.insertAdjacentElement("afterbegin", closeElement);
2391 } else {
2392 // Adding close icon on the right of content
2393 divElement.appendChild(closeElement);
2394 }
2395 }
2396
2397 // Clear timeout while toast is focused
2398 if (this.options.stopOnFocus && this.options.duration > 0) {
2399 var self = this;
2400 // stop countdown
2401 divElement.addEventListener(
2402 "mouseover",
2403 function(event) {
2404 window.clearTimeout(divElement.timeOutValue);
2405 }
2406 )
2407 // add back the timeout
2408 divElement.addEventListener(
2409 "mouseleave",
2410 function() {
2411 divElement.timeOutValue = window.setTimeout(
2412 function() {
2413 // Remove the toast from DOM
2414 self.removeElement(divElement);
2415 },
2416 self.options.duration
2417 )
2418 }
2419 )
2420 }
2421
2422 // Adding an on-click destination path
2423 if (typeof this.options.destination !== "undefined") {
2424 divElement.addEventListener(
2425 "click",
2426 function(event) {
2427 event.stopPropagation();
2428 if (this.options.newWindow === true) {
2429 window.open(this.options.destination, "_blank");
2430 } else {
2431 window.location = this.options.destination;
2432 }
2433 }.bind(this)
2434 );
2435 }
2436
2437 if (typeof this.options.onClick === "function" && typeof this.options.destination === "undefined") {
2438 divElement.addEventListener(
2439 "click",
2440 function(event) {
2441 event.stopPropagation();
2442 this.options.onClick();
2443 }.bind(this)
2444 );
2445 }
2446
2447 // Adding offset
2448 if(typeof this.options.offset === "object") {
2449
2450 var x = getAxisOffsetAValue("x", this.options);
2451 var y = getAxisOffsetAValue("y", this.options);
2452
2453 var xOffset = this.options.position == "left" ? x : "-" + x;
2454 var yOffset = this.options.gravity == "toastify-top" ? y : "-" + y;
2455
2456 divElement.style.transform = "translate(" + xOffset + "," + yOffset + ")";
2457
2458 }
2459
2460 // Returning the generated element
2461 return divElement;
2462 },
2463
2464 // Displaying the toast
2465 showToast: function() {
2466 // Creating the DOM object for the toast
2467 this.toastElement = this.buildToast();
2468
2469 // Getting the root element to with the toast needs to be added
2470 var rootElement;
2471 if (typeof this.options.selector === "string") {
2472 rootElement = document.getElementById(this.options.selector);
2473 } else if (this.options.selector instanceof HTMLElement || (typeof ShadowRoot !== 'undefined' && this.options.selector instanceof ShadowRoot)) {
2474 rootElement = this.options.selector;
2475 } else {
2476 rootElement = document.body;
2477 }
2478
2479 // Validating if root element is present in DOM
2480 if (!rootElement) {
2481 throw "Root element is not defined";
2482 }
2483
2484 // Adding the DOM element
2485 var elementToInsert = Toastify.defaults.oldestFirst ? rootElement.firstChild : rootElement.lastChild;
2486 rootElement.insertBefore(this.toastElement, elementToInsert);
2487
2488 // Repositioning the toasts in case multiple toasts are present
2489 Toastify.reposition();
2490
2491 if (this.options.duration > 0) {
2492 this.toastElement.timeOutValue = window.setTimeout(
2493 function() {
2494 // Remove the toast from DOM
2495 this.removeElement(this.toastElement);
2496 }.bind(this),
2497 this.options.duration
2498 ); // Binding `this` for function invocation
2499 }
2500
2501 // Supporting function chaining
2502 return this;
2503 },
2504
2505 hideToast: function() {
2506 if (this.toastElement.timeOutValue) {
2507 clearTimeout(this.toastElement.timeOutValue);
2508 }
2509 this.removeElement(this.toastElement);
2510 },
2511
2512 // Removing the element from the DOM
2513 removeElement: function(toastElement) {
2514 // Hiding the element
2515 // toastElement.classList.remove("on");
2516 toastElement.className = toastElement.className.replace(" on", "");
2517
2518 // Removing the element from DOM after transition end
2519 window.setTimeout(
2520 function() {
2521 // remove options node if any
2522 if (this.options.node && this.options.node.parentNode) {
2523 this.options.node.parentNode.removeChild(this.options.node);
2524 }
2525
2526 // Remove the element from the DOM, only when the parent node was not removed before.
2527 if (toastElement.parentNode) {
2528 toastElement.parentNode.removeChild(toastElement);
2529 }
2530
2531 // Calling the callback function
2532 this.options.callback.call(toastElement);
2533
2534 // Repositioning the toasts again
2535 Toastify.reposition();
2536 }.bind(this),
2537 400
2538 ); // Binding `this` for function invocation
2539 },
2540 };
2541
2542 // Positioning the toasts on the DOM
2543 Toastify.reposition = function() {
2544
2545 // Top margins with gravity
2546 var topLeftOffsetSize = {
2547 top: 15,
2548 bottom: 15,
2549 };
2550 var topRightOffsetSize = {
2551 top: 15,
2552 bottom: 15,
2553 };
2554 var offsetSize = {
2555 top: 15,
2556 bottom: 15,
2557 };
2558
2559 // Get all toast messages on the DOM
2560 var allToasts = document.getElementsByClassName("toastify");
2561
2562 var classUsed;
2563
2564 // Modifying the position of each toast element
2565 for (var i = 0; i < allToasts.length; i++) {
2566 // Getting the applied gravity
2567 if (containsClass(allToasts[i], "toastify-top") === true) {
2568 classUsed = "toastify-top";
2569 } else {
2570 classUsed = "toastify-bottom";
2571 }
2572
2573 var height = allToasts[i].offsetHeight;
2574 classUsed = classUsed.substr(9, classUsed.length-1)
2575 // Spacing between toasts
2576 var offset = 15;
2577
2578 var width = window.innerWidth > 0 ? window.innerWidth : screen.width;
2579
2580 // Show toast in center if screen with less than or equal to 360px
2581 if (width <= 360) {
2582 // Setting the position
2583 allToasts[i].style[classUsed] = offsetSize[classUsed] + "px";
2584
2585 offsetSize[classUsed] += height + offset;
2586 } else {
2587 if (containsClass(allToasts[i], "toastify-left") === true) {
2588 // Setting the position
2589 allToasts[i].style[classUsed] = topLeftOffsetSize[classUsed] + "px";
2590
2591 topLeftOffsetSize[classUsed] += height + offset;
2592 } else {
2593 // Setting the position
2594 allToasts[i].style[classUsed] = topRightOffsetSize[classUsed] + "px";
2595
2596 topRightOffsetSize[classUsed] += height + offset;
2597 }
2598 }
2599 }
2600
2601 // Supporting function chaining
2602 return this;
2603 };
2604
2605 // Helper function to get offset.
2606 function getAxisOffsetAValue(axis, options) {
2607
2608 if(options.offset[axis]) {
2609 if(isNaN(options.offset[axis])) {
2610 return options.offset[axis];
2611 }
2612 else {
2613 return options.offset[axis] + 'px';
2614 }
2615 }
2616
2617 return '0px';
2618
2619 }
2620
2621 function containsClass(elem, yourClass) {
2622 if (!elem || typeof yourClass !== "string") {
2623 return false;
2624 } else if (
2625 elem.className &&
2626 elem.className
2627 .trim()
2628 .split(/\s+/gi)
2629 .indexOf(yourClass) > -1
2630 ) {
2631 return true;
2632 } else {
2633 return false;
2634 }
2635 }
2636
2637 // Setting up the prototype for the init object
2638 Toastify.lib.init.prototype = Toastify.lib;
2639
2640 // Returning the Toastify function to be assigned to the window object/module
2641 return Toastify;
2642 });
2643
2644
2645 /***/ },
2646
2647 /***/ "react"
2648 /*!************************!*\
2649 !*** external "React" ***!
2650 \************************/
2651 (module) {
2652
2653 "use strict";
2654 module.exports = window["React"];
2655
2656 /***/ }
2657
2658 /******/ });
2659 /************************************************************************/
2660 /******/ // The module cache
2661 /******/ const __webpack_module_cache__ = {};
2662 /******/
2663 /******/ // The require function
2664 /******/ function __webpack_require__(moduleId) {
2665 /******/ // Check if module is in cache
2666 /******/ const cachedModule = __webpack_module_cache__[moduleId];
2667 /******/ if (cachedModule !== undefined) {
2668 /******/ return cachedModule.exports;
2669 /******/ }
2670 /******/ // Create a new module (and put it into the cache)
2671 /******/ const module = __webpack_module_cache__[moduleId] = {
2672 /******/ id: moduleId,
2673 /******/ // no module.loaded needed
2674 /******/ exports: {}
2675 /******/ };
2676 /******/
2677 /******/ // Execute the module function
2678 /******/ if (!(moduleId in __webpack_modules__)) {
2679 /******/ delete __webpack_module_cache__[moduleId];
2680 /******/ const e = new Error("Cannot find module '" + moduleId + "'");
2681 /******/ e.code = 'MODULE_NOT_FOUND';
2682 /******/ throw e;
2683 /******/ }
2684 /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
2685 /******/
2686 /******/ // Return the exports of the module
2687 /******/ return module.exports;
2688 /******/ }
2689 /******/
2690 /************************************************************************/
2691 /******/ /* webpack/runtime/compat get default export */
2692 /******/ (() => {
2693 /******/ // getDefaultExport function for compatibility with non-harmony modules
2694 /******/ __webpack_require__.n = (module) => {
2695 /******/ const getter = module && module.__esModule ?
2696 /******/ () => (module['default']) :
2697 /******/ () => (module);
2698 /******/ __webpack_require__.d(getter, { a: getter });
2699 /******/ return getter;
2700 /******/ };
2701 /******/ })();
2702 /******/
2703 /******/ /* webpack/runtime/define property getters */
2704 /******/ (() => {
2705 /******/ // define getter/value functions for harmony exports
2706 /******/ __webpack_require__.d = (exports, definition) => {
2707 /******/ if(Array.isArray(definition)) {
2708 /******/ var i = 0;
2709 /******/ while(i < definition.length) {
2710 /******/ var key = definition[i++];
2711 /******/ var binding = definition[i++];
2712 /******/ if(!__webpack_require__.o(exports, key)) {
2713 /******/ if(binding === 0) {
2714 /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
2715 /******/ } else {
2716 /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
2717 /******/ }
2718 /******/ } else if(binding === 0) { i++; }
2719 /******/ }
2720 /******/ } else {
2721 /******/ for(var key in definition) {
2722 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
2723 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
2724 /******/ }
2725 /******/ }
2726 /******/ }
2727 /******/ };
2728 /******/ })();
2729 /******/
2730 /******/ /* webpack/runtime/hasOwnProperty shorthand */
2731 /******/ (() => {
2732 /******/ __webpack_require__.o = (obj, prop) => (Object.hasOwn(obj, prop))
2733 /******/ })();
2734 /******/
2735 /******/ /* webpack/runtime/make namespace object */
2736 /******/ (() => {
2737 /******/ // define __esModule on exports
2738 /******/ __webpack_require__.r = (exports) => {
2739 /******/ if(Symbol.toStringTag) {
2740 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2741 /******/ }
2742 /******/ Object.defineProperty(exports, '__esModule', { value: true });
2743 /******/ };
2744 /******/ })();
2745 /******/
2746 /******/ /* webpack/runtime/nonce */
2747 /******/ (() => {
2748 /******/ __webpack_require__.nc = undefined;
2749 /******/ })();
2750 /******/
2751 /************************************************************************/
2752 let __webpack_exports__ = {};
2753 // This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
2754 (() => {
2755 "use strict";
2756 /*!*************************************************!*\
2757 !*** ./assets/src/apps/js/admin/pages/tools.js ***!
2758 \*************************************************/
2759 __webpack_require__.r(__webpack_exports__);
2760 /* harmony import */ var _tools_database_upgrade__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/database/upgrade */ "./assets/src/apps/js/admin/pages/tools/database/upgrade.js");
2761 /* harmony import */ var _tools_database_create_indexs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tools/database/create_indexs */ "./assets/src/apps/js/admin/pages/tools/database/create_indexs.js");
2762 /* harmony import */ var _tools_database_re_upgrade_db__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/database/re-upgrade-db */ "./assets/src/apps/js/admin/pages/tools/database/re-upgrade-db.js");
2763 /* harmony import */ var _tools_database_clean_database__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/database/clean_database */ "./assets/src/apps/js/admin/pages/tools/database/clean_database.js");
2764 /* harmony import */ var _tools_reset_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/reset-data */ "./assets/src/apps/js/admin/pages/tools/reset-data/index.js");
2765 /* harmony import */ var _tools_handle_sample_data__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tools/handle-sample-data */ "./assets/src/apps/js/admin/pages/tools/handle-sample-data.js");
2766
2767
2768
2769
2770
2771
2772 (function ($) {
2773 const $doc = $(document);
2774 const clearHardCache = function clearHardCache(e) {
2775 e.preventDefault();
2776 const $button = $(this);
2777 if ($button.hasClass('disabled')) {
2778 return;
2779 }
2780 $button.addClass('disabled').html($button.data('cleaning-text'));
2781 $.ajax({
2782 url: $button.attr('href'),
2783 data: {},
2784 success(response) {
2785 $button.removeClass('disabled').html($button.data('text'));
2786 },
2787 error() {
2788 $button.removeClass('disabled').html($button.data('text'));
2789 }
2790 });
2791 };
2792 const toggleHardCache = function toggleHardCache() {
2793 $.ajax({
2794 url: 'admin.php?page=lp-toggle-hard-cache-option',
2795 data: {
2796 v: this.checked ? 'yes' : 'no'
2797 },
2798 success(response) {},
2799 error() {}
2800 });
2801 };
2802 $(function () {
2803 (0,_tools_database_upgrade__WEBPACK_IMPORTED_MODULE_0__["default"])();
2804 (0,_tools_database_create_indexs__WEBPACK_IMPORTED_MODULE_1__["default"])();
2805 (0,_tools_database_re_upgrade_db__WEBPACK_IMPORTED_MODULE_2__["default"])();
2806 (0,_tools_reset_data__WEBPACK_IMPORTED_MODULE_4__["default"])();
2807 (0,_tools_database_clean_database__WEBPACK_IMPORTED_MODULE_3__["default"])();
2808 new _tools_handle_sample_data__WEBPACK_IMPORTED_MODULE_5__["default"]().init();
2809 $doc.on('click', '#learn-press-clear-cache', clearHardCache).on('click', 'input[name="enable_hard_cache"]', toggleHardCache);
2810 });
2811 })(jQuery);
2812 })();
2813
2814 /******/ })()
2815 ;
2816 //# sourceMappingURL=tools.js.map