From eea754d19ac1a390251ca9b0bdc29b61a4407b07 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 6 Jan 2024 16:39:10 +0100 Subject: [PATCH] ajax: do not clutter global --- assets/javascripts/lib/ajax.js | 225 +++++++++++++++++---------------- 1 file changed, 113 insertions(+), 112 deletions(-) diff --git a/assets/javascripts/lib/ajax.js b/assets/javascripts/lib/ajax.js index 809b7472..78527561 100644 --- a/assets/javascripts/lib/ajax.js +++ b/assets/javascripts/lib/ajax.js @@ -20,146 +20,147 @@ function ajax(options) { } else { return parseResponse(xhr, options); } -} -ajax.defaults = { - async: true, - dataType: "json", - timeout: 30, - type: "GET", -}; -// contentType -// context -// data -// error -// headers -// progress -// success -// url - -var applyDefaults = function (options) { - for (var key in ajax.defaults) { - if (options[key] == null) { - options[key] = ajax.defaults[key]; + function applyDefaults(options) { + for (var key in ajax.defaults) { + if (options[key] == null) { + options[key] = ajax.defaults[key]; + } } } -}; -var serializeData = function (options) { - if (!options.data) { - return; - } + function serializeData(options) { + if (!options.data) { + return; + } - if (options.type === "GET") { - options.url += "?" + serializeParams(options.data); - options.data = null; - } else { - options.data = serializeParams(options.data); + if (options.type === "GET") { + options.url += "?" + serializeParams(options.data); + options.data = null; + } else { + options.data = serializeParams(options.data); + } } -}; -var serializeParams = (params) => - Object.entries(params) - .map( - ([key, value]) => - `${encodeURIComponent(key)}=${encodeURIComponent(value)}`, - ) - .join("&"); - -var applyCallbacks = function (xhr, options) { - if (!options.async) { - return; + function serializeParams(params) { + return Object.entries(params) + .map( + ([key, value]) => + `${encodeURIComponent(key)}=${encodeURIComponent(value)}`, + ) + .join("&"); } - xhr.timer = setTimeout( - onTimeout.bind(undefined, xhr, options), - options.timeout * 1000, - ); - if (options.progress) { - xhr.onprogress = options.progress; - } - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - clearTimeout(xhr.timer); - onComplete(xhr, options); + function applyCallbacks(xhr, options) { + if (!options.async) { + return; } - }; -}; -var applyHeaders = function (xhr, options) { - if (!options.headers) { - options.headers = {}; + xhr.timer = setTimeout( + onTimeout.bind(undefined, xhr, options), + options.timeout * 1000, + ); + if (options.progress) { + xhr.onprogress = options.progress; + } + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + clearTimeout(xhr.timer); + onComplete(xhr, options); + } + }; } - if (options.contentType) { - options.headers["Content-Type"] = options.contentType; - } + function applyHeaders(xhr, options) { + if (!options.headers) { + options.headers = {}; + } - if ( - !options.headers["Content-Type"] && - options.data && - options.type !== "GET" - ) { - options.headers["Content-Type"] = "application/x-www-form-urlencoded"; - } + if (options.contentType) { + options.headers["Content-Type"] = options.contentType; + } - if (options.dataType) { - options.headers["Accept"] = - MIME_TYPES[options.dataType] || options.dataType; - } + if ( + !options.headers["Content-Type"] && + options.data && + options.type !== "GET" + ) { + options.headers["Content-Type"] = "application/x-www-form-urlencoded"; + } + + if (options.dataType) { + options.headers["Accept"] = + MIME_TYPES[options.dataType] || options.dataType; + } - for (var key in options.headers) { - var value = options.headers[key]; - xhr.setRequestHeader(key, value); + for (var key in options.headers) { + var value = options.headers[key]; + xhr.setRequestHeader(key, value); + } } -}; -var onComplete = function (xhr, options) { - if (200 <= xhr.status && xhr.status < 300) { - let response; - if ((response = parseResponse(xhr, options)) != null) { - onSuccess(response, xhr, options); + function onComplete(xhr, options) { + if (200 <= xhr.status && xhr.status < 300) { + let response; + if ((response = parseResponse(xhr, options)) != null) { + onSuccess(response, xhr, options); + } else { + onError("invalid", xhr, options); + } } else { - onError("invalid", xhr, options); + onError("error", xhr, options); } - } else { - onError("error", xhr, options); } -}; -var onSuccess = function (response, xhr, options) { - if (options.success != null) { - options.success.call(options.context, response, xhr, options); + function onSuccess(response, xhr, options) { + if (options.success != null) { + options.success.call(options.context, response, xhr, options); + } } -}; -var onError = function (type, xhr, options) { - if (options.error != null) { - options.error.call(options.context, type, xhr, options); + function onError(type, xhr, options) { + if (options.error != null) { + options.error.call(options.context, type, xhr, options); + } } -}; -var onTimeout = function (xhr, options) { - xhr.abort(); - onError("timeout", xhr, options); -}; + function onTimeout(xhr, options) { + xhr.abort(); + onError("timeout", xhr, options); + } -var abort = function (xhr) { - clearTimeout(xhr.timer); - xhr.onreadystatechange = null; - xhr.abort(); -}; + function abort(xhr) { + clearTimeout(xhr.timer); + xhr.onreadystatechange = null; + xhr.abort(); + } -var parseResponse = function (xhr, options) { - if (options.dataType === "json") { - return parseJSON(xhr.responseText); - } else { - return xhr.responseText; + function parseResponse(xhr, options) { + if (options.dataType === "json") { + return parseJSON(xhr.responseText); + } else { + return xhr.responseText; + } } -}; -var parseJSON = function (json) { - try { - return JSON.parse(json); - } catch (error) {} + function parseJSON(json) { + try { + return JSON.parse(json); + } catch (error) {} + } +} + +ajax.defaults = { + async: true, + dataType: "json", + timeout: 30, + type: "GET", + // contentType + // context + // data + // error + // headers + // progress + // success + // url };