mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-15 04:18:44 +00:00
232 lines
6.6 KiB
JavaScript
232 lines
6.6 KiB
JavaScript
"use strict";
|
|
|
|
(function() {
|
|
if (!String.prototype.trim) {
|
|
String.prototype.trim = function () {
|
|
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
|
|
};
|
|
}
|
|
|
|
var imgDataUrl = null;
|
|
|
|
function updateLocationInfo() {
|
|
var locationType = $("input:radio[name='locationType']:checked").val();
|
|
$("#locationType_usa").toggle(locationType === "usa");
|
|
$("#locationType_eu").toggle(locationType === "eu");
|
|
$("#locationType_other").toggle(locationType === "other");
|
|
$("#paymentMethod_iban").toggle(locationType === "eu");
|
|
if ($("#paymentMethod_iban input").is(":checked") && locationType !== "eu") $("#paymentMethod_payoneer input").prop("checked", true);
|
|
if ($("#paymentMethod_intl input").is(":checked") && locationType === "eu") $("#paymentMethod_iban input").prop("checked", true);
|
|
$("#paymentMethod_intl").toggle(locationType !== "eu");
|
|
}
|
|
|
|
function updatePriceIndication() {
|
|
$("#onlyYearlyWarning").hide();
|
|
var x = getPriceIndication();
|
|
if (x === "") {
|
|
$("#costIndicator").text("").hide();
|
|
} else {
|
|
$("#costIndicator").text(x).show();
|
|
}
|
|
}
|
|
|
|
function getPriceIndication() {
|
|
try {
|
|
var seats = parseInt($("#seats").val());
|
|
if (isNaN(seats)) return "";
|
|
var licenseType = $("input:radio[name='licenseType']:checked").val();
|
|
var costPer;
|
|
if (licenseType === "enterprise") costPer = 5;
|
|
else if (licenseType === "professional") costPer = 2;
|
|
else return "";
|
|
var periodRaw = $("input:radio[name='paymentType']:checked").val();
|
|
if (periodRaw === "monthly") {
|
|
if (costPer*seats < 50) {
|
|
$("#onlyYearlyWarning").show();
|
|
return "Your license will cost €" + (costPer*seats*12) + ",- per year.";
|
|
}
|
|
return "Your license will cost €" + (costPer*seats) + ",- per month.";
|
|
}
|
|
return "Your license will cost €" + (costPer*seats*12) + ",- per year.";
|
|
} catch (e) {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
function showError(elemName) {
|
|
var elem = $("#" + elemName + "Err");
|
|
elem.fadeIn();
|
|
$("#" + elemName).on("change keyup", function() {
|
|
elem.hide();
|
|
});
|
|
}
|
|
|
|
function applyLicense() {
|
|
var submitButton = $("#submit");
|
|
var spinner = $("<img>").attr("src", "/img/spinner.gif").attr("alt", "submitting").css("float", "left").css("margin-right", "20px");
|
|
|
|
submitButton.on("click", function(evt) {
|
|
evt.preventDefault();
|
|
|
|
var onSuccess = function() {
|
|
$("#orderHelp").hide();
|
|
var okMsg = $("<div>").addClass("formSubmitOk").html("Thank you for ordering a Project Lombok license! We'll send your bill via email. If you have any further questions please contact us at <a href=\"mailto:orders@projectlombok.org\"><code>orders@projectlombok.org</code></a>.");
|
|
spinner.replaceWith(okMsg);
|
|
};
|
|
|
|
var onFailure = function() {
|
|
$("#orderHelp").hide();
|
|
var errMsg = $("<div>").addClass("formSubmitFail").html("Our order form appears to be broken. Could you do us a favour and contact us at <a href=\"mailto:orders@projectlombok.org\"><code>orders@projectlombok.org</code></a>? Thank you!");
|
|
spinner.replaceWith(errMsg);
|
|
};
|
|
|
|
var data = {};
|
|
data.name = $("#companyName").val();
|
|
data.email = $("#email").val();
|
|
data.licenseType = $("input:radio[name='licenseType']:checked").val();
|
|
data.seats = parseInt($("#seats").val());
|
|
data.paymentType = $("input:radio[name='paymentType']:checked").val();
|
|
data.mentionMe = $("#mentionMe").prop("checked");
|
|
data.companyUrl = $("#companyUrl").val();
|
|
data.locationType = $("input:radio[name='locationType']:checked").val();
|
|
data.euVat = $("#euVat").val();
|
|
data.paymentMethod = $("input:radio[name='paymentMethod']:checked").val();
|
|
|
|
var formFail = false;
|
|
|
|
if (!data.paymentMethod) {
|
|
showError("paymentMethod");
|
|
formFail = true;
|
|
}
|
|
|
|
if (!data.euVat && data.locationType === 'eu') {
|
|
$("#euVat").focus();
|
|
showError("euVat");
|
|
formFail = true;
|
|
}
|
|
|
|
if (!data.locationType) {
|
|
showError("locationType");
|
|
formFail = true;
|
|
}
|
|
|
|
if (!data.seats || isNaN(data.seats)) {
|
|
$("#seats").focus();
|
|
showError("seats");
|
|
formFail = true;
|
|
}
|
|
|
|
if (!data.paymentType) {
|
|
showError("paymentType");
|
|
formFail = true;
|
|
}
|
|
|
|
if (data.email.indexOf('@') === -1) {
|
|
$("#email").focus();
|
|
showError("email");
|
|
formFail = true;
|
|
}
|
|
|
|
if (data.name.trim().length < 1) {
|
|
$("#companyName").focus();
|
|
showError("companyName");
|
|
formFail = true;
|
|
}
|
|
|
|
if (formFail) return;
|
|
|
|
var rnd = generateRandom();
|
|
var err = processImageUpload();
|
|
if (err) {
|
|
alert(err);
|
|
$("#logo")[0].value = null;
|
|
return;
|
|
}
|
|
if (imgDataUrl) data.logo = imgDataUrl;
|
|
|
|
submitButton.replaceWith(spinner);
|
|
|
|
$.ajax({
|
|
url: "/license-submit/" + rnd,
|
|
method: "PUT",
|
|
contentType: "application/json",
|
|
data: JSON.stringify(data),
|
|
processData: false,
|
|
success: onSuccess,
|
|
error: onFailure
|
|
});
|
|
});
|
|
|
|
$("#companyLogo").on("click", function(evt) {
|
|
evt.preventDefault();
|
|
$("#logo").click();
|
|
});
|
|
|
|
$("#deleteCompanyLogo").on("click", function(evt) {
|
|
evt.preventDefault();
|
|
$("#logo")[0].value = null;
|
|
$("#logoCnt").empty().hide();
|
|
$("#companyLogo").show();
|
|
$("#deleteCompanyLogo").hide();
|
|
});
|
|
|
|
$("#logo").on("change", function() {
|
|
var err = showImage();
|
|
if (err) {
|
|
alert(err);
|
|
$("#logo")[0].value = null;
|
|
} else {
|
|
$("#companyLogo").hide();
|
|
$("#deleteCompanyLogo").show();
|
|
}
|
|
});
|
|
|
|
$("#seats,.paymentType,.licenseType").on("change keyup", function() {
|
|
updatePriceIndication();
|
|
});
|
|
$(".locationType").on("change", function() {
|
|
updateLocationInfo();
|
|
});
|
|
}
|
|
|
|
function generateRandom() {
|
|
var buf = new Uint8Array(40);
|
|
window.crypto.getRandomValues(buf);
|
|
return btoa(String.fromCharCode.apply(null, buf)).replace(/\+/g, '_').replace(/\//gi, '-');
|
|
}
|
|
|
|
function showImage() {
|
|
$("#logoCnt").empty().hide();
|
|
try {
|
|
return processImageUpload(function(dataUrl) {
|
|
var img = $("<img />");
|
|
img.css({
|
|
"max-width": "500px",
|
|
"max-height": "300px"
|
|
});
|
|
$("#logoCnt").append(img).show();
|
|
img.attr("src", dataUrl);
|
|
});
|
|
} catch (e) {
|
|
if (console && console.log) console.log(e);
|
|
}
|
|
}
|
|
|
|
function processImageUpload(fnc) {
|
|
var f = $("#logo")[0].files[0];
|
|
if (!f) return;
|
|
if (f.size > 10000000) return "Logo too large; please give us a logo below 10MiB in size.";
|
|
var imageType = /^image\//;
|
|
if (!imageType.test(f.type)) return "Please upload an image, for example in PNG format.";
|
|
var reader = new FileReader();
|
|
reader.onload = function(e) {
|
|
imgDataUrl = e.target.result;
|
|
if (fnc) fnc(e.target.result);
|
|
};
|
|
reader.readAsDataURL(f);
|
|
return null;
|
|
}
|
|
|
|
$(applyLicense);
|
|
})();
|