Files
medicalalert-web-reloaded/wp/wp-content/plugins/relevanssi-premium/premium/admin_scripts_premium.js
Tony Volpe 4eb982d7a8 Merged in feature/from-pantheon (pull request #16)
code from pantheon

* code from pantheon
2024-01-10 17:03:02 +00:00

541 lines
17 KiB
JavaScript

jQuery(document).ready(function ($) {
// Show and hide the "Show Relevanssi for admins" setting on the Overview tab depending
// on whether the "Hide Relevanssi" setting is enabled.
var show_post_controls = $("#show_post_controls")
$("#relevanssi_hide_post_controls").on("change", function () {
show_post_controls.toggleClass("screen-reader-text")
})
// Find out the latest row ID in the redirect table.
var last_row_id = $(".redirect_table_row:last").attr("id")
var redirect_row_index = 0
if (last_row_id) {
// There's a last row, we're on the Redirects tab.
last_row_id = last_row_id.split("_")
if (last_row_id.length > 1) {
redirect_row_index = last_row_id[1]
}
}
// Adds a new row to the redirect table on the Redirects tab.
$("#add_redirect").on("click", function (e) {
redirect_row_index++
$(".redirect_table_row:last")
.clone(true)
.attr("id", "row_" + redirect_row_index)
.insertAfter(".redirect_table_row:last")
var query = $("#row_" + redirect_row_index + " input:first")
query.val("")
query.attr("name", "query_" + redirect_row_index)
query.attr("id", "query_" + redirect_row_index)
var partial = $("#row_" + redirect_row_index + " input:checkbox")
partial.prop("checked", false)
partial.attr("name", "partial_" + redirect_row_index)
partial.attr("id", "partial_" + redirect_row_index)
var url = $("#row_" + redirect_row_index + " input:eq(2)")
url.val("")
url.attr("id", "url_" + redirect_row_index)
url.attr("name", "url_" + redirect_row_index)
var hits = $("#row_" + redirect_row_index + " input:last")
hits.val("")
hits.attr("name", "hits_" + redirect_row_index)
hits.attr("id", "hits_" + redirect_row_index)
var hitsNumber = $("#row_" + redirect_row_index + " span:last")
hitsNumber.html("0")
})
// Related posts tab: if "Matching post types" is checked, disable and uncheck other options.
$("input.matching").on("click", function (e) {
if ($(this).is(":checked")) {
$("input.nonmatching").prop("checked", false)
$("input.nonmatching").attr("disabled", true)
} else {
$("input.nonmatching").attr("disabled", false)
}
})
// Related posts tab: Display default thumbnail option.
$("#relevanssi_related_thumbnails").on("click", function (e) {
$("#defaultthumbnail").toggleClass("screen-reader-text", !this.checked)
})
// Redirects tab redirect table row removal.
$(".remove").on("click", function (e) {
e.preventDefault()
if ($("#redirect_table >tbody >tr").length > 1) {
// If there is more than one row in the table, remove the last row.
$(this).closest("tr").remove()
} else {
// Only one row left, don't remove it (because adding rows is based on cloning).
// Instead empty out the values.
$(".redirect_table_row:last input:text").val("")
$(".redirect_table_row:last input:checkbox").prop("checked", false)
}
})
// Related posts tab: Toggle settings for main switch.
$("#relevanssi_related_enabled").on("click", function () {
$("#tr_relevanssi_related_append input").attr("disabled", !this.checked)
$("#tr_relevanssi_related_keyword input").attr("disabled", !this.checked)
$("#relevanssi_related_number").attr("disabled", !this.checked)
$("#relevanssi_related_months").attr("disabled", !this.checked)
$("#tr_relevanssi_related_post_types input").attr("disabled", !this.checked)
$("#relevanssi_related_nothing").attr("disabled", !this.checked)
$("#relevanssi_related_notenough").attr("disabled", !this.checked)
$("#relevanssi_related_titles").attr("disabled", !this.checked)
$("#relevanssi_related_thumbnails").attr("disabled", !this.checked)
$("#relevanssi_related_excerpts").attr("disabled", !this.checked)
$("#relevanssi_related_cache_for_admins").attr("disabled", !this.checked)
$("#relevanssi_flush_related_cache").attr("disabled", !this.checked)
})
// Redirects tab redirect table row cloning.
$("a.copy").on("click", function (e) {
e.preventDefault()
redirect_row_index++
$(this)
.closest("tr")
.clone(true)
.attr("id", "row_" + redirect_row_index)
.insertAfter(".redirect_table_row:last")
var query = $("#row_" + redirect_row_index + " input:first")
query.attr("name", "query_" + redirect_row_index)
query.attr("id", "query_" + redirect_row_index)
var partial = $("#row_" + redirect_row_index + " input:checkbox")
partial.attr("name", "partial_" + redirect_row_index)
partial.attr("id", "partial_" + redirect_row_index)
var url = $("#row_" + redirect_row_index + " input:eq(2)")
url.attr("name", "url_" + redirect_row_index)
url.attr("name", "url_" + redirect_row_index)
var hits = $("#row_" + redirect_row_index + " input:last")
hits.val("")
hits.attr("name", "hits_" + redirect_row_index)
hits.attr("id", "hits_" + redirect_row_index)
var hitsNumber = $("#row_" + redirect_row_index + " span:last")
hitsNumber.html("0")
})
$("#attachments_tab :input").on("change", function (e) {
$("#index").attr("disabled", "disabled")
var relevanssi_note = $("#relevanssi-note")
relevanssi_note.show()
relevanssi_note.html(
'<p class="description important">' + relevanssi.options_changed + "</p>"
)
})
$("#build_index").on("click", function () {
$("#relevanssi-progress").show()
$("#results").show()
$("#relevanssi-timer").show()
$("#relevanssi-indexing-instructions").show()
$("#stateoftheindex").html(relevanssi.reload_state)
$("#indexing_button_instructions").hide()
var results = document.getElementById("results")
results.value = ""
var data = {
action: "relevanssi_truncate_index",
security: nonce.indexing_nonce,
}
intervalID = window.setInterval(relevanssiUpdateClock, 1000)
console.log("Truncating index.")
results.value += relevanssi.truncating_index + " "
jQuery.post(ajaxurl, data, function (response) {
truncate_response = JSON.parse(response)
console.log("Truncate index: " + truncate_response)
if (truncate_response == true) {
results.value += relevanssi.done + "\n"
}
var data = {
action: "relevanssi_index_post_type_archives",
security: nonce.post_type_archive_indexing_nonce,
}
console.log("Indexing post type archives.")
results.value += "Indexing post type archives... "
jQuery.post(ajaxurl, data, function (response) {
console.log("Done")
response = JSON.parse(response)
results.value += response.feedback
var data = {
action: "relevanssi_count_users",
}
console.log("Counting users.")
results.value += relevanssi.counting_users + " "
jQuery.post(ajaxurl, data, function (response) {
count_response = JSON.parse(response)
console.log("Counted " + count_response + " users.")
if (count_response < 0) {
results.value += relevanssi.user_disabled + "\n"
} else {
results.value +=
count_response + " " + relevanssi.users_found + "\n"
}
var user_total = count_response
var data = {
action: "relevanssi_count_taxonomies",
}
console.log("Counting taxonomies.")
results.value += relevanssi.counting_terms + " "
jQuery.post(ajaxurl, data, function (response) {
count_response = JSON.parse(response)
console.log("Counted " + count_response + " taxonomy terms.")
if (count_response < 0) {
results.value += relevanssi.taxonomy_disabled + "\n"
} else {
results.value +=
count_response + " " + relevanssi.terms_found + "\n"
}
var taxonomy_total = count_response
var data = {
action: "relevanssi_count_posts",
}
console.log("Counting posts.")
results.value += relevanssi.counting_posts + " "
jQuery.post(ajaxurl, data, function (response) {
count_response = JSON.parse(response)
console.log("Counted " + count_response + " posts.")
var post_total = parseInt(count_response)
results.value +=
count_response + " " + relevanssi.posts_found + "\n"
var data = {
action: "relevanssi_list_taxonomies",
}
console.log("Listing taxonomies.")
jQuery.post(ajaxurl, data, function (response) {
taxonomies_response = JSON.parse(response)
console.log("Listing taxonomies: " + taxonomies_response)
console.log("Starting indexing.")
console.log("User total " + user_total)
if (user_total > 0) {
console.log("Indexing users.")
var args = {
total: user_total,
completed: 0,
total_seconds: 0,
post_total: post_total,
limit: 10,
taxonomies: taxonomies_response,
taxonomies_total: taxonomy_total,
}
process_user_step(args)
} else if (taxonomy_total > 0) {
console.log("Indexing taxonomies.")
results.value += relevanssi.indexing_taxonomies + " "
results.value += taxonomies_response + "\n"
var args = {
taxonomies: taxonomies_response,
completed: 0,
total: taxonomy_total,
total_seconds: 0,
post_total: post_total,
current_taxonomy: "",
offset: 0,
limit: 20,
}
process_taxonomy_step(args)
} else {
console.log("Just indexing.")
var args = {
completed: 0,
total: post_total,
offset: 0,
total_seconds: 0,
limit: relevanssi_params.indexing_limit,
adjust: relevanssi_params.indexing_adjust,
extend: false,
security: nonce.indexing_nonce,
}
process_indexing_step(args)
}
})
})
})
})
})
})
})
})
function process_user_step(args) {
var completed = args.completed
var total = args.total
var total_seconds = args.total_seconds
console.log(completed + " / " + total)
var t0 = performance.now()
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: {
action: "relevanssi_index_users",
limit: args.limit,
offset: args.offset,
completed: completed,
total: total,
security: nonce.user_indexing_nonce,
},
dataType: "json",
success: function (response) {
console.log(response)
if (response.completed == "done") {
var t1 = performance.now()
var time_seconds = (t1 - t0) / 1000
time_seconds = Math.round(time_seconds * 100) / 100
total_seconds += time_seconds
var results_textarea = document.getElementById("results")
results_textarea.value += response.feedback
results_textarea.scrollTop = results_textarea.scrollHeight
var percentage_rounded = Math.round(response.percentage)
jQuery(".rpi-progress div").animate(
{
width: percentage_rounded + "%",
},
50,
function () {
// Animation complete.
}
)
console.log("Done indexing users.")
if (args.taxonomies_total > 0) {
var new_args = {
completed: 0,
total: args.taxonomies_total,
taxonomies: args.taxonomies,
current_taxonomy: "",
post_total: args.post_total,
offset: 0,
total_seconds: total_seconds,
limit: 20,
extend: false,
}
process_taxonomy_step(new_args)
} else {
var new_args = {
security: nonce.indexing_nonce,
completed: 0,
total: args.post_total,
offset: 0,
total_seconds: 0,
limit: relevanssi_params.indexing_limit,
adjust: relevanssi_params.indexing_adjust,
extend: false,
}
process_indexing_step(new_args)
}
} else {
var t1 = performance.now()
var time_seconds = (t1 - t0) / 1000
time_seconds = Math.round(time_seconds * 100) / 100
total_seconds += time_seconds
var estimated_time = rlv_format_approximate_time(
Math.round(
(total_seconds / response.percentage) * 100 - total_seconds
)
)
document.getElementById("relevanssi_estimated").innerHTML =
estimated_time
if (time_seconds < 2) {
args.limit = args.limit * 2
// current limit can be indexed in less than two seconds; double the limit
} else if (time_seconds < 5) {
args.limit += 5
// current limit can be indexed in less than five seconds; up the limit
} else if (time_seconds > 20) {
args.limit = Math.round(args.limit / 2)
if (args.limit < 1) args.limit = 1
// current limit takes more than twenty seconds; halve the limit
} else if (time_seconds > 10) {
args.limit -= 5
if (args.limit < 1) args.limit = 1
// current limit takes more than ten seconds; reduce the limit
}
var results_textarea = document.getElementById("results")
results_textarea.value += response.feedback
results_textarea.scrollTop = results_textarea.scrollHeight
var percentage_rounded = Math.round(response.percentage)
jQuery(".rpi-progress div").animate(
{
width: percentage_rounded + "%",
},
50,
function () {
// Animation complete.
}
)
console.log("Next step.")
var new_args = {
completed: parseInt(response.completed),
total: args.total,
total_seconds: total_seconds,
offset: response.offset,
limit: args.limit,
post_total: args.post_total,
taxonomies: args.taxonomies,
taxonomies_total: args.taxonomies_total,
}
process_user_step(new_args)
}
},
})
}
function process_taxonomy_step(args) {
var completed = args.completed
var total = args.total
var total_seconds = args.total_seconds
console.log(completed + " / " + total)
var t0 = performance.now()
if (args.current_taxonomy == "") {
taxonomy = args.taxonomies.shift()
args.offset = 0
args.limit = 20
} else {
taxonomy = args.current_taxonomy
}
if (taxonomy != undefined) {
var results_textarea = document.getElementById("results")
results_textarea.value += "Indexing " + "'" + taxonomy + "': "
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: {
action: "relevanssi_index_taxonomies",
completed: completed,
total: total,
taxonomy: taxonomy,
offset: args.offset,
limit: args.limit,
security: nonce.taxonomy_indexing_nonce,
},
dataType: "json",
success: function (response) {
console.log(response)
if (response.completed == "done") {
var t1 = performance.now()
var time_seconds = (t1 - t0) / 1000
time_seconds = Math.round(time_seconds * 100) / 100
total_seconds += time_seconds
var results_textarea = document.getElementById("results")
results_textarea.value += response.feedback
console.log("Done indexing taxonomies.")
var new_args = {
completed: 0,
total: args.post_total,
offset: 0,
total_seconds: 0,
limit: relevanssi_params.indexing_limit,
adjust: relevanssi_params.indexing_adjust,
extend: false,
security: nonce.indexing_nonce,
}
process_indexing_step(new_args)
} else {
var t1 = performance.now()
var time_seconds = (t1 - t0) / 1000
time_seconds = Math.round(time_seconds * 100) / 100
total_seconds += time_seconds
var estimated_time = rlv_format_approximate_time(
Math.round(
(total_seconds / response.percentage) * 100 - total_seconds
)
)
document.getElementById("relevanssi_estimated").innerHTML =
estimated_time
if (time_seconds < 2) {
args.limit = args.limit * 2
// current limit can be indexed in less than two seconds; double the limit
} else if (time_seconds < 5) {
args.limit += 5
// current limit can be indexed in less than five seconds; up the limit
} else if (time_seconds > 20) {
args.limit = Math.round(args.limit / 2)
if (args.limit < 1) args.limit = 1
// current limit takes more than twenty seconds; halve the limit
} else if (time_seconds > 10) {
args.limit -= 5
if (args.limit < 1) args.limit = 1
// current limit takes more than ten seconds; reduce the limit
}
var results_textarea = document.getElementById("results")
results_textarea.value += response.feedback
results_textarea.scrollTop = results_textarea.scrollHeight
var percentage_rounded = Math.round(response.percentage)
jQuery(".rpi-progress div").animate(
{
width: percentage_rounded + "%",
},
50,
function () {
// Animation complete.
}
)
console.log("Next step.")
if (response.new_taxonomy) taxonomy = ""
var new_args = {
taxonomies: args.taxonomies,
completed: parseInt(response.completed),
total: args.total,
total_seconds: total_seconds,
post_total: args.post_total,
current_taxonomy: taxonomy,
offset: response.offset,
limit: args.limit,
}
process_taxonomy_step(new_args)
}
},
})
} else {
var new_args = {
completed: 0,
total: args.post_total,
offset: 0,
total_seconds: 0,
limit: relevanssi_params.indexing_limit,
adjust: relevanssi_params.indexing_adjust,
extend: false,
security: nonce.indexing_nonce,
}
process_indexing_step(new_args)
}
}