Viewing File: /usr/local/cpanel/base/frontend/jupiter/addoncgi/script.js
/* global $: false, PAGE: true */
/* exported toggleDisplay */
// collapse.tt
function toggleDisplay($dispEl, $linkEl, txtHide, txtShow, forceOpen) {
if ($dispEl.is(":hidden") || forceOpen) {
$dispEl.show();
$linkEl.text(txtHide);
} else {
$dispEl.hide();
$linkEl.text(txtShow);
}
}
// install_section.tt
$(document).ready(function() {
"use strict";
$("#cpaddonsform_install").submit(function() {
$("#spinner-install").show();
$("#spinner-install-advanced").show();
$("#btnSubmitInstall").attr("disabled", "disabled");
$("#btnSubmitInstallAdvanced").attr("disabled", "disabled");
$("#btnSubmitModeration").attr("disabled", "disabled");
});
});
// install_section.tt - password setup
$(document).ready(function() {
if (document.getElementById("password_strength") !== null) {
var passwordValidator = CPANEL.password.setup("password", "password2", "password_strength", window.pwminstrength, "create_strong_password", "why_strong_passwords_link", "why_strong_passwords_text");
CPANEL.validate.attach_to_form("submit", passwordValidator);
}
});
// install_section.tt - validate the table prefix
$(document).ready(function() {
var validCharacters = /[^a-zA-Z0-9]/;
var validationContainer = $("#invalid-table-prefix-characters").closest(".validation-container");
var submitButton = $("#btnSubmitInstall");
var submitButtonAdvanced = $("#btnSubmitInstallAdvanced");
function showHideWarning() {
var inputVal = $(this).val();
if ( validCharacters.test( inputVal ) ) {
validationContainer.show();
submitButton.prop("disabled", true);
submitButtonAdvanced.prop("disabled", true);
} else {
validationContainer.hide();
submitButton.prop("disabled", false);
submitButtonAdvanced.prop("disabled", false);
}
}
var input = $("#table_prefix");
input.on("input", showHideWarning);
showHideWarning.call( input );
});
// install_section.tt - show/hide the advanced configuration options
$(document).ready(function() {
"use strict";
function setupInstallSection() {
var showTitle = LOCALE.maketext("Show Advanced Configuration");
var hideTitle = LOCALE.maketext("Hide Advanced Configuration");
var $btnAdvanced = $("#btnAdvanced");
var $hidOneClick = $("input[name=oneclick]"); // Updates the oneclick variable on all the forms: install, uninstall, upgrade
var $divAdvanced = $("#advanced");
var $divOneClick = $("#oneclick");
$("#cpaddonsform_uninstall").on("submit", function() {
$("#btnUninstall").attr("disabled", "disabled");
return true;
});
$("#cpaddonsform_upgrade").on("submit", function() {
$("#btnUpgrade").attr("disabled", "disabled");
return true;
});
// Return early if there is no related content.
if ( !$divAdvanced.length || !$divOneClick.length ) {
return;
}
/**
* Adjust the form and focuses the correct element. Called
* once the advance form is expanded and almost ready to use.
*
* @name finalizeAdvanced
*/
function finalizeAdvanced() {
$divOneClick
.find("[name=subdomain]")
.attr("disabled", "disabled");
$divAdvanced
.find("[name=subdomain]")
.removeAttr("disabled");
var $first = $("#cpaddonsform_install input[type=text]:first");
var offset = $first.offset();
$first.focus();
$("html", "body").animate({
scrollTop: offset.top,
scrollLeft: offset.left,
});
}
/**
* Adjusts the form and focuses the first element. Called
* once the oneclick form is expanded and almost ready to
* use.
*
* @name finalizeOneClick
*/
function finalizeOneClick() {
$divAdvanced
.find("[name=subdomain]")
.attr("disabled", "disabled");
$divOneClick
.find("[name=subdomain]")
.removeAttr("disabled");
$("#btnSubmitInstall").focus();
$("#btnSubmitInstallAdvanced").focus();
}
var isOneClickReturn = PAGE && typeof (PAGE.oneclick) !== "undefined" ? PAGE.oneclick : true;
// Prepare #oneclick for overlap
$divOneClick.css({
position: "absolute",
width: "100%"
});
// Get the height of the two containers for later reference
var oneClickHeight = $divOneClick.height();
var advancedHeight = "100%";
// Setup the initial conditions
if (isOneClickReturn) {
$hidOneClick.val(1);
$btnAdvanced.text(showTitle);
// Prepare #oneclick for overlap
$divOneClick.css({
opacity: 1,
visibility: "visible"
});
// Prepare #advanced for overlap
$divAdvanced.css({
height: oneClickHeight,
opacity: 0,
visibility: "hidden"
});
finalizeOneClick();
} else {
$hidOneClick.val(0);
$btnAdvanced.text(hideTitle);
/* If we got to this state (advanced) because of the lack of contact email, don't allow
* the user to switch to the one-click installer, which will fail. */
if (!PAGE.has_contactemail) {
$btnAdvanced.hide();
}
// Prepare #oneclick for overlap
$divOneClick.css({
height: "100%",
opacity: 0,
visibility: "hidden"
});
// Prepare #advanced for overlap
$divAdvanced.css({
height: advancedHeight,
opacity: 1,
visibility: "visible"
});
finalizeAdvanced();
}
/**
* Called to show the one click form.
*
* @name showOneClick
* @param {Function} callback Additional steps to get the UI ready.
*/
function showOneClick(callback) {
var oneClickDropdown = $divOneClick.find("[name=subdomain]");
var advancedDropdown = $divAdvanced.find("[name=subdomain]");
var domain = advancedDropdown.val();
var oneClickOptions = oneClickDropdown[0].options;
for (var index = 0; index < oneClickOptions.length; index++) {
if ( domain === oneClickOptions[index].value) {
oneClickDropdown.val(domain);
break;
}
}
$divOneClick
.css({
visibility: "visible",
})
.stop()
.animate({
opacity: 1,
}, {
queue: false,
});
$divAdvanced
.stop()
.animate({
height: oneClickHeight || $("#oneclick").height(),
opacity: 0,
}, {
queue: false,
done: function() {
$divAdvanced.css({
visibility: "hidden",
});
if (callback && typeof callback === "function") {
callback();
}
},
});
}
/**
* Called to show the advanced configuration form.
*
* @name showAdvanced
* @param {Function} callback Additional steps to get the UI ready.
*/
function showAdvanced(callback) {
$divAdvanced
.find("[name=subdomain]")
.val(
$divOneClick
.find("[name=subdomain]")
.val()
);
$divOneClick
.stop()
.animate({
opacity: 0,
}, {
queue: false,
done: function() {
$divOneClick.css({
visibility: "hidden",
});
if (callback && typeof callback === "function") {
callback();
}
},
});
$divAdvanced
.css({
visibility: "visible",
})
.stop()
.animate({
height: advancedHeight,
opacity: 1,
}, {
queue: false,
});
}
/**
* Toggle the advanced configuration editor
* visibility.
*
* @name toggleAdvancedConfiguration
* @param {Event} e
*/
var toggleAdvancedConfiguration = function(e) {
var showingOneClick = $hidOneClick.val() === "1" ? true : false; // jshint ignore:line
if (showingOneClick) {
$hidOneClick.val(0);
$btnAdvanced.text(hideTitle);
showAdvanced(finalizeAdvanced);
} else {
$hidOneClick.val(1);
$btnAdvanced.text(showTitle);
showOneClick(finalizeOneClick);
}
};
$btnAdvanced.click(toggleAdvancedConfiguration);
}
// Workaround for Bootstrap using “display: none” instead of ”visibility: hidden” for tab-pane
// This waits until the install tab is actually displayed before initializing it
var $install = $("#install");
if ( $install[0] ) {
if ( !$install.hasClass("active") ) {
var observer = new MutationObserver(function(mutations) {
if ( $install.hasClass("active") ) {
setupInstallSection();
observer.disconnect();
}
});
observer.observe($install[0], { attributes: true, attributeFilter: ["class"] });
} else {
setupInstallSection();
}
}
});
// install_section.tt - show hide license form
$(document).ready(function() {
"use strict";
// this functionality is only needed for Addons that require licenses
if ( !PAGE.addon_needs_license ) {
return;
}
var $installForm = $("#cpaddonsform_install");
var $licenseForm = $("#cpaddons_form_license");
var $licenseDropdown = $("#subdomain-license-dropdown");
var $domainDropdown = $("#oneclick-subdomain");
var $advancedDropdown = $("#advanced-subdomain");
var $advanceButton = $("#btnAdvanced");
var $checkbox = $("#licenseCheckbox");
var $checkboxInfoBtn = $("#licenseCheckboxInfo");
var $licenseInput = $("#licenseFormInput");
var domainsWithLicense = PAGE.domains_with_license;
var selectedDomain = null;
/**
* Show the License Form and disables the advanced configuration link.
*
* @name showLicenseForm
* @param {String} domain Selected domain from the dropdown.
*/
function showLicenseForm(domain) {
$licenseForm.show();
$installForm.hide();
var productName = $("#productName").prop("title");
$("#btnSubmitLicense").prop("href", "../store/purchase_product_init.html?product_name=" + productName + "&domain=" + domain);
}
/**
* Show the Installation Form and enables the advanced configuration link.
*
* @name showInstallForm
*/
function showInstallForm() {
$licenseForm.hide();
$installForm.show();
if ($installForm.css("opacity") === "0") {
$installForm.css({ opacity: 1 });
}
var oneClickHeight = $("#oneclick").height();
var $divAdvanced = $("#advanced");
$divAdvanced.css({ height: oneClickHeight });
}
/**
* Disabled/Enable license check box
*
* @name disabledLicenseCheckbox
* @param {Boolean} bool
*/
function disabledLicenseCheckbox(bool) {
$checkbox.prop("disabled", bool);
}
/**
* If the domain is licensed or not, renders the proper form.
*
* @name renderForm
* @param {String} domain Selected domain from the dropdown.
*/
function renderForm(domain) {
var isChecked = $checkbox.prop("checked");
selectedDomain = domain;
// if domain has license do not allow insert license manually
if ( domainsWithLicense[domain] ) {
resetCheckboxState();
disabledLicenseCheckbox(true);
showInstallForm();
} else if (isChecked) {
showInstallForm();
disabledLicenseCheckbox(false);
} else {
showLicenseForm(domain);
disabledLicenseCheckbox(false);
}
}
/**
* Updates each dropdown from the 3 different forms.
*
* @name updateAllDropdowns
* @param {String} domain Selected domain from the dropdown.
*/
function updateAllDropdowns(domain) {
$advancedDropdown.val(domain);
$domainDropdown.val(domain);
$licenseDropdown.val(domain);
}
/**
* Updates all the dropdown values and shows the proper form.
*
* @name handleDropdown
* @param {Event} e
*/
function handleDropdown(e) {
var domain = e.target.selectedOptions[0].value;
renderForm(domain);
updateAllDropdowns(domain);
}
/**
* Reset to a clean state all elements and values related to the license checkbox.
*
* @name resetCheckboxState
*/
function resetCheckboxState() {
$checkbox.prop("checked", false);
$("#licenseFormInput input").val("");
$("input[name=license_checkbox]").val("0");
$licenseInput.hide();
}
/**
* Event handler for the license checkbox.
*
* @name handleCheckbox
*/
function handleCheckbox() {
var isChecked = $checkbox.prop("checked");
var isAdvancedShowing = $("#hidOneClick").val() === "0";
if (isChecked) {
$("input[name=license_checkbox]").val("1");
if (!isAdvancedShowing) {
showInstallForm();
}
$licenseInput.show();
} else {
$licenseInput.hide();
$("input[name=license_checkbox]").val("0");
if (isAdvancedShowing) {
$advanceButton.click();
}
showLicenseForm(selectedDomain);
}
}
/**
* Event handler for the advance dropdown.
*
* @name handleAdvanceDropdown
*/
function handleAdvanceDropdown(e) {
var domain = e.target.selectedOptions[0].value;
var isChecked = $checkbox.prop("checked");
// don't allow to enter a license if the user already has one.
if ( domainsWithLicense[domain] ) {
resetCheckboxState();
disabledLicenseCheckbox(true);
}
// don't allow to advanced install without any license.
if (!isChecked && !domainsWithLicense[domain]) {
disabledLicenseCheckbox(false);
$checkbox.prop("checked", true);
$licenseInput.show();
}
updateAllDropdowns(domain);
// do not let switch to one click form if not available
if (!PAGE.oneclick) {
disabledLicenseCheckbox(true);
}
}
function handleAdvanceButton() {
var isLicenseShowing = $("#cpaddons_form_license").css("display") === "block";
var isAdvancedShowing = $("#hidOneClick").val() === "0";
if (isLicenseShowing) {
showInstallForm();
$checkbox.click();
} else if (isAdvancedShowing && !$domainDropdown.val()) {
// if current domain is not available on oneClickForm
var firstValue = $domainDropdown[0].options[0].value;
updateAllDropdowns(firstValue);
renderForm(firstValue);
}
}
function handleCheckboxInfoToggle() {
$("#checkboxInfoText").toggle();
}
$domainDropdown.on("change", handleDropdown);
$licenseDropdown.on("change", handleDropdown);
$advancedDropdown.on("change", handleAdvanceDropdown);
$checkbox.on("change", handleCheckbox);
$advanceButton.on("click", handleAdvanceButton);
$checkboxInfoBtn.on("click", handleCheckboxInfoToggle);
// hide license input by default
$licenseInput.hide();
// on page load show/hide the correct form
if ( PAGE.domains_without_root_install.length === 0 || !PAGE.oneclick ) {
var isChecked = $checkbox.prop("checked");
var currentDomain = $domainDropdown.val();
if (!isChecked && !domainsWithLicense[currentDomain]) {
$checkbox.click();
}
if (!PAGE.oneclick) {
disabledLicenseCheckbox(true);
}
showInstallForm();
} else {
renderForm($domainDropdown.val());
}
});
// action_upgrade.tt
$(document).ready(function() {
"use strict";
$("#txtForce").bind("input propertychange", function() {
var val = $("#txtForce").val();
if (!val || val !== window.force_text) { // passed in template
$("#btnForce").attr("disabled", "disabled");
} else {
$("#btnForce").removeAttr("disabled");
}
});
$("#cpaddonsupform").submit(function() {
$("#spinner-install").show();
$("#btnForce").attr("disabled", "disabled");
});
});
// verify_uninstall.tt
$(document).ready(function() {
var clicked = false;
$("#btnConfirmUninstall").click(function() {
if (!clicked) {
clicked = true;
$(this).attr("disabled", "disabled");
$("#spinner-uninstall").show();
return true;
}
return false;
});
});
// verify_upgrade.tt
$(document).ready(function() {
var clicked = false;
$("#btnConfirmUpgrade").click(function() {
if (!clicked) {
clicked = true;
$(this).attr("disabled", "disabled");
$("#spinner-upgrade").show();
return true;
}
return false;
});
});
// moderation_request_form.tt
$(document).ready(function() {
$("#btnSubmitModerationRequest").click(function() {
$("#spinner-submit").show();
});
// Focus and move the cursor to the end of the text.
var text = $("#txtModerationRequest").val();
$("#txtModerationRequest").focus().val("").val(text);
});
Back to Directory
File Manager