{"version":3,"sources":["jsdelivr-header.js","/npm/formjax@2.2.1/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OCNO,aAAc,kBACd,SAAU,iBACV,YAAa,iBACb,iBAAkB,sBAChB,GAAI,KAAM,SAAU,gBAAmB,YAEhD,MAAM,OAAS,CACb,MAAO,gBACP,QAAS,mBAGL,IAAM,CACV,SAAU,mBACV,MAAO,gBACP,QAAS,mBAGX,MAAM,gBAAgB,SACpB,OAAA,GACE,GAAwB,SAApB,KAAK,GAAG,QACV,MAAM,IAAI,MAAM,yCAGlB,KAAK,OAAS,KAAK,GAAG,aAAa,UAAU,cAC7C,KAAK,IAAM,KAAK,GAAG,aAAa,UAChC,KAAK,KAAO,QAAQ,KAAK,IACzB,KAAK,SAAU,EAEf,GAAG,KAAK,GAAI,UAAU,IACpB,KAAK,OAAO,KAAK,GAAI,EAAM,GAE/B,CAEA,YAAI,GACF,MAAO,CACL,SAAS,EACT,eAAe,EACf,YAAa,mCAEjB,CAEA,OAAA,CAAQ,GACF,OAAO,QAAQ,KAAK,QAAQ,cAC9B,GAEJ,CAEA,MAAA,CAAO,EAAI,GACT,EAAM,iBAEF,KAAK,QAAQ,QACf,KAAK,QAAQ,KAAK,SAAS,KAAK,OAEhC,KAAK,UAET,CAEA,QAAA,GACE,GAAI,KAAK,QACP,OAGF,YAAY,KAAK,GAAI,CAAC,IAAI,MAAO,IAAI,UACrC,SAAS,KAAK,GAAI,IAAI,UAEtB,KAAK,SAAU,EACf,MAAM,EAAO,CAAC,KAAK,IAAK,KAAK,QAE7B,GAAoB,QAAhB,KAAK,OAAkB,CACzB,IAAI,EAAM,KAAK,IACf,MAAM,EAAM,KAAK,KAAK,iBAGpB,EADE,EAAI,QAAQ,MAAQ,EAChB,GAAG,KAAO,IAEV,GAAG,KAAO,IAGlB,EAAK,GAAK,CACZ,MACE,EAAK,KAAK,KAAK,KAAK,WAGtB,KAAK,QAAQ,EACf,CAEA,OAAA,CAAQ,GACN,KAAK,WAAW,GAAM,CAAC,EAAK,KAC1B,IAAI,EAAY,GACZ,EAAY,GAGhB,GAFA,KAAK,SAAU,GAEV,GAAO,EAAK,WAAa,KAI5B,GAHA,EAAY,OAAO,QACnB,EAAY,IAAI,QAEZ,KAAK,QAAQ,cACf,QAAQ,cACH,GAAI,KAAK,QAAQ,QACtB,IACE,MAAM,EAAM,aAAa,KAAK,QAAQ,QAAS,EAAK,MACpD,QAAQ,KAAK,EACf,CAAE,MAAO,GACP,MAAM,EAAE,QACV,OAGF,EAAY,OAAO,MACnB,EAAY,IAAI,MAGZ,GAAQ,EAAK,MAAQ,EAAK,KAAK,SACjC,MAAM,EAAK,KAAK,SAIpB,YAAY,KAAK,GAAI,IAAI,UACzB,SAAS,KAAK,GAAI,GAElB,KAAK,KAAK,GAAI,EAAW,CACvB,SAAS,EACT,OAAQ,EAAO,EAAK,KAAO,MAC3B,GAEN,CAEA,aAAO,GACL,OAAO,SAAS,QAClB,CAEA,WAAO,CAAK,GACV,OAAO,SAAS,KAAO,CACzB,EAGF,SAAS,SAAS,UAAW,wBAEd","file":"/npm/formjax@2.2.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/formjax@2.2.1/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import Domodule from 'domodule';\nimport Ajax from 'bequest';\nimport formobj from 'formobj';\nimport tinytemplate from 'tinytemplate';\nimport { on, fire, addClass, removeClass } from 'domassist';\n\nconst Events = {\n  Error: 'formjax:error',\n  Success: 'formjax:success'\n};\n\nconst Css = {\n  Progress: 'formjax-progress',\n  Error: 'formjax-error',\n  Success: 'formjax-success'\n};\n\nclass Formjax extends Domodule {\n  preInit() {\n    if (this.el.tagName !== 'FORM') {\n      throw new Error('Formjax need to be attached to a form');\n    }\n\n    this.method = this.el.getAttribute('method').toUpperCase();\n    this.url = this.el.getAttribute('action');\n    this.form = formobj(this.el);\n    this.sending = false;\n\n    on(this.el, 'submit', event => {\n      this.submit(this.el, event);\n    });\n  }\n\n  get defaults() {\n    return {\n      confirm: false,\n      successReload: false,\n      confirmText: 'Are you sure you want to submit?'\n    };\n  }\n\n  confirm(sendForm) {\n    if (window.confirm(this.options.confirmText)) { // eslint-disable-line no-alert\n      sendForm();\n    }\n  }\n\n  submit(el, event) {\n    event.preventDefault();\n\n    if (this.options.confirm) {\n      this.confirm(this.sendForm.bind(this));\n    } else {\n      this.sendForm();\n    }\n  }\n\n  sendForm() {\n    if (this.sending) {\n      return;\n    }\n\n    removeClass(this.el, [Css.Error, Css.Success]);\n    addClass(this.el, Css.Progress);\n\n    this.sending = true;\n    const args = [this.url, this.method];\n\n    if (this.method === 'GET') {\n      let url = this.url;\n      const uri = this.form.getQueryString();\n\n      if (url.indexOf('?') > -1) {\n        url = `${url}&${uri}`;\n      } else {\n        url = `${url}?${uri}`;\n      }\n\n      args[0] = url;\n    } else {\n      args.push(this.form.getJSON());\n    }\n\n    this.request(args);\n  }\n\n  request(args) {\n    Ajax.request(...args, (err, resp) => {\n      let eventName = '';\n      let className = '';\n      this.sending = false;\n\n      if (!err && resp.statusCode < 400) {\n        eventName = Events.Success;\n        className = Css.Success;\n\n        if (this.options.successReload) {\n          Formjax.reload();\n        } else if (this.options.success) {\n          try {\n            const url = tinytemplate(this.options.success, resp.data);\n            Formjax.goTo(url);\n          } catch (e) {\n            alert(e.message); // eslint-disable-line no-alert\n          }\n        }\n      } else {\n        eventName = Events.Error;\n        className = Css.Error;\n\n        // CORS can lead to no response\n        if (resp && resp.data && resp.data.message) {\n          alert(resp.data.message); // eslint-disable-line no-alert\n        }\n      }\n\n      removeClass(this.el, Css.Progress);\n      addClass(this.el, className);\n\n      fire(this.el, eventName, {\n        bubbles: true,\n        detail: resp ? resp.data : null\n      });\n    });\n  }\n\n  static reload() {\n    window.location.reload();\n  }\n\n  static goTo(url) {\n    window.location.href = url;\n  }\n}\n\nDomodule.register('Formjax', Formjax);\n\nexport default Formjax;\n"]}