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-orders.js +141 -3 4.3.7 → 4.4.9 View file →
@@ -138,8 +138,9 @@
138 138 __webpack_require__.r(__webpack_exports__);
139 139 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
140 140 /* harmony export */ debounce: () => (/* binding */ debounce),
141 141 /* harmony export */ eventHandlers: () => (/* binding */ eventHandlers),
142 +/* harmony export */ fullScreenView: () => (/* binding */ fullScreenView),
142 143 /* harmony export */ getDataOfForm: () => (/* binding */ getDataOfForm),
143 144 /* harmony export */ getFieldKeysOfForm: () => (/* binding */ getFieldKeysOfForm),
144 145 /* harmony export */ listenElementCreated: () => (/* binding */ listenElementCreated),
145 146 /* harmony export */ listenElementViewed: () => (/* binding */ listenElementViewed),
@@ -151,9 +152,10 @@
151 152 /* harmony export */ lpOnElementReady: () => (/* binding */ lpOnElementReady),
152 153 /* harmony export */ lpSetLoadingEl: () => (/* binding */ lpSetLoadingEl),
153 154 /* harmony export */ lpShowHideEl: () => (/* binding */ lpShowHideEl),
154 155 /* harmony export */ mergeDataWithDatForm: () => (/* binding */ mergeDataWithDatForm),
155 -/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse)
156 +/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse),
157 +/* harmony export */ toggleEnable: () => (/* binding */ toggleEnable)
156 158 /* harmony export */ });
157 159 /**
158 160 * Utils functions
159 161 *
@@ -160,9 +162,9 @@
160 162 * @param url
161 163 * @param data
162 164 * @param functions
163 165 * @since 4.2.5.1
164 - * @version 1.0.6
166 + * @version 1.0.7
165 167 */
166 168 const lpClassName = {
167 169 hidden: 'lp-hidden',
168 170 loading: 'loading',
@@ -167,9 +169,12 @@
167 169 hidden: 'lp-hidden',
168 170 loading: 'loading',
169 171 elCollapse: 'lp-collapse',
170 172 elSectionToggle: '.lp-section-toggle',
171 - elTriggerToggle: '.lp-trigger-toggle'
173 + elTriggerToggle: '.lp-trigger-toggle',
174 + elBtnFullScreen: '.lp-btn-full-screen-view',
175 + elFullScreen: 'lp-full-screen-view',
176 + elBtnFullScreenClose: 'lp-full-screen-view__close'
172 177 };
173 178 const lpFetchAPI = (url, data = {}, functions = {}) => {
174 179 if ('function' === typeof functions.before) {
175 180 functions.before();
@@ -485,8 +490,141 @@
485 490 return args => {
486 491 clearTimeout(timer);
487 492 timer = setTimeout(() => func(args), wait);
488 493 };
494 +};
495 +
496 +/**
497 + * Initialize lp-toggle-enable components.
498 + *
499 + * Finds all `.lp-toggle-enable` elements and wires up toggle behavior.
500 + * Reads initial state from `data-enabled` attribute ("true"/"false").
501 + * Calls `data-on-toggle` callback (if provided via options) on state change.
502 + *
503 + * HTML structure:
504 + * <label class="lp-toggle-enable" data-enabled="true">
505 + * <input type="checkbox" class="lp-toggle-enable__input" />
506 + * <span class="lp-toggle-enable__track"></span>
507 + * </label>
508 + *
509 + * @param {string} selector CSS selector for toggle elements (default: '.lp-toggle-enable')
510 + * @param {Function} onToggle Optional callback( el, isEnabled ) called on state change
511 + * @since 4.4.5
512 + * @version 1.0.0
513 + */
514 +window.lpToggleEnableInit = 0;
515 +const toggleEnable = (onToggle = null) => {
516 + if (window.lpToggleEnableInit) {
517 + return;
518 + }
519 + window.lpToggleEnableInit = 1;
520 + const selector = '.lp-toggle-enable';
521 + const updateUI = (toggle, isEnabled) => {
522 + toggle.classList.toggle('is-enabled', isEnabled);
523 + const input = toggle.querySelector('.lp-toggle-enable__input');
524 + if (input) {
525 + input.checked = isEnabled;
526 + input.value = isEnabled ? '1' : '0';
527 + }
528 + };
529 +
530 + // Delegate click handling via eventHandlers.
531 + eventHandlers('click', [{
532 + selector,
533 + callBack: args => {
534 + const {
535 + e,
536 + target
537 + } = args;
538 + const toggle = target.closest(selector);
539 + if (!toggle || toggle.classList.contains('is-disabled')) {
540 + return;
541 + }
542 + e.preventDefault();
543 + const isEnabled = !toggle.classList.contains('is-enabled');
544 + updateUI(toggle, isEnabled);
545 + if ('function' === typeof onToggle) {
546 + onToggle(toggle, isEnabled);
547 + }
548 + }
549 + }]);
550 +};
551 +
552 +/**
553 + * Initialize custom fullscreen view buttons.
554 + *
555 + * Delegates clicks on `.lp-btn-full-screen-view` buttons to
556 + * `lpToggleFullscreenView`. Reads the `data-target` attribute to find the
557 + * target element. Falls back to the button's parent element when
558 + * `data-target` is not provided.
559 + *
560 + * @since 4.4.5
561 + * @version 1.0.0
562 + */
563 +window.lpFullScreenViewInit = 0;
564 +const fullScreenView = () => {
565 + if (window.lpFullScreenViewInit) {
566 + return;
567 + }
568 + window.lpFullScreenViewInit = 1;
569 + let lastScrollY = 0;
570 + const lpToggleFullscreenView = (elTarget, elBtnFullScreen = null) => {
571 + const isFullscreen = elTarget.classList.contains(lpClassName.elFullScreen);
572 + if (isFullscreen) {
573 + elTarget.classList.remove(lpClassName.elFullScreen);
574 + document.documentElement.classList.remove('lp-full-screen-active');
575 + window.scrollTo(0, lastScrollY);
576 + } else {
577 + lastScrollY = window.scrollY;
578 + elTarget.classList.add(lpClassName.elFullScreen);
579 + document.documentElement.classList.add('lp-full-screen-active');
580 + }
581 + if (!isFullscreen) {
582 + if (!elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`)) {
583 + const closeButton = document.createElement('button');
584 + closeButton.type = 'button';
585 + closeButton.className = lpClassName.elBtnFullScreenClose;
586 + closeButton.setAttribute('aria-label', 'Close');
587 + closeButton.innerHTML = lpData.i18n.closeButtonFullScreen || 'Close &times;';
588 + closeButton.addEventListener('click', e => {
589 + e.preventDefault();
590 + lpToggleFullscreenView(elTarget);
591 + });
592 + elTarget.appendChild(closeButton);
593 + }
594 + } else {
595 + const closeButton = elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`);
596 + if (closeButton) {
597 + closeButton.remove();
598 + }
599 + }
600 + };
601 + eventHandlers('click', [{
602 + selector: lpClassName.elBtnFullScreen,
603 + callBack: args => {
604 + const {
605 + e,
606 + target
607 + } = args;
608 + const elBtnFullScreen = target.closest(lpClassName.elBtnFullScreen);
609 + if (!elBtnFullScreen) {
610 + console.log('No full screen button found');
611 + return;
612 + }
613 + e.preventDefault();
614 + let elTarget = null;
615 + const targetSelector = elBtnFullScreen.dataset.targetFullscreen;
616 + console.log(targetSelector);
617 + if (targetSelector) {
618 + elTarget = document.querySelector(targetSelector);
619 + }
620 + if (!elTarget) {
621 + console.log('No target element found');
622 + return;
623 + }
624 + lpToggleFullscreenView(elTarget, elBtnFullScreen);
625 + }
626 + }]);
489 627 };
490 628
491 629 /***/ },
492 630