static/js/codebase-branch-validation.js (223 lines of code) (raw):
$(function () {
let STATUS = {
IN_PROGRESS: 'inactive'
};
let delayTime = 10000;
$(document).ready(function () {
let uri = window.location.pathname;
let anchor = $(location).attr('hash');
if (anchor) {
if (anchor === '#branchExistsModal') {
let errorMessage = 'The release branch with the ' + getUrlParameter('errorExistingBranch') + ' name already exists. To proceed, use another branch name.';
$('.branch-exists-modal').text(errorMessage).show();
$('#releaseBranchModal').modal('show');
} else if (anchor === '#branchSuccessModal') {
showNotification(true);
} else if (anchor === "#branchDeletedSuccessModal") {
let name = getUrlParameter('name');
showNotification(true, null, `Codebase Branch ${name} was marked for deletion.`);
} else if (anchor === "#branchIsUsedSuccessModal") {
let $modal = $("#delete-confirmation"),
name = getUrlParameter('name');
$('.confirmation-msg').text(`Confirm Deletion of '${name}'`);
$modal.find('.server-error').show();
$modal.modal('show');
}
}
let branchName = getUrlParameter('waitingforbranch');
if (branchName) {
let branchStatus = $("tr[data-branch-name='" + branchName + "']").attr("data-branch-status");
if (branchStatus === STATUS.IN_PROGRESS) {
uri += "?waitingforbranch=" + branchName;
setTimeout(function () {
location.reload();
}, delayTime);
}
}
window.history.replaceState({}, document.title, uri);
});
$('.tooltip-icon').tooltip();
$('#btn-modal-close, #btn-cross-close').click(function () {
$('#releaseBranch').prop('checked', false);
$('#commitNumber').val("");
showBranchModalControls();
$('.branch-exists-modal').hide();
if ($('#versioningPostfix').length) {
$('#branchName,#commitNumber,#branch-version,#master-branch-version').removeClass('non-valid-input');
$('.invalid-feedback.master-branch-version').hide();
restoreBranchModalWindowValues()
} else {
$('#branchName,#commitNumber,#branch-version').val('').removeClass('non-valid-input');
}
$('.invalid-feedback.branch-name').hide();
$('.invalid-feedback.commit-message').hide();
$('.invalid-feedback.branch-version').hide();
});
$('.modal-release-branch').click(function () {
$('#releaseBranchModal').modal('show');
if ($('#versioningPostfix').length) {
let branchName = $('#branchName').val(),
branchVersion = $('#branch-version').val(),
masterBranchVersion = $('#master-branch-version').val();
saveBranchModalWindowValues(branchName, branchVersion, masterBranchVersion)
}
});
$('#create-release-branch').click(function () {
$('.branch-exists-modal').hide();
let isBranchValid = true;
if (!$('#releaseBranch').length || $('#releaseBranch').is(':not(:checked)')) {
isBranchValid = handleBranchNameValidation();
}
let isCommitValid = handleCommitHashValidation();
if ($("#branch-version").length === 0) {
if (isBranchValid && isCommitValid) {
$('#create-branch-action').submit();
}
return
}
if ($('#releaseBranch').is(':checked')) {
let branchVersion = $('#branch-version'),
masterBranchVersion = $('#master-branch-version'),
isVersionValid = handleBranchVersionValidation(branchVersion),
isMasterVersionValid = handleBranchVersionValidation(masterBranchVersion);
if (isCommitValid && isVersionValid && isMasterVersionValid) {
$('#create-branch-action').submit();
}
} else {
let branchVersion = $('#branch-version'),
isVersionValid = handleBranchVersionValidation(branchVersion);
if (isBranchValid && isCommitValid && isVersionValid) {
$('#create-branch-action').submit();
}
}
});
function showBranchModalControls() {
let $createNewBranchModalEl = $('.create-new-branch-modal'),
$versioningPostfixEl = $createNewBranchModalEl.find('.versioning-postfix'),
$masterBranchVersionInputEl = $createNewBranchModalEl.find('.master-branch-version'),
$branchNameInputEl = $createNewBranchModalEl.find('.branch-name'),
$branchVersionInputEl = $createNewBranchModalEl.find('.branch-version');
if ($('#releaseBranch').is(":checked")) {
$('#branchName').removeClass('non-valid-input');
$('.invalid-feedback.branch-name').hide();
$branchNameInputEl.attr('readonly', true).val("release/" + trimMinorVersionComponent($branchVersionInputEl.val()));
$versioningPostfixEl.val("RC");
$masterBranchVersionInputEl.attr('disabled', false).removeClass('hide-element');
} else {
$branchNameInputEl.removeAttr('readonly');
restoreBranchModalWindowValues();
$versioningPostfixEl.val("SNAPSHOT");
$masterBranchVersionInputEl.attr('disabled', true).addClass('hide-element');
}
}
$('#branch-version').focusout(function () {
let branchVersion = $('#branch-version');
handleBranchVersionValidation(branchVersion);
});
$('#master-branch-version').focusout(function () {
let masterBranchVersion = $('#master-branch-version');
handleBranchVersionValidation(masterBranchVersion);
});
$('#commitNumber').focusout(function () {
handleCommitHashValidation();
});
$('.delete-branch').click(function () {
let name = $(this).data('name'),
$modal = $("#delete-confirmation");
$('.confirmation-msg').text(`Confirm Deletion of '${name}'`);
$modal.data('name', name).modal('show');
});
$('.delete-confirmation').click(function () {
deleteConfirmation();
});
$('.close,.cancel-delete').click(function () {
closeConfirmation();
});
$('#branchName').on('input', function () {
if ($('#releaseBranch').is(':not(:checked)')) {
$('#versioningPostfix').val("SNAPSHOT");
$('#versioningPostfix').val(processBranchName($(this).val()) + $('#versioningPostfix').val());
}
});
$('#branch-version').on('input', function () {
if ($('#releaseBranch').is(":checked")) {
$('#branchName').val("release/" + trimMinorVersionComponent($(this).val()));
} else {
$('#branchName').val($(this).val());
}
});
$('#releaseBranch').change(function () {
showBranchModalControls()
});
});
function isBranchNameValid() {
let $branchName = $('#branchName');
return !(!$branchName.val() || !checkBranchName($branchName.val()));
}
function isHashCommitValid() {
let $commitNumber = $('#commitNumber');
if ($commitNumber.val().length === 0) {
return true;
} else {
return !(!$commitNumber.val() || !checkHashCommit($commitNumber.val()));
}
}
function checkBranchName(branchName) {
return /^[a-z0-9][a-z0-9-.]*[a-z0-9]$/.test(branchName);
}
function handleBranchNameValidation() {
let isBranchValid = isBranchNameValid();
if (!isBranchValid) {
$('#branchName').addClass('non-valid-input');
$('.invalid-feedback.branch-name').show();
} else {
$('#branchName').removeClass('non-valid-input');
$('.invalid-feedback.branch-name').hide();
}
return isBranchValid;
}
function checkHashCommit(hashCommit) {
return /\b([a-f0-9]{40})\b/.test(hashCommit);
}
function handleCommitHashValidation() {
let isCommitValid = isHashCommitValid();
if (!isCommitValid) {
$('#commitNumber').addClass('non-valid-input');
$('.invalid-feedback.commit-message').show();
} else {
$('#commitNumber').removeClass('non-valid-input');
$('.invalid-feedback.commit-message').hide();
}
return isCommitValid;
}
function showNotification(ok, delay, successMsg) {
$.notify({
icon: ok ? 'glyphicon glyphicon-ok-circle alert-icon' : 'glyphicon gglyphicon-warning-sign alert-icon',
message: ok && successMsg != null ? successMsg : ok ? 'Provisioning has been started.' : 'Provisioning has been failed.'
},
{
type: ok ? 'success' : 'error',
delay: delay ? delay : 5000,
animate: {
enter: 'animated fadeInRight',
exit: 'animated fadeOutRight'
},
onShow: function() {
this.css({'width':'auto', 'display': 'flex'});
},
});
}
function saveBranchModalWindowValues(branchName, branchVersion, masterBranchVersion) {
sessionStorage.setItem("branch", JSON.stringify({
"branchName": branchName,
"branchVersion": branchVersion,
"masterBranchVersion": masterBranchVersion
}))
}
function restoreBranchModalWindowValues() {
let branchConf = sessionStorage.getItem("branch");
branchConf = JSON.parse(branchConf);
$('#branchName').val(branchConf.branchName);
$('#branch-version').val(branchConf.branchVersion);
$('#master-branch-version').val(branchConf.masterBranchVersion)
}