PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.10
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.10
4.4.10 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 All 142 releases
← All changes | assets/js/dist/frontend/single-curriculum.js +141 -3 4.4.1 → 4.4.10 View file →
@@ -641,8 +641,9 @@
641 641 __webpack_require__.r(__webpack_exports__);
642 642 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
643 643 /* harmony export */ debounce: () => (/* binding */ debounce),
644 644 /* harmony export */ eventHandlers: () => (/* binding */ eventHandlers),
645 +/* harmony export */ fullScreenView: () => (/* binding */ fullScreenView),
645 646 /* harmony export */ getDataOfForm: () => (/* binding */ getDataOfForm),
646 647 /* harmony export */ getFieldKeysOfForm: () => (/* binding */ getFieldKeysOfForm),
647 648 /* harmony export */ listenElementCreated: () => (/* binding */ listenElementCreated),
648 649 /* harmony export */ listenElementViewed: () => (/* binding */ listenElementViewed),
@@ -654,9 +655,10 @@
654 655 /* harmony export */ lpOnElementReady: () => (/* binding */ lpOnElementReady),
655 656 /* harmony export */ lpSetLoadingEl: () => (/* binding */ lpSetLoadingEl),
656 657 /* harmony export */ lpShowHideEl: () => (/* binding */ lpShowHideEl),
657 658 /* harmony export */ mergeDataWithDatForm: () => (/* binding */ mergeDataWithDatForm),
658 -/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse)
659 +/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse),
660 +/* harmony export */ toggleEnable: () => (/* binding */ toggleEnable)
659 661 /* harmony export */ });
660 662 /**
661 663 * Utils functions
662 664 *
@@ -663,9 +665,9 @@
663 665 * @param url
664 666 * @param data
665 667 * @param functions
666 668 * @since 4.2.5.1
667 - * @version 1.0.6
669 + * @version 1.0.7
668 670 */
669 671 const lpClassName = {
670 672 hidden: 'lp-hidden',
671 673 loading: 'loading',
@@ -670,9 +672,12 @@
670 672 hidden: 'lp-hidden',
671 673 loading: 'loading',
672 674 elCollapse: 'lp-collapse',
673 675 elSectionToggle: '.lp-section-toggle',
674 - elTriggerToggle: '.lp-trigger-toggle'
676 + elTriggerToggle: '.lp-trigger-toggle',
677 + elBtnFullScreen: '.lp-btn-full-screen-view',
678 + elFullScreen: 'lp-full-screen-view',
679 + elBtnFullScreenClose: 'lp-full-screen-view__close'
675 680 };
676 681 const lpFetchAPI = (url, data = {}, functions = {}) => {
677 682 if ('function' === typeof functions.before) {
678 683 functions.before();
@@ -988,8 +993,141 @@
988 993 return args => {
989 994 clearTimeout(timer);
990 995 timer = setTimeout(() => func(args), wait);
991 996 };
997 +};
998 +
999 +/**
1000 + * Initialize lp-toggle-enable components.
1001 + *
1002 + * Finds all `.lp-toggle-enable` elements and wires up toggle behavior.
1003 + * Reads initial state from `data-enabled` attribute ("true"/"false").
1004 + * Calls `data-on-toggle` callback (if provided via options) on state change.
1005 + *
1006 + * HTML structure:
1007 + * <label class="lp-toggle-enable" data-enabled="true">
1008 + * <input type="checkbox" class="lp-toggle-enable__input" />
1009 + * <span class="lp-toggle-enable__track"></span>
1010 + * </label>
1011 + *
1012 + * @param {string} selector CSS selector for toggle elements (default: '.lp-toggle-enable')
1013 + * @param {Function} onToggle Optional callback( el, isEnabled ) called on state change
1014 + * @since 4.4.5
1015 + * @version 1.0.0
1016 + */
1017 +window.lpToggleEnableInit = 0;
1018 +const toggleEnable = (onToggle = null) => {
1019 + if (window.lpToggleEnableInit) {
1020 + return;
1021 + }
1022 + window.lpToggleEnableInit = 1;
1023 + const selector = '.lp-toggle-enable';
1024 + const updateUI = (toggle, isEnabled) => {
1025 + toggle.classList.toggle('is-enabled', isEnabled);
1026 + const input = toggle.querySelector('.lp-toggle-enable__input');
1027 + if (input) {
1028 + input.checked = isEnabled;
1029 + input.value = isEnabled ? '1' : '0';
1030 + }
1031 + };
1032 +
1033 + // Delegate click handling via eventHandlers.
1034 + eventHandlers('click', [{
1035 + selector,
1036 + callBack: args => {
1037 + const {
1038 + e,
1039 + target
1040 + } = args;
1041 + const toggle = target.closest(selector);
1042 + if (!toggle || toggle.classList.contains('is-disabled')) {
1043 + return;
1044 + }
1045 + e.preventDefault();
1046 + const isEnabled = !toggle.classList.contains('is-enabled');
1047 + updateUI(toggle, isEnabled);
1048 + if ('function' === typeof onToggle) {
1049 + onToggle(toggle, isEnabled);
1050 + }
1051 + }
1052 + }]);
1053 +};
1054 +
1055 +/**
1056 + * Initialize custom fullscreen view buttons.
1057 + *
1058 + * Delegates clicks on `.lp-btn-full-screen-view` buttons to
1059 + * `lpToggleFullscreenView`. Reads the `data-target` attribute to find the
1060 + * target element. Falls back to the button's parent element when
1061 + * `data-target` is not provided.
1062 + *
1063 + * @since 4.4.5
1064 + * @version 1.0.0
1065 + */
1066 +window.lpFullScreenViewInit = 0;
1067 +const fullScreenView = () => {
1068 + if (window.lpFullScreenViewInit) {
1069 + return;
1070 + }
1071 + window.lpFullScreenViewInit = 1;
1072 + let lastScrollY = 0;
1073 + const lpToggleFullscreenView = (elTarget, elBtnFullScreen = null) => {
1074 + const isFullscreen = elTarget.classList.contains(lpClassName.elFullScreen);
1075 + if (isFullscreen) {
1076 + elTarget.classList.remove(lpClassName.elFullScreen);
1077 + document.documentElement.classList.remove('lp-full-screen-active');
1078 + window.scrollTo(0, lastScrollY);
1079 + } else {
1080 + lastScrollY = window.scrollY;
1081 + elTarget.classList.add(lpClassName.elFullScreen);
1082 + document.documentElement.classList.add('lp-full-screen-active');
1083 + }
1084 + if (!isFullscreen) {
1085 + if (!elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`)) {
1086 + const closeButton = document.createElement('button');
1087 + closeButton.type = 'button';
1088 + closeButton.className = lpClassName.elBtnFullScreenClose;
1089 + closeButton.setAttribute('aria-label', 'Close');
1090 + closeButton.innerHTML = lpData.i18n.closeButtonFullScreen || 'Close &times;';
1091 + closeButton.addEventListener('click', e => {
1092 + e.preventDefault();
1093 + lpToggleFullscreenView(elTarget);
1094 + });
1095 + elTarget.appendChild(closeButton);
1096 + }
1097 + } else {
1098 + const closeButton = elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`);
1099 + if (closeButton) {
1100 + closeButton.remove();
1101 + }
1102 + }
1103 + };
1104 + eventHandlers('click', [{
1105 + selector: lpClassName.elBtnFullScreen,
1106 + callBack: args => {
1107 + const {
1108 + e,
1109 + target
1110 + } = args;
1111 + const elBtnFullScreen = target.closest(lpClassName.elBtnFullScreen);
1112 + if (!elBtnFullScreen) {
1113 + console.log('No full screen button found');
1114 + return;
1115 + }
1116 + e.preventDefault();
1117 + let elTarget = null;
1118 + const targetSelector = elBtnFullScreen.dataset.targetFullscreen;
1119 + console.log(targetSelector);
1120 + if (targetSelector) {
1121 + elTarget = document.querySelector(targetSelector);
1122 + }
1123 + if (!elTarget) {
1124 + console.log('No target element found');
1125 + return;
1126 + }
1127 + lpToggleFullscreenView(elTarget, elBtnFullScreen);
1128 + }
1129 + }]);
992 1130 };
993 1131
994 1132 /***/ },
995 1133