File: /home/zwafgyp/locationdebateau/wp-content/plugins/woocommerce-delivery-notes/assets/js/tyche.js
"use strict";
var tyche = {
version: "1.2", // version of tyche constructor.
constructor: tyche,
extend: function () {
let target = arguments[0] || {},
length = arguments.length,
self = this,
option;
for (let i = 0; i < length; i++) {
let args = [];
// Use default target is none was supplied fpr the first iteration.
if (0 === i) {
if (1 !== length) {
continue;
}
target = self;
args = arguments[0];
}
if (0 === args.length) {
args = arguments[i];
}
for (option in args) {
target[option] = args[option];
}
}
return target;
},
init: function () {
// Here we can run codes we want initialized after tyche object core.
if (typeof String.prototype.replaceAll == "undefined") {
String.prototype.replaceAll = function (match, replace) {
return this.replace(new RegExp(match, "g"), () => replace);
};
}
},
wcap: {}, // Abandoned Cart Pro for WooCommerce.
orddd: {}, // Order Delivery Date Pro for WooCommerce.
bkap: {}, // Booking & Appointment Plugin for WooCommerce.
ac: {}, // Abandoned Cart Pro for WooCommerce.
pdd: {}, // Product Delivery Date Pro for WooCommerce.
pif: {}, // Product Input Fields for WooCommerce.
cos: {}, // Custom Order Status for WooCommerce.
con: {}, // Custom Order Numbers for WooCommerce.
dw: {}, // Deposits for WooCommerce.
pur: {}, // Price by User Role for WooCommerce.
pgf: {}, // Payment Gateway Based Fees and Discounts for WooCommerce.
cfp: {}, // Call for Price for WooCommerce.
cpp: {}, // Currency per Product for WooCommerce.
// Putting some demo keys here, in case we release new plugins in future, we wouldn't need to update tyche.js file across the plugins.
dm_1: {},
dm_2: {},
dm_3: {},
dm_4: {},
dm_5: {},
dm_6: {},
dm_7: {},
dm_8: {},
dm_9: {},
dm_10: {},
dm_11: {},
dm_12: {},
dm_13: {},
dm_14: {},
dm_15: {},
// Plugin Deactivation.
plugin_deactivation: {
fn: {
return: function (data, index, return_value = "") {
return "undefined" !== typeof data[index] && "" !== data[index]
? "" !== return_value
? return_value
: data[index]
: "";
},
},
modal: function ($plugin, $data) {
if (
"" === tyche.plugin_deactivation.fn.return($data, "deactivation_data") ||
"" === tyche.plugin_deactivation.fn.return($data, "nonce") ||
"" === tyche.plugin_deactivation.fn.return($data, "deactivation_req_msg")
) {
return "";
}
let data = $data.deactivation_data,
nonce = $data.nonce,
deactivation_req_msg = $data.deactivation_req_msg;
if ("undefined" === typeof data.template || "undefined" === typeof data.reasons) {
return "";
}
let template = data.template,
reasons = data.reasons,
html = "";
if (Array.isArray(reasons) && reasons.length > 0) {
reasons.forEach(function (item) {
html += `
<li
class="reason${tyche.plugin_deactivation.fn.return(
item,
"input_type",
" has-input"
)}${tyche.plugin_deactivation.fn.return(item, "html", " has-html")}"
data-input-type="${tyche.plugin_deactivation.fn.return(item, "input_type")}"
data-input-placeholder="${tyche.plugin_deactivation.fn.return(item, "input_placeholder")}">
<label>
<span>
<input type="radio" name="selected-reason" value="${tyche.plugin_deactivation.fn.return(
item,
"id"
)}" />
</span>
<span>
${tyche.plugin_deactivation.fn.return(item, "text")}
</span>
</label>
${
"" !== tyche.plugin_deactivation.fn.return(item, "html")
? '<div class="reason_html">' +
tyche.plugin_deactivation.fn.return(item, "html") +
"</div>"
: ""
}
</li>`;
});
html += `<input type="hidden" name="nonce" value="${nonce}" />`;
let modal = jQuery(
template
.replace("{PLUGIN}", $plugin)
.replace("{HTML}", html)
.replace("{DEACTIVATION_REQ_MSG}", deactivation_req_msg)
);
modal.appendTo(jQuery("body"));
return modal;
}
},
show_modal: function (modal) {
modal.find(".button").removeClass("disabled");
let btn_deactivate = modal.find(".button-deactivate");
if (
btn_deactivate.length > 0 &&
modal.hasClass("no-confirmation-message") &&
!btn_deactivate.hasClass("allow-deactivate")
) {
btn_deactivate.addClass("allow-deactivate");
modal.find(".button-skip-deactivate").addClass("allow-deactivate");
modal.find(".ts-modal-panel").removeClass("active ");
modal.find('[data-panel-id="reasons"]').addClass("active");
}
modal.addClass("active");
jQuery("body").addClass("has-ts-modal");
},
close_modal: function (modal) {
modal.removeClass("active");
jQuery("body").removeClass("has-ts-modal");
},
events: {
listeners: function (data, modal, plugin) {
if (0 !== jQuery(`.${plugin}.ts-slug`).prev("a")) {
jQuery(`.${plugin}.ts-slug`)
.prev("a")
.on("click", function (e) {
e.preventDefault();
tyche.plugin_deactivation.show_modal(modal);
});
}
modal.on("click", ".button-skip-deactivate", function (e) {
e.preventDefault();
jQuery(".ts-modal-footer p").hide();
tyche.plugin_deactivation.events.button_submit(this, data, plugin, true);
});
modal.on("click", ".button-deactivate", function (e) {
e.preventDefault();
jQuery(".ts-modal-footer p").hide();
tyche.plugin_deactivation.events.button_submit(this, data, plugin);
});
modal.on("click", 'input[type="radio"]', function () {
jQuery(".ts-modal-footer p").hide();
tyche.plugin_deactivation.events.button_option_selection(this, modal);
});
// If the user has clicked outside the window, cancel it.
modal.on("click", function (e) {
tyche.plugin_deactivation.events.button_click_outside_window(e, modal);
});
},
button_submit: function ($this, $data, plugin, skip = false) {
if (
jQuery($this).hasClass("disabled") ||
(!skip && !jQuery($this).hasClass("allow-deactivate"))
) {
return;
}
let modal = jQuery($this).parents(`.${plugin}.ts-modal`),
option = modal.find('input[type="radio"]:checked'),
reason = option.parents("li:first"),
response = reason.find('textarea, input[type="text"]'),
reason_id = skip ? 0 : option.val(),
reason_text = skip ? "Deactivation Reason Skipped" : reason.text().trim();
if (0 === option.length && !skip) {
jQuery(".ts-modal-footer p").css("display", "inline-block");
return;
}
let data = {
action: "tyche_plugin_deactivation_submit_action",
reason_id: reason_id,
reason_text: reason_text,
reason_info: 0 !== response.length ? response.val().trim() : "",
plugin_short_name: plugin,
plugin_name: jQuery(`.${plugin}.ts-slug`).attr("data-plugin"),
nonce: modal.find('input[name="nonce"]').val(),
};
let ajax_url = tyche.plugin_deactivation.fn.return($data, "ajax_url"),
href = jQuery(`.${plugin}.ts-slug`).prev().prop("href");
if ("" !== ajax_url && "" !== href) {
jQuery.ajax({
url: ajax_url,
method: "POST",
data,
beforeSend: function () {
modal.find(".button-deactivate").addClass("disabled");
modal.find(".button-skip-deactivate").addClass("disabled");
},
complete: function () {
window.location.href = href;
},
});
}
},
button_click_outside_window: function (e, modal) {
let target = jQuery(e.target);
// If the user has clicked anywhere in the modal dialog, just return.
if (target.hasClass("ts-modal-body") || target.hasClass("ts-modal-footer")) {
return;
}
// If the user has not clicked the close button and the clicked element is inside the modal dialog, just return.
if (
!target.hasClass("button-close") &&
(target.parents(".ts-modal-body").length > 0 ||
target.parents(".ts-modal-footer").length > 0)
) {
return;
}
tyche.plugin_deactivation.close_modal(modal);
},
button_option_selection: function ($this, modal) {
modal.find(".reason-input").remove();
jQuery($this)
.parents("ul#reasons-list")
.children("li.li-active")
.removeClass("li-active");
let parent = jQuery($this).parents("li:first");
if (parent.hasClass("has_html")) {
parent.addClass("li-active");
}
if (parent.hasClass("has-input")) {
parent.append(
jQuery(
`<div class="reason-input">${
"textfield" === parent.data("input-type")
? '<input type="text" />'
: '<textarea rows="5"></textarea>'
}</div>`
)
);
parent
.find("input, textarea")
.attr("placeholder", parent.data("input-placeholder"))
.focus();
}
},
},
},
};
tyche.init();