{"version":3,"file":"bundle.9814.ae4c03066c1e6f4fe432cdea77b29b31.js","mappings":"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","sources":["webpack://ws-tagging/./src/utils/eventShouldBeTracked.js","webpack://ws-tagging/./src/utils/legacy/framework/runtime/Page.js","webpack://ws-tagging/./src/utils/legacy/framework/runtime/Form.js","webpack://ws-tagging/./src/utils/legacy/framework/runtime/Command.js","webpack://ws-tagging/./src/utils/legacy/framework/runtime/EventHandler.js","webpack://ws-tagging/./src/utils/legacy/framework/runtime/EventHandlerDecorator.js","webpack://ws-tagging/./src/utils/legacy/framework/runtime/InteractionListener.js","webpack://ws-tagging/./src/utils/legacy/framework/config/Injector.js","webpack://ws-tagging/./src/utils/legacy/framework/config/Component.js","webpack://ws-tagging/./src/utils/legacy/framework/config/RuntimeBuilder.js","webpack://ws-tagging/./src/utils/legacy/framework/config/Main.js","webpack://ws-tagging/./src/utils/legacy/framework/trackingFramework.js","webpack://ws-tagging/./node_modules/wsm-tagging-utils/dist/umd.js"],"sourcesContent":["import getEnv, { PROD } from './getEnv';\n\n/**\n * On nonprod always returns true and if on live returns true 10% of the time.\n *\n * @returns {boolean} true 10% of the time on prod and 100% of the time on NP\n * @example\n */\nconst eventShouldBeTracked = () =>\n\tgetEnv() !== PROD || Math.floor(Math.random() * (100 - 0) + 1) <= 10;\n\nexport default eventShouldBeTracked;\n","import { namespace } from 'wsm-tagging-utils';\n\nconst runPage = (win) => {\n\tnamespace(win, 'DDC.tracking.framework.runtime');\n\n\tconst {\n\t\tDDC: { tracking }\n\t} = win;\n\n\t/**\n\t * The Page class is a collection of page related queries.\n\t *\n\t * @param {DataLayerHelper} dataLayerHelper The DataLayerHelper used to access data layer properties\n\t * @constructor\n\t */\n\ttracking.framework.runtime.Page = function Page(dataLayerHelper) {\n\t\tthis.dataLayerHelper = dataLayerHelper;\n\t\tthis.formMapping = new Map();\n\t};\n\n\ttracking.framework.runtime.Page.prototype = {\n\t\t/**\n\t\t * The default constructor\n\t\t */\n\t\tconstructor: win.DDC.tracking.framework.runtime.Page,\n\n\t\t/**\n\t\t * Determines if the specified page alias/id refers to page type passed in test\n\t\t *\n\t\t * @alias alias The current DDC page alias\n\t\t * @test function used to find page type\n\t\t * @returns {boolean} true if matches the specified vehicle page; false otherwise\n\t\t */\n\t\tisPageType(test, alias) {\n\t\t\tlet newAlias = alias;\n\t\t\tif (newAlias === undefined) {\n\t\t\t\tnewAlias = this.currentPageAlias();\n\t\t\t\tif (newAlias !== undefined && test(newAlias)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tnewAlias = this.currentPageId();\n\t\t\t\treturn newAlias !== undefined && test(newAlias);\n\t\t\t}\n\t\t\treturn test.call(this, newAlias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the specified page alias refers to a new vehicle (VLP or VDP)\n\t\t *\n\t\t * @param alias The current DDC page alias\n\t\t * @returns {boolean} true if a new vehicle page; false otherwise\n\t\t */\n\t\tisNewVehiclePage(alias) {\n\t\t\treturn this.isPageType(\n\t\t\t\t(testAlias) => testAlias.indexOf('_NEW') > -1,\n\t\t\t\talias\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the specified page alias refers to a certified used vehicle (VLP or VDP)\n\t\t *\n\t\t * @param alias The current DDC page alias\n\t\t * @returns {boolean} true if a certified used vehicle page; false otherwise\n\t\t */\n\t\tisCertifiedUsedVehiclePage(alias) {\n\t\t\treturn this.isPageType(\n\t\t\t\t(testAlias) => testAlias.indexOf('_CERTIFIED_USED') > -1,\n\t\t\t\talias\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the specified page alias refers to a used vehicle (VLP or VDP)\n\t\t *\n\t\t * @param alias The current DDC page alias\n\t\t * @returns {boolean} true if a used vehicle page; false otherwise\n\t\t */\n\t\tisUsedVehiclePage(alias) {\n\t\t\treturn this.isPageType(\n\t\t\t\t(testAlias) => testAlias.indexOf('_USED') > -1,\n\t\t\t\talias\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is the Index page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is the Index page; false otherwise\n\t\t */\n\t\tisIndexPage(alias) {\n\t\t\treturn this.isPageType((testAlias) => testAlias === 'INDEX', alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is the Vehicle Listing page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is the Vehicle Listing page; false otherwise\n\t\t */\n\t\tisVehicleListingPage(alias) {\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn testAlias.indexOf('INVENTORY_LISTING') > -1;\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is the Vehicle Detail page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is the Vehicle Detail page; false otherwise\n\t\t */\n\t\tisVehicleDetailPage(alias) {\n\t\t\tconst aliasToUse = alias || this.currentPageAlias();\n\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn (\n\t\t\t\t\ttestAlias.indexOf('AUTO_') === 0 &&\n\t\t\t\t\ttestAlias.indexOf('_DETAILS') > -1\n\t\t\t\t);\n\t\t\t}, aliasToUse);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is the Incentives page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is the Incentives page; false otherwise\n\t\t */\n\t\tisIncentivesPage(alias) {\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn testAlias.indexOf('INCENTIVES') > -1;\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is the Hours / Directions page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is the Hours / Directions page; false otherwise\n\t\t */\n\t\tisHoursOrDirectionsPage(alias) {\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn (\n\t\t\t\t\ttestAlias.indexOf('HOURS') > -1 ||\n\t\t\t\t\ttestAlias.indexOf('DIRECTIONS') > -1\n\t\t\t\t);\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is a dealership page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is a Dealership page; false otherwise\n\t\t */\n\t\tisAboutOrStaffPage(alias) {\n\t\t\treturn this.isPageType(\n\t\t\t\t(testAlias) =>\n\t\t\t\t\ttestAlias.indexOf('ABOUT') > -1 ||\n\t\t\t\t\ttestAlias.indexOf('STAFF_LISTING') > -1 ||\n\t\t\t\t\ttestAlias.indexOf('EMPLOYMENT_LISTING') > -1,\n\t\t\t\talias\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is a Contact page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is a Contact page; false otherwise\n\t\t */\n\t\tisContactPage(alias) {\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn testAlias.indexOf('CONTACT') > -1;\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is a compare page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is a Compare page; false otherwise\n\t\t */\n\t\tisComparePage(alias) {\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn testAlias.indexOf('INVENTORY_COMPARE') > -1;\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is a trade-in page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is a trade-in page; false otherwise\n\t\t */\n\t\tisTradeInPage(alias) {\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn (\n\t\t\t\t\ttestAlias.indexOf('TRADE') > -1 &&\n\t\t\t\t\t!(testAlias.indexOf('CONFIRM') > -1)\n\t\t\t\t);\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is a tool page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is a Tool page; false otherwise\n\t\t */\n\t\tisToolPage(alias) {\n\t\t\treturn this.isPageType(function isCompareOrTradeInPage(testAlias) {\n\t\t\t\treturn (\n\t\t\t\t\tthis.isComparePage(testAlias) ||\n\t\t\t\t\ttestAlias.indexOf('CALCULATOR_PAYMENT') > -1 ||\n\t\t\t\t\tthis.isTradeInPage(testAlias) ||\n\t\t\t\t\ttestAlias.indexOf('INVENTORY_FINDER') > -1\n\t\t\t\t);\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is a offers page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is a offers page; false otherwise\n\t\t */\n\t\tisOffersPage(alias) {\n\t\t\t// Exclude SPECIALS pages for PARTS as they are part of the Serivce pages\n\t\t\treturn this.isPageType(function isPartsSpecialsOrCouponPage(\n\t\t\t\ttestAlias\n\t\t\t) {\n\t\t\t\treturn (\n\t\t\t\t\t(testAlias.indexOf('PARTS') === -1 &&\n\t\t\t\t\t\ttestAlias.indexOf('SPECIALS') > -1) ||\n\t\t\t\t\ttestAlias.indexOf('COUPON') > -1 ||\n\t\t\t\t\tthis.isIncentivesPage(alias)\n\t\t\t\t);\n\t\t\t},\n\t\t\talias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is a service page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is a service page; false otherwise\n\t\t */\n\t\tisServicePage(alias) {\n\t\t\treturn this.isPageType(function isSomeTypeOfServicePage(testAlias) {\n\t\t\t\treturn (\n\t\t\t\t\t(!this.isOffersPage(testAlias) &&\n\t\t\t\t\t\ttestAlias.indexOf('SERVICE') > -1) ||\n\t\t\t\t\ttestAlias.indexOf('PARTS') > -1 ||\n\t\t\t\t\ttestAlias.indexOf('MOPAR') > -1 ||\n\t\t\t\t\ttestAlias.indexOf('XTIME') > -1\n\t\t\t\t);\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is a financing page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is a financing page; false otherwise\n\t\t */\n\t\tisFinancePage(alias) {\n\t\t\treturn this.isPageType(function isSomeTypeOfFinancepage(testAlias) {\n\t\t\t\treturn (\n\t\t\t\t\t(!this.isOffersPage(testAlias) &&\n\t\t\t\t\t\ttestAlias.indexOf('FINANCE') > -1) ||\n\t\t\t\t\ttestAlias.indexOf('FINANCING') > -1\n\t\t\t\t);\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is a corporate page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is a corporate page; false otherwise\n\t\t */\n\t\tisCorporatePage(alias) {\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn (\n\t\t\t\t\ttestAlias.indexOf('PRIVACY') > -1 ||\n\t\t\t\t\ttestAlias.indexOf('LEGAL') > -1 ||\n\t\t\t\t\ttestAlias.indexOf('SITEMAP') > -1\n\t\t\t\t);\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is a brochure page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is a brochure page; false otherwise\n\t\t */\n\t\tisBrochurePage(alias) {\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn (\n\t\t\t\t\ttestAlias.indexOf('BROCHURE') > -1 ||\n\t\t\t\t\ttestAlias.indexOf('POCKET_GUIDE') > -1\n\t\t\t\t);\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the current page being viewed is the Confirmation page\n\t\t *\n\t\t * @param alias The DDC page alias\n\t\t * @returns {boolean} true if the current page is the Confirmation page; false otherwise\n\t\t */\n\t\tisConfirmationPage(alias) {\n\t\t\treturn alias.indexOf('CONFIRM') > -1;\n\t\t},\n\n\t\t/**\n\t\t * Determines if the specified page alias refers to a Error Page (Page Not Found - 404)\n\t\t *\n\t\t * @param alias The current DDC page alias\n\t\t * @returns {boolean} true if a 404 Error page; false otherwise\n\t\t */\n\t\tisErrorPage(alias) {\n\t\t\treturn alias.indexOf('404') > -1;\n\t\t},\n\n\t\t/**\n\t\t * Determines if the specified page alias refers to a No Results Page\n\t\t *\n\t\t * @param alias The current DDC page alias\n\t\t * @returns {boolean} true if a No Results page; false otherwise\n\t\t */\n\t\tisNoResultsPage(alias) {\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn testAlias.indexOf('NO_RESULTS') > -1;\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Determines if the specified page alias refers to a Model Showroom page\n\t\t *\n\t\t * @param alias The current DDC page alias\n\t\t * @returns {boolean} true if a Model Showroom page; false otherwise\n\t\t */\n\t\tisModelShowroomPage() {\n\t\t\treturn this.dataLayerProperty('page.pageInfo.isShowroomOverview');\n\t\t},\n\n\t\t/**\n\t\t * Determines if the specified page alias refers to a Video Gallery page\n\t\t *\n\t\t * @param alias The current DDC page alias\n\t\t * @returns {boolean} true if a Video Gallery page; false otherwise\n\t\t */\n\t\tisVideoGalleryPage(alias) {\n\t\t\treturn this.isPageType((testAlias) => {\n\t\t\t\treturn testAlias.indexOf('VIDEO_GALLERY') > -1;\n\t\t\t}, alias);\n\t\t},\n\n\t\t/**\n\t\t * Returns the value of the specified data layer property\n\t\t *\n\t\t * @param name The name of the data layer property to lookup\n\t\t * @returns {*} The value of the specified data layer property\n\t\t */\n\t\tdataLayerProperty(name) {\n\t\t\treturn this.dataLayerHelper.get(name);\n\t\t},\n\n\t\t/**\n\t\t * Returns the DDC alias of the current page\n\t\t *\n\t\t * @returns {string} The DDC alias of the current page\n\t\t */\n\t\tcurrentPageAlias() {\n\t\t\treturn this.dataLayerProperty('page.pageInfo.pageName');\n\t\t},\n\n\t\t/**\n\t\t * Returns the DDC id of the current page\n\t\t *\n\t\t * @returns {string} The DDC id of the current page\n\t\t */\n\t\tcurrentPageId() {\n\t\t\treturn this.dataLayerProperty('page.pageInfo.pageId');\n\t\t},\n\n\t\t/**\n\t\t * Tests for the presence of a given widget in the current page using the\n\t\t * 'page.pageInfo.pageWidgets' DDC.dataLayer property\n\t\t *\n\t\t * @param regex The regular expression object used to test against each\n\t\t * widget on the page\n\t\t * @returns {boolean} true if the specified widget is present; false otherwise\n\t\t */\n\t\twidgetIsPresent(regex) {\n\t\t\tconst pageWidgets = this.dataLayerProperty(\n\t\t\t\t'page.pageInfo.pageWidgets'\n\t\t\t);\n\t\t\treturn pageWidgets\n\t\t\t\t? Object.values(pageWidgets).some((value) => regex.test(value))\n\t\t\t\t: false;\n\t\t},\n\n\t\t/**\n\t\t * Tests for the presence of at least one query facet in the supplied query\n\t\t * facet collection.\n\t\t *\n\t\t * @param queryFacets The collection of query facets\n\t\t * @returns {boolean} true if at least one is present; false otherwise\n\t\t */\n\t\tqueryFacetIsPresent(queryFacets) {\n\t\t\treturn queryFacets\n\t\t\t\t? Object.values(queryFacets).some(\n\t\t\t\t\t\t(queryFacet) => queryFacet !== undefined\n\t\t\t\t )\n\t\t\t\t: false;\n\t\t},\n\n\t\tsetLocalStorage(storageKey, eventData) {\n\t\t\tlocalStorage.setItem(storageKey, JSON.stringify(eventData));\n\t\t},\n\n\t\tgetLocalStorage(storageKey) {\n\t\t\tconst data = localStorage.getItem(storageKey);\n\n\t\t\t// If data does not exist return without taking action\n\t\t\tif (!data) {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tconst eventData = JSON.parse(data);\n\n\t\t\tif (eventData.element) {\n\t\t\t\t// Reconstitute element so it can be passed into the event.\n\t\t\t\t// Passing the element allows for further logic to be performed in the handler if necessary.\n\t\t\t\tconst div = document.createElement('div');\n\t\t\t\tdiv.innerHTML = eventData.element;\n\t\t\t\teventData.element = div.firstChild;\n\t\t\t}\n\n\t\t\treturn eventData;\n\t\t},\n\n\t\tremoveLocalStorage(storageKey) {\n\t\t\tlocalStorage.removeItem(storageKey);\n\t\t}\n\t};\n};\n\nexport default runPage;\n","import { namespace } from 'wsm-tagging-utils';\nimport eventShouldBeTracked from '../../../eventShouldBeTracked';\n\nconst runForm = (win) => {\n\tnamespace(win, 'DDC.tracking.framework.runtime');\n\n\tconst {\n\t\tDDC: { tracking },\n\t\tnewrelic\n\t} = win;\n\n\t/**\n\t * The Form class is a collection of form related queries.\n\t *\n\t * @constructor\n\t */\n\ttracking.framework.runtime.Form = function Form(properties) {\n\t\tthis.formMapping = new Map();\n\t\tthis.wsTaggingGrouping = properties && properties.wsTaggingGrouping;\n\t\tthis.wsTaggingTrackingWidget =\n\t\t\tproperties && properties.wsTaggingTrackingWidget;\n\t};\n\n\ttracking.framework.runtime.Form.prototype = {\n\t\t/**\n\t\t * The default constructor\n\t\t */\n\t\tconstructor: win.DDC.tracking.framework.runtime.Form,\n\n\t\treport(name, attributes = {}) {\n\t\t\tif (newrelic) {\n\t\t\t\tif (eventShouldBeTracked()) {\n\t\t\t\t\tconst { wsTaggingGrouping, wsTaggingTrackingWidget } = this;\n\t\t\t\t\tnewrelic.addPageAction(name, {\n\t\t\t\t\t\t...attributes,\n\t\t\t\t\t\twsTaggingGrouping,\n\t\t\t\t\t\twsTaggingTrackingWidget\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgetFormMapping(formTrackingId) {\n\t\t\tthis.report('formMappingFunctionStart');\n\t\t\tconst startTime = Date.now();\n\n\t\t\tif (this.formMapping && this.formMapping.has(formTrackingId)) {\n\t\t\t\tthis.report('formMappingFunctionGetCache');\n\t\t\t\treturn Promise.resolve(this.formMapping.get(formTrackingId));\n\t\t\t}\n\n\t\t\tconst mapPromise = new Promise((resolve, reject) => {\n\t\t\t\tconst apiUri = `/api/widget/ws-tagging/${this.wsTaggingTrackingWidget}/${this.wsTaggingGrouping}/${formTrackingId}`;\n\t\t\t\tfetch(apiUri)\n\t\t\t\t\t.then((response) => response.json())\n\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\tthis.report('formMappingFunctionHitAPI', {\n\t\t\t\t\t\t\twsTaggingAPIDuration: Date.now() - startTime\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.formMapping.set(formTrackingId, data);\n\t\t\t\t\t\treturn resolve(this.formMapping.get(formTrackingId));\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\treturn reject(error);\n\t\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn mapPromise;\n\t\t}\n\t};\n\n\t/*\n\tPAGE ACTION\n\n\t*/\n};\n\nexport default runForm;\n","import { namespace } from 'wsm-tagging-utils';\n\nconst runCommand = (win) => {\n\tnamespace(win, 'DDC.tracking.framework.runtime');\n\n\tconst {\n\t\tDDC: { tracking },\n\t\tcom\n\t} = win;\n\n\t/**\n\t * Commands are executed on startup after the DDC Tracking Framework runtime has been initialized.\n\t *\n\t * @param {Object} window An instance of the global window object\n\t * @param {tracking.framework.runtime.Page} page A Page instance for page related queries\n\t * @param {tracking.framework.runtime.Form} form A Page instance for page related queries\n\t * @constructor\n\t * @see https://sourcemaking.com/design_patterns/command\n\t */\n\ttracking.framework.runtime.Command = function Command(\n\t\tthisWin,\n\t\tpage,\n\t\teventHandler,\n\t\tform\n\t) {\n\t\tthis.log = com.dealer.log.Logger.createFor(this);\n\t\tthis.win = thisWin;\n\t\tthis.page = page;\n\t\tthis.form = form;\n\t\tthis.eventHandler = eventHandler;\n\t};\n\n\ttracking.framework.runtime.Command.prototype = {\n\t\t/**\n\t\t * The default constructor\n\t\t */\n\t\tconstructor: win.DDC.tracking.framework.runtime.Command,\n\n\t\t/**\n\t\t * The logging category, subfclasses should override to appropriate value\n\t\t */\n\t\tlogCategory: 'ws-tagging:Command',\n\n\t\t/**\n\t\t * Executes this Command\n\t\t */\n\t\texecute() {}\n\t};\n};\n\nexport default runCommand;\n","import { namespace } from 'wsm-tagging-utils';\n\nconst runEventHandler = (win, flags) => {\n\tnamespace(win, 'DDC.tracking.framework.runtime');\n\n\tconst {\n\t\tDDC: { tracking },\n\t\tcom\n\t} = win;\n\n\t/**\n\t * The EventHandler defines the interface operations expected by the InteractionListener. All\n\t * implementations should inherit from this EventHandler and provide the necessary behavior by\n\t * overriding the appropriate methods and providing the implementation.\n\t *\n\t * @param {Object} window An instance of the global window object; allows unit tests to inject a mock\n\t * for testing\n\t * @param {tracking.framework.runtime.Page} page A Page instance for page related queries\n\t * @param {tracking.framework.runtime.Form} form A Form instance for form related queries\n\t * @constructor\n\t *\n\t * @see https://sourcemaking.com/design_patterns/strategy\n\t */\n\ttracking.framework.runtime.EventHandler = function EventHandler(\n\t\tthisWin,\n\t\tpage,\n\t\tform\n\t) {\n\t\tthis.log = com.dealer.log.Logger.createFor(this);\n\t\tthis.win = thisWin;\n\t\tthis.page = page;\n\t\tthis.form = form;\n\t\tthis.widgetId = undefined;\n\t\tthis.flags = flags || {};\n\t};\n\n\ttracking.framework.runtime.EventHandler.prototype = {\n\t\t/**\n\t\t * The default constructor\n\t\t */\n\t\tconstructor: win.DDC.tracking.framework.runtime.EventHandler,\n\n\t\t/**\n\t\t * The logging category, subclasses should override to appropriate value\n\t\t */\n\t\tlogCategory: 'ws-tagging:EventHandler',\n\n\t\tflags: flags || {},\n\n\t\t//= ===================================================================\n\t\t// The following operations are triggered when events are pushed\n\t\t// onto the data layer via window.dataLayer.push({event:'name', ...})\n\t\t//= ===================================================================\n\n\t\t/**\n\t\t * Handles the page view event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandlePageView(_eventData) {},\n\n\t\t/**\n\t\t * Handles the vehicle detail view event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleVehicleDetailView(_eventData) {},\n\n\t\t/**\n\t\t * Handles the slideshow click event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleSlideshowClick(_eventData) {},\n\n\t\t/**\n\t\t * Handles the ajax content loaded event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleAjaxContentLoad(_eventData) {},\n\n\t\t/**\n\t\t * Handles the dialog open event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleDialogOpened(_eventData) {},\n\n\t\t/**\n\t\t * Handles the dialog close event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleDialogClosed(_eventData) {},\n\n\t\t/**\n\t\t * Handles the form change event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleFormChange(_eventData) {},\n\n\t\t/**\n\t\t * Handles the typed search event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleTypedSearch(_eventData) {},\n\n\t\t/**\n\t\t * Handles the typed search initiation event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleTypedSearchInit(_eventData) {},\n\n\t\t/**\n\t\t * Handles the typed search results event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleTypedSearchResults(_eventData) {},\n\n\t\t/**\n\t\t * Handles the payment calculator form initiation event.\n\t\t *\n\t\t * @param {Object} eventData The event data object.\n\t\t */\n\t\thandlePaymentCalcInit(_eventData) {},\n\n\t\t/**\n\t\t * Handles the form confirmation event.\n\t\t *\n\t\t * @param {Object} eventData The event data object.\n\t\t */\n\t\thandleFormConfirmation(_eventData) {},\n\n\t\t/**\n\t\t * Handles the form initiation event.\n\t\t *\n\t\t * @param {Object} eventData The event data object.\n\t\t */\n\t\thandleFormInitiation(_eventData) {},\n\n\t\t/**\n\t\t * Handles the form onPage event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleFormOnPage(_eventData) {},\n\n\t\t/**\n\t\t * Handles the form submission event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleFormSubmission(_eventData) {},\n\n\t\t/**\n\t\t * Handles the click to call event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleClickToCall(_eventData) {},\n\n\t\t/**\n\t\t * Handles the compare page click event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleComparePageClick(_eventData) {},\n\n\t\t/**\n\t\t * Handles the hproduct click event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleHproductClick(_eventData) {},\n\n\t\t/**\n\t\t * Handles the recommendations vehicles link click.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleRecommendedVehicleClick(_eventData) {},\n\n\t\t/**\n\t\t * Handles the offer click event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleOfferClick(_eventData) {},\n\n\t\t/**\n\t\t * Handles the navigation click event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleNavigationClick(_eventData) {},\n\n\t\t/**\n\t\t * Handles the filter search event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleFilterSearch(_eventData) {},\n\n\t\t/**\n\t\t * Handles the filter search click event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleFilterSearchClick(_eventData) {},\n\n\t\t/**\n\t\t * Handles the incentive filter event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleIncentiveFilter(_eventData) {},\n\n\t\t/**\n\t\t * Handles link tracking (e.g. buttons, anchors)\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleLinkClick(_eventData) {},\n\n\t\t/**\n\t\t * Handles the map click event.\n\t\t */\n\t\thandleMapClick(_eventData) {},\n\n\t\t/**\n\t\t * Handles the social header click event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleSocialHeaderClick(_eventData) {},\n\n\t\t/**\n\t\t * Handles the social share event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleSocialShare(_eventData) {},\n\n\t\t/**\n\t\t * Handles get directions event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleGetDirections(_eventData) {},\n\n\t\t/**\n\t\t * Handles event data pushed from inside of the promotions tracking js.\n\t\t * The event pushed is called \"specialsEvent\"\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleSpecialsEvent(_eventData) {},\n\n\t\t/**\n\t\t * Handles generic widget interaction in the \"trackEvent\" data format.\n\t\t * These events cover a variety of user actions. The specific widget\n\t\t * interaction should be parsed and handled in each event handler\n\t\t * implementation.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleWidgetUserEvent(_eventData) {},\n\n\t\t/**\n\t\t * Handles widget interaction even when certain params are not available.\n\t\t * This prototype is specifically for use with Adobe DTM Handler.\n\t\t * The handler logic will live in Adobe DTM Handler, but the\n\t\t * handler needs to fire in interaction listener.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleAllWidgetUserEvents(_eventData) {},\n\n\t\t/**\n\t\t * Handles third party user events.\n\t\t * These events are designed to come from third party iframes.\n\t\t * DDC will either transform the iframe message into a third party user event or the third party sends us\n\t\t * the event payload formatted exactly according to the spec:\n\t\t * https://coxautoinc.sharepoint.com/:w:/s/DDCConsumerUX/ER8CjAmgFJFMn4pKb39gIa4BsTvoHpORnnVlDuEQw6Eb0A?e=zRQcEV\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleThirdPartyUserEvent(_eventData) {},\n\n\t\t/**\n\t\t * Handles the vehicle compare check event.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleVehicleCompareCheck(_eventData) {},\n\n\t\t/**\n\t\t * Handles clicks on video play button.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleVideoPlay(_eventData) {},\n\n\t\t/**\n\t\t * Handles video milestones.\n\t\t *\n\t\t * @param {Object} eventData The event data object\n\t\t */\n\t\thandleVideoMilestone(_eventData) {},\n\n\t\t/**\n\t\t * Handles clicking on slideshow pager pip/dot.\n\t\t *\n\t\t * @param {Object} eventData\n\t\t */\n\t\thandleSlideshowPagerClick(_eventData) {}\n\t};\n};\n\nexport default runEventHandler;\n","import { namespace } from 'wsm-tagging-utils';\n\nconst runEventHandlerDecorator = (win) => {\n\tnamespace(win, 'DDC.tracking.framework.runtime');\n\n\tconst {\n\t\tDDC: { tracking }\n\t} = win;\n\n\t/**\n\t * EventHandlerDecorators enables functional composition by providing a means\n\t * of decorating existing EventHandlers with additional behavior. By default\n\t * all operations simply defer actual work to the supplied delegate.\n\t *\n\t * Subclasses are expected to override the appropriate methods to add decorated\n\t * behavior.\n\t *\n\t * @see https://sourcemaking.com/design_patterns/decorator\n\t * @see https://sourcemaking.com/design_patterns/chain_of_responsibility\n\t */\n\ttracking.framework.runtime.EventHandlerDecorator = class extends (\n\t\ttracking.framework.runtime.EventHandler\n\t) {\n\t\t/**\n\t\t * Creates a tracking.framework.runtime.EventHandlerDecorator object\n\t\t *\n\t\t * @param {Object} window The window object\n\t\t * @param {tracking.framework.runtime.Page} page A Page instance for page related queries\n\t\t * @param {tracking.framework.runtime.Form} form A Form instance for form related queries\n\t\t * @param {tracking.framework.runtime.EventHandler} delegate The EventHandler implementation to which all interface\n\t\t * operations are delegated\n\t\t */\n\t\tconstructor(window, page, delegate, form) {\n\t\t\tsuper(window, page, form);\n\t\t\tthis.delegate = delegate;\n\t\t}\n\t};\n\n\ttracking.framework.runtime.EventHandlerDecorator.prototype.logCategory =\n\t\t'ws-tagging:EventHandlerDecorator';\n\n\t/**\n\t * Update EventHandlerDecorator handler methods to call its chained delegate with event data by default\n\t */\n\tconst eventHandlerPrototype =\n\t\ttracking.framework.runtime.EventHandler.prototype;\n\tObject.keys(eventHandlerPrototype)\n\t\t.filter(\n\t\t\t(prop) =>\n\t\t\t\tprop.indexOf('handle') === 0 &&\n\t\t\t\ttypeof eventHandlerPrototype[prop] === 'function'\n\t\t)\n\t\t.forEach((handlerMethodName) => {\n\t\t\ttracking.framework.runtime.EventHandlerDecorator.prototype[\n\t\t\t\thandlerMethodName\n\t\t\t] = function delegateHandler(eventData) {\n\t\t\t\tthis.delegate[handlerMethodName](eventData);\n\t\t\t};\n\t\t});\n};\n\nexport default runEventHandlerDecorator;\n","import { globalConstants, namespace } from 'wsm-tagging-utils';\n\nconst { THIRD_PARTY_USER_EVENT, TRACK_EVENT, WIDGET_USER_EVENT } =\n\tglobalConstants;\n\nconst runInteractionListener = (win) => {\n\tnamespace(win, 'DDC.tracking.framework.runtime');\n\n\tconst {\n\t\tDDC: { tracking },\n\t\tcom\n\t} = win;\n\n\ttracking.framework.runtime.InteractionListener =\n\t\t(function buildInteractionListener() {\n\t\t\t// ======================================================================\n\t\t\t// --------------- Private Static Variables and Functions ---------------\n\t\t\t// ======================================================================\n\n\t\t\t/**\n\t\t\t * Maintains a one-to-one mapping of event type to event handler method\n\t\t\t * to call when that event occurs.\n\t\t\t */\n\t\t\tconst handlerMapping = {\n\t\t\t\t'ddc.page.view': 'handlePageView',\n\t\t\t\t'ddc.page.vehicleDetailView': 'handleVehicleDetailView',\n\t\t\t\t'ddc.inventory.filterSearch': 'handleFilterSearch',\n\t\t\t\t'ddc.inventory.filterSearch.click': 'handleFilterSearchClick',\n\t\t\t\t'ddc.inventory.typedSearch': 'handleTypedSearchResults',\n\t\t\t\t'ddc.inventory.typedSearch.init': 'handleTypedSearchInit',\n\t\t\t\t'ddc.incentive.filterSearch': 'handleIncentiveFilter',\n\t\t\t\t'ddc.slideshow.click': 'handleSlideshowClick',\n\t\t\t\t'ddc.slideshow.pagerClick': 'handleSlideshowPagerClick',\n\t\t\t\t'ddc.dialog.ajaxContentLoaded': 'handleAjaxContentLoad',\n\t\t\t\t'ddc.dialog.opened': 'handleDialogOpened',\n\t\t\t\t'ddc.dialog.closed': 'handleDialogClosed',\n\t\t\t\t'ddc.form.facetBrowseChange': 'handleFormChange',\n\t\t\t\t'ddc.form.inventorySearchLeadChange': 'handleFormChange',\n\t\t\t\t'ddc.form.typedSearch': 'handleTypedSearch',\n\t\t\t\t'ddc.form.paymentCalcInit': 'handlePaymentCalcInit',\n\t\t\t\t'ddc.form.confirmation': 'handleFormConfirmation',\n\t\t\t\t'ddc.form.initiation': 'handleFormInitiation',\n\t\t\t\t'ddc.form.onPage': 'handleFormOnPage',\n\t\t\t\t'ddc.form.submission': 'handleFormSubmission',\n\t\t\t\t'ddc.form.change': 'handleFormChange',\n\t\t\t\t'ddc.form.slideChange': 'handleFormChange',\n\t\t\t\t'ddc.link.generic': 'handleLinkClick',\n\t\t\t\t'ddc.link.clickToCall': 'handleClickToCall',\n\t\t\t\t'ddc.link.comparePageClick': 'handleComparePageClick',\n\t\t\t\t'ddc.link.hproductClick': 'handleHproductClick',\n\t\t\t\t'ddc.link.offerClick': 'handleOfferClick',\n\t\t\t\t'ddc.link.navClick': 'handleNavigationClick',\n\t\t\t\t'ddc.link.recommendedVehicle': 'handleRecommendedVehicleClick',\n\t\t\t\t'ddc.link.socialHeaderClick': 'handleSocialHeaderClick',\n\t\t\t\t'ddc.link.socialShare': 'handleSocialShare',\n\t\t\t\t'ddc.link.getDirections': 'handleGetDirections',\n\t\t\t\t'ddc.link.vehicleCompareCheck': 'handleVehicleCompareCheck',\n\t\t\t\t'ddc.maps': 'handleMapClick',\n\t\t\t\t'ddc.video.play': 'handleVideoPlay',\n\t\t\t\t'ddc.video.milestone': 'handleVideoMilestone',\n\t\t\t\tspecialsEvent: 'handleSpecialsEvent'\n\t\t\t\t// moved these to trackEvent so the additionalProperties are supported\n\t\t\t\t// widgetUserEvent: 'handleAllWidgetUserEvents',\n\t\t\t\t// thirdPartyUserEvent: 'handleThirdPartyUserEvent'\n\t\t\t};\n\n\t\t\tconst trackEventHandlerMapping = {\n\t\t\t\t[WIDGET_USER_EVENT]: 'handleAllWidgetUserEvents',\n\t\t\t\t[THIRD_PARTY_USER_EVENT]: 'handleThirdPartyUserEvent'\n\t\t\t};\n\n\t\t\tclass InteractionListener {\n\t\t\t\t/**\n\t\t\t\t * Creates the InteractionListener object\n\t\t\t\t *\n\t\t\t\t * @param {Object} window A reference to the global window object\n\t\t\t\t * @param {tracking.framework.runtime.Page} page A Page instance for page related queries\n\t\t\t\t * * @param {array} eventHandlers A list of tracking.framework.runtime.EventHandler objects used to handle events\n\t\t\t\t * @param {tracking.framework.runtime.Form} form A Form instance for form related queries\n\t\t\t\t * @param {Object} flags An object of feature flags and values\n\t\t\t\t * @param {Boolean} pageViewEventHasFired Set to true to skip the logic ensuring page view fires first\n\t\t\t\t * @constructor\n\t\t\t\t *\n\t\t\t\t * @see https://sourcemaking.com/design_patterns/observer\n\t\t\t\t * @see https://sourcemaking.com/design_patterns/strategy\n\t\t\t\t */\n\t\t\t\tconstructor(\n\t\t\t\t\tthisWin,\n\t\t\t\t\tpage,\n\t\t\t\t\teventHandlers,\n\t\t\t\t\tform,\n\t\t\t\t\tflags,\n\t\t\t\t\tpageViewEventHasFired = false,\n\t\t\t\t\twaitOnEventToStartHandling = ''\n\t\t\t\t) {\n\t\t\t\t\tthis.log = new com.dealer.log.Logger(\n\t\t\t\t\t\t'ws-tagging:InteractionListener'\n\t\t\t\t\t);\n\t\t\t\t\tthis.win = thisWin;\n\t\t\t\t\tthis.page = page;\n\t\t\t\t\tthis.form = form;\n\t\t\t\t\tthis.eventHandlers = Array.isArray(eventHandlers)\n\t\t\t\t\t\t? eventHandlers\n\t\t\t\t\t\t: [eventHandlers];\n\t\t\t\t\tthis.flags = flags || {};\n\t\t\t\t\tthis.pageViewEventHasFired = pageViewEventHasFired;\n\t\t\t\t\tthis.runningUnitTest = pageViewEventHasFired;\n\t\t\t\t\tthis.waitOnEventToStartHandling =\n\t\t\t\t\t\twaitOnEventToStartHandling;\n\t\t\t\t\tthis.hasWaitedToStartHandling = false;\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Adds new event handler chains to the list of handlers this listener is manages\n\t\t\t\t *\n\t\t\t\t * @param {tracking.framework.runtime.EventHandler} eventHandlers the event handlers to add\n\t\t\t\t */\n\t\t\t\taddEventHandlers(...eventHandlers) {\n\t\t\t\t\teventHandlers.forEach((eventHandler) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\teventHandler instanceof\n\t\t\t\t\t\t\ttracking.framework.runtime.EventHandler\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthis.log.debug(\n\t\t\t\t\t\t\t\t`adding new event handler ${eventHandler.logCategory}`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.eventHandlers.push(eventHandler);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.log.warn(\n\t\t\t\t\t\t\t\t`could not add event handler \"${eventHandler}\"`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Verifies event pushed to dataLayer follows new \"trackEvent\" format\n\t\t\t\t *\n\t\t\t\t * @param {Object} event The event data object\n\t\t\t\t * @returns {boolean} true if event is in the new trackEvent format\n\t\t\t\t */\n\t\t\t\tisNewTrackEventFormat = (event) => {\n\t\t\t\t\treturn !!(\n\t\t\t\t\t\tevent.widgetName &&\n\t\t\t\t\t\tevent.element &&\n\t\t\t\t\t\tevent.action &&\n\t\t\t\t\t\tevent.result &&\n\t\t\t\t\t\tevent.event === WIDGET_USER_EVENT\n\t\t\t\t\t);\n\t\t\t\t};\n\n\t\t\t\t// ======================================================================\n\t\t\t\t// -------------------------- DataLayer Monitoring ----------------------\n\t\t\t\t// ======================================================================\n\n\t\t\t\t/**\n\t\t\t\t * Instructs the InteractionListener that data has been pushed into the DataLayer\n\t\t\t\t *\n\t\t\t\t * @param {Array} dataLayer The dataLayer being observed\n\t\t\t\t * @param {Object} message The data applied to the dataLayer\n\t\t\t\t */\n\t\t\t\tonDataPushed(dataLayer, message) {\n\t\t\t\t\tconst eventData =\n\t\t\t\t\t\ttypeof message.eventData === 'object'\n\t\t\t\t\t\t\t? message.eventData\n\t\t\t\t\t\t\t: message;\n\t\t\t\t\tconst mappedHandlerMethod = handlerMapping[message.event];\n\n\t\t\t\t\t// notify all event handlers in chain\n\t\t\t\t\tif (typeof mappedHandlerMethod === 'string') {\n\t\t\t\t\t\tthis.log.info(`handling ${message.event} event`);\n\t\t\t\t\t\tthis.notifyHandlersAndWaitForPageView(\n\t\t\t\t\t\t\tmappedHandlerMethod,\n\t\t\t\t\t\t\teventData\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcheckSatelliteAndNotifyHandler(\n\t\t\t\t\thandler,\n\t\t\t\t\thandlerMethod,\n\t\t\t\t\teventData\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!this.runningUnitTest &&\n\t\t\t\t\t\thandlerMethod === 'handleVideoPlay' &&\n\t\t\t\t\t\ttypeof handler?.win?._satellite?.track === 'undefined'\n\t\t\t\t\t) {\n\t\t\t\t\t\t// safety check\n\t\t\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\t\t\tthis.skipSatelliteCheck = true;\n\t\t\t\t\t\t}, 5000);\n\n\t\t\t\t\t\t// keep checking for satelite function to be present\n\t\t\t\t\t\t// or timeout above occurs\n\t\t\t\t\t\tconst interval = setInterval(() => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tthis.skipSatelliteCheck ||\n\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\ttypeof handler?.win?._satellite?.track ===\n\t\t\t\t\t\t\t\t\t'undefined'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t\thandler[handlerMethod](eventData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 50);\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandler[handlerMethod](eventData);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Notifies each managed event handler chain that an event has occurred\n\t\t\t\t *\n\t\t\t\t * @param {string} handlerMethod event handler method to call\n\t\t\t\t * @param {Object} eventData event data to pass to the handler\n\t\t\t\t */\n\t\t\t\tnotifyHandlers(handlerMethod, eventData) {\n\t\t\t\t\t// call each event handler attached to listener, catch exceptions so calls to\n\t\t\t\t\t// each handler is not interrupted\n\t\t\t\t\tthis.eventHandlers.forEach((handler) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tthis.log.debug(\n\t\t\t\t\t\t\t\t`initiating call to ${handler.logCategory}.${handlerMethod}`\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tthis.hasWaitedToStartHandling ||\n\t\t\t\t\t\t\t\t!this.waitOnEventToStartHandling ||\n\t\t\t\t\t\t\t\t(this.waitOnEventToStartHandling &&\n\t\t\t\t\t\t\t\t\twindow?.DDC?.WidgetData?.[\n\t\t\t\t\t\t\t\t\t\t'ws-tagging'\n\t\t\t\t\t\t\t\t\t]?.browserEventNames?.includes?.(\n\t\t\t\t\t\t\t\t\t\tthis.waitOnEventToStartHandling\n\t\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tthis.checkSatelliteAndNotifyHandler(\n\t\t\t\t\t\t\t\t\thandler,\n\t\t\t\t\t\t\t\t\thandlerMethod,\n\t\t\t\t\t\t\t\t\teventData\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.win.addEventListener(\n\t\t\t\t\t\t\t\t\tthis.waitOnEventToStartHandling,\n\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\tthis.checkSatelliteAndNotifyHandler(\n\t\t\t\t\t\t\t\t\t\t\thandler,\n\t\t\t\t\t\t\t\t\t\t\thandlerMethod,\n\t\t\t\t\t\t\t\t\t\t\teventData\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\tthis.hasWaitedToStartHandling = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tthis.log.error(\n\t\t\t\t\t\t\t\t`error when calling ${handler.logCategory}.${handlerMethod}`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t// print standard stack trace to console\n\t\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Calls notifyHandlers and ensure ddc.page.view is called first\n\t\t\t\t * The reason to make sure ddc.page.view is called first is because\n\t\t\t\t * some clients rely on data that is passed with the page view event\n\t\t\t\t * as the basis for the rest of the events on the page. Shift for example.\n\t\t\t\t *\n\t\t\t\t * @param {string} handlerMethod event handler method to call\n\t\t\t\t * @param {Object} eventData event data to pass to the handler\n\t\t\t\t */\n\t\t\t\tnotifyHandlersAndWaitForPageView(\n\t\t\t\t\thandlerMethod,\n\t\t\t\t\teventData = {}\n\t\t\t\t) {\n\t\t\t\t\tif (handlerMethod === 'handlePageView') {\n\t\t\t\t\t\tthis.pageViewEventHasFired = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t!this.pageViewEventHasFired &&\n\t\t\t\t\t\thandlerMethod !== 'handlePageView'\n\t\t\t\t\t) {\n\t\t\t\t\t\t// safety check - timeout if handlePageView never happens\n\t\t\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\t\t\tthis.pageViewEventHasFired = true;\n\t\t\t\t\t\t}, 250);\n\n\t\t\t\t\t\t// keep checking for the page view event to have fired until it does\n\t\t\t\t\t\t// or timeout above occurs\n\t\t\t\t\t\tconst interval = setInterval(() => {\n\t\t\t\t\t\t\tif (this.pageViewEventHasFired) {\n\t\t\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t\tthis.notifyHandlers(handlerMethod, eventData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 50);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.notifyHandlers(handlerMethod, eventData);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Instructs the InteractionListener that widgetUserEvents have been observed.\n\t\t\t\t *\n\t\t\t\t * Previously we were listening for widgetUserEvent's from the onDataPushed function but doing that it is not\n\t\t\t\t * possible to pass extra data w/o that data also flowing into GA. Listening to trackEvent allows us to capture\n\t\t\t\t * extra data passed with the jquery trigger.\n\t\t\t\t *\n\t\t\t\t * Result of method is handleWidgetUserEvent notified with data in format:\n\t\t\t\t * {'event':'widgetUserEvent',...,optionalData:{...}}\n\t\t\t\t *\n\t\t\t\t * @returns {undefined}\n\t\t\t\t */\n\t\t\t\tobserveTrackEvents() {\n\t\t\t\t\t$(document).on(\n\t\t\t\t\t\tTRACK_EVENT,\n\t\t\t\t\t\t(_event, eventData = {}, optionalData = false) => {\n\t\t\t\t\t\t\tconst { event = '', eventName = '' } = eventData;\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tObject.keys(trackEventHandlerMapping).includes(\n\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst handlersToNotify = [];\n\n\t\t\t\t\t\t\t\tthis.log.info(\n\t\t\t\t\t\t\t\t\t`handling Osiris ${event}${\n\t\t\t\t\t\t\t\t\t\teventName && ` - ${eventName}`\n\t\t\t\t\t\t\t\t\t} event`\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst data = {\n\t\t\t\t\t\t\t\t\t...(optionalData && { optionalData }),\n\t\t\t\t\t\t\t\t\t...eventData\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// handle widgetUserEvents in event format used in Osiris widgets\n\t\t\t\t\t\t\t\tif (this.isNewTrackEventFormat(eventData)) {\n\t\t\t\t\t\t\t\t\thandlersToNotify.push(\n\t\t\t\t\t\t\t\t\t\t'handleWidgetUserEvent'\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\thandlersToNotify.push(\n\t\t\t\t\t\t\t\t\ttrackEventHandlerMapping[event]\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\thandlersToNotify.forEach((handlerToNotify) =>\n\t\t\t\t\t\t\t\t\tthis.notifyHandlersAndWaitForPageView(\n\t\t\t\t\t\t\t\t\t\thandlerToNotify,\n\t\t\t\t\t\t\t\t\t\tdata\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Utilizes a DataLayerHelper to listen for changes to the data layer and invoking\n\t\t\t\t * {@link #onDataPushed} when a change is detected.\n\t\t\t\t */\n\t\t\t\tmanuallyInitialize() {\n\t\t\t\t\tthis.log.info('listening to DataLayer events');\n\t\t\t\t\t// eslint-disable-next-line no-new\n\t\t\t\t\tnew win.DataLayerHelper(\n\t\t\t\t\t\tthis.win.dataLayer,\n\t\t\t\t\t\t(dataLayer, message) => {\n\t\t\t\t\t\t\tthis.onDataPushed(dataLayer, message);\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\n\t\t\t\t\tthis.log.info('listening to Widget User Events');\n\t\t\t\t\tthis.observeTrackEvents();\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * this function is automatically called by Component.js when a new InteractionListener is created\n\t\t\t\t * but we do not want to initialize yet\n\t\t\t\t * we will manually initialize (using manuallyInitialize function above) once all event handlers have loaded\n\t\t\t\t */\n\t\t\t\tinitialize() {\n\t\t\t\t\tthis.log.info('initialized');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn InteractionListener;\n\t\t})();\n};\n\nexport default runInteractionListener;\n","import { namespace } from 'wsm-tagging-utils';\n\nconst runInjector = (win) => {\n\tnamespace(win, 'DDC.tracking.framework.config');\n\n\tconst {\n\t\tDDC: { tracking },\n\t\tcom\n\t} = win;\n\n\ttracking.framework.config.Injector = function Injector() {\n\t\tthis.log = new com.dealer.log.Logger('ws-tagging:Injector');\n\t};\n\n\ttracking.framework.config.Injector.prototype = {\n\t\t/**\n\t\t * The default constructor\n\t\t */\n\t\tconstructor: tracking.framework.config.Injector,\n\n\t\t/**\n\t\t * Capitalizes the specified string value.\n\t\t *\n\t\t * @param {string} value The value to capitalize\n\t\t * @return {string} The capitalized value\n\t\t */\n\t\tcapitalize(value) {\n\t\t\treturn value.charAt(0).toUpperCase() + value.substring(1);\n\t\t},\n\n\t\t/**\n\t\t * De-capitalizes the specified string value.\n\t\t *\n\t\t * @param {string} value The value to de-capitalize\n\t\t * @return {string} The de-capitalized value\n\t\t */\n\t\tdecapitalize(value) {\n\t\t\treturn value.charAt(0).toLowerCase() + value.substring(1);\n\t\t},\n\n\t\t/**\n\t\t * Returns the setter or mutator function for the named property.\n\t\t *\n\t\t * The specified property is capitalized and prefixed with 'set', i.e.\n\t\t * the property firstName will be transformed to 'setFirstName'\n\t\t *\n\t\t * @param {Object} object The object whose setter function is to be returned\n\t\t * @param {string} property The name of the property being examined\n\t\t * @return {Function} The setter for the named property; undefined if not present\n\t\t */\n\t\tsetterFor(object, property) {\n\t\t\tconst setterName = `set${this.capitalize(property)}`;\n\t\t\treturn object[setterName];\n\t\t},\n\n\t\t/**\n\t\t * Injects the properties from the specified configuration into the specified object.\n\t\t *\n\t\t * This method will first attempt to find a setter function for each property defined\n\t\t * in the configuration; if not found the property will be set directly on the object.\n\t\t *\n\t\t * @param {Object} object The object to be property injected\n\t\t * @param {Object} configuration The source of property names and associated values\n\t\t * @return {Object} The supplied object being property injected\n\t\t */\n\t\tsetProperties(object, configuration) {\n\t\t\tconst newObject = object;\n\n\t\t\tObject.entries(configuration).forEach(([key, value]) => {\n\t\t\t\tconst setter = this.setterFor(object, key);\n\t\t\t\tif (setter !== undefined) {\n\t\t\t\t\tif (this.log.isDebugEnabled()) {\n\t\t\t\t\t\tthis.log.debug(\n\t\t\t\t\t\t\t`using setter injection to set ${key} to: ${JSON.stringify(\n\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t)}`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tsetter.call(object, value);\n\t\t\t\t} else {\n\t\t\t\t\tif (this.log.isDebugEnabled()) {\n\t\t\t\t\t\tthis.log.debug(\n\t\t\t\t\t\t\t`using field injection to set ${key} to: ${JSON.stringify(\n\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t)}`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tnewObject[key] = value;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn newObject;\n\t\t},\n\n\t\t/**\n\t\t * Attempts to initialize the specified object by invoked the named\n\t\t * function as the object initializer. If no function name is provided,\n\t\t * the default value is 'initialize'.\n\t\t *\n\t\t * @param {Object} object The object being initialized\n\t\t * @param {string|undefined} initializer The optional name of the initializer function;\n\t\t * defaults to 'initialize'\n\t\t * @param {boolean|undefined} required true to raise an error if the supplied object does\n\t\t * not contain the initializer function; defaults to false\n\t\t * @return {Object} The initialized object\n\t\t */\n\t\tinitialize(object, initializer = 'initialize', required) {\n\t\t\tif (\n\t\t\t\tobject[initializer] !== undefined &&\n\t\t\t\ttypeof object[initializer] === 'function'\n\t\t\t) {\n\t\t\t\tthis.log.debug(`invoking ${initializer}()`);\n\t\t\t\tobject[initializer].call(object);\n\t\t\t} else if (required) {\n\t\t\t\tthrow new Error(`Initializer not found: ${initializer}()`);\n\t\t\t} else {\n\t\t\t\tthis.log.debug(`initializer not found: ${initializer}()`);\n\t\t\t}\n\t\t\treturn object;\n\t\t}\n\t};\n\n\t/**\n\t * @type tracking.framework.config.Injector\n\t */\n\ttracking.framework.config.Injector.singleton =\n\t\tnew tracking.framework.config.Injector();\n\n\t/**\n\t * Returns the single instance of the Injector.\n\t *\n\t * @return {tracking.framework.config.Injector}\n\t * @see https://sourcemaking.com/design_patterns/singleton\n\t */\n\ttracking.framework.config.Injector.get = function get() {\n\t\treturn tracking.framework.config.Injector.singleton;\n\t};\n};\n\nexport default runInjector;\n","import { namespace, resolve } from 'wsm-tagging-utils';\n\nconst runComponent = (win) => {\n\tnamespace(win, 'DDC.tracking.framework.config');\n\n\tconst {\n\t\tDDC: { tracking },\n\t\tcom\n\t} = win;\n\n\t/**\n\t * Constructs a new Component representation given the specified definition\n\t * and default definition. A component definition will have the following\n\t * structure:\n\t *\n\t * var definition = {\n\t * className: '',\n\t * properties: {\n\t * propertyA: 'value',\n\t * propertyB: 12345,\n\t * propertyC: true,\n\t * },\n\t * initializer: ''\n\t * };\n\t *\n\t * @param {Object} definition The primary component definition\n\t * @param {Object|undefined} defaults The fallback definition used when not present in primary definition\n\t * @constructor\n\t */\n\ttracking.framework.config.Component = function Component(\n\t\tdefinition,\n\t\tdefaults\n\t) {\n\t\tthis.log = new com.dealer.log.Logger('ws-tagging:Component');\n\t\tthis.injector = tracking.framework.config.Injector.get();\n\t\tthis.definition = definition || {};\n\t\tthis.defaults = defaults || {};\n\t};\n\n\ttracking.framework.config.Component.prototype = {\n\t\t/**\n\t\t * The default constructor\n\t\t */\n\t\tconstructor: win.DDC.tracking.framework.config.Component,\n\n\t\t/**\n\t\t * Applies the component definition to this current instance.\n\t\t *\n\t\t * @param {Object} definition The primary component definition\n\t\t * @param {Object|undefined} defaults The fallback definition used when not present in primary definition\n\t\t * @return {tracking.framework.config.Component}\n\t\t */\n\t\twithDefinition(definition, defaults) {\n\t\t\tthis.definition = definition || {};\n\t\t\tthis.defaults = defaults || {};\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Returns the configured fully qualified class name for the component represented by\n\t\t * the current definition. This is the only required component definition property.\n\t\t *\n\t\t * @return {string} The fully qualified class name for the current component\n\t\t */\n\t\tclassName() {\n\t\t\tif (this.definition.className !== undefined) {\n\t\t\t\treturn this.definition.className;\n\t\t\t}\n\t\t\tif (this.defaults.className !== undefined) {\n\t\t\t\treturn this.defaults.className;\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t'Failed to determine class from component definition'\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Returns an optional object containing the property names and associated\n\t\t * values to inject into the component after instantiation.\n\t\t *\n\t\t * @return {Object|undefined} The optional object containing property names and values\n\t\t */\n\t\tproperties() {\n\t\t\treturn this.definition.properties || this.defaults.properties;\n\t\t\t// if (this.definition.properties !== undefined) {\n\t\t\t// \treturn this.definition.properties;\n\t\t\t// }\n\t\t\t// if (this.defaults.properties !== undefined) {\n\t\t\t// \treturn this.defaults.properties;\n\t\t\t// }\n\t\t},\n\n\t\t/**\n\t\t * Returns the optional name of an initializer function to invoke after component\n\t\t * has been instantiated and properties set.\n\t\t *\n\t\t * @return {string|undefined} The optional name of an initializer function to invoke\n\t\t */\n\t\tinitializer() {\n\t\t\treturn this.definition.initializer || this.defaults.initializer;\n\t\t\t// if (this.definition.initializer !== undefined) {\n\t\t\t// \treturn this.definition.initializer;\n\t\t\t// }\n\t\t\t// if (this.defaults.initializer !== undefined) {\n\t\t\t// \treturn this.defaults.initializer;\n\t\t\t// }\n\t\t},\n\n\t\t/**\n\t\t * Instantiates a component instance based on it's current definition. Component\n\t\t * instantiation observes the following protocol:\n\t\t *\n\t\t * 1. {@link #className} is used to determine the implementation class whose\n\t\t * constructor function is to be resolved. The factory function will be invoked\n\t\t * with this constructor function and an instance of the class will be returned.\n\t\t *\n\t\t * 2. The component instance returned from the factory function will be injected\n\t\t * with the results of {@link #properties}, if any configured properties are present.\n\t\t *\n\t\t * 3. The component instance's initializer will be invoked, if present.\n\t\t *\n\t\t * @param {Object} caller The caller, used as the 'this' argument when invoking\n\t\t * the factory function\n\t\t * @param {Function} factory A factory function that will return a new instance\n\t\t * when invoked with the resolved constructor function.\n\t\t * @param {boolean|undefined} initializerRequired An optional flag indicating the\n\t\t * required presence of the initializer function; defaults to false.\n\t\t */\n\t\tinstantiate(caller, factory, initializerRequired = false) {\n\t\t\t// initializerRequired =\n\t\t\t// \tinitializerRequired === undefined ? false : initializerRequired;\n\t\t\tconst className = this.className();\n\t\t\tthis.log.debug(`instantiating ${className}`);\n\t\t\t// Instantiate the component\n\t\t\tconst instance = factory.call(caller, resolve(win, className));\n\t\t\t// Inject the properties, if present\n\t\t\tconst properties = this.properties();\n\t\t\tif (properties !== undefined) {\n\t\t\t\tthis.log.debug(\n\t\t\t\t\t`injecting configured properties into ${className}`\n\t\t\t\t);\n\t\t\t\tthis.injector.setProperties(instance, properties);\n\t\t\t}\n\t\t\t// Initialize the component\n\t\t\tconst initializer = this.initializer();\n\t\t\tif (initializerRequired || initializer !== undefined) {\n\t\t\t\tthis.log.debug(\n\t\t\t\t\t`attempting to invoke ${className}.${initializer}()`\n\t\t\t\t);\n\t\t\t\tthis.injector.initialize(\n\t\t\t\t\tinstance,\n\t\t\t\t\tinitializer,\n\t\t\t\t\tinitializerRequired\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn instance;\n\t\t}\n\t};\n};\n\nexport default runComponent;\n","import { namespace } from 'wsm-tagging-utils';\n\nconst runRuntimeBuilder = (win) => {\n\tnamespace(win, 'DDC.tracking.framework.config');\n\n\tconst {\n\t\tDDC: { tracking },\n\t\tcom,\n\t\tDataLayerHelper\n\t} = win;\n\n\ttracking.framework.config.RuntimeBuilder = (function buildRuntimeBuilder() {\n\t\t// ======================================================================\n\t\t// --------------- Private Static Variables and Functions ---------------\n\t\t// ======================================================================\n\n\t\t/**\n\t\t * Maintains a set of unique components instantiated by all RuntimeBuilders.\n\t\t * Components are stored using their class name as key, with each key containing\n\t\t * an array of these instantiated components. Each element of the array is an\n\t\t * object in the following format:\n\t\t * {\n\t\t * component: *a reference to the component*\n\t\t * configuration: *the configuration used to create the component*\n\t\t * }\n\t\t */\n\t\tconst container = {};\n\n\t\t/**\n\t\t * Performs a comparison of two objects.\n\t\t * **Currently performs a shallow comparison.**\n\t\t *\n\t\t * @param {Object} obj1 an object to compare\n\t\t * @param {Object} obj2 an object to compare\n\t\t * @returns {boolean} whether the two objects are equal\n\t\t */\n\t\tconst objectsAreEqual = (obj1, obj2) =>\n\t\t\ttypeof obj1 === 'object' &&\n\t\t\ttypeof obj2 === 'object' &&\n\t\t\tObject.keys(obj1).length === Object.keys(obj2).length &&\n\t\t\tObject.keys(obj1).every((key) => obj1[key] === obj2[key]);\n\n\t\tclass RuntimeBuilder {\n\t\t\t/**\n\t\t\t * The RuntimeBuilder is responsible for producing the runtime parts that ultimately result in a new\n\t\t\t * InteractionListener based on the supplied configuration.\n\t\t\t *\n\t\t\t * @param {Object} thisWin The window object\n\t\t\t * @param {Object} configuration The configuration object used to build the various runtime components.\n\t\t\t * @constructor\n\t\t\t *\n\t\t\t * @see https://sourcemaking.com/design_patterns/builder\n\t\t\t * @see tracking.framework.config.Main\n\t\t\t */\n\t\t\tconstructor(thisWin, configuration) {\n\t\t\t\tthis.log = new com.dealer.log.Logger(\n\t\t\t\t\t'ws-tagging:RuntimeBuilder'\n\t\t\t\t);\n\t\t\t\tthis.component =\n\t\t\t\t\tnew win.DDC.tracking.framework.config.Component();\n\t\t\t\tthis.win = thisWin;\n\t\t\t\tthis.configuration = configuration;\n\t\t\t\tthis.flags = configuration.flags;\n\t\t\t\tthis.waitOnEventToStartHandling =\n\t\t\t\t\tconfiguration.waitOnEventToStartHandling;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Ensures the DataLayer data structure has been properly initialized\n\t\t\t */\n\t\t\tbuildDataLayer() {\n\t\t\t\tthis.log.debug('building data layer...');\n\t\t\t\t// SMELL: seems like this should be done in ddc-data-layer widget\n\t\t\t\tthis.win.dataLayer = this.win.dataLayer || [\n\t\t\t\t\tthis.win.DDC.dataLayer\n\t\t\t\t];\n\t\t\t\tthis.log.debug('data layer built.');\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Builds a Page instance which will be shared among all the components\n\t\t\t * that need one.\n\t\t\t *\n\t\t\t * @returns {tracking.framework.runtime.Page}\n\t\t\t */\n\t\t\tbuildPage() {\n\t\t\t\tthis.log.debug('building page...');\n\t\t\t\tconst page = this.component\n\t\t\t\t\t.withDefinition(this.configuration.page, {\n\t\t\t\t\t\tclassName: 'DDC.tracking.framework.runtime.Page'\n\t\t\t\t\t})\n\t\t\t\t\t.instantiate(this, function getNewpageClass(PageClass) {\n\t\t\t\t\t\t// The DDC datalayer is not available inside window.dataLayer at this point\n\t\t\t\t\t\t// So, we directly use DDC.dataLayer to build our DataLayerHelper.\n\t\t\t\t\t\treturn new PageClass(\n\t\t\t\t\t\t\tnew DataLayerHelper(\n\t\t\t\t\t\t\t\tthis.flags[\n\t\t\t\t\t\t\t\t\t'google-tag-manager-move-below-js-stack'\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t? [this.win.DDC.dataLayer]\n\t\t\t\t\t\t\t\t\t: this.win.dataLayer\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\tthis.log.debug('page built.');\n\t\t\t\treturn page;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Builds a Page instance which will be shared among all the components\n\t\t\t * that need one.\n\t\t\t *\n\t\t\t * @returns {tracking.framework.runtime.Page}\n\t\t\t */\n\t\t\tbuildForm() {\n\t\t\t\tthis.log.debug('building form...');\n\t\t\t\tconst form = this.component\n\t\t\t\t\t.withDefinition(this.configuration.form, {\n\t\t\t\t\t\tclassName: 'DDC.tracking.framework.runtime.Form'\n\t\t\t\t\t})\n\t\t\t\t\t.instantiate(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\tfunction getNewFormClass(FormClass) {\n\t\t\t\t\t\t\treturn new FormClass(this.configuration.form);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\tthis.log.debug('form built.');\n\t\t\t\treturn form;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Builds the EventHandler implementation configured for the InteractionListener\n\t\t\t * being constructed. This method instantiates and configures the EventHandler\n\t\t\t * implementation and invokes the initialize() method if present.\n\t\t\t *\n\t\t\t * @param {tracking.framework.runtime.Page} page The Page instance for the EventHandler to use\n\t\t\t * @returns {tracking.framework.runtime.EventHandler}\n\t\t\t */\n\t\t\tbuildEventHandler(page, form) {\n\t\t\t\tthis.log.debug('building event handler...');\n\t\t\t\tconst eventHandler = this.component\n\t\t\t\t\t.withDefinition(this.configuration.eventHandler, {\n\t\t\t\t\t\tinitializer: 'initialize'\n\t\t\t\t\t})\n\t\t\t\t\t.instantiate(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\tfunction getNewEventHandlerClass(EventHandlerClass) {\n\t\t\t\t\t\t\treturn new EventHandlerClass(this.win, page, form);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\tthis.log.debug('event handler built.');\n\t\t\t\treturn eventHandler;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Instantiates and applies the configured EventHandlerDecorator implementations to the\n\t\t\t * supplied EventHandler instance for the InteractionListener being built.\n\t\t\t *\n\t\t\t * EventHandlerDecorator instances follow the \"Chain of Responsibility\" design pattern,\n\t\t\t * therefore this method must ensure that the decorators are applied in the correct order:\n\t\t\t * The first decorator specified in the configuration will be the first to be invoked\n\t\t\t * by the InteractionListener, while the last decorator specified will be invoked\n\t\t\t * immediately before the actual EventHandler instance.\n\t\t\t *\n\t\t\t * @param {tracking.framework.runtime.Page} page The Page instance for the EventHandler to use\n\t\t\t * @param {tracking.framework.runtime.EventHandler} eventHandler The instantiated EventHandler specified by configuration\n\t\t\t * @returns {tracking.framework.runtime.EventHandler} The decorated EventHandler to be used by the InteractionListener\n\t\t\t */\n\t\t\tbuildDecoratorChain(page, eventHandler, form) {\n\t\t\t\tthis.log.debug('building decorator chain...');\n\t\t\t\tif (this.configuration.decorators !== undefined) {\n\t\t\t\t\tfor (\n\t\t\t\t\t\tlet index = this.configuration.decorators.length - 1;\n\t\t\t\t\t\tindex >= 0;\n\t\t\t\t\t\tindex--\n\t\t\t\t\t) {\n\t\t\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\t\t\teventHandler = this.component\n\t\t\t\t\t\t\t.withDefinition(\n\t\t\t\t\t\t\t\tthis.configuration.decorators[index],\n\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.instantiate(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\t\t\t\t\t\tfunction geteventHandlerDecoratorClass(\n\t\t\t\t\t\t\t\t\tEventHandlerDecoratorClass\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\treturn new EventHandlerDecoratorClass(\n\t\t\t\t\t\t\t\t\t\tthis.win,\n\t\t\t\t\t\t\t\t\t\tpage,\n\t\t\t\t\t\t\t\t\t\teventHandler,\n\t\t\t\t\t\t\t\t\t\tform\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.log.debug('decorator chain built.');\n\t\t\t\treturn eventHandler;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Builds a new InteractionListener with the specified Page and EventHandler.\n\t\t\t *\n\t\t\t * @param {tracking.framework.runtime.Page} page The Page instance for the InteractionListener to use\n\t\t\t * @param {tracking.framework.runtime.Form} form The Form instance for the InteractionListener to use\n\t\t\t * @param {tracking.framework.runtime.EventHandler} eventHandler The instantiated EventHandler specified by configuration\n\t\t\t * @returns {tracking.framework.runtime.InteractionListener}\n\t\t\t */\n\t\t\tbuildInteractionListener(page, eventHandler, form) {\n\t\t\t\tconst config = this.configuration.interactionListener || {\n\t\t\t\t\tclassName:\n\t\t\t\t\t\t'DDC.tracking.framework.runtime.InteractionListener',\n\t\t\t\t\tinitializer: 'initialize'\n\t\t\t\t};\n\n\t\t\t\t// attempt to retrieve identical interaction listener\n\t\t\t\tlet listener = this.getComponent(config);\n\n\t\t\t\tif (typeof listener === 'undefined') {\n\t\t\t\t\t// build new interaction listener\n\t\t\t\t\tthis.log.debug('building interaction listener...');\n\t\t\t\t\tlistener = this.component\n\t\t\t\t\t\t.withDefinition(config)\n\t\t\t\t\t\t.instantiate(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\tfunction getNewInteractionListenerClass(\n\t\t\t\t\t\t\t\tInteractionListenerClass\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn new InteractionListenerClass(\n\t\t\t\t\t\t\t\t\tthis.win,\n\t\t\t\t\t\t\t\t\tpage,\n\t\t\t\t\t\t\t\t\teventHandler,\n\t\t\t\t\t\t\t\t\tform,\n\t\t\t\t\t\t\t\t\tthis.flags,\n\t\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\tthis.waitOnEventToStartHandling\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\tthis.log.debug('interaction listener built.');\n\n\t\t\t\t\t// add listener to container\n\t\t\t\t\tthis.setComponent(config, listener);\n\t\t\t\t} else {\n\t\t\t\t\t// add new event handler to interaction listener\n\t\t\t\t\tlistener.addEventHandlers(eventHandler);\n\t\t\t\t}\n\n\t\t\t\treturn listener;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Builds an array of {@link tracking.framework.runtime.Command} objects to be executed after the\n\t\t\t * {@link tracking.framework.runtime.InteractionListener} has been initialized.\n\t\t\t *\n\t\t\t * @param {tracking.framework.runtime.Page} page The Page instance for the Command instances to use\n\t\t\t * @param {tracking.framework.runtime.Form} form The Form instance for the Command instances to use\n\t\t\t * @returns {Array} An array of {@link tracking.framework.runtime.Command} objects to be executed after the\n\t\t\t * {@link tracking.framework.runtime.InteractionListener} has been initialized.\n\t\t\t */\n\t\t\tbuildStartupCommands(page, eventHandler, form) {\n\t\t\t\tconst commands = [];\n\t\t\t\tthis.log.debug('building startup commands...');\n\t\t\t\tif (this.configuration.startupCommands !== undefined) {\n\t\t\t\t\tfor (\n\t\t\t\t\t\tlet index = 0;\n\t\t\t\t\t\tindex < this.configuration.startupCommands.length;\n\t\t\t\t\t\tindex++\n\t\t\t\t\t) {\n\t\t\t\t\t\tcommands.push(\n\t\t\t\t\t\t\tthis.component\n\t\t\t\t\t\t\t\t.withDefinition(\n\t\t\t\t\t\t\t\t\tthis.configuration.startupCommands[index],\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.instantiate(\n\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\tfunction getNewCommandClass(CommandClass) {\n\t\t\t\t\t\t\t\t\t\treturn new CommandClass(\n\t\t\t\t\t\t\t\t\t\t\tthis.win,\n\t\t\t\t\t\t\t\t\t\t\tpage,\n\t\t\t\t\t\t\t\t\t\t\teventHandler,\n\t\t\t\t\t\t\t\t\t\t\tform\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.log.debug('startup commands built...');\n\t\t\t\treturn commands;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Returns a component built using the provided configuration\n\t\t\t *\n\t\t\t * @param {Object} configuration the configuration of the requested component\n\t\t\t * @returns {*} a component matching the requested configuration; undefined if not found\n\t\t\t */\n\t\t\tgetComponent(configuration) {\n\t\t\t\tconst componentList =\n\t\t\t\t\tcontainer[configuration && configuration.className];\n\n\t\t\t\tif (componentList) {\n\t\t\t\t\t// perform comparison of configs to determine if component is using identical configuration\n\t\t\t\t\tfor (let i = 0; i < componentList.length; i++) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tobjectsAreEqual(\n\t\t\t\t\t\t\t\tconfiguration,\n\t\t\t\t\t\t\t\tcomponentList[i].configuration\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthis.log.debug(\n\t\t\t\t\t\t\t\t`retrieving identical ${configuration.className} component`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn componentList[i].component;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Returns a component built using the provided configuration\n\t\t\t *\n\t\t\t * @param {Object} configuration the configuration of the component to store\n\t\t\t * @param {*} component the component built using the provided configuration\n\t\t\t */\n\t\t\tsetComponent(configuration, component) {\n\t\t\t\tif (configuration && configuration.className && component) {\n\t\t\t\t\tthis.log.debug(\n\t\t\t\t\t\t`adding new ${configuration.className} component to container`\n\t\t\t\t\t);\n\t\t\t\t\tcontainer[configuration.className] =\n\t\t\t\t\t\tcontainer[configuration.className] || [];\n\t\t\t\t\tcontainer[configuration.className].push({\n\t\t\t\t\t\tconfiguration,\n\t\t\t\t\t\tcomponent\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Retrieves container of components currently instantiated\n\t\t\t *\n\t\t\t * @returns {Object} the container of components\n\t\t\t */\n\t\t\tstatic getContainer() {\n\t\t\t\treturn container;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Removes container's references to built components\n\t\t\t */\n\t\t\tstatic clearContainer() {\n\t\t\t\tObject.keys(container).forEach((key) => {\n\t\t\t\t\tdelete container[key];\n\t\t\t\t});\n\t\t\t\t// for (const key in container) {\n\t\t\t\t// \tif (container.hasOwnProperty(key)) {\n\t\t\t\t// \t\tdelete container[key];\n\t\t\t\t// \t}\n\t\t\t\t// }\n\t\t\t}\n\t\t}\n\n\t\treturn RuntimeBuilder;\n\t})();\n};\n\nexport default runRuntimeBuilder;\n","import { namespace } from 'wsm-tagging-utils';\nimport eventShouldBeTracked from '../../../eventShouldBeTracked';\n\nconst runMain = (win) => {\n\tnamespace(win, 'DDC.tracking.framework.config');\n\n\tconst {\n\t\tDDC: { tracking },\n\t\tcom,\n\t\tnewrelic\n\t} = win;\n\n\t/**\n\t * The Main class represents the entry point of the DDC Data Tracking Framework runtime.\n\t * It coordinates the construction process of an InteractionListener using the specified\n\t * RuntimeBuilder to build the parts that are assembled into the tracking runtime.\n\t *\n\t * Main fulfills the role of Director in the Builder Design Pattern.\n\t */\n\ttracking.framework.config.Main = class {\n\t\t/**\n\t\t * Creates the Main object\n\t\t *\n\t\t * @param {tracking.framework.config.RuntimeBuilder} builder The builder used to construct\n\t\t * the various DDC Data Tracking Framework components.\n\t\t * @constructor\n\t\t *\n\t\t * @see https://sourcemaking.com/design_patterns/builder\n\t\t * @see tracking.framework.config.RuntimeBuilder\n\t\t */\n\t\tconstructor(builder) {\n\t\t\tthis.log = new com.dealer.log.Logger('ws-tagging:Main');\n\t\t\tthis.builder = builder;\n\t\t\tthis.page = undefined;\n\t\t\tthis.form = undefined;\n\t\t\tthis.eventHandler = undefined;\n\t\t\tthis.decoratorChain = undefined;\n\t\t\tthis.listener = undefined;\n\t\t\tthis.trackingWidget = builder?.configuration?.widgetName;\n\t\t\tthis.trackingWidgetId = builder?.configuration?.widgetId;\n\t\t\tthis.flags = builder?.configuration?.flags || {};\n\t\t}\n\n\t\t/**\n\t\t * Utilizes the RuntimeBuilder with which this instance was created to\n\t\t * assemble the runtime components.\n\t\t */\n\t\tassembleRuntimeComponents() {\n\t\t\tthis.log.debug('assembling runtime components...');\n\t\t\tthis.builder.buildDataLayer();\n\t\t\tthis.page = this.builder.buildPage();\n\t\t\tthis.form = this.builder.buildForm();\n\t\t\tthis.eventHandler = this.builder.buildEventHandler(\n\t\t\t\tthis.page,\n\t\t\t\tthis.form\n\t\t\t);\n\t\t\tthis.decoratorChain = this.builder.buildDecoratorChain(\n\t\t\t\tthis.page,\n\t\t\t\tthis.eventHandler,\n\t\t\t\tthis.form\n\t\t\t);\n\t\t\tthis.listener = this.builder.buildInteractionListener(\n\t\t\t\tthis.page,\n\t\t\t\tthis.decoratorChain,\n\t\t\t\tthis.form\n\t\t\t);\n\t\t\tthis.log.debug('runtime components assembled.');\n\t\t}\n\n\t\t/**\n\t\t * Executes configured start up commands after the DDC Tracking Framework runtime has been initialized.\n\t\t */\n\t\texecuteStartupCommands() {\n\t\t\tconst startupCommands = this.builder.buildStartupCommands(\n\t\t\t\tthis.page,\n\t\t\t\tthis.eventHandler,\n\t\t\t\tthis.form\n\t\t\t);\n\t\t\tif (startupCommands !== undefined && startupCommands.length > 0) {\n\t\t\t\tthis.log.debug('executing startup commands...');\n\t\t\t\tfor (let index = 0; index < startupCommands.length; index++) {\n\t\t\t\t\tconst command = startupCommands[index];\n\t\t\t\t\tcommand.execute();\n\t\t\t\t}\n\t\t\t\tthis.log.debug('startup commands executed.');\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Launches the DDC Tracking Framework runtime using the RuntimeBuilder with which this\n\t\t * instance was created to assemble the runtime components then executes any startup commands.\n\t\t */\n\t\texecute() {\n\t\t\tif (newrelic) {\n\t\t\t\tif (eventShouldBeTracked()) {\n\t\t\t\t\t// is this report still happening?\n\t\t\t\t\tnewrelic.addPageAction(\n\t\t\t\t\t\t`${this.trackingWidget}_widget_load`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidgetId: this.trackingWidgetId\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.assembleRuntimeComponents();\n\t\t\tthis.executeStartupCommands();\n\t\t}\n\t};\n};\n\nexport default runMain;\n","import runPage from './runtime/Page';\nimport runForm from './runtime/Form';\nimport runCommand from './runtime/Command';\nimport runEventHandler from './runtime/EventHandler';\nimport runEventHandlerDecorator from './runtime/EventHandlerDecorator';\nimport runInteractionListener from './runtime/InteractionListener';\nimport runInjector from './config/Injector';\nimport runComponent from './config/Component';\nimport runRuntimeBuilder from './config/RuntimeBuilder';\nimport runMain from './config/Main';\n\nconst runTrackingFramework = (win, flags) => {\n\trunPage(win);\n\trunForm(win);\n\trunCommand(win);\n\trunEventHandler(win, flags);\n\trunEventHandlerDecorator(win);\n\trunInteractionListener(window);\n\trunInjector(window);\n\trunComponent(window);\n\trunRuntimeBuilder(window);\n\trunMain(window);\n};\n\nexport default runTrackingFramework;\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).WsmTaggingUtils={})}(this,(function(e){\"use strict\";const t=e=>e.trim().replace(/ {2}|[\\t\\n\\r]/gm,\"\"),n=(e,t,o,r,i)=>{const s=[...e];return Object.entries(o).forEach((e=>{let[o,a]=e;const l=a,c=(e=>null==e||!e.trim())(t)?o:`${t}.${o}`;\"function\"==typeof l?(void 0===i||i(c,l))&&s.push(l):r&&n(s,c,l,r,i)})),s},o=Object.freeze({SPECIALS_EVENT:\"specialsEvent\",THIRD_PARTY_USER_EVENT:\"thirdPartyUserEvent\",TRACK_EVENT:\"trackEvent\",WIDGET_USER_EVENT:\"widgetUserEvent\"}),r=(e,t,n)=>{if(void 0===t)throw new Error(\"Invalid class name\");const o=t.split(\".\");if(\"\"===o[0])throw new Error(\"Invalid class name\");for(void 0===n&&(n=e);o.length>0;){if(void 0===(n=n[o.shift()]))break}if(void 0!==n&&\"function\"!=typeof n)throw new Error(`${t} is not a class definition`);return n};e.createElement=e=>{const n=document.createElement(\"template\");return n.innerHTML=t(e),n.content.firstChild},e.enumerate=(e,t,o,r)=>{let i,s;if(void 0===t)throw new Error(\"Invalid namespace\");const a=t.split(\".\");if(\"\"===a[0])throw new Error(\"Invalid namespace\");void 0===r&&(i=e);const l=(d=\"*\",-1!==(c=t).indexOf(d,c.length-d.length));var c,d;if(l){if(a.pop(),0===a.length&&i===e)throw new Error(\"Wildcard enumeration window scope not allowed\");s=a.join(\".\")}for(;a.length>0;){const e=a.shift();if(i=i[e],void 0===i)throw new Error(`Invalid namespace: ${e} not found in ${s}`)}return n([],s,i,l,o)},e.extend=(e,t)=>{e.prototype=Object.create(t.prototype),e.prototype.constructor=e},e.globalConstants=o,e.lookup=r,e.namespace=(e,t,n,o)=>{let r=n,i=o;if(void 0===t)throw new Error(\"Invalid namespace name\");void 0===r&&(r=e),void 0===o&&\"function\"==typeof r&&(i=r,r=e);const s=t.split(\".\");if(\"\"===s[0])return void 0!==i&&i.call(i,r),r;for(;s.length>0;){const e=s.shift();void 0===r[e]&&(r[e]={}),r=r[e]}return void 0!==i&&i.call(i,r),r},e.readyHTMLForParse=t,e.resolve=(e,t,n)=>{const o=r(e,t,n);if(void 0===o)throw new Error(`${t} not found`);return o},Object.defineProperty(e,\"__esModule\",{value:!0})}));\n//# sourceMappingURL=umd.js.map\n"],"names":["getEnv","PROD","Math","floor","random","win","namespace","DDC","tracking","framework","runtime","Page","dataLayerHelper","this","formMapping","Map","prototype","constructor","isPageType","test","alias","newAlias","undefined","currentPageAlias","currentPageId","call","isNewVehiclePage","testAlias","indexOf","isCertifiedUsedVehiclePage","isUsedVehiclePage","isIndexPage","isVehicleListingPage","isVehicleDetailPage","aliasToUse","isIncentivesPage","isHoursOrDirectionsPage","isAboutOrStaffPage","isContactPage","isComparePage","isTradeInPage","isToolPage","isOffersPage","isServicePage","isFinancePage","isCorporatePage","isBrochurePage","isConfirmationPage","isErrorPage","isNoResultsPage","isModelShowroomPage","dataLayerProperty","isVideoGalleryPage","name","get","widgetIsPresent","regex","pageWidgets","Object","values","some","value","queryFacetIsPresent","queryFacets","queryFacet","setLocalStorage","storageKey","eventData","localStorage","setItem","JSON","stringify","getLocalStorage","data","getItem","parse","element","div","document","createElement","innerHTML","firstChild","removeLocalStorage","removeItem","newrelic","Form","properties","wsTaggingGrouping","wsTaggingTrackingWidget","report","attributes","eventShouldBeTracked","addPageAction","getFormMapping","formTrackingId","startTime","Date","now","has","Promise","resolve","reject","apiUri","fetch","then","response","json","wsTaggingAPIDuration","set","catch","error","com","Command","thisWin","page","eventHandler","form","log","dealer","Logger","createFor","logCategory","execute","flags","EventHandler","widgetId","handlePageView","_eventData","handleVehicleDetailView","handleSlideshowClick","handleAjaxContentLoad","handleDialogOpened","handleDialogClosed","handleFormChange","handleTypedSearch","handleTypedSearchInit","handleTypedSearchResults","handlePaymentCalcInit","handleFormConfirmation","handleFormInitiation","handleFormOnPage","handleFormSubmission","handleClickToCall","handleComparePageClick","handleHproductClick","handleRecommendedVehicleClick","handleOfferClick","handleNavigationClick","handleFilterSearch","handleFilterSearchClick","handleIncentiveFilter","handleLinkClick","handleMapClick","handleSocialHeaderClick","handleSocialShare","handleGetDirections","handleSpecialsEvent","handleWidgetUserEvent","handleAllWidgetUserEvents","handleThirdPartyUserEvent","handleVehicleCompareCheck","handleVideoPlay","handleVideoMilestone","handleSlideshowPagerClick","EventHandlerDecorator","window","delegate","super","eventHandlerPrototype","keys","filter","prop","forEach","handlerMethodName","THIRD_PARTY_USER_EVENT","TRACK_EVENT","WIDGET_USER_EVENT","globalConstants","InteractionListener","handlerMapping","specialsEvent","trackEventHandlerMapping","eventHandlers","pageViewEventHasFired","waitOnEventToStartHandling","event","widgetName","action","result","Array","isArray","runningUnitTest","hasWaitedToStartHandling","addEventHandlers","debug","push","warn","onDataPushed","dataLayer","message","mappedHandlerMethod","info","notifyHandlersAndWaitForPageView","checkSatelliteAndNotifyHandler","handler","handlerMethod","_satellite","track","timeout","setTimeout","skipSatelliteCheck","interval","setInterval","clearInterval","clearTimeout","notifyHandlers","WidgetData","browserEventNames","includes","addEventListener","e","console","observeTrackEvents","$","on","_event","optionalData","eventName","handlersToNotify","isNewTrackEventFormat","handlerToNotify","manuallyInitialize","DataLayerHelper","initialize","config","Injector","capitalize","charAt","toUpperCase","substring","decapitalize","toLowerCase","setterFor","object","property","setProperties","configuration","newObject","entries","key","setter","isDebugEnabled","initializer","required","Error","singleton","Component","definition","defaults","injector","withDefinition","className","instantiate","caller","factory","initializerRequired","instance","RuntimeBuilder","container","objectsAreEqual","obj1","obj2","length","every","component","buildDataLayer","buildPage","PageClass","buildForm","FormClass","buildEventHandler","EventHandlerClass","buildDecoratorChain","decorators","index","EventHandlerDecoratorClass","buildInteractionListener","interactionListener","listener","getComponent","InteractionListenerClass","setComponent","buildStartupCommands","commands","startupCommands","CommandClass","componentList","i","getContainer","clearContainer","Main","builder","decoratorChain","trackingWidget","trackingWidgetId","assembleRuntimeComponents","executeStartupCommands","runPage","runForm","runCommand","runEventHandler","runEventHandlerDecorator","runInteractionListener","runInjector","runComponent","runRuntimeBuilder","runMain","t","trim","replace","n","o","r","s","a","l","c","freeze","SPECIALS_EVENT","split","shift","content","enumerate","d","pop","join","extend","create","lookup","readyHTMLForParse","defineProperty","exports"],"sourceRoot":""}