| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | $(function(){    var root = window || {};    root.GravAjax = function (url, settings) {        settings = typeof settings === 'undefined' ? typeof url === 'string' ? {} : url : settings;        settings.url = typeof settings.url === 'undefined' && typeof url === 'string' ? url : settings.url;        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});        });        root.GravAjax.jqxhr = jqxhr;        return deferred;    };    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);            }        }        promise.reject(response.xhr, response.status, response.response.message);    };    root.GravAjax.toastErrorHandler = function (xhr, status, error) {        if (status !== 'abort') {            toastr.error(error);        }    };});
 |