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 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 All 140 releases
← All changes | assets/js/dist/admin/admin-statistic.js +141 -3 4.4.3 → 4.4.9 View file →
@@ -3073,8 +3073,9 @@
3073 3073 __webpack_require__.r(__webpack_exports__);
3074 3074 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3075 3075 /* harmony export */ debounce: () => (/* binding */ debounce),
3076 3076 /* harmony export */ eventHandlers: () => (/* binding */ eventHandlers),
3077 +/* harmony export */ fullScreenView: () => (/* binding */ fullScreenView),
3077 3078 /* harmony export */ getDataOfForm: () => (/* binding */ getDataOfForm),
3078 3079 /* harmony export */ getFieldKeysOfForm: () => (/* binding */ getFieldKeysOfForm),
3079 3080 /* harmony export */ listenElementCreated: () => (/* binding */ listenElementCreated),
3080 3081 /* harmony export */ listenElementViewed: () => (/* binding */ listenElementViewed),
@@ -3086,9 +3087,10 @@
3086 3087 /* harmony export */ lpOnElementReady: () => (/* binding */ lpOnElementReady),
3087 3088 /* harmony export */ lpSetLoadingEl: () => (/* binding */ lpSetLoadingEl),
3088 3089 /* harmony export */ lpShowHideEl: () => (/* binding */ lpShowHideEl),
3089 3090 /* harmony export */ mergeDataWithDatForm: () => (/* binding */ mergeDataWithDatForm),
3090 -/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse)
3091 +/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse),
3092 +/* harmony export */ toggleEnable: () => (/* binding */ toggleEnable)
3091 3093 /* harmony export */ });
3092 3094 /**
3093 3095 * Utils functions
3094 3096 *
@@ -3095,9 +3097,9 @@
3095 3097 * @param url
3096 3098 * @param data
3097 3099 * @param functions
3098 3100 * @since 4.2.5.1
3099 - * @version 1.0.6
3101 + * @version 1.0.7
3100 3102 */
3101 3103 const lpClassName = {
3102 3104 hidden: 'lp-hidden',
3103 3105 loading: 'loading',
@@ -3102,9 +3104,12 @@
3102 3104 hidden: 'lp-hidden',
3103 3105 loading: 'loading',
3104 3106 elCollapse: 'lp-collapse',
3105 3107 elSectionToggle: '.lp-section-toggle',
3106 - elTriggerToggle: '.lp-trigger-toggle'
3108 + elTriggerToggle: '.lp-trigger-toggle',
3109 + elBtnFullScreen: '.lp-btn-full-screen-view',
3110 + elFullScreen: 'lp-full-screen-view',
3111 + elBtnFullScreenClose: 'lp-full-screen-view__close'
3107 3112 };
3108 3113 const lpFetchAPI = (url, data = {}, functions = {}) => {
3109 3114 if ('function' === typeof functions.before) {
3110 3115 functions.before();
@@ -3420,8 +3425,141 @@
3420 3425 return args => {
3421 3426 clearTimeout(timer);
3422 3427 timer = setTimeout(() => func(args), wait);
3423 3428 };
3429 +};
3430 +
3431 +/**
3432 + * Initialize lp-toggle-enable components.
3433 + *
3434 + * Finds all `.lp-toggle-enable` elements and wires up toggle behavior.
3435 + * Reads initial state from `data-enabled` attribute ("true"/"false").
3436 + * Calls `data-on-toggle` callback (if provided via options) on state change.
3437 + *
3438 + * HTML structure:
3439 + * <label class="lp-toggle-enable" data-enabled="true">
3440 + * <input type="checkbox" class="lp-toggle-enable__input" />
3441 + * <span class="lp-toggle-enable__track"></span>
3442 + * </label>
3443 + *
3444 + * @param {string} selector CSS selector for toggle elements (default: '.lp-toggle-enable')
3445 + * @param {Function} onToggle Optional callback( el, isEnabled ) called on state change
3446 + * @since 4.4.5
3447 + * @version 1.0.0
3448 + */
3449 +window.lpToggleEnableInit = 0;
3450 +const toggleEnable = (onToggle = null) => {
3451 + if (window.lpToggleEnableInit) {
3452 + return;
3453 + }
3454 + window.lpToggleEnableInit = 1;
3455 + const selector = '.lp-toggle-enable';
3456 + const updateUI = (toggle, isEnabled) => {
3457 + toggle.classList.toggle('is-enabled', isEnabled);
3458 + const input = toggle.querySelector('.lp-toggle-enable__input');
3459 + if (input) {
3460 + input.checked = isEnabled;
3461 + input.value = isEnabled ? '1' : '0';
3462 + }
3463 + };
3464 +
3465 + // Delegate click handling via eventHandlers.
3466 + eventHandlers('click', [{
3467 + selector,
3468 + callBack: args => {
3469 + const {
3470 + e,
3471 + target
3472 + } = args;
3473 + const toggle = target.closest(selector);
3474 + if (!toggle || toggle.classList.contains('is-disabled')) {
3475 + return;
3476 + }
3477 + e.preventDefault();
3478 + const isEnabled = !toggle.classList.contains('is-enabled');
3479 + updateUI(toggle, isEnabled);
3480 + if ('function' === typeof onToggle) {
3481 + onToggle(toggle, isEnabled);
3482 + }
3483 + }
3484 + }]);
3485 +};
3486 +
3487 +/**
3488 + * Initialize custom fullscreen view buttons.
3489 + *
3490 + * Delegates clicks on `.lp-btn-full-screen-view` buttons to
3491 + * `lpToggleFullscreenView`. Reads the `data-target` attribute to find the
3492 + * target element. Falls back to the button's parent element when
3493 + * `data-target` is not provided.
3494 + *
3495 + * @since 4.4.5
3496 + * @version 1.0.0
3497 + */
3498 +window.lpFullScreenViewInit = 0;
3499 +const fullScreenView = () => {
3500 + if (window.lpFullScreenViewInit) {
3501 + return;
3502 + }
3503 + window.lpFullScreenViewInit = 1;
3504 + let lastScrollY = 0;
3505 + const lpToggleFullscreenView = (elTarget, elBtnFullScreen = null) => {
3506 + const isFullscreen = elTarget.classList.contains(lpClassName.elFullScreen);
3507 + if (isFullscreen) {
3508 + elTarget.classList.remove(lpClassName.elFullScreen);
3509 + document.documentElement.classList.remove('lp-full-screen-active');
3510 + window.scrollTo(0, lastScrollY);
3511 + } else {
3512 + lastScrollY = window.scrollY;
3513 + elTarget.classList.add(lpClassName.elFullScreen);
3514 + document.documentElement.classList.add('lp-full-screen-active');
3515 + }
3516 + if (!isFullscreen) {
3517 + if (!elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`)) {
3518 + const closeButton = document.createElement('button');
3519 + closeButton.type = 'button';
3520 + closeButton.className = lpClassName.elBtnFullScreenClose;
3521 + closeButton.setAttribute('aria-label', 'Close');
3522 + closeButton.innerHTML = lpData.i18n.closeButtonFullScreen || 'Close &times;';
3523 + closeButton.addEventListener('click', e => {
3524 + e.preventDefault();
3525 + lpToggleFullscreenView(elTarget);
3526 + });
3527 + elTarget.appendChild(closeButton);
3528 + }
3529 + } else {
3530 + const closeButton = elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`);
3531 + if (closeButton) {
3532 + closeButton.remove();
3533 + }
3534 + }
3535 + };
3536 + eventHandlers('click', [{
3537 + selector: lpClassName.elBtnFullScreen,
3538 + callBack: args => {
3539 + const {
3540 + e,
3541 + target
3542 + } = args;
3543 + const elBtnFullScreen = target.closest(lpClassName.elBtnFullScreen);
3544 + if (!elBtnFullScreen) {
3545 + console.log('No full screen button found');
3546 + return;
3547 + }
3548 + e.preventDefault();
3549 + let elTarget = null;
3550 + const targetSelector = elBtnFullScreen.dataset.targetFullscreen;
3551 + console.log(targetSelector);
3552 + if (targetSelector) {
3553 + elTarget = document.querySelector(targetSelector);
3554 + }
3555 + if (!elTarget) {
3556 + console.log('No target element found');
3557 + return;
3558 + }
3559 + lpToggleFullscreenView(elTarget, elBtnFullScreen);
3560 + }
3561 + }]);
3424 3562 };
3425 3563
3426 3564 /***/ },
3427 3565