{"version":3,"file":"Ajax-f112ab8f.js","names":["define","Moduler","create","defaults","event","url","data","headers","method","contentElement","loadOnInit","insertMode","loadingCssClass","formPoster","submitButton","selfPoster","init","self","this","document","querySelector","options","el","form","matches","getAttribute","addEventListener","e","preventDefault","utils","bind","sendRequest","isLoading","classList","add","formData","FormData","append","name","value","customData","key","Object","assign","opts","body","toLowerCase","indexOf","URLSearchParams","toString","fetch","then","response","remove","dispatchEvent","CustomEvent","status","text","has","get","innerHTML","loadModules"],"sources":["Ajax.js"],"mappings":"AAAAA,OAAO,CAAC,YAAY,SAAUC,GAC1B,aAEA,OAAOA,EAAQC,OAAO,CAClBC,SAAU,CACNC,MAAO,KACPC,IAAK,KACLC,KAAM,KACNC,QAAS,KACTC,OAAQ,MACRC,eAAgB,KAChBC,YAAY,EACZC,WAAY,UACZC,gBAAiB,aACjBC,YAAY,EACZC,aAAc,0CACdC,YAAY,GAGhBC,KAAM,WACF,IAAIC,EAAOC,KAEXD,EAAKR,eAAiBU,SAASC,cAAcH,EAAKI,QAAQZ,iBAAmBQ,EAAKK,GAE9EL,EAAKI,QAAQR,aACbI,EAAKM,KAAON,EAAKK,GAAGE,QAAQ,QAAUP,EAAKK,GAAKL,EAAKK,GAAGF,cAAc,QACtEH,EAAKH,aAAeG,EAAKM,KAAKH,cAAcH,EAAKI,QAAQP,cAGzDG,EAAKI,QAAQjB,MAAQ,SACrBa,EAAKI,QAAQhB,IAAMY,EAAKI,QAAQhB,KAAOY,EAAKM,KAAKE,aAAa,UAC9DR,EAAKI,QAAQb,OAASS,EAAKM,KAAKE,aAAa,WAAaR,EAAKI,QAAQb,OAGvES,EAAKM,KAAKG,iBAAiB,UAAU,SAAUC,GAC3CA,EAAEC,gBACN,KAGAX,EAAKI,QAAQjB,OACba,EAAKK,GAAGI,iBAAiBT,EAAKI,QAAQjB,MAAOH,EAAQ4B,MAAMC,KAAKb,EAAKc,YAAad,IAGlFA,EAAKI,QAAQX,YACbO,EAAKc,aAEb,EAEAA,YAAa,SAAUpB,GACnB,IAAIM,EAAOC,KAEXD,EAAKe,WAAY,EAEjBf,EAAKK,GAAGW,UAAUC,IAAIjB,EAAKI,QAAQT,iBAEnC,IAAIuB,EAAW,IAAIC,SAOnB,GANInB,EAAKI,QAAQR,WACbsB,EAAW,IAAIC,SAASnB,EAAKM,MACtBN,EAAKI,QAAQN,YACpBoB,EAASE,OAAOpB,EAAKK,GAAGgB,KAAMrB,EAAKK,GAAGiB,OAGtCtB,EAAKI,QAAQf,KAAM,CACnB,IAAIkC,EAAa,CAAC,EAElB,IAAK,IAAIC,KADTC,OAAOC,OAAOH,EAAYvB,EAAKI,QAAQf,MACvBkC,EACZL,EAASE,OAAOI,EAAKD,EAAWC,GAExC,CAEA,IAAIG,EAAO,CACPpC,OAAQS,EAAKI,QAAQb,OACrBqC,KAAMV,GAGkB,MAAxBlB,EAAKI,QAAQd,UACbqC,EAAKrC,QAAUU,EAAKI,QAAQd,SAGhC,IAAIF,EAAMY,EAAKI,QAAQhB,IAUvB,MAPyC,OAArCY,EAAKI,QAAQb,OAAOsC,gBACpBzC,EAAMA,GAAOA,EAAI0C,QAAQ,MAAQ,EAAI,IAAM,KAAO,IAAIC,gBAAgBb,GAAUc,WAChFL,EAAO,CACHpC,OAAQS,EAAKI,QAAQb,SAItB0C,MAAM7C,EAAKuC,GAAMO,MAAKC,IACzBnC,EAAKe,WAAY,EACjBf,EAAKK,GAAGW,UAAUoB,OAAOpC,EAAKI,QAAQT,iBACtCK,EAAKK,GAAGgC,cAAc,IAAIC,YAAY,gBACf,KAAnBH,EAASI,OACTvC,EAAKK,GAAGgC,cAAc,IAAIC,YAAY,eAEtCH,EAASK,OAAON,MAAK,SAAUM,GACvBL,EAAS7C,QAAQmD,IAAI,kBAAkF,IAA/DN,EAAS7C,QAAQoD,IAAI,gBAAgBZ,QAAQ,eACrD,YAA5B9B,EAAKI,QAAQV,WACbM,EAAKR,eAAemD,UAAYH,EACG,WAA5BxC,EAAKI,QAAQV,aACpBM,EAAKR,eAAemD,WAAaH,GAErCxD,EAAQ4D,YAAY5C,EAAKR,iBAE7BQ,EAAKK,GAAGgC,cAAc,IAAIC,YAAY,YAAa,CAAEH,SAAUK,IACnE,GACJ,GAER,GAER","sourcesContent":["define(['moduler'], function (Moduler) {\r\n 'use strict';\r\n\r\n return Moduler.create({\r\n defaults: {\r\n event: null,\r\n url: null,\r\n data: null, // extra data to send along the request to server\r\n headers: null,\r\n method: 'GET',\r\n contentElement: null,\r\n loadOnInit: false,\r\n insertMode: 'replace', // modes: [null|replace|append]. \r\n loadingCssClass: 'is-loading',\r\n formPoster: false,\r\n submitButton: 'input[type=submit], button[type=submit]',\r\n selfPoster: false // if formPoster not set send element data\r\n },\r\n\r\n init: function () {\r\n var self = this;\r\n\r\n self.contentElement = document.querySelector(self.options.contentElement) ?? self.el;\r\n\r\n if (self.options.formPoster) {\r\n self.form = self.el.matches('form') ? self.el : self.el.querySelector('form');\r\n self.submitButton = self.form.querySelector(self.options.submitButton);\r\n\r\n // set override options for formPoster\r\n self.options.event = 'submit';\r\n self.options.url = self.options.url || self.form.getAttribute('action');\r\n self.options.method = self.form.getAttribute('method') || self.options.method;\r\n\r\n // dont submit the actual form when acting as a form poster\r\n self.form.addEventListener('submit', function (e) {\r\n e.preventDefault();\r\n });\r\n }\r\n\r\n if (self.options.event) {\r\n self.el.addEventListener(self.options.event, Moduler.utils.bind(self.sendRequest, self));\r\n }\r\n\r\n if (self.options.loadOnInit) {\r\n self.sendRequest();\r\n }\r\n },\r\n\r\n sendRequest: function (insertMode) {\r\n var self = this;\r\n\r\n self.isLoading = true;\r\n\r\n self.el.classList.add(self.options.loadingCssClass);\r\n\r\n var formData = new FormData();\r\n if (self.options.formPoster) {\r\n formData = new FormData(self.form);\r\n } else if (self.options.selfPoster) {\r\n formData.append(self.el.name, self.el.value);\r\n }\r\n\r\n if (self.options.data) {\r\n var customData = {};\r\n Object.assign(customData, self.options.data);\r\n for (var key in customData) {\r\n formData.append(key, customData[key]);\r\n }\r\n }\r\n\r\n var opts = {\r\n method: self.options.method,\r\n body: formData\r\n };\r\n\r\n if (self.options.headers != null) {\r\n opts.headers = self.options.headers\r\n }\r\n\r\n var url = self.options.url;\r\n\r\n // send all as query params in get reuqests and skip the body, the body property is only for post requests\r\n if (self.options.method.toLowerCase() == 'get') {\r\n url = url + (url.indexOf('?') > -1 ? '&' : '?') + new URLSearchParams(formData).toString();\r\n opts = {\r\n method: self.options.method\r\n };\r\n }\r\n\r\n return fetch(url, opts).then(response => {\r\n self.isLoading = false;\r\n self.el.classList.remove(self.options.loadingCssClass);\r\n self.el.dispatchEvent(new CustomEvent('ajax-always'));\r\n if (response.status != 200) {\r\n self.el.dispatchEvent(new CustomEvent('ajax-error'));\r\n } else {\r\n response.text().then(function (text) {\r\n if (response.headers.has('content-type') && response.headers.get('content-type').indexOf('text/html') !== -1) {\r\n if (self.options.insertMode === 'replace') {\r\n self.contentElement.innerHTML = text;\r\n } else if (self.options.insertMode === 'append') {\r\n self.contentElement.innerHTML += text;\r\n }\r\n Moduler.loadModules(self.contentElement);\r\n }\r\n self.el.dispatchEvent(new CustomEvent('ajax-done', { response: text }));\r\n });\r\n }\r\n });\r\n }\r\n });\r\n});"]}