2015-04-20 20:39:53 +02:00
|
|
|
$(function(){
|
2015-11-20 21:59:57 -08:00
|
|
|
var root = window || {},
|
|
|
|
|
isOnline = typeof navigator.onLine !== 'undefined' && navigator.onLine;
|
|
|
|
|
|
|
|
|
|
window.addEventListener('online', function(){
|
|
|
|
|
isOnline = true;
|
|
|
|
|
});
|
|
|
|
|
window.addEventListener('offline', function(){
|
|
|
|
|
isOnline = false;
|
|
|
|
|
});
|
2015-04-20 20:39:53 +02:00
|
|
|
|
|
|
|
|
root.GravAjax = function (url, settings) {
|
2015-11-20 21:59:57 -08:00
|
|
|
if (!isOnline) {
|
|
|
|
|
toastr.error('You appear to be Offline.');
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-20 20:39:53 +02:00
|
|
|
settings = typeof settings === 'undefined' ? typeof url === 'string' ? {} : url : settings;
|
|
|
|
|
settings.url = typeof settings.url === 'undefined' && typeof url === 'string' ? url : settings.url;
|
|
|
|
|
|
2015-05-11 16:37:43 +02:00
|
|
|
var callbacks = {
|
|
|
|
|
success: typeof settings.success !== 'undefined' ? typeof settings.success === 'function' ? [ settings.success ] : settings.success : [],
|
|
|
|
|
error: typeof settings.error !== 'undefined' ? typeof settings.error === 'function' ? [ settings.error ] : settings.error : []
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (settings.toastErrors) {
|
|
|
|
|
callbacks.error.push(root.GravAjax.toastErrorHandler);
|
|
|
|
|
delete settings.toastErrors;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
delete settings.success;
|
|
|
|
|
delete settings.error;
|
|
|
|
|
|
|
|
|
|
var deferred = $.Deferred(),
|
|
|
|
|
jqxhr = $.ajax(settings);
|
|
|
|
|
|
|
|
|
|
jqxhr.done(function (response, status, xhr) {
|
|
|
|
|
var responseObject = {
|
|
|
|
|
response: response,
|
|
|
|
|
status: status,
|
|
|
|
|
xhr: xhr
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
switch (response.status) {
|
|
|
|
|
case "unauthenticated":
|
|
|
|
|
document.location.href = GravAdmin.config.base_url_relative;
|
|
|
|
|
throw "Logged out";
|
|
|
|
|
break;
|
|
|
|
|
case "unauthorized":
|
|
|
|
|
responseObject.response.message = responseObject.response.message || "Unauthorized.";
|
|
|
|
|
root.GravAjax.errorHandler(deferred, callbacks, responseObject);
|
|
|
|
|
break;
|
|
|
|
|
case "error":
|
|
|
|
|
responseObject.response.message = responseObject.response.message || "Unknown error.";
|
|
|
|
|
root.GravAjax.errorHandler(deferred, callbacks, responseObject);
|
|
|
|
|
break;
|
|
|
|
|
case "success":
|
|
|
|
|
root.GravAjax.successHandler(deferred, callbacks, responseObject);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
responseObject.response.message = responseObject.response.message || "Invalid AJAX response.";
|
|
|
|
|
root.GravAjax.errorHandler(deferred, callbacks, responseObject);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
jqxhr.fail(function (xhr, status, error) {
|
|
|
|
|
var response = {
|
|
|
|
|
status: 'error',
|
|
|
|
|
message: error
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
root.GravAjax.errorHandler(deferred, callbacks, { xhr: xhr, status: status, response: response});
|
|
|
|
|
});
|
|
|
|
|
|
2015-07-27 14:31:37 -07:00
|
|
|
root.GravAjax.jqxhr = jqxhr;
|
|
|
|
|
|
2015-05-11 16:37:43 +02:00
|
|
|
return deferred;
|
2015-04-20 20:39:53 +02:00
|
|
|
|
|
|
|
|
};
|
2015-05-11 16:37:43 +02:00
|
|
|
|
|
|
|
|
root.GravAjax.successHandler = function (promise, callbacks, response) {
|
|
|
|
|
callbacks = callbacks.success;
|
|
|
|
|
for (var i = 0; i < callbacks.length; i++) {
|
|
|
|
|
if (typeof callbacks[i] === 'function') {
|
|
|
|
|
callbacks[i](response.response, response.status, response.xhr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
promise.resolve(response.response, response.status, response.xhr);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
root.GravAjax.errorHandler = function (promise, callbacks, response) {
|
|
|
|
|
callbacks = callbacks.error;
|
|
|
|
|
for (var i = 0; i < callbacks.length; i++) {
|
|
|
|
|
if (typeof callbacks[i] === 'function') {
|
|
|
|
|
callbacks[i](response.xhr, response.status, response.response.message);
|
|
|
|
|
}
|
2015-04-20 20:39:53 +02:00
|
|
|
}
|
2015-05-11 16:37:43 +02:00
|
|
|
|
|
|
|
|
promise.reject(response.xhr, response.status, response.response.message);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
root.GravAjax.toastErrorHandler = function (xhr, status, error) {
|
2015-07-27 14:31:37 -07:00
|
|
|
if (status !== 'abort') {
|
|
|
|
|
toastr.error(error);
|
|
|
|
|
}
|
2015-04-20 20:39:53 +02:00
|
|
|
};
|
|
|
|
|
});
|