Files
2025-08-21 20:39:34 +07:00

212 lines
9.2 KiB
JavaScript

(function ($) {
$(document).ready(function () {
$('[data-vue]').each(function () {
let $this = $(this);
let data_var = $this.attr('data-vue');
let data_source = $this.attr('data-source');
new Vue({
el: $(this)[0],
data: function () {
return {
loading: false,
data: '',
settings_alert: {
status: false,
success: true
},
}
},
mounted: function () {
this.getSettings();
this.clearEmptyGroups();
},
methods: {
initSubmenu: function () {
Vue.nextTick()
.then(function () {
(function ($) {
/*Hide all fields in submenu*/
var submenu_tab_fields = $('.wpcfto-tab.has-submenu-items [data-field], .wpcfto-tab.has-submenu-items .wpcfto_group_started');
submenu_tab_fields.css({
display: 'none'
});
var $sub_menu = $('.wpcfto-submenus .active');
var sub_menu_section = $sub_menu.attr('data-submenu');
let $submenu_section = $('.' + sub_menu_section);
$submenu_section.removeAttr('style');
submenu_tab_fields.parents('.wpcfto_group_started').css({
display: 'none'
});
$submenu_section.parents('.wpcfto_group_started').removeAttr('style');
})(jQuery);
});
},
changeTabFromAnchor: function () {
var _this = this;
var hash = window.location.hash;
var hashParts = hash.split('#');
if (typeof hashParts[1] !== 'undefined') {
Vue.nextTick(function () {
_this.changeTab(hashParts[1]);
});
}
},
changeTab: function (tab) {
let $tab = $('#' + tab);
$tab.closest('.stm_metaboxes_grid__inner').find('.wpcfto-tab').removeClass('active');
$tab.addClass('active');
let $section = $('div[data-section="' + tab + '"]');
$tab.closest('.wpcfto-settings').find('.wpcfto-nav').removeClass('active');
$tab.closest('.stm_metaboxes_grid__inner').find('.wpcfto-nav').removeClass('active');
$section.closest('.wpcfto-nav').addClass('active');
history.pushState(null, null, '#' + tab);
/*if has submenu*/
if ($section.closest('.wpcfto-nav').hasClass('has-submenu')) {
let $submenu = $section.closest('.wpcfto-nav').find('.wpcfto-submenus [data-submenu]').eq(0);
const urlParams = new URLSearchParams(window.location.search);
const submenuParam = urlParams.get('submenu');
if (submenuParam) {
const navSubmenu = $section.closest('.wpcfto-nav').find(`.wpcfto-submenus [data-submenu=${tab}_${submenuParam}]`);
$submenu = navSubmenu !== undefined && navSubmenu.length > 0 ? navSubmenu : $submenu;
}
this.changeSubMenu($submenu.attr('data-submenu'));
}
/*Scroll top*/
$("html, body").animate(
{
scrollTop: $tab.closest('.stm_metaboxes_grid__inner').offset().top - 100
},
"fast");
},
changeSubMenu(sub_menu) {
let $submenu = $('[data-submenu="' + sub_menu + '"]');
$('[data-submenu]').removeClass('active');
$submenu.addClass('active');
this.initSubmenu();
},
getSettings: function () {
var _this = this;
_this.loading = true;
this.$http.get(stm_wpcfto_ajaxurl + '?action=stm_wpcfto_get_settings&source=' + data_source + '&name=' + data_var + '&nonce=' + wpcfto_global_settings['nonce']).then(function (r) {
_this.$set(_this, 'data', r.body);
_this.loading = false;
this.changeTabFromAnchor();
this.initSubmenu();
});
},
saveSettings: function (id) {
var vm = this;
vm.loading = true;
this.$http.post(stm_wpcfto_ajaxurl + '?action=wpcfto_save_settings&nonce=' + stm_wpcfto_nonces['wpcfto_save_settings'] + '&name=' + id, JSON.stringify(vm.data)).then(function (response) {
vm.loading = false;
vm.settings_alert = {
success: response.status === 200,
status: true
};
setTimeout(() => {
vm.settings_alert.status = false;
}, 1500)
// if(response.body?.reload === true) location.reload();
location.reload();
});
},
initOpen(field) {
if (typeof field.opened === 'undefined') {
this.$set(field, 'opened', !!(field.value));
}
},
openField(field) {
var opened = !field.opened;
this.$set(field, 'opened', opened);
if (!field.opened) {
this.$set(field, 'value', '');
}
},
enableAddon($event, option) {
var _this = this;
Vue.nextTick(function () {
(function ($) {
var currentItem = $($event.target);
currentItem.addClass('loading');
var url = stm_wpcfto_ajaxurl + '?action=stm_lms_enable_addon&addon=' + option;
_this.$http.get(url).then(function (response) {
currentItem.removeClass('loading');
var $container = $('.stm_lms_addon_group_settings_' + option);
$container.each(function () {
var $this = $(this);
$this.removeClass('is_pro is_pro_in_addon');
$this.find('.field_overlay').remove();
$this.find('.pro-notice').remove();
});
});
})(jQuery);
});
},
clearEmptyGroups() {
Vue.nextTick()
.then(function () {
(function ($) {
$('.wpcfto_group_started').each(function () {
let $group = $(this);
let $childs = $group.find('.wpcfto-box-child');
if (!$childs.length) {
$group.addClass('no-childs-visible');
} else {
$group.removeClass('no-childs-visible');
}
})
})(jQuery);
});
}
},
watch: {
data: {
deep: true,
handler: function () {
let _this = this;
setTimeout(function () {
_this.clearEmptyGroups();
_this.initSubmenu();
}, 100);
}
}
}
});
});
});
})(jQuery);