PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.9
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.9
4.4.9.1 4.4.9 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 All 141 releases
← All changes | assets/js/dist/frontend/courses.js +153 -33 4.4.1 → 4.4.9 View file →
@@ -23,12 +23,9 @@
23 23 let lp_rest_url;
24 24 if ('undefined' !== typeof lpDataAdmin) {
25 25 lp_rest_url = lpDataAdmin.lp_rest_url;
26 26 lplistAPI.admin = {
27 - apiAdminNotice: lp_rest_url + 'lp/v1/admin/tools/admin-notices',
28 - apiAddons: lp_rest_url + 'lp/v1/addon/all',
29 - apiAddonAction: lp_rest_url + 'lp/v1/addon/action-n',
30 - apiAddonsPurchase: lp_rest_url + 'lp/v1/addon/info-addons-purchase',
27 + // apiAdminNotice: lp_rest_url + 'lp/v1/admin/tools/admin-notices',
31 28 apiSearchCourses: lp_rest_url + 'lp/v1/admin/tools/search-course',
32 29 apiSearchUsers: lp_rest_url + 'lp/v1/admin/tools/search-user',
33 30 apiAssignUserCourse: lp_rest_url + 'lp/v1/admin/tools/assign-user-course',
34 31 apiUnAssignUserCourse: lp_rest_url + 'lp/v1/admin/tools/unassign-user-course'
@@ -63,8 +60,9 @@
63 60 __webpack_require__.r(__webpack_exports__);
64 61 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
65 62 /* harmony export */ debounce: () => (/* binding */ debounce),
66 63 /* harmony export */ eventHandlers: () => (/* binding */ eventHandlers),
64 +/* harmony export */ fullScreenView: () => (/* binding */ fullScreenView),
67 65 /* harmony export */ getDataOfForm: () => (/* binding */ getDataOfForm),
68 66 /* harmony export */ getFieldKeysOfForm: () => (/* binding */ getFieldKeysOfForm),
69 67 /* harmony export */ listenElementCreated: () => (/* binding */ listenElementCreated),
70 68 /* harmony export */ listenElementViewed: () => (/* binding */ listenElementViewed),
@@ -76,9 +74,10 @@
76 74 /* harmony export */ lpOnElementReady: () => (/* binding */ lpOnElementReady),
77 75 /* harmony export */ lpSetLoadingEl: () => (/* binding */ lpSetLoadingEl),
78 76 /* harmony export */ lpShowHideEl: () => (/* binding */ lpShowHideEl),
79 77 /* harmony export */ mergeDataWithDatForm: () => (/* binding */ mergeDataWithDatForm),
80 -/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse)
78 +/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse),
79 +/* harmony export */ toggleEnable: () => (/* binding */ toggleEnable)
81 80 /* harmony export */ });
82 81 /**
83 82 * Utils functions
84 83 *
@@ -85,9 +84,9 @@
85 84 * @param url
86 85 * @param data
87 86 * @param functions
88 87 * @since 4.2.5.1
89 - * @version 1.0.6
88 + * @version 1.0.7
90 89 */
91 90 const lpClassName = {
92 91 hidden: 'lp-hidden',
93 92 loading: 'loading',
@@ -92,9 +91,12 @@
92 91 hidden: 'lp-hidden',
93 92 loading: 'loading',
94 93 elCollapse: 'lp-collapse',
95 94 elSectionToggle: '.lp-section-toggle',
96 - elTriggerToggle: '.lp-trigger-toggle'
95 + elTriggerToggle: '.lp-trigger-toggle',
96 + elBtnFullScreen: '.lp-btn-full-screen-view',
97 + elFullScreen: 'lp-full-screen-view',
98 + elBtnFullScreenClose: 'lp-full-screen-view__close'
97 99 };
98 100 const lpFetchAPI = (url, data = {}, functions = {}) => {
99 101 if ('function' === typeof functions.before) {
100 102 functions.before();
@@ -412,8 +414,141 @@
412 414 timer = setTimeout(() => func(args), wait);
413 415 };
414 416 };
415 417
418 +/**
419 + * Initialize lp-toggle-enable components.
420 + *
421 + * Finds all `.lp-toggle-enable` elements and wires up toggle behavior.
422 + * Reads initial state from `data-enabled` attribute ("true"/"false").
423 + * Calls `data-on-toggle` callback (if provided via options) on state change.
424 + *
425 + * HTML structure:
426 + * <label class="lp-toggle-enable" data-enabled="true">
427 + * <input type="checkbox" class="lp-toggle-enable__input" />
428 + * <span class="lp-toggle-enable__track"></span>
429 + * </label>
430 + *
431 + * @param {string} selector CSS selector for toggle elements (default: '.lp-toggle-enable')
432 + * @param {Function} onToggle Optional callback( el, isEnabled ) called on state change
433 + * @since 4.4.5
434 + * @version 1.0.0
435 + */
436 +window.lpToggleEnableInit = 0;
437 +const toggleEnable = (onToggle = null) => {
438 + if (window.lpToggleEnableInit) {
439 + return;
440 + }
441 + window.lpToggleEnableInit = 1;
442 + const selector = '.lp-toggle-enable';
443 + const updateUI = (toggle, isEnabled) => {
444 + toggle.classList.toggle('is-enabled', isEnabled);
445 + const input = toggle.querySelector('.lp-toggle-enable__input');
446 + if (input) {
447 + input.checked = isEnabled;
448 + input.value = isEnabled ? '1' : '0';
449 + }
450 + };
451 +
452 + // Delegate click handling via eventHandlers.
453 + eventHandlers('click', [{
454 + selector,
455 + callBack: args => {
456 + const {
457 + e,
458 + target
459 + } = args;
460 + const toggle = target.closest(selector);
461 + if (!toggle || toggle.classList.contains('is-disabled')) {
462 + return;
463 + }
464 + e.preventDefault();
465 + const isEnabled = !toggle.classList.contains('is-enabled');
466 + updateUI(toggle, isEnabled);
467 + if ('function' === typeof onToggle) {
468 + onToggle(toggle, isEnabled);
469 + }
470 + }
471 + }]);
472 +};
473 +
474 +/**
475 + * Initialize custom fullscreen view buttons.
476 + *
477 + * Delegates clicks on `.lp-btn-full-screen-view` buttons to
478 + * `lpToggleFullscreenView`. Reads the `data-target` attribute to find the
479 + * target element. Falls back to the button's parent element when
480 + * `data-target` is not provided.
481 + *
482 + * @since 4.4.5
483 + * @version 1.0.0
484 + */
485 +window.lpFullScreenViewInit = 0;
486 +const fullScreenView = () => {
487 + if (window.lpFullScreenViewInit) {
488 + return;
489 + }
490 + window.lpFullScreenViewInit = 1;
491 + let lastScrollY = 0;
492 + const lpToggleFullscreenView = (elTarget, elBtnFullScreen = null) => {
493 + const isFullscreen = elTarget.classList.contains(lpClassName.elFullScreen);
494 + if (isFullscreen) {
495 + elTarget.classList.remove(lpClassName.elFullScreen);
496 + document.documentElement.classList.remove('lp-full-screen-active');
497 + window.scrollTo(0, lastScrollY);
498 + } else {
499 + lastScrollY = window.scrollY;
500 + elTarget.classList.add(lpClassName.elFullScreen);
501 + document.documentElement.classList.add('lp-full-screen-active');
502 + }
503 + if (!isFullscreen) {
504 + if (!elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`)) {
505 + const closeButton = document.createElement('button');
506 + closeButton.type = 'button';
507 + closeButton.className = lpClassName.elBtnFullScreenClose;
508 + closeButton.setAttribute('aria-label', 'Close');
509 + closeButton.innerHTML = lpData.i18n.closeButtonFullScreen || 'Close &times;';
510 + closeButton.addEventListener('click', e => {
511 + e.preventDefault();
512 + lpToggleFullscreenView(elTarget);
513 + });
514 + elTarget.appendChild(closeButton);
515 + }
516 + } else {
517 + const closeButton = elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`);
518 + if (closeButton) {
519 + closeButton.remove();
520 + }
521 + }
522 + };
523 + eventHandlers('click', [{
524 + selector: lpClassName.elBtnFullScreen,
525 + callBack: args => {
526 + const {
527 + e,
528 + target
529 + } = args;
530 + const elBtnFullScreen = target.closest(lpClassName.elBtnFullScreen);
531 + if (!elBtnFullScreen) {
532 + console.log('No full screen button found');
533 + return;
534 + }
535 + e.preventDefault();
536 + let elTarget = null;
537 + const targetSelector = elBtnFullScreen.dataset.targetFullscreen;
538 + console.log(targetSelector);
539 + if (targetSelector) {
540 + elTarget = document.querySelector(targetSelector);
541 + }
542 + if (!elTarget) {
543 + console.log('No target element found');
544 + return;
545 + }
546 + lpToggleFullscreenView(elTarget, elBtnFullScreen);
547 + }
548 + }]);
549 +};
550 +
416 551 /***/ },
417 552
418 553 /***/ "./assets/src/js/utils/cookies.js"
419 554 /*!****************************************!*\
@@ -481,19 +616,19 @@
481 616
482 617 /******/ });
483 618 /************************************************************************/
484 619 /******/ // The module cache
485 -/******/ const __webpack_module_cache__ = {};
620 +/******/ var __webpack_module_cache__ = {};
486 621 /******/
487 622 /******/ // The require function
488 623 /******/ function __webpack_require__(moduleId) {
489 624 /******/ // Check if module is in cache
490 -/******/ const cachedModule = __webpack_module_cache__[moduleId];
625 +/******/ var cachedModule = __webpack_module_cache__[moduleId];
491 626 /******/ if (cachedModule !== undefined) {
492 627 /******/ return cachedModule.exports;
493 628 /******/ }
494 629 /******/ // Create a new module (and put it into the cache)
495 -/******/ const module = __webpack_module_cache__[moduleId] = {
630 +/******/ var module = __webpack_module_cache__[moduleId] = {
496 631 /******/ // no module.id needed
497 632 /******/ // no module.loaded needed
498 633 /******/ exports: {}
499 634 /******/ };
@@ -500,9 +635,9 @@
500 635 /******/
501 636 /******/ // Execute the module function
502 637 /******/ if (!(moduleId in __webpack_modules__)) {
503 638 /******/ delete __webpack_module_cache__[moduleId];
504 -/******/ const e = new Error("Cannot find module '" + moduleId + "'");
639 +/******/ var e = new Error("Cannot find module '" + moduleId + "'");
505 640 /******/ e.code = 'MODULE_NOT_FOUND';
506 641 /******/ throw e;
507 642 /******/ }
508 643 /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
@@ -513,29 +648,14 @@
513 648 /******/
514 649 /************************************************************************/
515 650 /******/ /* webpack/runtime/define property getters */
516 651 /******/ (() => {
517 -/******/ // define getter/value functions for harmony exports
652 +/******/ // define getter functions for harmony exports
518 653 /******/ __webpack_require__.d = (exports, definition) => {
519 -/******/ if(Array.isArray(definition)) {
520 -/******/ var i = 0;
521 -/******/ while(i < definition.length) {
522 -/******/ var key = definition[i++];
523 -/******/ var binding = definition[i++];
524 -/******/ if(!__webpack_require__.o(exports, key)) {
525 -/******/ if(binding === 0) {
526 -/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
527 -/******/ } else {
528 -/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
529 -/******/ }
530 -/******/ } else if(binding === 0) { i++; }
654 +/******/ for(var key in definition) {
655 +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
656 +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
531 657 /******/ }
532 -/******/ } else {
533 -/******/ for(var key in definition) {
534 -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
535 -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
536 -/******/ }
537 -/******/ }
538 658 /******/ }
539 659 /******/ };
540 660 /******/ })();
541 661 /******/
@@ -540,9 +660,9 @@
540 660 /******/ })();
541 661 /******/
542 662 /******/ /* webpack/runtime/hasOwnProperty shorthand */
543 663 /******/ (() => {
544 -/******/ __webpack_require__.o = (obj, prop) => (Object.hasOwn(obj, prop))
664 +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
545 665 /******/ })();
546 666 /******/
547 667 /******/ /* webpack/runtime/make namespace object */
548 668 /******/ (() => {
@@ -547,9 +667,9 @@
547 667 /******/ /* webpack/runtime/make namespace object */
548 668 /******/ (() => {
549 669 /******/ // define __esModule on exports
550 670 /******/ __webpack_require__.r = (exports) => {
551 -/******/ if(Symbol.toStringTag) {
671 +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
552 672 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
553 673 /******/ }
554 674 /******/ Object.defineProperty(exports, '__esModule', { value: true });
555 675 /******/ };
@@ -555,9 +675,9 @@
555 675 /******/ };
556 676 /******/ })();
557 677 /******/
558 678 /************************************************************************/
559 -let __webpack_exports__ = {};
679 +var __webpack_exports__ = {};
560 680 // This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
561 681 (() => {
562 682 /*!*******************************************!*\
563 683 !*** ./assets/src/js/frontend/courses.js ***!