mirror of https://github.com/zulip/zulip.git
142 lines
4.6 KiB
JavaScript
142 lines
4.6 KiB
JavaScript
import $ from "jquery";
|
|
|
|
import * as loading from "../loading";
|
|
import {page_params} from "../page_params";
|
|
|
|
export function create_ajax_request(
|
|
url,
|
|
form_name,
|
|
ignored_inputs = [],
|
|
type = "POST",
|
|
success_callback,
|
|
) {
|
|
const $form = $(`#${CSS.escape(form_name)}-form`);
|
|
const form_loading_indicator = `#${CSS.escape(form_name)}_loading_indicator`;
|
|
const form_input_section = `#${CSS.escape(form_name)}-input-section`;
|
|
const form_success = `#${CSS.escape(form_name)}-success`;
|
|
const form_error = `#${CSS.escape(form_name)}-error`;
|
|
const form_loading = `#${CSS.escape(form_name)}-loading`;
|
|
|
|
const zulip_limited_section = "#zulip-limited-section";
|
|
const free_trial_alert_message = "#free-trial-alert-message";
|
|
|
|
loading.make_indicator($(form_loading_indicator), {
|
|
text: "Processing ...",
|
|
abs_positioned: true,
|
|
});
|
|
$(form_input_section).hide();
|
|
$(form_error).hide();
|
|
$(form_loading).show();
|
|
$(zulip_limited_section).hide();
|
|
$(free_trial_alert_message).hide();
|
|
|
|
const data = {};
|
|
|
|
for (const item of $form.serializeArray()) {
|
|
if (ignored_inputs.includes(item.name)) {
|
|
continue;
|
|
}
|
|
data[item.name] = item.value;
|
|
}
|
|
|
|
$.ajax({
|
|
type,
|
|
url,
|
|
data,
|
|
success(response) {
|
|
$(form_loading).hide();
|
|
$(form_error).hide();
|
|
$(form_success).show();
|
|
if (["autopay", "invoice"].includes(form_name)) {
|
|
if ("pushState" in history) {
|
|
history.pushState("", document.title, location.pathname + location.search);
|
|
} else {
|
|
location.hash = "";
|
|
}
|
|
}
|
|
success_callback(response);
|
|
},
|
|
error(xhr) {
|
|
$(form_loading).hide();
|
|
$(form_error).show().text(JSON.parse(xhr.responseText).msg);
|
|
$(form_input_section).show();
|
|
$(zulip_limited_section).show();
|
|
$(free_trial_alert_message).show();
|
|
},
|
|
});
|
|
}
|
|
|
|
export function format_money(cents) {
|
|
// allow for small floating point errors
|
|
cents = Math.ceil(cents - 0.001);
|
|
let precision;
|
|
if (cents % 100 === 0) {
|
|
precision = 0;
|
|
} else {
|
|
precision = 2;
|
|
}
|
|
// TODO: Add commas for thousands, millions, etc.
|
|
return (cents / 100).toFixed(precision);
|
|
}
|
|
|
|
export function update_charged_amount(prices, schedule) {
|
|
$("#charged_amount").text(format_money(page_params.seat_count * prices[schedule]));
|
|
}
|
|
|
|
export function update_discount_details(organization_type) {
|
|
let discount_notice =
|
|
"Your organization may be eligible for a discount on Zulip Cloud Standard. Organizations whose members are not employees are generally eligible.";
|
|
const discount_details = {
|
|
opensource: "Zulip Cloud Standard is free for open-source projects.",
|
|
research: "Zulip Cloud Standard is free for academic research.",
|
|
nonprofit: "Zulip Cloud Standard is discounted 85%+ for registered non-profits.",
|
|
event: "Zulip Cloud Standard is free for academic conferences and most non-profit events.",
|
|
education: "Zulip Cloud Standard is discounted 85% for education.",
|
|
education_nonprofit:
|
|
"Zulip Cloud Standard is discounted 90% for education non-profits with online purchase.",
|
|
};
|
|
if (discount_details[organization_type]) {
|
|
discount_notice = discount_details[organization_type];
|
|
}
|
|
$("#sponsorship-discount-details").text(discount_notice);
|
|
}
|
|
|
|
export function show_license_section(license) {
|
|
$("#license-automatic-section").hide();
|
|
$("#license-manual-section").hide();
|
|
|
|
$("#automatic_license_count").prop("disabled", true);
|
|
$("#manual_license_count").prop("disabled", true);
|
|
|
|
const section_id = `#license-${CSS.escape(license)}-section`;
|
|
$(section_id).show();
|
|
const input_id = `#${CSS.escape(license)}_license_count`;
|
|
$(input_id).prop("disabled", false);
|
|
}
|
|
|
|
let current_page;
|
|
|
|
function handle_hashchange() {
|
|
$(`#${CSS.escape(current_page)}-tabs.nav a[href="${CSS.escape(location.hash)}"]`).tab("show");
|
|
$("html").scrollTop(0);
|
|
}
|
|
|
|
export function set_tab(page) {
|
|
const hash = location.hash;
|
|
if (hash) {
|
|
$(`#${CSS.escape(page)}-tabs.nav a[href="${CSS.escape(hash)}"]`).tab("show");
|
|
$("html").scrollTop(0);
|
|
}
|
|
|
|
$(`#${CSS.escape(page)}-tabs.nav-tabs a`).on("click", function () {
|
|
location.hash = this.hash;
|
|
});
|
|
|
|
current_page = page;
|
|
window.addEventListener("hashchange", handle_hashchange);
|
|
}
|
|
|
|
export function is_valid_input(elem) {
|
|
return elem[0].checkValidity();
|
|
}
|