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-tools.js +141 -3 4.4.3 → 4.4.9 View file →
@@ -428,8 +428,9 @@
428 428 __webpack_require__.r(__webpack_exports__);
429 429 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
430 430 /* harmony export */ debounce: () => (/* binding */ debounce),
431 431 /* harmony export */ eventHandlers: () => (/* binding */ eventHandlers),
432 +/* harmony export */ fullScreenView: () => (/* binding */ fullScreenView),
432 433 /* harmony export */ getDataOfForm: () => (/* binding */ getDataOfForm),
433 434 /* harmony export */ getFieldKeysOfForm: () => (/* binding */ getFieldKeysOfForm),
434 435 /* harmony export */ listenElementCreated: () => (/* binding */ listenElementCreated),
435 436 /* harmony export */ listenElementViewed: () => (/* binding */ listenElementViewed),
@@ -441,9 +442,10 @@
441 442 /* harmony export */ lpOnElementReady: () => (/* binding */ lpOnElementReady),
442 443 /* harmony export */ lpSetLoadingEl: () => (/* binding */ lpSetLoadingEl),
443 444 /* harmony export */ lpShowHideEl: () => (/* binding */ lpShowHideEl),
444 445 /* harmony export */ mergeDataWithDatForm: () => (/* binding */ mergeDataWithDatForm),
445 -/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse)
446 +/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse),
447 +/* harmony export */ toggleEnable: () => (/* binding */ toggleEnable)
446 448 /* harmony export */ });
447 449 /**
448 450 * Utils functions
449 451 *
@@ -450,9 +452,9 @@
450 452 * @param url
451 453 * @param data
452 454 * @param functions
453 455 * @since 4.2.5.1
454 - * @version 1.0.6
456 + * @version 1.0.7
455 457 */
456 458 const lpClassName = {
457 459 hidden: 'lp-hidden',
458 460 loading: 'loading',
@@ -457,9 +459,12 @@
457 459 hidden: 'lp-hidden',
458 460 loading: 'loading',
459 461 elCollapse: 'lp-collapse',
460 462 elSectionToggle: '.lp-section-toggle',
461 - elTriggerToggle: '.lp-trigger-toggle'
463 + elTriggerToggle: '.lp-trigger-toggle',
464 + elBtnFullScreen: '.lp-btn-full-screen-view',
465 + elFullScreen: 'lp-full-screen-view',
466 + elBtnFullScreenClose: 'lp-full-screen-view__close'
462 467 };
463 468 const lpFetchAPI = (url, data = {}, functions = {}) => {
464 469 if ('function' === typeof functions.before) {
465 470 functions.before();
@@ -775,8 +780,141 @@
775 780 return args => {
776 781 clearTimeout(timer);
777 782 timer = setTimeout(() => func(args), wait);
778 783 };
784 +};
785 +
786 +/**
787 + * Initialize lp-toggle-enable components.
788 + *
789 + * Finds all `.lp-toggle-enable` elements and wires up toggle behavior.
790 + * Reads initial state from `data-enabled` attribute ("true"/"false").
791 + * Calls `data-on-toggle` callback (if provided via options) on state change.
792 + *
793 + * HTML structure:
794 + * <label class="lp-toggle-enable" data-enabled="true">
795 + * <input type="checkbox" class="lp-toggle-enable__input" />
796 + * <span class="lp-toggle-enable__track"></span>
797 + * </label>
798 + *
799 + * @param {string} selector CSS selector for toggle elements (default: '.lp-toggle-enable')
800 + * @param {Function} onToggle Optional callback( el, isEnabled ) called on state change
801 + * @since 4.4.5
802 + * @version 1.0.0
803 + */
804 +window.lpToggleEnableInit = 0;
805 +const toggleEnable = (onToggle = null) => {
806 + if (window.lpToggleEnableInit) {
807 + return;
808 + }
809 + window.lpToggleEnableInit = 1;
810 + const selector = '.lp-toggle-enable';
811 + const updateUI = (toggle, isEnabled) => {
812 + toggle.classList.toggle('is-enabled', isEnabled);
813 + const input = toggle.querySelector('.lp-toggle-enable__input');
814 + if (input) {
815 + input.checked = isEnabled;
816 + input.value = isEnabled ? '1' : '0';
817 + }
818 + };
819 +
820 + // Delegate click handling via eventHandlers.
821 + eventHandlers('click', [{
822 + selector,
823 + callBack: args => {
824 + const {
825 + e,
826 + target
827 + } = args;
828 + const toggle = target.closest(selector);
829 + if (!toggle || toggle.classList.contains('is-disabled')) {
830 + return;
831 + }
832 + e.preventDefault();
833 + const isEnabled = !toggle.classList.contains('is-enabled');
834 + updateUI(toggle, isEnabled);
835 + if ('function' === typeof onToggle) {
836 + onToggle(toggle, isEnabled);
837 + }
838 + }
839 + }]);
840 +};
841 +
842 +/**
843 + * Initialize custom fullscreen view buttons.
844 + *
845 + * Delegates clicks on `.lp-btn-full-screen-view` buttons to
846 + * `lpToggleFullscreenView`. Reads the `data-target` attribute to find the
847 + * target element. Falls back to the button's parent element when
848 + * `data-target` is not provided.
849 + *
850 + * @since 4.4.5
851 + * @version 1.0.0
852 + */
853 +window.lpFullScreenViewInit = 0;
854 +const fullScreenView = () => {
855 + if (window.lpFullScreenViewInit) {
856 + return;
857 + }
858 + window.lpFullScreenViewInit = 1;
859 + let lastScrollY = 0;
860 + const lpToggleFullscreenView = (elTarget, elBtnFullScreen = null) => {
861 + const isFullscreen = elTarget.classList.contains(lpClassName.elFullScreen);
862 + if (isFullscreen) {
863 + elTarget.classList.remove(lpClassName.elFullScreen);
864 + document.documentElement.classList.remove('lp-full-screen-active');
865 + window.scrollTo(0, lastScrollY);
866 + } else {
867 + lastScrollY = window.scrollY;
868 + elTarget.classList.add(lpClassName.elFullScreen);
869 + document.documentElement.classList.add('lp-full-screen-active');
870 + }
871 + if (!isFullscreen) {
872 + if (!elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`)) {
873 + const closeButton = document.createElement('button');
874 + closeButton.type = 'button';
875 + closeButton.className = lpClassName.elBtnFullScreenClose;
876 + closeButton.setAttribute('aria-label', 'Close');
877 + closeButton.innerHTML = lpData.i18n.closeButtonFullScreen || 'Close &times;';
878 + closeButton.addEventListener('click', e => {
879 + e.preventDefault();
880 + lpToggleFullscreenView(elTarget);
881 + });
882 + elTarget.appendChild(closeButton);
883 + }
884 + } else {
885 + const closeButton = elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`);
886 + if (closeButton) {
887 + closeButton.remove();
888 + }
889 + }
890 + };
891 + eventHandlers('click', [{
892 + selector: lpClassName.elBtnFullScreen,
893 + callBack: args => {
894 + const {
895 + e,
896 + target
897 + } = args;
898 + const elBtnFullScreen = target.closest(lpClassName.elBtnFullScreen);
899 + if (!elBtnFullScreen) {
900 + console.log('No full screen button found');
901 + return;
902 + }
903 + e.preventDefault();
904 + let elTarget = null;
905 + const targetSelector = elBtnFullScreen.dataset.targetFullscreen;
906 + console.log(targetSelector);
907 + if (targetSelector) {
908 + elTarget = document.querySelector(targetSelector);
909 + }
910 + if (!elTarget) {
911 + console.log('No target element found');
912 + return;
913 + }
914 + lpToggleFullscreenView(elTarget, elBtnFullScreen);
915 + }
916 + }]);
779 917 };
780 918
781 919 /***/ },
782 920