##// END OF EJS Templates
comments: save modification date for main comment on edit.
comments: save modification date for main comment on edit.

File last commit:

r4339:de17b181 default
r4407:f43c166f default
Show More
ajax.js
174 lines | 5.0 KiB | application/javascript | JavascriptLexer
// # Copyright (C) 2010-2020 RhodeCode GmbH
// #
// # This program is free software: you can redistribute it and/or modify
// # it under the terms of the GNU Affero General Public License, version 3
// # (only), as published by the Free Software Foundation.
// #
// # This program is distributed in the hope that it will be useful,
// # but WITHOUT ANY WARRANTY; without even the implied warranty of
// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// # GNU General Public License for more details.
// #
// # You should have received a copy of the GNU Affero General Public License
// # along with this program. If not, see <http://www.gnu.org/licenses/>.
// #
// # This program is dual-licensed. If you wish to learn more about the
// # RhodeCode Enterprise Edition, including its added features, Support services,
// # and proprietary license terms, please see https://rhodecode.com/licenses/
/**
* turns objects into GET query string
*/
var toQueryString = function(o) {
if(typeof o === 'string') {
return o;
}
if(typeof o !== 'object') {
return false;
}
var _p, _qs = [];
for(_p in o) {
_qs.push(encodeURIComponent(_p) + '=' + encodeURIComponent(o[_p]));
}
return _qs.join('&');
};
/**
* ajax call wrappers
*/
var ajaxGET = function (url, success, failure) {
var sUrl = url;
var request = $.ajax({
url: sUrl,
headers: {'X-PARTIAL-XHR': true}
})
.done(function (data) {
success(data);
})
.fail(function (jqXHR, textStatus, errorThrown) {
if (failure) {
failure(jqXHR, textStatus, errorThrown);
} else {
var message = formatErrorMessage(jqXHR, textStatus, errorThrown);
ajaxErrorSwal(message);
}
});
return request;
};
var ajaxPOST = function (url, postData, success, failure) {
var sUrl = url;
var postData = toQueryString(postData);
var request = $.ajax({
type: 'POST',
url: sUrl,
data: postData,
headers: {'X-PARTIAL-XHR': true}
})
.done(function (data) {
success(data);
})
.fail(function (jqXHR, textStatus, errorThrown) {
if (failure) {
failure(jqXHR, textStatus, errorThrown);
} else {
var message = formatErrorMessage(jqXHR, textStatus, errorThrown);
ajaxErrorSwal(message);
}
});
return request;
};
SwalNoAnimation = Swal.mixin({
confirmButtonColor: '#84a5d2',
cancelButtonColor: '#e85e4d',
showClass: {
popup: 'swal2-noanimation',
backdrop: 'swal2-noanimation'
},
hideClass: {
popup: '',
backdrop: ''
},
})
/* Example usage:
*
error: function(jqXHR, textStatus, errorThrown) {
var prefix = "Error while fetching entries.\n"
var message = formatErrorMessage(jqXHR, textStatus, errorThrown, prefix);
ajaxErrorSwal(message);
}
*
* */
function formatErrorMessage(jqXHR, textStatus, errorThrown, prefix) {
if(typeof prefix === "undefined") {
prefix = ''
}
if (jqXHR.status === 0) {
return (prefix + 'Not connected.\nPlease verify your network connection.');
} else if (jqXHR.status == 401) {
return (prefix + 'Unauthorized access. [401]');
} else if (jqXHR.status == 404) {
return (prefix + 'The requested page not found. [404]');
} else if (jqXHR.status == 500) {
return (prefix + 'Internal Server Error [500].');
} else if (jqXHR.status == 503) {
return (prefix + 'Service unavailable [503].');
} else if (errorThrown === 'parsererror') {
return (prefix + 'Requested JSON parse failed.');
} else if (errorThrown === 'timeout') {
return (prefix + 'Time out error.');
} else if (errorThrown === 'abort') {
return (prefix + 'Ajax request aborted.');
} else {
return (prefix + 'Uncaught Error.\n' + jqXHR.responseText);
}
}
function ajaxErrorSwal(message) {
SwalNoAnimation.fire({
icon: 'error',
title: _gettext('Ajax Request Error'),
html: '<span style="white-space: pre-line">{0}</span>'.format(message),
showClass: {
popup: 'swal2-noanimation',
backdrop: 'swal2-noanimation'
},
hideClass: {
popup: '',
backdrop: ''
}
})
}
/*
* use in onclick attributes e.g
* onclick="submitConfirm(event, this, _gettext('Confirm to delete '), _gettext('Confirm Delete'), 'what we delete')">
* */
function submitConfirm(event, self, question, confirmText, htmlText) {
if (htmlText === "undefined") {
htmlText = null;
}
if (confirmText === "undefined") {
confirmText = _gettext('Delete')
}
event.preventDefault();
SwalNoAnimation.fire({
title: question,
icon: 'warning',
html: htmlText,
showCancelButton: true,
confirmButtonText: confirmText
}).then(function(result) {
if (result.value) {
$(self).closest("form").submit();
}
})
}