Sindbad~EG File Manager
jQuery(document).ready(function() {
/**
* "(Un)select all" checkboxes
*/
var checkbox_actions = ['select_all', 'unselect_all'];
checkbox_actions.forEach(function(element) {
jQuery(document).on('click', '#permalink-manager .' + element, function() {
jQuery(this).parents('.field-container').find('.checkboxes input[type="checkbox"]').each(function() {
var action = (element === 'select_all');
jQuery(this).prop('checked', action);
});
return false;
});
});
jQuery('#permalink-manager .checkboxes label, #permalink-manager .single_checkbox label').not('input').on('click', function(ev) {
var input = jQuery(this).find("input");
if(!jQuery(ev.target).is("input")) {
input.prop('checked', !(input.prop("checked")));
}
});
/**
* Confirm action
*/
jQuery('.pm-confirm-action').on('click', function () {
return confirm(permalink_manager.confirm);
});
jQuery('#permalink-manager #uri_editor form input[name="s"]').on('keydown keypress keyup', function(e){
if(e.keyCode == 13) {
jQuery('#permalink-manager #search-submit').trigger('click');
e.preventDefault();
return false;
}
});
/**
* Filter by content types in "Tools"
*/
jQuery('#permalink-manager *[data-field="content_type"] select').on('change', function() {
var content_type = jQuery(this).val();
if(content_type == 'post_types') {
jQuery(this).parents('.form-table').find('*[data-field="post_types"],*[data-field="post_statuses"]').removeClass('hidden');
jQuery(this).parents('.form-table').find('*[data-field="taxonomies"]').addClass('hidden');
} else {
jQuery(this).parents('.form-table').find('*[data-field="post_types"],*[data-field="post_statuses"]').addClass('hidden');
jQuery(this).parents('.form-table').find('*[data-field="taxonomies"]').removeClass('hidden');
}
}).trigger("change");
/**
* Toggle "Edit URI" box
*/
jQuery('#wpwrap').on('click', '#permalink-manager-toggle, .permalink-manager-edit-uri-box .close-button', function() {
jQuery('.permalink-manager-edit-uri-box').slideToggle();
return false;
});
/**
* Toggle "Edit Redirects" box
*/
jQuery('#permalink-manager').on('click', '#toggle-redirect-panel', function() {
jQuery('#redirect-panel-inside').slideToggle();
return false;
});
jQuery('#permalink-manager').on('click', '.permalink-manager.redirects-panel #permalink-manager-new-redirect', function() {
// Find the table
var table = jQuery(this).parents('.redirects-panel').find('table');
// Copy the row from the sample
var new_row = jQuery(this).parents('.redirects-panel').find('.sample-row').clone().removeClass('sample-row');
// Adjust the array key
var last_key = jQuery(table).find("tr:last-of-type input[data-index]").data("index") + 1;
jQuery("input[data-index]", new_row).attr("data-index", last_key).attr("name", function(){ return jQuery(this).attr("name") + "[" + last_key + "]" });
// Append the new row
jQuery(table).append(new_row);
return false;
});
jQuery('#permalink-manager').on('click', '.remove-redirect', function() {
jQuery(this).closest('tr').remove();
return false;
});
/**
* Synchronize "Edit URI" input field with the sample permalink
*/
var custom_uri_input = jQuery('.permalink-manager-edit-uri-box input[name="custom_uri"]');
jQuery(custom_uri_input).on('keyup change', function() {
jQuery('.sample-permalink-span .editable').text(jQuery(this).val());
});
/**
* Synchronize "Coupon URI" input field with the final permalink
*/
jQuery('#permalink-manager-coupon-url input[name="custom_uri"]').on('keyup change', function() {
var uri = jQuery(this).val();
jQuery('#permalink-manager-coupon-url code span').text(uri);
if(!uri) {
jQuery('#permalink-manager-coupon-url .coupon-full-url').addClass("hidden");
} else {
jQuery('#permalink-manager-coupon-url .coupon-full-url').removeClass("hidden");
}
});
function permalink_manager_duplicate_check(custom_uri_input) {
// Set default values
custom_uri_input = typeof custom_uri_input !== 'undefined' ? custom_uri_input : false;
var all_custom_uris_values = {};
if(custom_uri_input) {
var custom_uri = jQuery(custom_uri_input).val();
var element_id = jQuery(custom_uri_input).attr("data-element-id");
all_custom_uris_values[element_id] = custom_uri;
} else {
jQuery('.custom_uri').each(function(i, obj) {
var field_name = jQuery(obj).attr('data-element-id');
all_custom_uris_values[field_name] = jQuery(obj).val();
});
}
if(all_custom_uris_values) {
jQuery.ajax(permalink_manager.ajax_url, {
type: 'POST',
async: true,
data: {
action: 'pm_detect_duplicates',
custom_uris: all_custom_uris_values
},
success: function (data) {
if (typeof data === 'object' && data !== null) {
// Loop through results
jQuery.each(data, function (key, is_duplicate) {
var alert_container = jQuery('.custom_uri[data-element-id="' + key + '"]').parents('.custom_uri_container').find('.duplicated_uri_alert');
if (is_duplicate) {
jQuery(alert_container).text(is_duplicate);
} else {
jQuery(alert_container).empty();
}
});
}
}
});
}
}
/**
* Check if a single custom URI is not duplicated
*/
var custom_uri_check_timeout = null;
jQuery('.custom_uri_container input[name="custom_uri"], .custom_uri_container input.custom_uri').each(function() {
var input = this;
jQuery(this).on('keyup change', function() {
clearTimeout(custom_uri_check_timeout);
// Wait until user finishes typing
custom_uri_check_timeout = setTimeout(function() {
permalink_manager_duplicate_check(input);
}, 1000);
});
});
/**
* Check if any of displayed custom URIs is not duplicated
*/
if(jQuery('#uri_editor .custom_uri').length > 0) {
permalink_manager_duplicate_check(false);
}
/**
* Disable "Edit URI" input if URI should be updated automatically
*/
jQuery('#permalink-manager').on('change', 'select[name="auto_update_uri"]', function() {
var selected = jQuery(this).find('option:selected');
var auto_update_status = jQuery(selected).data('readonly');
var container = jQuery(this).parents('#permalink-manager');
if(auto_update_status == 1 || auto_update_status == 2) {
jQuery(container).find('input[name="custom_uri"]').attr("readonly", true);
jQuery(container).find('.uri_locked').removeClass("hidden");
} else {
jQuery(container).find('input[name="custom_uri"]').removeAttr("readonly", true);
jQuery(container).find('.uri_locked').addClass("hidden");
}
});
jQuery('select[name="auto_update_uri"]').trigger("change");
/**
* Restore "Default URI"
*/
jQuery('#permalink-manager').on('click', '.restore-default', function () {
// Find all input fields within the relevant container
var inputs = jQuery(this).parents('.field-container, .permalink-manager-edit-uri-box, #permalink-manager .inside').find('input.custom_uri, .permastruct-field');
// Iterate over each input element
inputs.each(function () {
var input = jQuery(this);
var default_uri = input.attr('data-default'); // Get the default value for this specific input
// Set the default value and trigger the 'keyup' event
input.val(default_uri).trigger('keyup');
});
return false;
});
/**
* Display additional permastructure settings
*/
jQuery('#permalink-manager').on('click', '.permastruct-buttons a.extra-settings', function() {
jQuery(this).parents('.permastruct-row').find('.permastruct-settings').slideToggle();
return false;
});
/**
* Copy Permastructure tag to clipboard
*/
jQuery('.structure-tags-list .permastruct-tag-container .permastruct-tag-buttons button').on('click', async function () {
const button = jQuery(this);
const textToCopy = button.text().trim(); // Get button text
try {
await navigator.clipboard.writeText(textToCopy); // Copy text to clipboard
button.text('Copied!').prop('disabled', true); // Provide feedback
setTimeout(() => {
button.text(button.data('original-text')).prop('disabled', false);
}, 1000);
} catch (err) {
console.error('Clipboard copy failed:', err);
}
});
/**
* Control the settings tabs
*/
jQuery('#permalink-manager').on('click', '.settings-tabs .subsubsub a', function() {
var tab_id = jQuery(this).attr('data-tab');
pm_load_settings_tab(tab_id);
return false;
});
if(jQuery('#permalink-manager .settings-tabs').length > 0) {
var tab_id = window.location.hash.substring(1);
if (tab_id) {
pm_load_settings_tab(tab_id);
}
}
function pm_load_settings_tab(tab_id) {
var settings_container = jQuery('#permalink-manager .settings-tabs');
var new_tab = jQuery(settings_container).find('.subsubsub a[data-tab=' + tab_id + ']');
if(jQuery(new_tab).length > 0) {
jQuery(settings_container).find('.subsubsub a').removeClass('current');
jQuery(new_tab).addClass('current');
jQuery(settings_container).find('form > div').hide().removeClass('active-tab');
jQuery(settings_container).find('form > div#pm_' + tab_id).show().addClass('active-tab');
jQuery(settings_container).find('form input[name="pm_active_tab"]').val(tab_id);
// Change the hash in the URL
if (tab_id) {
if (history.pushState) {
history.pushState(null, null, "#" + tab_id);
} else {
window.location.hash = tab_id;
}
}
}
}
/**
* Conditional fields in Permalink Manager settings
*/
jQuery('#permalink-manager .settings-tabs #extra_redirects input[type="checkbox"]').on('change', function() {
var is_checked = jQuery(this).is(':checked');
var rel_field_container = jQuery('#permalink-manager .settings-tabs #setup_redirects');
if(is_checked == true) {
rel_field_container.removeClass('hidden');
} else {
rel_field_container.addClass('hidden');
}
}).trigger("change");
/**
* Hide global admin notices
*/
jQuery(document).on('click', '.permalink-manager-notice.is-dismissible .notice-dismiss', function() {
var alert_id = jQuery(this).closest('.permalink-manager-notice').data('alert_id');
jQuery.ajax(permalink_manager.ajax_url, {
type: 'POST',
data: {
action: 'pm_dismissed_notice_handler',
alert_id: alert_id,
}
});
});
/**
* Save permalinks from Gutenberg with AJAX
*/
var pm_container = jQuery('#permalink-manager.postbox');
var pm_container_disabled = false;
var pm_container_reloading = false;
jQuery('#permalink-manager .save-row.hidden').removeClass('hidden');
jQuery('#permalink-manager').on('click', '#permalink-manager-save-button', pm_gutenberg_save_uri);
function pm_gutenberg_loading_overlay(show = true) {
if(show && !pm_container_disabled) {
pm_container_disabled = true;
jQuery(pm_container).LoadingOverlay('show', {
background: 'rgba(0, 0, 0, 0.1)',
});
} else if(!show && pm_container_disabled) {
pm_container_disabled = false;
jQuery(pm_container).LoadingOverlay('hide', true);
}
}
function pm_gutenberg_reload() {
var pm_post_id = jQuery('input[name="permalink-manager-edit-uri-element-id"]').val();
jQuery.ajax({
type: 'GET',
url: permalink_manager.ajax_url + '?action=pm_get_uri_editor',
data: {
'post_id': pm_post_id
},
beforeSend: pm_gutenberg_loading_overlay,
success: function(html) {
jQuery(pm_container).find('.permalink-manager-gutenberg').replaceWith(html);
pm_gutenberg_loading_overlay(false);
jQuery(pm_container).find('select[name="auto_update_uri"]').trigger("change");
pm_help_tooltips();
}
});
}
function pm_gutenberg_save_uri() {
var pm_fields = jQuery(pm_container).find("input, select");
jQuery.ajax({
type: 'POST',
url: permalink_manager.ajax_url,
async: true,
data: jQuery(pm_fields).serialize() + '&action=pm_save_permalink',
beforeSend: pm_gutenberg_loading_overlay,
success: pm_gutenberg_reload
});
return false;
}
/**
* Reload the URI Editor in Gutenberg after the post is published or the title/slug is changed
*/
if(typeof wp !== 'undefined' && typeof wp.data !== 'undefined' && typeof wp.data.select !== 'undefined' && typeof wp.data.subscribe !== 'undefined' && wp.data.select('core/editor') != null && wp.data.select('core/edit-post') != null) {
wp.data.subscribe(function() {
try {
var isSavingPost = wp.data.select('core/editor').isSavingPost();
var isAutosavingPost = wp.data.select('core/editor').isAutosavingPost();
var isSavingMetaBoxes = wp.data.select('core/edit-post').isSavingMetaBoxes();
// Disable URI Editor until it is reloaded
if(isSavingPost && !isAutosavingPost) {
pm_gutenberg_loading_overlay();
}
// Reload URI Editor only after metaboxes are saved
if(isSavingMetaBoxes) {
pm_container_reloading = true;
} else if(pm_container_reloading) {
pm_container_reloading = false;
pm_gutenberg_reload();
}
} catch (err) {
console.log('Permalink Manager', err);
}
});
}
/**
* Help tooltips
*/
function pm_help_tooltips() {
if(jQuery('#permalink-manager .help_tooltip').length > 0) {
jQuery('#permalink-manager .help_tooltip').each(function() {
var helpTooltip = this;
tippy(helpTooltip, {
// placement: 'top-start',
arrow: true,
content: jQuery(helpTooltip).attr('title'),
distance: 20
});
});
}
}
pm_help_tooltips();
/**
* Check expiration date
*/
jQuery(document).on('click', '#pm_get_exp_date', function() {
jQuery.ajax(permalink_manager.ajax_url, {
type: 'POST',
data: {
action: 'pm_get_exp_date',
licence: {
licence_key: jQuery('#permalink-manager #settings #licence_key input[type="text"]').val()
}
},
beforeSend: function() {
var spinner = '<img src="' + permalink_manager.spinners + '/wpspin_light-2x.gif" width="16" height="16">';
jQuery('#permalink-manager .licence-info').html(spinner);
},
success: function(data) {
jQuery('#permalink-manager .licence-info').html(data);
}
});
return false;
});
/**
* Bulk tools
*/
function pm_show_progress(elem, progress) {
if(progress) {
jQuery(elem).LoadingOverlay("text", progress + "%");
} else {
jQuery(elem).LoadingOverlay("show", {
background : "rgba(0, 0, 0, 0.1)",
text: '0%'
});
}
}
jQuery('#permalink-manager #tools form.form-ajax').on('submit', function () {
var total_iterations = updated_count = total = progress = 0;
var iteration = 1;
var data = jQuery(this).serialize() + '&action=pm_bulk_tools&iteration=' + iteration;
// Hide alert & results table
jQuery('#permalink-manager .updated-slugs-table, .permalink-manager-notice.updated_slugs, #permalink-manager #updated-list').remove();
jQuery.ajax({
type: 'POST',
url: permalink_manager.ajax_url,
data: data,
beforeSend: function () {
// Show progress overlay
pm_show_progress("#permalink-manager #tools", progress);
},
success: function (data) {
var table_dom = jQuery('#permalink-manager .updated-slugs-table');
var ajax_request = this;
// The first AJAX request should return the total items & iterations count
if (data.hasOwnProperty('total_iterations') && data.hasOwnProperty('total')) {
total_iterations = parseInt(data.total_iterations);
total = parseInt(data.total);
// If prior requests were handled with errors, remove those alerts
jQuery('.permalink-manager-notice.updated_slugs.error').remove();
// Add the alert container with the status but do not display it yet
if (data.hasOwnProperty('alert')) {
jQuery('#plugin-name-heading').after(jQuery(data.alert).hide());
}
}
// Check if the iteration and total count were correctly set in the first AJAX request
else if (total_iterations === 0 || total === 0) {
console.log('No items have been processed.');
jQuery('#permalink-manager #tools').LoadingOverlay("hide", true);
return true;
}
// Display the table
if (data.hasOwnProperty('html')) {
var table = jQuery(data.html);
if (table_dom.length == 0) {
jQuery('#permalink-manager #tools').after(data.html);
} else {
jQuery(table_dom).append(jQuery(table).find('tbody').html());
}
}
// Increase updated count
if (data.hasOwnProperty('updated_count')) {
updated_count = updated_count + parseInt(data.updated_count);
jQuery('.permalink-manager-notice.updated_slugs .updated_count').text(updated_count);
}
// Repeat the AJAX request for the next chunk of items
if (iteration < total_iterations) {
// Update the progress
progress = Math.floor((iteration / total_iterations) * 100);
console.log(iteration + "/" + total_iterations + " = " + progress + "%");
// Go to the next chunk
iteration++;
// Change the iteration number in the AJAX data
ajax_request.data = ajax_request.data.replace(/(&iteration=)([\d]+)/gm, "$1" + iteration);
jQuery.ajax(ajax_request);
} else {
// Display the alert container and hide the loading overlay
jQuery('.permalink-manager-notice.updated_slugs').fadeIn();
jQuery('#permalink-manager #tools').LoadingOverlay("hide", true);
if (table_dom.length > 0) {
jQuery('html, body').animate({
scrollTop: table_dom.offset().top - 100
}, 2000);
}
// Reset progress & updated count
progress = updated_count = 0;
}
return true;
},
error: function (xhr, status, error_data) {
alert('There was a problem running this tool and the process could not be completed. You can find more details in browser\'s console log.');
console.log('Status: ' + status);
console.log('Please send the debug data to contact@permalinkmanager.pro:\n\n' + xhr.responseText);
jQuery('#permalink-manager #tools').LoadingOverlay("hide", true);
}
});
return false;
});
/**
* Stop-words
*/
var stop_words_input = '#permalink-manager .field-container textarea.stop_words';
if(jQuery(stop_words_input).length > 0) {
var stop_words = new TIB(document.querySelector(stop_words_input), {
alert: false,
//escape: null,
escape: [','],
classes: ['tags words-editor', 'tag', 'tags-input', 'tags-output', 'tags-view'],
});
jQuery('.tags-output').hide();
// Force lowercase
stop_words.filter = function(text) {
return text.toLowerCase();
};
// Remove all words
jQuery('#permalink-manager .field-container .clear_all_words').on('click', function() {
stop_words.reset();
});
// Load stop-words list
jQuery('#permalink-manager #load_stop_words_button').on('click', function() {
var lang = jQuery( ".load_stop_words option:selected" ).val();
if(lang) {
var json_url = permalink_manager.url + "/includes/vendor/stopwords-json/dist/" + lang + ".json";
// Load JSON with words list
jQuery.getJSON(json_url, function(data) {
var new_words = [];
jQuery.each(data, function(key, val) {
new_words.push(val);
});
stop_words.update(new_words);
});
}
return false;
});
}
/**
* Quick Edit
*/
function pm_quick_edit(item, inlineEdit) {
// Get the item ID and type
let item_id = 0;
let item_uri_id = '';
let item_type = '';
let item_row = '';
// Get the ID
if(typeof(inlineEdit) == 'object') {
item_id = parseInt(inlineEdit.getId(item));
item_type = inlineEdit.type;
} else {
return;
}
// Get the edit row
let edit_row = jQuery('#edit-' + item_id);
// Get the post/term row
if(item_type === 'tag') {
item_row = jQuery('#tag-' + item_id);
item_uri_id = "tax-" + item_id;
} else if(item_type === 'post' || item_type === 'page') {
item_row = jQuery('#post-' + item_id);
item_uri_id = item_id;
} else {
return;
}
if(item_id !== 0) {
// Get the row & "Custom URI" field
let custom_uri_field = edit_row.find('.custom_uri');
// Prepare the Custom URI
let custom_uri = item_row.find(".column-permalink-manager-col").text();
// Fill with the Custom URI
custom_uri_field.val(custom_uri);
// Get auto-update settings
let auto_update = item_row.find(".permalink-manager-col-uri").attr('data-disabled');
if(typeof auto_update !== "undefined" && (auto_update == 1 || auto_update == 2)) {
if(auto_update == 1) {
custom_uri_field.attr('readonly', 'readonly');
} else if(auto_update == 2) {
custom_uri_field.attr('disabled', 'disabled');
}
}
// Set the element ID
edit_row.find('.permalink-manager-edit-uri-element-id').val(item_uri_id);
}
}
if(typeof inlineEditPost !== "undefined") {
var inline_post_editor = inlineEditPost.edit;
inlineEditPost.edit = function(id) {
inline_post_editor.apply(this, arguments);
pm_quick_edit(id, this);
}
}
if(typeof inlineEditTax !== "undefined") {
var inline_tax_editor = inlineEditTax.edit;
inlineEditTax.edit = function(id) {
inline_tax_editor.apply(this, arguments);
pm_quick_edit(id, this);
}
}
});
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists