{"version":3,"file":"sections-donate.44d11c227d8142d5890a.js","mappings":"kKAGAA,EAAAA,EAAAA,QAAe,CACbC,QAAS,CAAE,mBAAoB,oBAGjC,SAAeD,EAAAA,EAAAA,KAASE,MAAMC,EAAAA,E,gDCL9B,MAAMC,EAAgB,KACpB,IAAIC,EAAS,EAEb,MAAMC,EAAaC,SAASC,cAAc,gBAM1C,OAJIF,IACFD,GAAUC,EAAWG,cAGhBJ,CAAM,EAiBf,EAdiB,SAACK,GAAiC,IAAzBC,EAAmB,UAAH,6CAAG,EAC3C,MAAMC,GAAgC,EAAnBR,IAEfM,EAAOG,QAAQC,eACjBH,EAAmBI,SAASL,EAAOG,QAAQC,eAG7C,IAAIT,EAASO,EAAaD,EAE1B,OAAO,IAAIK,SAASC,KAClBC,EAAAA,EAAAA,GAAKR,EAAQ,CAAES,SAAU,IAAKd,SAAQe,SAAUH,GAAU,GAE9D,C,2CC1B+CV,SAASc,gBAGtD,mBAAmBC,KAAKC,UAAUC,WAAqC,aAAvBD,UAAUC,UAA2BD,UAAUE,eAH1F,MAKMC,EAAY,SAACC,GAAwC,IAAlCC,EAAW,UAAH,6CAAG,CAAC,EAAGC,EAAS,UAAH,8CAC/CC,EAAOF,EAEX,GAAIA,aAAoBG,UAAa,EAAO,CAC1CD,EAAO,IAAIC,SAEX,IAAK,MAAOC,EAAKC,KAAUC,OAAOC,QAAQP,GACxCE,EAAKD,OAAOG,EAAKC,EAErB,CAEA,GAAoB,iBAATN,EAAmB,CAC5B,MAAMS,EAAU,IAAIC,IAAIV,GAExB,GAAIE,EAAQ,CACV,MAAMS,EAAeF,EAAQE,aAEvBC,EAAS,CAAC,EAEhB,IAAK,MAAOP,EAAKC,KAAUH,EAAM,CAC/B,MAAMU,EAAgBR,EAAIS,QAAQ,KAAM,IAEpCD,KAAiBD,EACnBA,EAAOC,GAAeE,KAAKT,GAE3BM,EAAOC,GAAiB,CAACP,EAE7B,CAEA,IAAK,MAAOD,EAAKC,KAAUC,OAAOC,QAAQI,GAAS,CACjD,MAAMI,EAASV,EAAMW,QAAQC,GAAMA,IAEb,IAAlBF,EAAOG,OACTR,EAAaS,OAAOf,GAEpBM,EAAaU,IAAIhB,EAAKW,EAAOM,KAAK,KAEtC,CAEA,OAAOb,CACT,CAAO,CACL,MAAMG,EAAS,IAAIW,gBAAgBpB,GAEnC,OAAO,IAAIO,IAAK,GAAEV,KAAQY,IAC5B,CACF,CAEA,GAAoB,iBAATZ,EAAmB,CAC5B,MAAMY,EAAS,IAAIW,gBAAgBtB,GAGnC,OAFY,IAAIS,IAAK,GAAEV,KAAQY,IAGjC,CACF,EAEaY,EAAwBC,IAC/BC,OAAOC,WACTD,OAAOC,UAAUZ,KAAKU,EACxB,C,oEC5DFG,EAAAA,WAAAA,cAAqC,SAASC,EAAGC,GAC/C,OAAIA,GACcA,EAAMC,iBAAiB,gCAE3BZ,OACH,KAIJ,oBACT,EAEA,MAAMa,EAAoBC,IACxB,GAAIA,EAAI,CACN,GAAIA,EAAGC,QAAQ,uBACb,OAAOD,EAAGC,QAAQ,uBAGpB,GAAID,EAAGC,QAAQ,eACb,OAAOD,EAAGC,QAAQ,eAGpB,GAAID,EAAGC,QAAQ,iBACb,OAAOD,EAAGC,QAAQ,iBAGpB,GAAID,EAAGC,QAAQ,UACb,OAAOD,EAAGC,QAAQ,SAEtB,GAGWC,EAAcC,IACzB,MAAMC,EAAeL,EAAiBI,EAAErD,QAExC,GAAIsD,EAAc,CAChBA,EAAaC,UAAUC,OAAO,aAE9B,MAAMC,EAAuBH,EAAaxD,cAAc,uBAEpD2D,GACFA,EAAqBD,QAEzB,CAEIH,EAAErD,OAAOuD,UAAUG,SAAS,cAC9BL,EAAErD,OAAOuD,UAAUC,OAAO,YAC5B,EA8GWG,EAAoBC,IAC/B,MAAMC,EA5GmBD,KACzB,MAAMC,EAAQ,CAAC,EAuGf,OArGAD,EACGZ,iBAAiB,sHACjBc,SAASC,IAER,GAAKd,EAAiBc,IAAmD,IAAzCd,EAAiBc,GAAOhE,cAAuBgE,EAAMC,aAAa,YAChG,OAGF,MAAMC,EAAYF,EAAM5D,QAAQ+D,KAAOH,EAAM5D,QAAQ+D,KAAOH,EAAMG,KAElEL,EAAMI,GAAa,CACjBE,SAAU,CACRC,YAAY,EACZC,QAAS,cAIM,UAAfN,EAAMO,OACRT,EAAME,EAAMG,MAAMK,OAAQ,EAC5B,IAGJX,EAAKZ,iBAAiB,aAAac,SAASC,IAEG,IAAzCd,EAAiBc,GAAOhE,cAAsBgE,EAAMS,WAIxDX,EAAME,EAAMG,MAAQ,CAClBO,OAAQ,CACNC,QAASX,EAAMC,aAAa,WAC5BK,QAAS,cAEZ,IAGHT,EAAKZ,iBAAiB,SAASc,SAASC,IAEO,IAAzCd,EAAiBc,GAAOhE,cAAsBgE,EAAMS,WAIxDX,EAAME,EAAMG,MAAQ,CAClB9B,OAAQ,CACNuC,QAAStE,SAAS0D,EAAMa,OAE3B,IAGHhB,EAAKZ,iBAAiB,iBAAiBc,SAASC,IAED,IAAzCd,EAAiBc,GAAOhE,cAAsBgE,EAAMS,WAIxDX,EAAME,EAAMG,MAAQ,CAClBW,SAAUd,EAAM5D,QAAQ2E,QACzB,IAGHlB,EAAKZ,iBAAiB,oCAAoCc,SAASC,IAEjE,KAAKd,EAAiBc,IAAmD,IAAzCd,EAAiBc,GAAOhE,cAAuBgE,EAAMS,WAIjFT,EAAMR,UAAUG,SAAS,aAAc,CACzC,MAAMqB,EAAQhB,EAAMjE,cAAc,qBAC5BkF,EAAWjB,EAAMjE,cAAc,wBAEjCiF,IACFlB,EAAMkB,EAAMb,MAAQ,CAClBC,SAAU,CACRE,QAAS,eAKXW,IACFnB,EAAMmB,EAASd,MAAQ,CACrBe,cAAeD,EAAS7B,QAAQ,eAGtC,KAGFS,EAAKZ,iBAAiB,wBAAwBc,SAASC,IAErD,GAAKd,EAAiBc,IAAmD,IAAzCd,EAAiBc,GAAOhE,cAAuBgE,EAAMS,SACnF,OAGF,MAAMQ,EAAWjB,EAAMjE,cAAc,wBAEjCkF,IACFnB,EAAMmB,EAASd,MAAQ,CACrBe,cAAeD,EAAS7B,QAAQ,yBAEpC,IAGKU,CAAK,EAIEqB,CAAWtB,GACnBuB,EAASC,EAASxB,EAAMC,GAE9B,QAAewB,IAAXF,EAAsB,CACxB,IAAK,MAAOjB,EAAMoB,KAAa9D,OAAOC,QAAQ0D,GAAS,CACrD,MAAMpB,EAAQH,EAAK9D,cAAe,UAASoE,OACrCZ,EAAeL,EAAiBc,GAGtC,GAAIT,EAAc,CAChB,MAAMG,EAAuBH,EAAaxD,cAAc,uBAEpD2D,GACFA,EAAqBD,SAGvB,MAAMa,EAAW,iEAEXiB,EAAS,iCAGfhC,EAAaiC,mBAAmB,YAAalB,GAC7Cf,EAAaC,UAAUiC,IAAI,YAC7B,CAEAzB,EAAMR,UAAUiC,IAAI,YACtB,CAEA,MAAMC,OAA2CJ,IAA5BzB,EAAKzD,QAAQuF,WAE5BC,EAAa/B,EAAK9D,cAAc,cAUtC,OARI2F,GAAgBE,IAClBC,EAAAA,EAAAA,GAASD,EAAY,KAAK,KACxBE,YAAW,KACTF,EAAW7F,cAAc,UAAY6F,EAAW7F,cAAc,SAASgG,OAAO,GAC7E,EAAE,KAIF,CACT,CAEA,OAAO,CAAI,EAGAV,EAAWvC,C,sECzMxB,MAAMkD,EAAUlG,SAASC,cAAc,wBACjC8D,EAAO/D,SAASC,cAAc,gBAC9BkG,EAAepC,EAAK9D,cAAc,iBAClCmG,EAAarC,EAAK9D,cAAc,gBAChCoG,EAActC,EAAK9D,cAAc,iBACjCqG,EAAcvC,EAAK9D,cAAc,iBACjCsG,EAAcxC,EAAK9D,cAAc,sBACjCuG,EAAezC,EAAK9D,cAAc,oBAClCwG,EAAczG,SAAS0G,eAAe,gBAEtCC,EAAkB,CACtBC,OAAQ,OACRC,QAAS,QACTC,SAAU,QAGNC,EAAQ,CACZC,OAAQ,KACRC,WAAY,KACZC,KAAM,SACNC,UAAWpD,EAAK9D,cAAc,mCAAmCyB,MACjE0F,mBAAoBrD,EAAK9D,cAAc,qCAAqCyB,MAC5E2F,eAAgB,MAGZC,EAAS,KAOb,GANmB,WAAfP,EAAMG,OACRd,EAAW1C,UAAUiC,IAAI,aACzBU,EAAY3C,UAAUC,OAAO,aAC7B2C,EAAY5C,UAAUC,OAAO,cAGZ,YAAfoD,EAAMG,KAAoB,CAC5Bd,EAAW1C,UAAUC,OAAO,aAC5B0C,EAAY3C,UAAUiC,IAAI,aAC1BW,EAAY5C,UAAUC,OAAO,aAE7B,IAAI4D,EAAW,KAAIhB,EAAY7E,WAEP,cAApBqF,EAAMI,YACRI,EAAW,GAAEA,WAAiBZ,EAAgBI,EAAMK,uBAGtDZ,EAAa9E,MAAQ6F,CACvB,CAEmB,YAAfR,EAAMG,OACRd,EAAW1C,UAAUC,OAAO,aAC5B0C,EAAY3C,UAAUC,OAAO,aAC7B2C,EAAY5C,UAAUiC,IAAI,eAG5BI,EAAAA,EAAAA,GAASG,EAAQ,EAqKbsB,EAAsBC,IAC1B,MAAMC,EAAc1H,SAAS2H,cAAc,SAC3CD,EAAYE,aAAa,OAAQ,UACjCF,EAAYE,aAAa,OAAQ,eACjCF,EAAYE,aAAa,QAASH,EAAMI,IACxC9D,EAAK+D,YAAYJ,GAEjB,MAAMK,EAAehE,EAAK9D,cAAc,kBAClCkG,EAAepC,EAAK9D,cAAc,iBACxC,IAAI+H,GAAkBjE,EAAKzD,QAAQ0H,iBAAmD,SAAjCjE,EAAKzD,QAAQ0H,gBAElE,MAAM3G,EAAW,IAAIG,SAASuC,GAE9BkE,EAAAA,EAAAA,IACOlE,EAAKmE,QACTC,KAAK9G,GACL+G,OACAC,MAAMC,IACDA,EAAIC,UACFD,EAAIE,IACNF,EAAIE,GAAGvE,SAASpB,IAAUD,EAAAA,EAAAA,IAAqBC,KAGjDkB,EAAK0E,QACL1E,EAAKZ,iBAAiB,UAAUc,SAAS3B,GAAOA,EAAEZ,MAAQ,OAC1DqC,EAAKZ,iBAAiB,kBAAkBc,SAAS3B,GAAMA,EAAEoB,UAAUiC,IAAI,YACvE5B,EAAKZ,iBAAiB,iBAAiBc,SAAS3B,GAAMA,EAAEoB,UAAUiC,IAAI,YAElE5B,EAAKzD,QAAQoI,gBACf3E,EAAKZ,iBAAiB,iBAAiBc,SAAS3B,GAAMA,EAAEoB,UAAUiC,IAAI,YACtE3F,SAASmD,iBAAiB,wBAAwBc,SAAS3B,GAAMA,EAAEoB,UAAUiC,IAAI,eACjFqC,GAAkB,OAE+BxC,IAA5BzB,EAAKzD,QAAQuF,aAGhCE,EAAAA,EAAAA,GAAShC,EAAM,KAKjBuE,EAAI9D,SACNmE,EAAiBZ,EAAcO,EAAI9D,QAAS8D,EAAIC,QAASP,EAC3D,IAEDY,OAAM,KACLzC,EAAa0C,UAAW,EACxB1C,EAAazC,UAAUC,OAAO,UAC9BgF,EAAiBZ,EAAc,kDAAkD,IAElFe,SAAQ,KACP3C,EAAa0C,UAAW,EACxB1C,EAAazC,UAAUC,OAAO,SAAS,GACvC,EAGAoF,EAAuB,KAEzB,MAAMhB,EAAehE,EAAK9D,cAAc,kBAClCkG,EAAepC,EAAK9D,cAAc,iBACxC,IAAI+H,GAAkBjE,EAAKzD,QAAQ0H,iBAAmD,SAAjCjE,EAAKzD,QAAQ0H,gBAElE,MAAM3G,EAAW,IAAIG,SAASuC,GAE9BkE,EAAAA,EAAAA,IACOlE,EAAKmE,QACTC,KAAK9G,GACL+G,OACAC,MAAMC,IACDA,EAAIC,UACFD,EAAIE,IACNF,EAAIE,GAAGvE,SAASpB,IAAUD,EAAAA,EAAAA,IAAqBC,KAGjDkB,EAAK0E,QACL1E,EAAKZ,iBAAiB,UAAUc,SAAS3B,GAAOA,EAAEZ,MAAQ,OAC1DqC,EAAKZ,iBAAiB,kBAAkBc,SAAS3B,GAAMA,EAAEoB,UAAUiC,IAAI,YACvE5B,EAAKZ,iBAAiB,iBAAiBc,SAAS3B,GAAMA,EAAEoB,UAAUiC,IAAI,YAElE5B,EAAKzD,QAAQoI,gBACf3E,EAAKZ,iBAAiB,iBAAiBc,SAAS3B,GAAMA,EAAEoB,UAAUiC,IAAI,YACtE3F,SAASmD,iBAAiB,wBAAwBc,SAAS3B,GAAMA,EAAEoB,UAAUiC,IAAI,eACjFqC,GAAkB,OAE+BxC,IAA5BzB,EAAKzD,QAAQuF,aAGhCE,EAAAA,EAAAA,GAAShC,EAAM,KAKjBuE,EAAI9D,SACNmE,EAAiBZ,EAAcO,EAAI9D,QAAS8D,EAAIC,QAASP,EAC3D,IAEDY,OAAM,KACLzC,EAAa0C,UAAW,EACxB1C,EAAazC,UAAUC,OAAO,UAC9BgF,EAAiBZ,EAAc,kDAAkD,IAElFe,SAAQ,KACP3C,EAAa0C,UAAW,EACxB1C,EAAazC,UAAUC,OAAO,SAAS,GACvC,EAGFgF,EAAmB,CAACK,EAAQxE,EAAS+D,EAASU,KAClDD,EAAOE,MAAMC,QAAU,QACvBH,EAAOI,UAAY5E,EAEf+D,EACFS,EAAOtF,UAAUC,OAAO,sBAExBqF,EAAOtF,UAAUiC,IAAI,sBAGnBsD,GACFjD,YAAW,KACTgD,EAAOE,MAAMC,QAAU,MAAM,GAC5B,IACL,GAoCAE,EAAAA,EAAAA,IAAG,QAAS,oBAAqB7F,IAC/B,MAAM8F,EAAS9F,EAAErD,OAAOG,QAAQoB,MAE1B6H,EAAc,IAAIC,YAAY,cAAe,CAAEC,OAAQH,IAE7D/C,EAAYmD,cAAcH,EAAY,KAGxCF,EAAAA,EAAAA,IAAG,QAAS,2BAA4B7F,IAClCA,EAAErD,OAAOwJ,UACX5C,EAAMI,UAAY3D,EAAErD,OAAOuB,MAC7B,KAGF2H,EAAAA,EAAAA,IAAG,SAAU,qCAAsC7F,IACjDuD,EAAMK,mBAAqB5D,EAAErD,OAAOuB,KAAK,KAG3C2H,EAAAA,EAAAA,IAAG,QAAS,yBAAyB,MACnBvF,EAAAA,EAAAA,IAAiBC,KAI/BgD,EAAMG,KAAO,UAEbI,IACF,KAGF+B,EAAAA,EAAAA,IAAG,QAAS,wBAAwB,KAClCtC,EAAMG,KAAO,SACbI,GAAQ,KAGV+B,EAAAA,EAAAA,IAAG,QAAS,yBAAyB,MACnBvF,EAAAA,EAAAA,IAAiBC,KAI/BgD,EAAMG,KAAO,UA5VG,MAElB,IAAI0C,EAAiB,EACI,IAArBrD,EAAY7E,QACZkI,EAAiBrD,EAAY7E,MAC7BkI,EAAkE,IAAjDC,WAAWD,EAAeE,WAAW,IAAK,MAG/D,MAAMzC,EAAiBN,EAAMC,OAAOK,eAAe,CACjD0C,QAAS,KACTC,SAAU,MACVC,MAAO,CACLC,MAAO,YACPZ,OAAQM,GAEVO,kBAAkB,EAClBC,mBAAmB,EACnBC,mBAAmB,IAGfC,EAAuBvD,EAAMC,OAAOuD,WAAWC,OAAO,uBAAwB,CAClFnD,eAAgBA,EAChB6B,MAAO,CACLoB,qBAAsB,CACpBG,OAAQ,WAMdpD,EAAeqD,iBAAiBC,MAAK,SAASrF,GACxCA,GAAUA,EAAOsF,SACf5K,SAAS0G,eAAe,4BACxB4D,EAAqBO,MAAM,2BAC3B9D,EAAMM,eAAiBA,GAKvBrH,SAAS0G,eAAe,4BACxB1G,SAAS0G,eAAe,0BAA0BwC,MAAMC,QAAU,OAG1E,IAEA9B,EAAegC,GAAG,SAAU7F,IAC1B,MAAMkE,EAAc1H,SAAS2H,cAAc,SAC3CD,EAAYE,aAAa,OAAQ,UACjCF,EAAYE,aAAa,OAAQ,uBACjCF,EAAYE,aAAa,QAASpE,EAAEiE,MAAMI,IAC1C9D,EAAK+D,YAAYJ,GAEjB3D,EAAK+G,aAAc,EACnB3E,EAAa0C,UAAW,EACxB1C,EAAazC,UAAUC,OAAO,UAC9BwC,EAAa4E,QACb5E,EAAa0C,UAAW,EACxB1C,EAAazC,UAAUiC,IAAI,SAAS,GACpC,EAoSAqF,GAhSiB,MAEnB,IAAIpB,EAAiB,EACI,IAArBrD,EAAY7E,QACZkI,EAAiBrD,EAAY7E,MAC7BkI,EAAkE,IAAjDC,WAAWD,EAAeE,WAAW,IAAK,MAG/D,MAAMzC,EAAiBN,EAAMC,OAAOK,eAAe,CACjD0C,QAAS,KACTC,SAAU,MACVC,MAAO,CACLC,MAAO,YACPZ,OAAQM,GAEVO,kBAAkB,EAClBC,mBAAmB,EACnBC,mBAAmB,IAGfC,EAAuBvD,EAAMC,OAAOuD,WAAWC,OAAO,uBAAwB,CAClFnD,eAAgBA,EAChB6B,MAAO,CACLoB,qBAAsB,CACpBG,OAAQ,WAMdpD,EAAeqD,iBAAiBC,MAAK,SAASrF,GACxCA,GAAUA,EAAO2F,UACfjL,SAAS0G,eAAe,mCACxB4D,EAAqBO,MAAM,kCAC3B9D,EAAMM,eAAiBA,GAKvBrH,SAAS0G,eAAe,mCACxB1G,SAAS0G,eAAe,iCAAiCwC,MAAMC,QAAU,OAGjF,IAEA9B,EAAegC,GAAG,SAAU7F,IAC1B,MAAMkE,EAAc1H,SAAS2H,cAAc,SAC3CD,EAAYE,aAAa,OAAQ,UACjCF,EAAYE,aAAa,OAAQ,wBACjCF,EAAYE,aAAa,QAASpE,EAAEiE,MAAMI,IAC1C9D,EAAK+D,YAAYJ,GAEjB3D,EAAK+G,aAAc,EACnB3E,EAAa0C,UAAW,EACxB1C,EAAazC,UAAUC,OAAO,UAC9BwC,EAAa4E,QACb5E,EAAa0C,UAAW,EACxB1C,EAAazC,UAAUiC,IAAI,SAAS,GACpC,EAuOAuF,GAEA5D,IACF,IA3WEb,IACFM,EAAMC,OAASlE,OAAOqI,OAAOpH,EAAKzD,QAAQ8K,cA4RtB,MACtB,MAeMC,EAAOtE,EAAMC,OAAOuD,WAAWC,OAAO,OAAQ,CAAEtB,MAfxC,CACZ9H,KAAM,CACJkK,SAAU,OACVC,WAAY,0BACZC,MAAO,UACPC,cAAe,cACf,gBAAiB,CACfD,MAAO,YAGXE,QAAS,CACPF,MAAO,cAMXH,EAAKR,MAAM,iBACX9D,EAAME,WAAaoE,EAEnBA,EAAKM,iBAAiB,UAAU,IAAe,IAAd,MAAEC,GAAO,EACnB5L,SAAS0G,eAAe,eAG9BmF,YADXD,EACyBA,EAAMpH,QAEN,EAC7B,GACA,EAvTAsH,GAEA/H,EAAK4H,iBAAiB,UA+HLI,UAEfvI,EAAErD,OAAO2K,aACX/B,IAGFvF,EAAEwI,iBAEF,MAAMjI,EAAOP,EAAErD,OACTgG,EAAepC,EAAK9D,cAAc,iBAGxC,IAFgB6D,EAAAA,EAAAA,IAAiBC,GAEpB,CACXoC,EAAa0C,UAAW,EACxB1C,EAAazC,UAAUiC,IAAI,UAE3B,MAAML,QAAeyB,EAAMC,OAAOiF,YAAYlF,EAAME,YAEhD3B,EAAOsG,OACY5L,SAAS0G,eAAe,eAChCmF,YAAcvG,EAAOsG,MAAMpH,QACxC2B,EAAa0C,UAAW,EACxB1C,EAAazC,UAAUC,OAAO,WAE9B6D,EAAmBlC,EAAOmC,MAE9B,K","sources":["webpack://kelberman.org/./themes/app/src/scripts/common/ajax.js","webpack://kelberman.org/./themes/app/src/scripts/common/scroll-to.js","webpack://kelberman.org/./themes/app/src/scripts/common/util.js","webpack://kelberman.org/./themes/app/src/scripts/common/validation.js","webpack://kelberman.org/./themes/app/src/sections/donate.js"],"sourcesContent":["import wretch from 'wretch'\nimport QueryStringAddon from 'wretch/addons/queryString'\n\nwretch.options({\n headers: { 'X-Requested-With': 'XMLHttpRequest' },\n})\n\nexport default wretch().addon(QueryStringAddon)\n","import jump from 'jump.js'\n\nconst getPageOffset = () => {\n let offset = 0\n\n const siteHeader = document.querySelector('.site-header')\n\n if (siteHeader) {\n offset += siteHeader.offsetHeight\n }\n\n return offset\n}\n\nconst scrollTo = (target, additionalOffset = 0) => {\n const pageOffset = getPageOffset() * -1\n\n if (target.dataset.scrollOffset) {\n additionalOffset = parseInt(target.dataset.scrollOffset)\n }\n\n let offset = pageOffset - additionalOffset\n\n return new Promise((resolve) => {\n jump(target, { duration: 600, offset, callback: resolve })\n })\n}\n\nexport default scrollTo\n","export const isTouchDevice = 'ontouchstart' in document.documentElement\n\nexport const isIos =\n /iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)\n\nexport const createUrl = (base, formData = {}, append = false) => {\n let data = formData\n\n if (formData instanceof FormData === false) {\n data = new FormData()\n\n for (const [key, value] of Object.entries(formData)) {\n data.append(key, value)\n }\n }\n\n if (typeof base === 'object') {\n const baseUrl = new URL(base)\n\n if (append) {\n const searchParams = baseUrl.searchParams\n\n const params = {}\n\n for (const [key, value] of data) {\n const normalizedKey = key.replace('[]', '')\n\n if (normalizedKey in params) {\n params[normalizedKey].push(value)\n } else {\n params[normalizedKey] = [value]\n }\n }\n\n for (const [key, value] of Object.entries(params)) {\n const _value = value.filter((x) => x)\n\n if (_value.length === 0) {\n searchParams.delete(key)\n } else {\n searchParams.set(key, _value.join(','))\n }\n }\n\n return baseUrl\n } else {\n const params = new URLSearchParams(data)\n\n return new URL(`${base}?${params}`)\n }\n }\n\n if (typeof base === 'string') {\n const params = new URLSearchParams(formData)\n const url = new URL(`${base}?${params}`)\n\n return url\n }\n}\n\nexport const trackGoogleAnalytics = (event) => {\n if (window.dataLayer) {\n window.dataLayer.push(event)\n }\n}\n","import * as validator from 'validate.js'\nimport scrollTo from '@common/scroll-to'\n\nvalidator.validators.checkboxGroup = function(_, group) {\n if (group) {\n const checked = group.querySelectorAll('input[type=checkbox]:checked')\n\n if (checked.length) {\n return null\n }\n }\n\n return '^Please select one'\n}\n\nconst findFieldWrapper = (el) => {\n if (el) {\n if (el.closest('.form-field-wrapper')) {\n return el.closest('.form-field-wrapper')\n }\n\n if (el.closest('.form-field')) {\n return el.closest('.form-field')\n }\n\n if (el.closest('.middleColumn')) {\n return el.closest('.middleColumn')\n }\n\n if (el.closest('.field')) {\n return el.closest('.field')\n }\n }\n}\n\nexport const handleBlur = (e) => {\n const fieldWrapper = findFieldWrapper(e.target)\n\n if (fieldWrapper) {\n fieldWrapper.classList.remove('has-error')\n\n const existingErrorMessage = fieldWrapper.querySelector('.form-field-message')\n\n if (existingErrorMessage) {\n existingErrorMessage.remove()\n }\n }\n\n if (e.target.classList.contains('has-error')) {\n e.target.classList.remove('has-error')\n }\n}\n\nexport const buildRules = (form) => {\n const rules = {}\n\n form\n .querySelectorAll('[required], input.required-if, textarea.required-if, .js-dropdown.required-if select, .optionset.required-if input')\n .forEach((field) => {\n // Ignore hidden fields\n if ((findFieldWrapper(field) && findFieldWrapper(field).offsetHeight === 0) || field.getAttribute('readonly')) {\n return\n }\n\n const fieldName = field.dataset.name ? field.dataset.name : field.name\n\n rules[fieldName] = {\n presence: {\n allowEmpty: false,\n message: '^Required',\n },\n }\n\n if (field.type === 'email') {\n rules[field.name].email = true\n }\n })\n\n form.querySelectorAll('[pattern]').forEach((field) => {\n // Ignore hidden fields\n if (findFieldWrapper(field).offsetHeight === 0 || field.readonly) {\n return\n }\n\n rules[field.name] = {\n format: {\n pattern: field.getAttribute('pattern'),\n message: '^Required',\n },\n }\n })\n\n form.querySelectorAll('[min]').forEach((field) => {\n // Ignore hidden fields\n if (findFieldWrapper(field).offsetHeight === 0 || field.readonly) {\n return\n }\n\n rules[field.name] = {\n length: {\n minimum: parseInt(field.min),\n },\n }\n })\n\n form.querySelectorAll('[data-equals]').forEach((field) => {\n // Ignore hidden fields\n if (findFieldWrapper(field).offsetHeight === 0 || field.readonly) {\n return\n }\n\n rules[field.name] = {\n equality: field.dataset.equals,\n }\n })\n\n form.querySelectorAll('[aria-required], [data-required]').forEach((field) => {\n // Ignore hidden fields\n if ((findFieldWrapper(field) && findFieldWrapper(field).offsetHeight === 0) || field.readonly) {\n return\n }\n\n if (field.classList.contains('optionset')) {\n const radio = field.querySelector('input[type=radio]')\n const checkbox = field.querySelector('input[type=checkbox]')\n\n if (radio) {\n rules[radio.name] = {\n presence: {\n message: '^Required',\n },\n }\n }\n\n if (checkbox) {\n rules[checkbox.name] = {\n checkboxGroup: checkbox.closest('.optionset'),\n }\n }\n }\n })\n\n form.querySelectorAll('.requiredcheckboxset').forEach((field) => {\n // Ignore hidden fields\n if ((findFieldWrapper(field) && findFieldWrapper(field).offsetHeight === 0) || field.readonly) {\n return\n }\n\n const checkbox = field.querySelector('input[type=checkbox]')\n\n if (checkbox) {\n rules[checkbox.name] = {\n checkboxGroup: checkbox.closest('.requiredcheckboxset'),\n }\n }\n })\n\n return rules\n}\n\nexport const handleValidation = (form) => {\n const rules = buildRules(form)\n const result = validate(form, rules)\n\n if (result !== undefined) {\n for (const [name, messages] of Object.entries(result)) {\n const field = form.querySelector(`[name=\"${name}\"]`)\n const fieldWrapper = findFieldWrapper(field)\n\n // Place error message\n if (fieldWrapper) {\n const existingErrorMessage = fieldWrapper.querySelector('.form-field-message')\n\n if (existingErrorMessage) {\n existingErrorMessage.remove()\n }\n\n const message = `\n
\n `\n fieldWrapper.insertAdjacentHTML('beforeend', message)\n fieldWrapper.classList.add('has-error')\n }\n\n field.classList.add('has-error')\n }\n\n const shouldScroll = form.dataset.formScroll !== undefined\n\n const firstError = form.querySelector('.has-error')\n\n if (shouldScroll && firstError) {\n scrollTo(firstError, 150, () => {\n setTimeout(() => {\n firstError.querySelector('input') && firstError.querySelector('input').focus()\n }, 0)\n })\n }\n\n return false\n }\n\n return true\n}\n\nexport const validate = validator\n","import { on } from 'delegated-events'\nimport { handleValidation } from '@common/validation'\nimport ajax from '@common/ajax'\nimport scrollTo from '@common/scroll-to'\nimport { trackGoogleAnalytics } from '@common/util'\n\nconst wrapper = document.querySelector('.donate-form-wrapper')\nconst form = document.querySelector('.donate-form')\nconst submitButton = form.querySelector('[type=submit]')\nconst amountView = form.querySelector('.amount-view')\nconst detailsView = form.querySelector('.details-view')\nconst paymentView = form.querySelector('.payment-view')\nconst amountField = form.querySelector('input[name=Amount]')\nconst summaryField = form.querySelector('.payment-summary')\nconst cardElement = document.getElementById('card-element')\n\nconst recurringLabels = {\n weekly: 'week',\n monthly: 'month',\n annually: 'year',\n}\n\nconst state = {\n stripe: null,\n stripeCard: null,\n view: 'amount',\n frequency: form.querySelector('input[name=\"Frequency\"]:checked').value,\n recurringFrequency: form.querySelector('select[name=\"RecurringFrequency\"]').value,\n paymentRequest: null\n}\n\nconst render = () => {\n if (state.view === 'amount') {\n amountView.classList.add('is-active')\n detailsView.classList.remove('is-active')\n paymentView.classList.remove('is-active')\n }\n\n if (state.view === 'details') {\n amountView.classList.remove('is-active')\n detailsView.classList.add('is-active')\n paymentView.classList.remove('is-active')\n\n let summary = `$ ${amountField.value}.00`\n\n if (state.frequency === 'Recurring') {\n summary = `${summary} every ${recurringLabels[state.recurringFrequency]}`\n }\n\n summaryField.value = summary\n }\n\n if (state.view === 'payment') {\n amountView.classList.remove('is-active')\n detailsView.classList.remove('is-active')\n paymentView.classList.add('is-active')\n }\n\n scrollTo(wrapper)\n}\n\nconst setupPayment = () => {\n if (cardElement) {\n state.stripe = window.Stripe(form.dataset.stripePubKey)\n\n setupStripeCard()\n\n form.addEventListener('submit', handleSubmit)\n }\n}\n\nconst setupApplePay = () => {\n\n let donationAmount = 0\n if (amountField.value != '') {\n donationAmount = amountField.value\n donationAmount = parseFloat(donationAmount.replaceAll(',', '')) * 100\n }\n\n const paymentRequest = state.stripe.paymentRequest({\n country: 'US',\n currency: 'usd',\n total: {\n label: 'Kelberman',\n amount: donationAmount\n },\n requestPayerName: true,\n requestPayerEmail: true,\n requestPayerPhone: true\n })\n\n const paymentRequestButton = state.stripe.elements().create('paymentRequestButton', {\n paymentRequest: paymentRequest,\n style: {\n paymentRequestButton: {\n height: '55px'\n }\n }\n })\n\n // Check the availability of the Payment Request API first\n paymentRequest.canMakePayment().then(function(result) {\n if (result && result.applePay) {\n if (document.getElementById('payment-request-button')){\n paymentRequestButton.mount('#payment-request-button');\n state.paymentRequest = paymentRequest\n }\n\n //$form.classList.add('has-thirdparty')\n } else {\n if (document.getElementById('payment-request-button')){\n document.getElementById('payment-request-button').style.display = 'none';\n }\n }\n })\n\n paymentRequest.on('token', (e) => {\n const hiddenInput = document.createElement('input')\n hiddenInput.setAttribute('type', 'hidden')\n hiddenInput.setAttribute('name', 'stripeApplePayToken')\n hiddenInput.setAttribute('value', e.token.id)\n form.appendChild(hiddenInput)\n\n form.forceSubmit = true\n submitButton.disabled = false\n submitButton.classList.remove('hidden')\n submitButton.click()\n submitButton.disabled = true\n submitButton.classList.add('hidden')\n })\n}\n\n\nconst setupGooglePay = () => {\n\n let donationAmount = 0\n if (amountField.value != '') {\n donationAmount = amountField.value\n donationAmount = parseFloat(donationAmount.replaceAll(',', '')) * 100\n }\n\n const paymentRequest = state.stripe.paymentRequest({\n country: 'US',\n currency: 'usd',\n total: {\n label: 'Kelberman',\n amount: donationAmount\n },\n requestPayerName: true,\n requestPayerEmail: true,\n requestPayerPhone: true\n })\n\n const paymentRequestButton = state.stripe.elements().create('paymentRequestButton', {\n paymentRequest: paymentRequest,\n style: {\n paymentRequestButton: {\n height: '55px'\n }\n }\n })\n\n // Check the availability of the Payment Request API first\n paymentRequest.canMakePayment().then(function(result) {\n if (result && result.googlePay) {\n if (document.getElementById('google-payment-request-button')){\n paymentRequestButton.mount('#google-payment-request-button');\n state.paymentRequest = paymentRequest\n }\n\n //$form.classList.add('has-thirdparty')\n } else {\n if (document.getElementById('google-payment-request-button')){\n document.getElementById('google-payment-request-button').style.display = 'none';\n }\n }\n })\n\n paymentRequest.on('token', (e) => {\n const hiddenInput = document.createElement('input')\n hiddenInput.setAttribute('type', 'hidden')\n hiddenInput.setAttribute('name', 'stripeGooglePayToken')\n hiddenInput.setAttribute('value', e.token.id)\n form.appendChild(hiddenInput)\n\n form.forceSubmit = true\n submitButton.disabled = false\n submitButton.classList.remove('hidden')\n submitButton.click()\n submitButton.disabled = true\n submitButton.classList.add('hidden')\n })\n}\n\nconst handleSubmit = async (e) => {\n\n if (e.target.forceSubmit) {\n submitAppleGooglePay()\n }\n\n e.preventDefault()\n\n const form = e.target\n const submitButton = form.querySelector('[type=submit]')\n const isValid = handleValidation(form)\n\n if (isValid) {\n submitButton.disabled = true\n submitButton.classList.add('hidden')\n\n const result = await state.stripe.createToken(state.stripeCard)\n\n if (result.error) {\n const errorElement = document.getElementById('card-errors')\n errorElement.textContent = result.error.message\n submitButton.disabled = false\n submitButton.classList.remove('hidden')\n } else {\n stripeTokenHandler(result.token)\n }\n }\n}\n\nconst stripeTokenHandler = (token) => {\n const hiddenInput = document.createElement('input')\n hiddenInput.setAttribute('type', 'hidden')\n hiddenInput.setAttribute('name', 'stripeToken')\n hiddenInput.setAttribute('value', token.id)\n form.appendChild(hiddenInput)\n\n const formMessages = form.querySelector('.form-messages')\n const submitButton = form.querySelector('[type=submit]')\n let autoHideMessage = form.dataset.autoHideMessage ? form.dataset.autoHideMessage === 'true' : true\n\n const formData = new FormData(form)\n\n ajax\n .url(form.action)\n .body(formData)\n .post()\n .json((res) => {\n if (res.success) {\n if (res.ga) {\n res.ga.forEach((event) => trackGoogleAnalytics(event))\n }\n\n form.reset()\n form.querySelectorAll('select').forEach((x) => (x.value = null))\n form.querySelectorAll('.toggle-fields').forEach((x) => x.classList.add('hidden'))\n form.querySelectorAll('.toggle-group').forEach((x) => x.classList.add('hidden'))\n\n if (form.dataset.hideOnSubmit) {\n form.querySelectorAll('.form-content').forEach((x) => x.classList.add('hidden'))\n document.querySelectorAll('.hide-on-form-submit').forEach((x) => x.classList.add('invisible'))\n autoHideMessage = false\n\n const shouldScroll = form.dataset.formScroll !== undefined\n\n if (shouldScroll) {\n scrollTo(form, 32)\n }\n }\n }\n\n if (res.message) {\n showFormMessages(formMessages, res.message, res.success, autoHideMessage)\n }\n })\n .catch(() => {\n submitButton.disabled = false\n submitButton.classList.remove('hidden')\n showFormMessages(formMessages, 'Sorry, there was a problem with your submission')\n })\n .finally(() => {\n submitButton.disabled = false\n submitButton.classList.remove('hidden')\n })\n}\n\nconst submitAppleGooglePay = () => {\n\n const formMessages = form.querySelector('.form-messages')\n const submitButton = form.querySelector('[type=submit]')\n let autoHideMessage = form.dataset.autoHideMessage ? form.dataset.autoHideMessage === 'true' : true\n\n const formData = new FormData(form)\n\n ajax\n .url(form.action)\n .body(formData)\n .post()\n .json((res) => {\n if (res.success) {\n if (res.ga) {\n res.ga.forEach((event) => trackGoogleAnalytics(event))\n }\n\n form.reset()\n form.querySelectorAll('select').forEach((x) => (x.value = null))\n form.querySelectorAll('.toggle-fields').forEach((x) => x.classList.add('hidden'))\n form.querySelectorAll('.toggle-group').forEach((x) => x.classList.add('hidden'))\n\n if (form.dataset.hideOnSubmit) {\n form.querySelectorAll('.form-content').forEach((x) => x.classList.add('hidden'))\n document.querySelectorAll('.hide-on-form-submit').forEach((x) => x.classList.add('invisible'))\n autoHideMessage = false\n\n const shouldScroll = form.dataset.formScroll !== undefined\n\n if (shouldScroll) {\n scrollTo(form, 32)\n }\n }\n }\n\n if (res.message) {\n showFormMessages(formMessages, res.message, res.success, autoHideMessage)\n }\n })\n .catch(() => {\n submitButton.disabled = false\n submitButton.classList.remove('hidden')\n showFormMessages(formMessages, 'Sorry, there was a problem with your submission')\n })\n .finally(() => {\n submitButton.disabled = false\n submitButton.classList.remove('hidden')\n })\n }\n\nconst showFormMessages = (holder, message, success, autoHide) => {\n holder.style.display = 'block'\n holder.innerHTML = message\n\n if (success) {\n holder.classList.remove('form-message-error')\n } else {\n holder.classList.add('form-message-error')\n }\n\n if (autoHide) {\n setTimeout(() => {\n holder.style.display = 'none'\n }, 5000)\n }\n}\n\nconst setupStripeCard = () => {\n const style = {\n base: {\n fontSize: '16px',\n fontFamily: 'filson-soft, sans-serif',\n color: '#415364',\n fontSmoothing: 'antialiased',\n '::placeholder': {\n color: '#415364',\n },\n },\n invalid: {\n color: '#b9112a',\n },\n }\n\n const card = state.stripe.elements().create('card', { style })\n\n card.mount('#card-element')\n state.stripeCard = card\n\n card.addEventListener('change', ({ error }) => {\n const displayError = document.getElementById('card-errors')\n\n if (error) {\n displayError.textContent = error.message\n } else {\n displayError.textContent = ''\n }\n })\n}\n\nconst init = () => {\n on('click', '.donation-amount', (e) => {\n const amount = e.target.dataset.value\n\n const updateEvent = new CustomEvent('updateValue', { detail: amount })\n\n amountField.dispatchEvent(updateEvent)\n })\n\n on('click', 'input[name=\"Frequency\"]', (e) => {\n if (e.target.checked) {\n state.frequency = e.target.value\n }\n })\n\n on('change', 'select[name=\"RecurringFrequency\"]', (e) => {\n state.recurringFrequency = e.target.value\n })\n\n on('click', '.details-view-trigger', () => {\n const isValid = handleValidation(form)\n\n\n if (isValid) {\n state.view = 'details'\n\n render()\n }\n })\n\n on('click', '.amount-view-trigger', () => {\n state.view = 'amount'\n render()\n })\n\n on('click', '.payment-view-trigger', () => {\n const isValid = handleValidation(form)\n\n\n if (isValid) {\n state.view = 'payment'\n\n setupApplePay()\n setupGooglePay()\n\n render()\n }\n })\n\n setupPayment()\n\n}\n\ninit()\n"],"names":["wretch","headers","addon","QueryStringAddon","getPageOffset","offset","siteHeader","document","querySelector","offsetHeight","target","additionalOffset","pageOffset","dataset","scrollOffset","parseInt","Promise","resolve","jump","duration","callback","documentElement","test","navigator","platform","maxTouchPoints","createUrl","base","formData","append","data","FormData","key","value","Object","entries","baseUrl","URL","searchParams","params","normalizedKey","replace","push","_value","filter","x","length","delete","set","join","URLSearchParams","trackGoogleAnalytics","event","window","dataLayer","validator","_","group","querySelectorAll","findFieldWrapper","el","closest","handleBlur","e","fieldWrapper","classList","remove","existingErrorMessage","contains","handleValidation","form","rules","forEach","field","getAttribute","fieldName","name","presence","allowEmpty","message","type","email","readonly","format","pattern","minimum","min","equality","equals","radio","checkbox","checkboxGroup","buildRules","result","validate","undefined","messages","insertAdjacentHTML","add","shouldScroll","formScroll","firstError","scrollTo","setTimeout","focus","wrapper","submitButton","amountView","detailsView","paymentView","amountField","summaryField","cardElement","getElementById","recurringLabels","weekly","monthly","annually","state","stripe","stripeCard","view","frequency","recurringFrequency","paymentRequest","render","summary","stripeTokenHandler","token","hiddenInput","createElement","setAttribute","id","appendChild","formMessages","autoHideMessage","ajax","action","body","post","json","res","success","ga","reset","hideOnSubmit","showFormMessages","catch","disabled","finally","submitAppleGooglePay","holder","autoHide","style","display","innerHTML","on","amount","updateEvent","CustomEvent","detail","dispatchEvent","checked","donationAmount","parseFloat","replaceAll","country","currency","total","label","requestPayerName","requestPayerEmail","requestPayerPhone","paymentRequestButton","elements","create","height","canMakePayment","then","applePay","mount","forceSubmit","click","setupApplePay","googlePay","setupGooglePay","Stripe","stripePubKey","card","fontSize","fontFamily","color","fontSmoothing","invalid","addEventListener","error","textContent","setupStripeCard","async","preventDefault","createToken"],"sourceRoot":""}