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/dist/js/admin/edit-question.js +141 -3 4.4.2 → 4.4.9 View file →
@@ -65,8 +65,9 @@
65 65 __webpack_require__.r(__webpack_exports__);
66 66 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
67 67 /* harmony export */ debounce: () => (/* binding */ debounce),
68 68 /* harmony export */ eventHandlers: () => (/* binding */ eventHandlers),
69 +/* harmony export */ fullScreenView: () => (/* binding */ fullScreenView),
69 70 /* harmony export */ getDataOfForm: () => (/* binding */ getDataOfForm),
70 71 /* harmony export */ getFieldKeysOfForm: () => (/* binding */ getFieldKeysOfForm),
71 72 /* harmony export */ listenElementCreated: () => (/* binding */ listenElementCreated),
72 73 /* harmony export */ listenElementViewed: () => (/* binding */ listenElementViewed),
@@ -78,9 +79,10 @@
78 79 /* harmony export */ lpOnElementReady: () => (/* binding */ lpOnElementReady),
79 80 /* harmony export */ lpSetLoadingEl: () => (/* binding */ lpSetLoadingEl),
80 81 /* harmony export */ lpShowHideEl: () => (/* binding */ lpShowHideEl),
81 82 /* harmony export */ mergeDataWithDatForm: () => (/* binding */ mergeDataWithDatForm),
82 -/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse)
83 +/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse),
84 +/* harmony export */ toggleEnable: () => (/* binding */ toggleEnable)
83 85 /* harmony export */ });
84 86 /**
85 87 * Utils functions
86 88 *
@@ -87,9 +89,9 @@
87 89 * @param url
88 90 * @param data
89 91 * @param functions
90 92 * @since 4.2.5.1
91 - * @version 1.0.6
93 + * @version 1.0.7
92 94 */
93 95 const lpClassName = {
94 96 hidden: 'lp-hidden',
95 97 loading: 'loading',
@@ -94,9 +96,12 @@
94 96 hidden: 'lp-hidden',
95 97 loading: 'loading',
96 98 elCollapse: 'lp-collapse',
97 99 elSectionToggle: '.lp-section-toggle',
98 - elTriggerToggle: '.lp-trigger-toggle'
100 + elTriggerToggle: '.lp-trigger-toggle',
101 + elBtnFullScreen: '.lp-btn-full-screen-view',
102 + elFullScreen: 'lp-full-screen-view',
103 + elBtnFullScreenClose: 'lp-full-screen-view__close'
99 104 };
100 105 const lpFetchAPI = (url, data = {}, functions = {}) => {
101 106 if ('function' === typeof functions.before) {
102 107 functions.before();
@@ -412,8 +417,141 @@
412 417 return args => {
413 418 clearTimeout(timer);
414 419 timer = setTimeout(() => func(args), wait);
415 420 };
421 +};
422 +
423 +/**
424 + * Initialize lp-toggle-enable components.
425 + *
426 + * Finds all `.lp-toggle-enable` elements and wires up toggle behavior.
427 + * Reads initial state from `data-enabled` attribute ("true"/"false").
428 + * Calls `data-on-toggle` callback (if provided via options) on state change.
429 + *
430 + * HTML structure:
431 + * <label class="lp-toggle-enable" data-enabled="true">
432 + * <input type="checkbox" class="lp-toggle-enable__input" />
433 + * <span class="lp-toggle-enable__track"></span>
434 + * </label>
435 + *
436 + * @param {string} selector CSS selector for toggle elements (default: '.lp-toggle-enable')
437 + * @param {Function} onToggle Optional callback( el, isEnabled ) called on state change
438 + * @since 4.4.5
439 + * @version 1.0.0
440 + */
441 +window.lpToggleEnableInit = 0;
442 +const toggleEnable = (onToggle = null) => {
443 + if (window.lpToggleEnableInit) {
444 + return;
445 + }
446 + window.lpToggleEnableInit = 1;
447 + const selector = '.lp-toggle-enable';
448 + const updateUI = (toggle, isEnabled) => {
449 + toggle.classList.toggle('is-enabled', isEnabled);
450 + const input = toggle.querySelector('.lp-toggle-enable__input');
451 + if (input) {
452 + input.checked = isEnabled;
453 + input.value = isEnabled ? '1' : '0';
454 + }
455 + };
456 +
457 + // Delegate click handling via eventHandlers.
458 + eventHandlers('click', [{
459 + selector,
460 + callBack: args => {
461 + const {
462 + e,
463 + target
464 + } = args;
465 + const toggle = target.closest(selector);
466 + if (!toggle || toggle.classList.contains('is-disabled')) {
467 + return;
468 + }
469 + e.preventDefault();
470 + const isEnabled = !toggle.classList.contains('is-enabled');
471 + updateUI(toggle, isEnabled);
472 + if ('function' === typeof onToggle) {
473 + onToggle(toggle, isEnabled);
474 + }
475 + }
476 + }]);
477 +};
478 +
479 +/**
480 + * Initialize custom fullscreen view buttons.
481 + *
482 + * Delegates clicks on `.lp-btn-full-screen-view` buttons to
483 + * `lpToggleFullscreenView`. Reads the `data-target` attribute to find the
484 + * target element. Falls back to the button's parent element when
485 + * `data-target` is not provided.
486 + *
487 + * @since 4.4.5
488 + * @version 1.0.0
489 + */
490 +window.lpFullScreenViewInit = 0;
491 +const fullScreenView = () => {
492 + if (window.lpFullScreenViewInit) {
493 + return;
494 + }
495 + window.lpFullScreenViewInit = 1;
496 + let lastScrollY = 0;
497 + const lpToggleFullscreenView = (elTarget, elBtnFullScreen = null) => {
498 + const isFullscreen = elTarget.classList.contains(lpClassName.elFullScreen);
499 + if (isFullscreen) {
500 + elTarget.classList.remove(lpClassName.elFullScreen);
501 + document.documentElement.classList.remove('lp-full-screen-active');
502 + window.scrollTo(0, lastScrollY);
503 + } else {
504 + lastScrollY = window.scrollY;
505 + elTarget.classList.add(lpClassName.elFullScreen);
506 + document.documentElement.classList.add('lp-full-screen-active');
507 + }
508 + if (!isFullscreen) {
509 + if (!elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`)) {
510 + const closeButton = document.createElement('button');
511 + closeButton.type = 'button';
512 + closeButton.className = lpClassName.elBtnFullScreenClose;
513 + closeButton.setAttribute('aria-label', 'Close');
514 + closeButton.innerHTML = lpData.i18n.closeButtonFullScreen || 'Close &times;';
515 + closeButton.addEventListener('click', e => {
516 + e.preventDefault();
517 + lpToggleFullscreenView(elTarget);
518 + });
519 + elTarget.appendChild(closeButton);
520 + }
521 + } else {
522 + const closeButton = elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`);
523 + if (closeButton) {
524 + closeButton.remove();
525 + }
526 + }
527 + };
528 + eventHandlers('click', [{
529 + selector: lpClassName.elBtnFullScreen,
530 + callBack: args => {
531 + const {
532 + e,
533 + target
534 + } = args;
535 + const elBtnFullScreen = target.closest(lpClassName.elBtnFullScreen);
536 + if (!elBtnFullScreen) {
537 + console.log('No full screen button found');
538 + return;
539 + }
540 + e.preventDefault();
541 + let elTarget = null;
542 + const targetSelector = elBtnFullScreen.dataset.targetFullscreen;
543 + console.log(targetSelector);
544 + if (targetSelector) {
545 + elTarget = document.querySelector(targetSelector);
546 + }
547 + if (!elTarget) {
548 + console.log('No target element found');
549 + return;
550 + }
551 + lpToggleFullscreenView(elTarget, elBtnFullScreen);
552 + }
553 + }]);
416 554 };
417 555
418 556 /***/ },
419 557