jQuery(function () { // Auto-select newly created group from URL parameter let urlParams = new URLSearchParams(globalThis.location.search); let newGroupId = urlParams.get('new-tag'); jQuery(document).ready(function () { if (newGroupId) { // Find the menu item with the new group ID let newGroupItem = jQuery('#mainwp-groups-menu').find('a.item#' + newGroupId); if (newGroupItem.length > 0) { // Trigger click on the new group item to select it newGroupItem.trigger('click'); // Show success message feedback('mainwp-message-zone', 'Tag created successfully.', 'ui green message'); // Auto-hide message after 5 seconds setTimeout(() => { jQuery('#mainwp-message-zone').fadeOut(); }, 5000); // Remove the URL parameter without reloading the page let cleanUrl = globalThis.location.pathname + globalThis.location.search.replace(/[?&]new-tag=[^&]+/, '').replace(/^&/, '?'); if (cleanUrl.endsWith('?')) { cleanUrl = cleanUrl.slice(0, -1); } globalThis.history.replaceState({}, document.title, cleanUrl); } } }) // Init the groups menu jQuery('#mainwp-groups-menu').find('a.item').on('click', function () { jQuery(this).addClass('active green'); jQuery(this).siblings().removeClass('active green'); jQuery(this).find('.label').addClass('green'); jQuery(this).siblings().find('.label').removeClass('green'); jQuery('#mainwp-delete-group-button').removeClass('disabled'); jQuery('#mainwp-rename-group-button').removeClass('disabled'); jQuery('#mainwp-save-sites-groups-selection-button').removeClass('disabled'); jQuery('#mainwp-message-zone').fadeOut(); show_group_items(this); apply_tag_fade_effect(this); }); // Trigger the create a new group modal jQuery(document).on('click', '#mainwp-new-sites-group-button', function () { jQuery('#mainwp-create-group-modal').modal({ onHide: function () { mainwp_forceReload(); }, onShow: function () { jQuery('#mainwp-create-group-modal').find('input[name="mainwp-group-name"]').val(''); jQuery('#mainwp-create-group-modal').find('input#mainwp-new-tag-color').val(''); // Disable button initially. jQuery('#mainwp-save-new-group-button').addClass('disabled'); } }).modal('show'); }); // Enable/disable create button based on input validation jQuery(document).on('input', '#mainwp-create-group-modal input[name="mainwp-group-name"], #mainwp-rename-group-modal input[name="mainwp-group-name"]', function () { let groupName = jQuery(this).val().trim(); if (groupName.length > 0) { jQuery('#mainwp-save-new-group-button').removeClass('disabled'); jQuery('#mainwp-update-new-group-button').removeClass('disabled'); } else { jQuery('#mainwp-save-new-group-button').addClass('disabled'); jQuery('#mainwp-update-new-group-button').addClass('disabled'); } }); // Enable update button when color changes in rename modal jQuery(document).on('input change', '#mainwp-rename-group-modal input#mainwp-new-tag-color', function () { let groupName = jQuery('#mainwp-rename-group-modal').find('input[name="mainwp-group-name"]').val().trim(); if (groupName.length > 0) { jQuery('#mainwp-update-new-group-button').removeClass('disabled'); } }); // Trigger the edit group modal jQuery(document).on('click', '#mainwp-rename-group-button', function () { jQuery('#mainwp-rename-group-modal').modal({ onHide: function () { mainwp_forceReload(); }, onShow: function () { let groupName = jQuery('#mainwp-groups-menu').find('.active').find('#mainwp-hidden-group-name').val(); let groupColor = jQuery('#mainwp-groups-menu').find('.active').find('#mainwp-hidden-group-color').val(); jQuery('#mainwp-rename-group-modal').find('input[name="mainwp-group-name"]').val(groupName); jQuery('#mainwp-rename-group-modal').find('input#mainwp-new-tag-color').val(groupColor); // Disable button initially. jQuery('#mainwp-update-new-group-button').addClass('disabled'); } }).modal('show'); }); // Create a new group jQuery(document).on('click', '#mainwp-save-new-group-button', function (e) { let $button = jQuery(this); let $modal = jQuery('#mainwp-create-group-modal'); let newName = $modal.find('input[name="mainwp-group-name"]').val().trim(); let newColor = $modal.find('input#mainwp-new-tag-color').val(); // Validate input if (newName.length === 0) { return false; } // Check if button is already disabled (loading) if ($button.hasClass('disabled') || $button.data('loading')) { return false; } let selected_sites = []; jQuery("input[name='sites']:checked").each(function () { selected_sites.push(jQuery(this).val()); }); // Disable button and show loading state. let originalText = $button.html(); $button.data('loading', true); $button.addClass('disabled'); $button.html(' Creating...'); $modal.find('input').prop('disabled', true); let data = mainwp_secure_data({ //action: 'mainwp_group_add', action: 'mainwp_group_sites_add', selected_sites: selected_sites, newName: newName, newColor: newColor }); jQuery.post(ajaxurl, data, function (response) { try { let resp = JSON.parse(response); if (resp.error != undefined) { // Remove loading state on error $button.data("loading", false); $button.removeClass("disabled"); $button.html(originalText); $modal.find("input").prop("disabled", false); return; } globalThis.location.href = "admin.php?page=ManageGroups&new-tag=" + resp.success; } catch { // to fix js error. // Remove loading state on error $button.data("loading", false); $button.removeClass("disabled"); $button.html(originalText); $modal.find("input").prop("disabled", false); } }); e.preventDefault(); e.stopPropagation(); return true; }); // Delete a Tag jQuery(document).on('click', '#mainwp-delete-group-button', function () { let gruopItem = jQuery('#mainwp-groups-menu').find('.active'); let _deltag_callback = function () { let groupID = gruopItem.attr('id'); let data = mainwp_secure_data({ action: 'mainwp_group_delete', groupId: groupID }); jQuery.post(ajaxurl, data, function (response) { response = response.trim(); if (response == 'OK') { mainwp_forceReload(); } }); }; mainwp_confirm('Are you sure you want to delete this tag?', _deltag_callback); return false; }); // Update group name jQuery(document).on('click', '#mainwp-update-new-group-button', function () { let $button = jQuery(this); let $modal = jQuery('#mainwp-rename-group-modal'); let groupID = jQuery('#mainwp-groups-menu').find('.active').attr('id'); let newName = $modal.find('input[name="mainwp-group-name"]').val(); let newColor = $modal.find('input#mainwp-new-tag-color').val(); let data = mainwp_secure_data({ action: 'mainwp_group_rename', groupId: groupID, newName: newName, newColor: newColor }); // Disable button and show loading state. let originalText = $button.html(); $button.data('loading', true); $button.addClass('disabled'); $button.html(' Updating...'); $modal.find('input').prop('disabled', true); jQuery.post(ajaxurl, data, function (response) { if (response.error) { // Remove loading state on error $button.data("loading", false); $button.removeClass("disabled"); $button.html(originalText); $modal.find("input").prop("disabled", false); return; } jQuery('#mainwp-create-group-modal').modal({ onHide: function () { mainwp_forceReload(); return false; } }).modal('hide'); }, 'json'); return false; }); // Select all sites jQuery('#mainwp-manage-groups-sites-table th input[type="checkbox"]').on('change', function () { let checkboxes = jQuery('#mainwp-manage-groups-sites-table').find(':checkbox'); if (jQuery(this).prop('checked')) { checkboxes.prop('checked', true); checkboxes.parents('tr').addClass('selected active'); } else { checkboxes.prop('checked', false); checkboxes.parents('tr').removeClass('selected active'); } }); // Set class 'active' to selected sites table row jQuery('.mainwp-site-checkbox').on('change', function () { if (jQuery(this).prop('checked')) { jQuery(this).parents('tr').addClass('selected active'); } else { jQuery(this).parents('tr').removeClass('selected active'); } }); // Keep update selected tag site ids. jQuery(document).on('change', '#mainwp-manage-groups-sites-table .mainwp-site-checkbox', function () { let tag_siteids = jQuery('#mainwp-save-sites-groups-selection-button').attr('selected-tag-siteids'); if (tag_siteids !== undefined) { tag_siteids = '' == tag_siteids ? [] : JSON.parse(tag_siteids); const valSiteId = jQuery(this).val(); if (jQuery(this).is(':checked')) { if (!tag_siteids.includes(valSiteId)) { tag_siteids.push(valSiteId); } } else { const index = tag_siteids.indexOf(valSiteId); if (index !== -1) { tag_siteids.splice(index, 1); } } jQuery('#mainwp-save-sites-groups-selection-button').attr('selected-tag-siteids', tag_siteids.length ? JSON.stringify(tag_siteids) : '') } }); // Save selected sites for a group jQuery(document).on('click', '#mainwp-save-sites-groups-selection-button', function (e) { e.preventDefault(); let groupID = jQuery('#mainwp-groups-menu').find('.active').attr('id'); let tag_siteids = jQuery('#mainwp-save-sites-groups-selection-button').attr('selected-tag-siteids'); if (groupID == undefined) { return; } let data = mainwp_secure_data({ action: 'mainwp_group_updategroup', groupId: groupID, websiteIds: tag_siteids == '' ? [] : JSON.parse(tag_siteids), }); jQuery(this).addClass('disabled'); jQuery.post(ajaxurl, data, function (response) { jQuery('#mainwp-save-sites-groups-selection-button').removeClass('disabled'); if (response?.result === true) { feedback('mainwp-message-zone', 'Selection saved successfully.', 'ui green message'); setTimeout(() => { jQuery('#mainwp-message-zone').fadeOut(); }, 5000); } else { feedback('mainwp-message-zone', 'Undefined error occurred. Please try again.', 'ui green message'); } }, 'json'); }); // Load group sites let show_group_items = function (group) { let groupID = jQuery(group).attr('id'); let data = mainwp_secure_data({ action: 'mainwp_group_getsites', groupId: groupID }); jQuery('.dimmer').addClass('active'); let dtApi = jQuery('#mainwp-manage-groups-sites-table').dataTable().api(); let searchValue = dtApi.search(); dtApi.search('').draw(); jQuery.post(ajaxurl, data, function (response) { jQuery('.dimmer').removeClass('active'); response = response.trim(); if (response == 'ERROR') { dtApi.search(searchValue).draw(); return; } mainwp_datatable_fix_to_update_selected_rows_status(dtApi, 'deselected'); // clear saved state. jQuery('input.mainwp-site-checkbox').prop('checked', false); jQuery('input.mainwp-site-checkbox').closest('tr').removeClass('selected active'); let sites = JSON.parse(response); for (let id of sites) { jQuery('input[value="' + id + '"].mainwp-site-checkbox').prop('checked', true); jQuery('input[value="' + id + '"].mainwp-site-checkbox').closest('tr').addClass('selected active'); } jQuery('#mainwp-save-sites-groups-selection-button').attr('selected-tag-siteids', sites?.length ? response : ''); mainwp_datatable_fix_to_update_selected_rows_status(dtApi, 'selected active'); // clear saved state. dtApi.search(searchValue).draw(); }); return false; } // Apply fade effect to tags in the sites table let apply_tag_fade_effect = function (menuItem) { // Get the selected tag ID from the menu item let selectedTagId = jQuery(menuItem).attr('id'); if (!selectedTagId) { // If no tag is selected, reset all tags to full opacity jQuery('#mainwp-manage-groups-sites-table span.ui.tag.label').css('opacity', '1'); return; } // Fade all tags to 10% opacity jQuery('#mainwp-manage-groups-sites-table span.ui.tag.label').css('opacity', '0.1'); // Restore full opacity for the selected tag jQuery('#mainwp-manage-groups-sites-table span.ui.tag.label[tag_id="' + selectedTagId + '"]').css('opacity', '1'); } });