{"version":3,"file":"js/app-core.js","mappings":"yFAGA,SAAWA,GACP,IAAIC,EAAiB,CACjBC,WAAY,gBACZC,WAAY,YACZC,UAAW,SAAUC,EAASF,EAAYD,GACtCF,EAAEK,GAASC,QAAQ,eACdC,YAAYL,GACZM,SAAS,YAClB,EACAC,YAAa,SAAUJ,EAASF,EAAYD,GACxCF,EAAEK,GAASC,QAAQ,eACdC,YAAY,aACZC,SAASN,EAClB,EACAQ,aAAc,QAWlBV,EAAEW,UAAUC,YAAYX,EAC3B,CA1BD,C,wFC4FA,QAFoC,IAvEd,WAIlB,SAAAY,KAAAC,EAAAA,EAAAA,GAAA,KAAAD,GAFQ,KAAAE,SAAkCC,OAAOD,SAGbE,KAAKF,QACzC,CA8DC,OA9DAG,EAAAA,EAAAA,GAAAL,EAAA,EAAAM,IAAA,eAAAC,MAED,SAAaC,EAAeC,EAAsBC,GAChC,kBAADC,OAAmBH,EAAK,OAAAG,OAAMF,EAAO,MAElDN,OAAOS,UAAUC,KAAK,CAAEC,UAAW,OACnCX,OAAOS,UAAUC,KAAK,CAAEL,MAAOA,EAAOM,UAAU,CAACC,aAAcN,EAASC,MAAOA,IACnF,GAAC,CAAAJ,IAAA,sBAAAC,MAED,WAAmB,IAAAS,EAAA,KAUfC,SAASC,iBAAiB,qBAAqBC,SAAQ,SAACC,EAAaC,GAEjE,IAAMC,EAASF,EAAGG,aAAa,mBACzBC,EAAWJ,EAAGG,aAAa,qBAEjC,GAAiB,SAAbC,EAAqB,CAErB,IAAMd,EAAoBe,MAAMC,KAAKN,EAAGF,iBAAiB,sBAAsBS,KAAI,SAACnC,EAAkBoC,GAAa,MAAM,CACrHC,QAASrC,EAAQ+B,aAAa,mBAC9BO,YAAatC,EAAQ+B,aAAa,oBAClCQ,cAAc,OACdH,MAAOA,EACV,IAEDZ,EAAKgB,aAAa,iBAAkBV,EAAQZ,E,MAE3C,GAAiB,UAAbc,EAAsB,CAE3B,IAAMd,EAAoBe,MAAMC,KAAKN,EAAGF,iBAAiB,uBAAuBS,KAAI,SAACnC,EAAkBoC,GAAa,MAAM,CACtHC,QAAS,IACTC,YAAatC,EAAQ+B,aAAa,oBAClCQ,cAAc,QACdH,MAAOA,EACV,IAEDZ,EAAKgB,aAAa,iBAAkBV,EAAQZ,E,CAGlC,kBAADC,OAAmBW,EACpC,IAEAL,SAASC,iBAAiB,mBAAmBC,SAAQ,SAACC,EAAaC,GAC/D,IAAMb,EAAQY,EAAGG,aAAa,iBAC9B,GAAc,OAAVf,EAAJ,CACA,IAAMyB,EAAuB,CACzBzB,MAAOA,EACP0B,SAAUd,EAAGG,aAAa,oBAC1BM,QAAST,EAAGG,aAAa,mBACzBY,WAAYf,EAAGG,aAAa,oBAGhCpB,OAAOS,UAAUC,KAAKoB,EARI,CAS9B,GACJ,KAACjC,CAAA,CApEiB,I,uDCJtBoC,EAAAA,EAAAA,IAAM,gBAMe,IAANjD,GACPkD,EAAAA,GAAgB,+BAG2B,IAApCC,OAAOC,UAAUC,gBACxBH,EAAAA,GAAgB,uCAGM,IAAflD,EAAEsD,GAAGC,OACZL,EAAAA,GAAgB,kCAGK,IAAdM,GACPN,EAAAA,GAAgB,8BAMpBO,EAAAA,EAAAA,OAEKC,EAAAA,EAAAA,QAAYC,EAAAA,EAAAA,OAEjBC,EAAAA,EAAAA,KAEAJ,EAAAA,qBACJ,G","sources":["webpack://gbase.web/./dev/lib/jquery.validate.customizations.js","webpack://gbase.web/./dev/src/app-analytics.ts","webpack://gbase.web/./dev/src/app-core.ts"],"sourcesContent":["/*!\r\n** Customizations to jquery.validate & jquery.unobstruive.validate\r\n*/\r\n(function ($) {\r\n var defaultOptions = {\r\n validClass: 'gbhas-success',\r\n errorClass: 'has-error',\r\n highlight: function (element, errorClass, validClass) {\r\n $(element).closest(\".form-group\")\r\n .removeClass(validClass)\r\n .addClass('has-error');\r\n },\r\n unhighlight: function (element, errorClass, validClass) {\r\n $(element).closest(\".form-group\")\r\n .removeClass('has-error')\r\n .addClass(validClass);\r\n },\r\n errorElement: \"span\"\r\n /*,\r\n errorPlacement: function (error, element) {\r\n if (element.parent(\".input-group\").length) {\r\n error.insertAfter(element.parent());\r\n } else {\r\n error.insertAfter(element);\r\n }\r\n }*/\r\n };\r\n\r\n $.validator.setDefaults(defaultOptions);\r\n})(jQuery);\r\n","declare global {\r\n interface Window {\r\n userData: IUserData; \r\n dataLayer: any[]; \r\n }\r\n\r\n function gtag(op:string, name:string, data: any): void;\r\n}\r\n\r\ndeclare interface IListItem {\r\n item_id: string | null;\r\n affiliation: string | null;\r\n item_category: string;\r\n index: number;\r\n}\r\n\r\ndeclare interface IEventData {\r\n event: string | null;\r\n section_id: string | null;\r\n item_id: string | null;\r\n store_id: string | null;\r\n}\r\nclass ProductAnalytics {\r\n \r\n private userData: IUserData | undefined = window.userData;\r\n\r\n constructor() {\r\n console.log(\"[analytics] init\", this.userData); \r\n }\r\n\r\n tagListEvent(event: string, list_id: string|null, items: IListItem[]) {\r\n console.debug(`[analytics] 🎇 ${event} - ${list_id} :`, items); \r\n\r\n window.dataLayer.push({ ecommerce: null });\r\n window.dataLayer.push({ event: event, ecommerce:{item_list_id: list_id, items: items}} );\r\n }\r\n \r\n sendAttributeEvents() {\r\n\r\n console.log(\"[analytics] 📨 sending events\"); \r\n\r\n /* Send user data - done in header\r\n if (this.userData !== undefined) {\r\n window.dataLayer.push({ user: this.userData });\r\n }*/ \r\n\r\n // Send any data list events\r\n document.querySelectorAll('[data-ax-list-id]').forEach((el: Element, i: number) => {\r\n\r\n const listId = el.getAttribute(\"data-ax-list-id\");\r\n const listType = el.getAttribute(\"data-ax-list-type\"); \r\n\r\n if (listType === \"item\") { \r\n\r\n const items:IListItem[] = Array.from(el.querySelectorAll('[data-ax-item-id]')).map((element: Element, index: number) => ({\r\n item_id: element.getAttribute('data-ax-item-id'),\r\n affiliation: element.getAttribute('data-ax-store-id'),\r\n item_category:\"gear\",\r\n index: index \r\n }));\r\n\r\n this.tagListEvent('view_item_list', listId, items); \r\n }\r\n else if (listType === \"store\") {\r\n \r\n const items:IListItem[] = Array.from(el.querySelectorAll('[data-ax-store-id]')).map((element: Element, index: number) => ({\r\n item_id: \"0\",\r\n affiliation: element.getAttribute('data-ax-store-id'), \r\n item_category:\"store\",\r\n index: index \r\n }));\r\n\r\n this.tagListEvent('view_item_list', listId, items); \r\n }\r\n\r\n console.debug(`[analytics] 🛒 ${listId}`);\r\n });\r\n\r\n document.querySelectorAll('[data-ax-event]').forEach((el: Element, i: number) => {\r\n const event = el.getAttribute(\"data-ax-event\");\r\n if (event === null) return; \r\n const eventData:IEventData = { \r\n event: event, \r\n store_id: el.getAttribute(\"data-ax-store-id\"),\r\n item_id: el.getAttribute(\"data-ax-item-id\"),\r\n section_id: el.getAttribute(\"data-ax-section\")\r\n };\r\n\r\n window.dataLayer.push(eventData);\r\n }); \r\n }\r\n}\r\n\r\nconst analytics: ProductAnalytics = new ProductAnalytics();\r\n\r\nexport default analytics;\r\n","//import $ from \"jquery\";\r\n//import \"bootstrap\";\r\n\r\nimport \"./app-vendor\";\r\nimport \"./app-polyfills\";\r\n\r\nconsole.log(\"[app-load] Gbase starting up!\");\r\n\r\n// Order of import matters, reporting should precede others\r\nimport * as report from \"@/app-reporting\";\r\nimport analytics from \"./app-analytics\";\r\n\r\nimport BindControllers from \"@/isomorphic/controller-binding\";\r\n\r\nimport { isMobile } from '@/utils/browsers';\r\nimport { setFocus, enableScrollUp } from \"@/utils/windows\";\r\nimport { ready } from \"@/isomorphic/behaviors/ready-event\";\r\n\r\nready(() => {\r\n console.log(\"[app-exec] app-core.ts\");\r\n\r\n //********************************\r\n // Validate core libraries\r\n //******************************** \r\n if (typeof $ === 'undefined') { \r\n report.critical(\"jserror:jquery-missing\");\r\n }\r\n\r\n if (typeof Object.prototype.hasOwnProperty === 'undefined') { \r\n report.critical(\"jserror:hasOwnProperty-missing\");\r\n }\r\n\r\n if (typeof $.fn.modal === 'undefined') {\r\n report.critical(\"jserror:bootstrap-missing\");\r\n }\r\n\r\n if (typeof analytics === 'undefined') { \r\n report.critical(\"jserror:analytics-missing\");\r\n }\r\n\r\n //********************************\r\n // Initialize Gbase Client Side\r\n //******************************** \r\n BindControllers();\r\n\r\n if (!isMobile()) setFocus(); \r\n\r\n enableScrollUp();\r\n\r\n analytics.sendAttributeEvents();\r\n});\r\n\r\n"],"names":["$","defaultOptions","validClass","errorClass","highlight","element","closest","removeClass","addClass","unhighlight","errorElement","validator","setDefaults","ProductAnalytics","_classCallCheck","userData","window","this","_createClass","key","value","event","list_id","items","concat","dataLayer","push","ecommerce","item_list_id","_this","document","querySelectorAll","forEach","el","i","listId","getAttribute","listType","Array","from","map","index","item_id","affiliation","item_category","tagListEvent","eventData","store_id","section_id","ready","report","Object","prototype","hasOwnProperty","fn","modal","analytics","BindControllers","isMobile","setFocus","enableScrollUp"],"sourceRoot":""}