Files
wingedit.pl/wp-content/plugins/xml-sitemap-generator-for-google/assets/js/scripts.js
2026-03-11 15:57:27 +01:00

725 lines
23 KiB
JavaScript

"use strict";
jQuery(document).ready(function ($) {
/** Tabs */
let activeIndex = $('.nav-tab-active').index();
const $contentList = $('.nav-tabs-content .section'),
$tabsList = $('.nav-tab-wrapper a'),
$importSettings = $('#import-settings'),
$importSettingsInput = $('input[name="import_settings"]');
const savedTab = sessionStorage.getItem('sggActiveTab');
if (savedTab && $(`.nav-tab-wrapper a[data-id="${savedTab}"]`).length > 0) {
activeIndex = $(`.nav-tab-wrapper a[data-id="${savedTab}"]`).index();
}
$tabsList.removeClass('nav-tab-active');
$tabsList.eq(activeIndex).addClass('nav-tab-active');
$contentList.hide().eq(activeIndex).show();
$('.nav-tab-wrapper').on('click', 'a', function (e) {
e.preventDefault();
let $current = $(e.currentTarget),
index = $current.index(),
id = $current.data('id');
$tabsList.removeClass('nav-tab-active');
$current.addClass('nav-tab-active');
$contentList.hide().eq(index).show();
sessionStorage.setItem('sggActiveTab', id);
});
/** Dependency */
$('.has-dependency').click(function () {
if (this.type === 'radio') {
$(`input[name="${this.name}"]`).each(function () {
sgg_dependency(`.${$(this).data('target')}`, !this.checked);
});
} else {
sgg_dependency(`.${$(this).data('target')}`, !this.checked);
}
}).each(function () {
if (this.type === 'radio') {
$(`input[name="${this.name}"]`).each(function () {
sgg_dependency(`.${$(this).data('target')}`, !this.checked);
});
} else {
sgg_dependency(`.${$(this).data('target')}`, !this.checked);
}
});
/** Add Custom Sitemap */
$('#add_sitemap_url').on('click', function(e) {
e.preventDefault();
$('.no_urls').remove();
$('#custom_sitemaps').append('<tr>' +
'<td><input type="text" name="custom_sitemap_urls[]" class="grim-input"></td>' +
'<td><input type="datetime-local" name="custom_sitemap_lastmods[]" class="grim-input"></td>' +
'<td><a href="#" class="remove_url"><i class="grim-icon-trash"></i></a></td>' +
'</tr>');
});
/** Add Field */
$('#add_new_url').on('click', function(e) {
e.preventDefault();
$('.no_urls').remove();
$('#additional_urls').append('<tr>' +
'<td><input type="text" name="additional_urls[]" class="grim-input"></td>' +
'<td>' + $('#additional_priorities_selector').html() + '</td>' +
'<td>' + $('#additional_frequencies_selector').html() + '</td>' +
'<td><input type="datetime-local" name="additional_lastmods[]" class="grim-input"></td>' +
'<td><a href="#" class="remove_url"><i class="grim-icon-trash"></i></a></td>' +
'</tr>');
let $rows = $('#additional_urls').find('tr');
showAdditionalUrls();
normalizeVisibleRows($rows, 5);
});
/** Add Bulk URLs */
$('#add_bulk_urls').on('click', function(e) {
e.preventDefault();
$('.add-bulk-urls-section').removeClass('hidden');
showAdditionalUrls();
});
$('#run_add_bulk_urls').on('click', function(e) {
e.preventDefault();
const $bulk_urls = $('#bulk_urls');
// Add URLs
$bulk_urls.val().split('\n').forEach(url => {
if (url.trim() !== '') {
$('.no_urls').remove();
$('#additional_urls').append('<tr>' +
'<td><input type="text" name="additional_urls[]" class="grim-input" value="' + url.trim() + '"></td>' +
'<td>' + $('#additional_priorities_selector').html() + '</td>' +
'<td>' + $('#additional_frequencies_selector').html() + '</td>' +
'<td><input type="datetime-local" class="grim-input" name="additional_lastmods[]"></td>' +
'<td><a href="#" class="remove_url"><i class="grim-icon-trash"></i></a></td>' +
'</tr>');
}
});
$bulk_urls.val('');
$('.add-bulk-urls-section').addClass('hidden');
let $rows = $('#additional_urls').find('tr')
normalizeVisibleRows($rows, 5);
});
$('#cancel_add_bulk_urls').on('click', function(e) {
e.preventDefault();
$('#bulk_urls').val('');
$('.add-bulk-urls-section').addClass('hidden');
});
/** Remove Field */
$(document).on('click', '.remove_url', function(e) {
e.preventDefault();
const $row = $(this).closest('tr');
const $tbody = $row.closest('tbody');
$row.remove();
const $rows = $tbody.find('tr').not('.no_urls');
if ($tbody.find('tr').length === 0) {
$tbody.prepend(`
<tr class="no_urls">
<td colspan="5" align="center">${grimData.NoUrls}</td>
</tr>
`);
}
normalizeVisibleRows($rows, 5);
});
function normalizeVisibleRows($rows, limit = 5) {
let visibleCount = 0;
let $btn = $rows.closest('.grim-section').find('.grim-additional-urls-toggle');
if ( $btn && !$btn.hasClass('active')) {
$rows.each(function () {
const $row = $(this);
if (!$row.hasClass('grim-term-hidden') && visibleCount < limit) {
visibleCount++;
return;
}
if (visibleCount < limit) {
$row.removeClass('grim-term-hidden');
visibleCount++;
} else {
$row.addClass('grim-term-hidden');
}
});
}
toggleExpandButton($rows, $btn);
}
function showAdditionalUrls() {
let $rows = $('#additional_urls').find('tr')
let $btn = $rows.closest('.grim-section').find('.grim-additional-urls-toggle');
if ($btn.length && !$btn.hasClass('active')) {
$btn.addClass('active');
$rows.removeClass('grim-term-hidden');
$btn.find('span').text('Show Less');
}
}
function toggleExpandButton($rows, $toggle, limit = 5) {
$toggle.toggle($rows.length > limit);
}
/** Expand Additional URLs table */
$('.grim-additional-urls-toggle').on('click', function (e) {
e.preventDefault();
const $btn = $(this);
const $table = $btn.closest('.grim-section').find('.grim-additional-urls');
const $rows = $table.find('tbody tr').not('.no_urls');
$btn.toggleClass('active');
if ($btn.hasClass('active')) {
$rows.removeClass('grim-term-hidden');
$btn.find('span').text('Show Less');
} else {
$rows.each(function (index) {
if (index >= 5) {
$(this).addClass('grim-term-hidden');
}
});
$btn.find('span').text('Show More');
}
});
$('.grim-additional-urls tbody tr')
.not('.no_urls')
.each(function (index) {
let $btn = $(this).closest('.grim-section').find('.grim-additional-urls-toggle');
if (index >= 5) {
$btn.toggle(true);
$(this).addClass('grim-term-hidden');
} else {
$btn.toggle(false);
}
});
/** Expand */
$('.grim-expand-toggle').click(function (e) {
e.preventDefault();
const $btn = $(this);
const $rows = $btn.closest('.expand').find('tbody tr');
$btn.toggleClass('active');
if ($btn.hasClass('active')) {
$rows.removeClass('grim-term-hidden');
} else {
$rows.each(function(index){
if(index >= 5){
$(this).addClass('grim-term-hidden');
}
});
}
$btn.find('span').text(
$btn.hasClass('active') ? 'Show Less' : 'Show More'
);
});
/** Autocomplete */
$('.sgg-autocomplete').each(function() {
let $el = $(this);
let target = $el.data('target');
let type = $el.data('type');
let terms = sgg_get_terms(target);
sgg_render_terms(terms, target);
$el.autocomplete({
source: function (request, response) {
$.ajax({
url: sgg.ajax_url,
method: 'post',
dataType: 'json',
data: {
action: 'sgg_autocomplete_search',
term: request.term,
type
},
success: function (res) {
if (res?.success) {
response(res?.data);
} else {
response([{
label: res?.message,
value: 'false'
}])
}
}
});
},
minLength: 2,
open: function(event, ui) {
let menu = $(this).autocomplete('widget');
let currentTop = parseFloat(menu.css('top'));
menu.css('top', currentTop + 1 + 'px');
},
select: function (event, ui) {
terms = sgg_get_terms(target);
if (terms.findIndex(el => el.value == ui.item.value) === -1) {
terms.unshift(ui.item);
let $target = $(`#${target}`).siblings('.expand');
$target.children('.grim-expand-toggle').removeClass('active').find('span').text('Show More');
$target.children('ul').addClass('active');
}
sgg_update_terms(terms, target);
this.value = '';
return false;
}
}).data('ui-autocomplete')._renderItem = function (ul, item) {
if (item.value === 'false') {
return $('<li class="ui-state-disabled">' + item.label + '</li>').appendTo(ul);
} else {
return $('<li>').append(item.label).appendTo(ul);
}
};
});
/** Remove Term */
$(document).on('click', '.sgg-autocomplete-terms .remove-term', function (e) {
e.preventDefault();
let termValue = $(this).data('value');
let target = $(this).data('target');
let terms = sgg_get_terms(target);
if (termValue) {
terms = terms.filter(el => el.value != termValue)
sgg_update_terms(terms, target);
}
});
/** Form Actions */
$('#change-indexnow-key').on('mouseup', function () {
$('input[name="change_indexnow_key"]').val('change');
});
$('#clear-sitemap-cache').on('mouseup', function () {
$('input[name="clear_cache"]').val('clear');
});
$importSettings.on('mouseup', function () {
$importSettingsInput.val('import');
});
$importSettings.on('click', function (e) {
if ($importSettingsInput.val().trim() !== '' && !confirm('Your current Settings will be replaced with importing values. Would you like to continue?')) {
e.preventDefault();
$importSettingsInput.val('');
}
});
$('#sgg-indexnow').on('mouseup', function () {
$('input[name="sgg-indexnow"]').val('check');
});
$('#sgg-flush-rewrite-rules').on('mouseup', function () {
$('input[name="sgg-flush-rewrite-rules"]').val('check');
});
$('#sgg-clear-cache').on('mouseup', function () {
$('input[name="sgg-clear-cache"]').val('check');
});
$('#youtube-check-api-key').on('mouseup', function () {
$('input[name="youtube_check_api_key"]').val('check');
});
$('#vimeo-check-api-key').on('mouseup', function () {
$('input[name="vimeo_check_api_key"]').val('check');
});
$('#clear-video-api-cache').on('mouseup', function () {
$('input[name="clear_video_api_cache"]').val('clear');
});
function sgg_get_terms(target) {
let selector = $(`#${target}`)
return JSON.parse(!selector.val() ? '[]' : selector.val());
}
function sgg_update_terms(terms, target) {
$(`#${target}`).val(JSON.stringify(terms));
sgg_render_terms(terms, target);
}
function sgg_render_terms(terms, target) {
let $target = $(`#${target}`);
let $expand = $target.siblings('.expand');
let $tbody = $expand.find('.sgg-autocomplete-terms');
if (terms.length < 1) {
$expand.find('.grim-table').attr('data-count', 0)
} else {
$expand.find('.grim-table').attr('data-count', terms.length);
}
$tbody.html('');
terms.forEach((term, index) => {
const hiddenClass = index >= 5 ? 'grim-term-hidden' : '';
$tbody.append(`
<tr class="${hiddenClass}">
<td>${term.label}</td>
<td>
<a href="#" class="remove-term" data-value="${term.value}" data-target="${target}">
<i class="grim-icon-trash"></i>
</a>
</td>
</tr>
`);
});
$expand.find('.grim-expand-toggle').toggle(terms.length > 5);
updateAllTabCounts()
}
function updateAllTabCounts() {
$('.grim-section').each(function() {
let $section = $(this);
$section.find('.grim-exclude-tab').each(function() {
let tabId = $(this).data('tab');
let $panel = $section.find('#' + tabId);
let count = $panel.find('.grim-table').attr('data-count') || 0;
$(this).find('.grim-term-count').text(count);
});
let $includePanel = $section.find('#others, #google-others');
if ($includePanel.length) {
let count = $includePanel.find('.grim-table').attr('data-count') || 0;
$section.find('.grim-term-count').text(count);
}
});
}
function sgg_dependency(elements, checked) {
$(elements).attr('disabled', checked).toggleClass('dependency-disabled', checked);
}
$(document).on('click', '.grim-select__trigger', function () {
let $select = $(this).closest('.grim-select');
$('.grim-select').not($select).removeClass('open');
$select.toggleClass('open');
});
$(document).on('click', '.grim-select .grim-option', function () {
let $option = $(this);
let $select = $option.closest('.grim-select');
let value = $option.data('value');
let text = $option.text();
let $hiddenSelect = $select.next('select');
$select.find('.grim-option').removeClass('selected');
$option.addClass('selected');
$select.find('.grim-select__trigger span').text(text);
if ($hiddenSelect.length) {
$hiddenSelect.val(value).trigger('change');
}
$select.removeClass('open');
});
$('.grim-exclude-tab-nav .grim-exclude-tab').on('click', function() {
let tabId = $(this).data('tab');
let $container = $(this).closest('.grim-exclude-tab-nav');
$container.find('.grim-exclude-tab').removeClass('grim-exclude-tab--active');
$(this).addClass('grim-exclude-tab--active');
$container.find('.grim-exclude-tab-panel').removeClass('grim-exclude-tab-panel--active');
$container.find('#' + tabId).addClass('grim-exclude-tab-panel--active');
});
$(document).on('click', function (e) {
if (!$(e.target).closest('.grim-select').length) {
$('.grim-select').removeClass('open');
}
});
$('#grim-import-file').on('change', function() {
let fileName = this.files.length ? this.files[0].name : 'No file chosen';
$('#grim-file-name').text(fileName);
});
$(".grim-btn-copied").on("click", function() {
const targetId = $(this).data("target");
const text = $("#" + targetId).text()
.replace(/\t+/g, " ")
.replace(/\s*\n\s*/g, "\n")
.trim();
const $btn = $(this);
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard.writeText(text).then(() => {
showTooltip($btn);
});
} else {
let $temp = $("<textarea>");
$("body").append($temp);
$temp.val(text).select();
document.execCommand("copy");
$temp.remove();
showTooltip($btn);
}
});
function showTooltip($btn) {
$btn.addClass("grim-show-tooltip");
setTimeout(() => {
$btn.removeClass("grim-show-tooltip");
}, 1500);
}
/** Settings Search Functionality */
const $searchInput = $('#grim-settings-search-input');
const $searchResults = $('#grim-search-results');
const $searchResultsList = $searchResults.find('.grim-search-results-list');
function searchSettings(query) {
if (!query || query.length < 2) {
$searchResults.hide();
return;
}
const results = grimData.settingsArray.filter(setting => {
const searchText = query.toLowerCase();
const labelMatch = setting.label.toLowerCase().includes(searchText);
const idMatch = setting.id.toLowerCase().includes(searchText);
const tagsMatch = setting.tags && setting.tags.toLowerCase().includes(searchText);
return labelMatch || idMatch || tagsMatch;
});
displaySearchResults(results);
}
function displaySearchResults(results) {
$searchResultsList.empty();
if (results.length === 0) {
$searchResultsList.append(`<div class="grim-search-no-results">${grimData.noSettingsFound}</div>`);
} else {
results.forEach(setting => {
const $resultItem = $(`
<div class="grim-search-result-item" data-setting-id="${setting.id}" data-tab="${setting.tab}">
<div class="grim-search-result-label">${setting.label}</div>
<div class="grim-search-result-tab">${getTabName(setting.tab)}</div>
</div>
`);
$searchResultsList.append($resultItem);
});
}
$searchResults.show();
}
function getTabName(tabId) {
const tabNames = {
'general': 'General',
'google-news': 'Google News',
'image-sitemap': 'Image Sitemap',
'video-sitemap': 'Video Sitemap',
'advanced': 'Advanced'
};
return tabNames[tabId] || tabId;
}
$searchInput.on('input', function() {
const query = $(this).val().trim();
searchSettings(query);
});
$searchResultsList.on('click', '.grim-search-result-item', function() {
const settingId = $(this).data('setting-id');
const tabId = $(this).data('tab');
switchToTab(tabId);
setTimeout(() => {
scrollToSetting(settingId);
}, 300);
$searchResults.hide();
});
function switchToTab(tabId) {
const $targetTab = $(`.nav-tab-wrapper a[data-id="${tabId}"]`);
if ($targetTab.length) {
$tabsList.removeClass('nav-tab-active');
$targetTab.addClass('nav-tab-active');
$contentList.hide();
const targetIndex = $targetTab.index();
$contentList.eq(targetIndex).show();
sessionStorage.setItem('sggActiveTab', tabId);
}
}
function scrollToSetting(settingId) {
const setting = grimData.settingsArray.find(s => s.id === settingId);
if (setting) {
let $element = $(`[data-search-id="${settingId}"]`)
if ($element.length) {
const $container = $element;
if ($container.length) {
const elementTop = $container.offset().top;
let scrollTop = elementTop - 280;
$('html, body').animate({
scrollTop: scrollTop
}, 500);
$element.addClass('grim-search-highlight');
setTimeout(() => {
$element.removeClass('grim-search-highlight');
}, 1600);
}
}
}
}
$(document).on('click', function(e) {
if (!$(e.target).closest('.grim-settings-search').length) {
$searchResults.hide();
}
});
$searchInput.on('keydown', function(e) {
if (e.key === 'Escape') {
$searchResults.hide();
$(this).val('');
}
});
let isSearchOpen = false;
$('.grim-search-action-btn').on('click', function () {
const $btn = $(this);
$btn.css({
transition: 'opacity 0.2s ease',
opacity: 0
});
setTimeout(() => {
$btn.hide();
}, 200);
isSearchOpen = true;
$('.grim-settings-search').fadeIn(200);
});
$('.grim-settings-search-cancel').on('click', function () {
const $btn = $('.grim-search-action-btn');
$btn.css({
transition: 'opacity 0.2s ease',
opacity: 1
});
setTimeout(() => {
$btn.show();
}, 200);
isSearchOpen = false;
$('.grim-settings-search').fadeOut(200);
$searchInput.val('');
});
const $nav = $('.grim-nav');
let grimDynamicNotice = $('.grim-dynamic-notice').length || 0;
let grimNotice = $('.grim-container .notice.is-dismissible');
let grimNoticeLength = $(grimNotice).length || 0;
let grimNoticeHeight = 0;
grimNotice.each(function() {
grimNoticeHeight = $(this).outerHeight();
});
const getScrollThreshold = () => {
return 20 + (grimDynamicNotice * 160) + (grimNoticeLength * grimNoticeHeight);
};
let scrollThreshold = getScrollThreshold();
$('.sgg-notice').on('click', () => {
grimDynamicNotice--;
scrollThreshold = getScrollThreshold();
});
$('.notice-dismiss').on('click', () => {
grimNoticeLength--;
scrollThreshold = getScrollThreshold();
});
let isSticky = false;
function handleScroll() {
const scrollTop = $(window).scrollTop();
if (scrollTop > scrollThreshold && !isSticky) {
$nav.removeClass('sticky-removing');
$nav.addClass('sticky');
isSticky = true;
updateViewForStickyState();
} else if (scrollTop <= scrollThreshold && isSticky) {
$nav.addClass('sticky-removing');
setTimeout(() => {
$nav.removeClass('sticky sticky-removing');
isSticky = false;
updateViewForStickyState();
}, );
}
}
function updateViewForStickyState() {
const $search = $('.grim-settings-search');
const $searchBtn = $('.grim-search-action-btn');
if ( isSearchOpen && !isSticky ) {
$search.show();
$searchBtn.hide();
} else if (isSearchOpen && isSticky) {
$searchBtn.hide();
$search.show();
}
}
$(window).on('scroll', handleScroll);
handleScroll();
});