{"version":3,"file":"5778-bfa9557a8573d79dd719.js","mappings":"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","sources":["webpack://@whistleout/webui/./Areas/Widgets/js/common/utils/QueryStringHelper.js","webpack://@whistleout/webui/./Areas/Widgets/js/common/utils/ReferrerHelper.js","webpack://@whistleout/webui/./Areas/Broadband/js/redux/broadbandApi.ts","webpack://@whistleout/webui/./Areas/Broadband/js/redux/broadbandSlice.ts","webpack://@whistleout/webui/./Areas/Broadband/js/redux/modalSlice.ts","webpack://@whistleout/webui/./Areas/Broadband/js/redux/searchSlice.ts","webpack://@whistleout/webui/./Areas/Shared/js/EmailMySearch.ts","webpack://@whistleout/webui/./Areas/Shared/js/vendor/deferred/slick.ts","webpack://@whistleout/webui/./Areas/Shared/js/common/core.ts","webpack://@whistleout/webui/./Areas/Shared/js/common/common.ts","webpack://@whistleout/webui/./Areas/Shared/js/utils/queryString.ts","webpack://@whistleout/webui/./Areas/Shared/js/common/rollbar.ts","webpack://@whistleout/webui/./Areas/Shared/js/polyfills/IdleCallback.ts","webpack://@whistleout/webui/./Areas/Shared/js/redux/sharedSlice.ts","webpack://@whistleout/webui/./Areas/Shared/js/redux/rootReducer.ts","webpack://@whistleout/webui/./Areas/Shared/js/redux/store.ts","webpack://@whistleout/webui/./Areas/Shared/js/utils/array.ts","webpack://@whistleout/webui/./Areas/Shared/js/utils/datalayer.ts","webpack://@whistleout/webui/./Areas/Shared/js/utils/timer.ts","webpack://@whistleout/webui/./Areas/Shared/js/vendor/deferred/bootstrap-select.ts"],"sourcesContent":["export function appendQueryParam(queryString, param) {\n var value = queryString;\n if (value.length > 0) value += '&';\n\n value += param;\n return value;\n}\n\nexport function updateQueryStringParameter(url, key, value) {\n if (url == null) return null;\n if (key == null) return url;\n\n var regex = new RegExp('(' + key + '=[^&]*)&?', 'i');\n var separator = url.indexOf('?') !== -1 ? '&' : '?';\n var result;\n if (url.match(regex)) {\n if (value === null || typeof value === 'undefined' || value.length === 0) {\n result = url.replace(regex, '').replace(/&$/, '');\n } else {\n result = url.replace(regex, key + '=' + value + '&').replace(/&$/, '');\n }\n }\n else {\n if (value === null || typeof value === 'undefined' || value.length === 0) {\n result = url;\n } else {\n result = url + separator + key + '=' + value;\n }\n }\n\n return result;\n}\n\nexport function getQueryStringParameter(name, url) {\n if (!url) url = window.location.href;\n // eslint-disable-next-line no-useless-escape\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n var regex = new RegExp('(^|[?&])' + name + '(=([^&#]*)|&|#|$)');\n\n var matches = regex.exec(url);\n if (!matches) return null;\n\n var match = matches[3];\n if (!match) return '';\n return decodeURIComponent(match.replace(/\\+/g, ' '));\n}","import * as QueryStringHelper from './QueryStringHelper';\n\nexport function getReferrerEncoded() {\n return QueryStringHelper.getQueryStringParameter('_r') || encodeURIComponent(document.referrer);\n}\n","import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\n\nimport type { SearchResult } from '../@types/api/SearchResult';\n\nexport const broadbandApi = createApi({\n reducerPath: 'broadband/api',\n baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n endpoints: builder => ({\n getSearchResults: builder.query({\n query: ({ baseUrl, queryString }) => {\n return queryString.length ? `${baseUrl}?${queryString}` : baseUrl;\n }\n }),\n getTransactUrl: builder.query<\n { transactUrl: string },\n { supplierShortUrl: string; productShortUrl: string; address: string }\n >({\n query: args => {\n const queryParams = new URLSearchParams(args);\n return `/Ajax/Broadband/Product/GetTransactUrl/?${queryParams.toString()}`;\n }\n })\n })\n});\n\nexport type BroadbandApiState = Parameters['0'];\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { AnyAction, combineReducers } from 'redux';\n\nimport type { SearchModel } from '../@types/SearchModel';\nimport modal, { ModalSliceState } from './modalSlice';\nimport search, { SearchSliceState } from './searchSlice';\n\nexport interface BroadbandSliceState {\n search: SearchSliceState;\n modal: ModalSliceState;\n}\n\nexport const mapSearchModelToState = (searchModel: SearchModel) => {\n const state: SearchSliceState = {\n criteria: searchModel.state.criteria,\n settings: {\n coverageUrl: searchModel.coverageUrl,\n searchUrl: searchModel.searchUrl,\n resultsSearchCriteria: searchModel.state.criteria,\n pagedResultsUrl: searchModel.pagedResultsUrl,\n suppressCoverageCheck: searchModel.suppressCoverageCheck,\n embeddedMode: searchModel.embeddedMode,\n enforceAjax: searchModel.embeddedMode,\n allConnectionsSelected: searchModel.state.allConnectionsSelected,\n coverage: searchModel.state.coverage,\n hideSupplierFilter: searchModel.state.hideSupplierFilter,\n showMaxUpfrontSlider: searchModel.state.showMaxUpfrontSlider,\n suppliers: searchModel.state.suppliers,\n unavailableConnectionTypes: searchModel.state.unavailableConnectionTypes,\n defaultSearchCriteria: searchModel.defaultSearchCriteria,\n defaultPrepaidExpiryDays: searchModel.defaultPrepaidExpiryDays\n }\n };\n\n if (searchModel.filters) {\n state.settings.allContractTerms = searchModel.filters.allContractTerms;\n state.settings.defaultSuppliers = searchModel.filters.defaultSuppliers;\n }\n\n return state;\n};\n\nconst broadbandSlice = createSlice({\n name: 'broadband',\n initialState: {} as BroadbandSliceState,\n reducers: {\n init(state, action: PayloadAction) {\n state.search = mapSearchModelToState(action.payload);\n }\n }\n});\n\nconst features = combineReducers({\n search,\n modal\n});\n\nexport default function broadbandReducer(state: BroadbandSliceState, action: AnyAction) {\n const featuresState = features(state, action);\n return broadbandSlice.reducer(featuresState, action);\n}\n\nexport const actions = broadbandSlice.actions;\n","import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { produce } from 'immer';\nimport includes from 'lodash/includes';\nimport isEqual from 'lodash/isEqual';\n\nimport { RootState } from '../../../Shared/js/redux/rootReducer';\nimport type { SearchCriteria } from '../@types/SearchCriteria';\n\nexport interface ModalSliceState {\n activeTab: string;\n isOpen: boolean;\n criteria: SearchCriteria;\n}\n\nconst initialState = {} as ModalSliceState;\n\nconst modalSlice = createSlice({\n name: 'broadband/modal',\n initialState,\n reducers: {\n showModal(state, action: PayloadAction<{ criteria: SearchCriteria; tabName: string }>) {\n // Should we just select the first one by default?\n state.activeTab = action.payload.tabName || 'spend';\n \n state.criteria = produce(action.payload.criteria, draft => {\n return draft;\n });\n state.isOpen = true;\n },\n\n hideModal(state) {\n state.isOpen = false;\n\n // Reset search criteria\n state.criteria = {} as SearchCriteria;\n },\n\n selectTab(state, action: PayloadAction) {\n state.activeTab = action.payload;\n },\n\n updateCriteria(state, action: PayloadAction) {\n if (isEqual(state.criteria, action.payload)) {\n return;\n }\n state.criteria = action.payload;\n },\n\n updateData(state, action: PayloadAction) {\n state.criteria.data = action.payload;\n },\n\n updatePeakDataOnly(state, action: PayloadAction) {\n state.criteria.peakDataOnly = action.payload;\n },\n\n updateSpeed(state, action: PayloadAction) {\n state.criteria.speed = action.payload;\n },\n\n updateSpend(state, action: PayloadAction<{ min: number; max: number }>) {\n const { min, max } = action.payload;\n state.criteria.common.minimumSpend = min;\n state.criteria.common.maximumSpend = max;\n },\n\n updateUpfront(state, action: PayloadAction) {\n state.criteria.common.maximumUpfront = action.payload;\n },\n\n updateSelectedSuppliers(state, action: PayloadAction<{ keys: string[]; customerType: string }>) {\n const { keys, customerType } = action.payload;\n state.criteria.common.suppliers.values = keys;\n state.criteria.common.customerType = customerType;\n },\n\n updateCustomerType(state, action: PayloadAction) {\n state.criteria.common.customerType = action.payload;\n },\n\n updateContractTerms(state, action: PayloadAction<{ selected: number[]; all: number[] }>) {\n const { selected, all } = action.payload;\n state.criteria.common.contractTerms = selected && selected.length === all.length ? [] : selected;\n },\n\n updateAdvancedOptions(state, action: PayloadAction) {\n const options = action.payload;\n state.criteria.common.maxResultsPerSupplier = includes(options, 'single-result') ? 1 : null;\n state.criteria.staticIp = includes(options, 'static-ip');\n state.criteria.uploadNotCounted = includes(options, 'upload-not-counted');\n state.criteria.common.showLessResults = includes(options, 'less-results');\n },\n\n updatePrepaidExpiry(state, action: PayloadAction) {\n state.criteria.prepaidExpiry = action.payload;\n },\n\n updateCurrentSupplier(state, action: PayloadAction) {\n state.criteria.common.currentSupplierShortUrl = action.payload;\n },\n\n updateIncludeDealsOnly(state, action: PayloadAction) {\n state.criteria.common.includeOffersWithCampaignOnly = action.payload;\n },\n\n updatePhoneBundle(state, action?: PayloadAction) {\n state.criteria.bundles.homePhone = action.payload;\n },\n\n updatePhoneCallsBundle(state, action: PayloadAction) {\n state.criteria.bundles.homePhoneCalls = action.payload;\n },\n\n updateTvBundle(state, action?: PayloadAction) {\n state.criteria.bundles.tv = action.payload;\n },\n\n updateTvChannels(state, action: PayloadAction) {\n state.criteria.bundles.tvChannels = action.payload;\n },\n\n updateLineRentalBundle(state, action?: PayloadAction) {\n state.criteria.bundles.lineRental = action.payload;\n },\n\n updateMobileBundle(state, action?: PayloadAction) {\n state.criteria.bundles.mobilePhone = action.payload;\n },\n\n updateModem(state, action: PayloadAction<{ modemShortUrl: string; simOnly: boolean }>) {\n const { modemShortUrl, simOnly } = action.payload;\n state.criteria.modemShortUrl = modemShortUrl;\n state.criteria.simOnly = simOnly;\n },\n\n updateConnectionTypes(state, action: PayloadAction) {\n state.criteria.connectionTypes.values = action.payload;\n },\n\n addressChanged(state) {\n // Reset suppliers and bundles criteria\n state.criteria.common.suppliers = {\n values: []\n };\n state.criteria.common.customerType = null;\n state.criteria.bundles = {} as SearchCriteria['bundles'];\n }\n }\n});\n\nexport default modalSlice.reducer;\nexport const actions = modalSlice.actions;\n\nexport const selectModal = createSelector(\n (state: RootState) => state?.broadband,\n p => p.modal\n);\n","import { AnyAction, createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { produce } from 'immer';\nimport defaultTo from 'lodash/defaultTo';\nimport isEqual from 'lodash/isEqual';\n\nimport type { Address } from '../../../Shared/js/@types/Address';\nimport type { SuppliersModel } from '../../../Shared/js/@types/SuppliersModel';\nimport type { RootState } from '../../../Shared/js/redux/rootReducer';\nimport type { SearchResult } from '../@types/api/SearchResult';\nimport type { SearchCriteria } from '../@types/SearchCriteria';\nimport type { WidenResultsArgs } from '../@types/WidenRessultsArgs';\n\nexport interface SearchSliceState {\n criteria: SearchCriteria;\n settings: {\n allConnectionsSelected: boolean;\n allContractTerms?: number[];\n coverage: string;\n coverageUrl: string;\n defaultSuppliers?: string[];\n defaultSearchCriteria: SearchCriteria;\n defaultPrepaidExpiryDays?: number;\n hideSupplierFilter: boolean;\n showMaxUpfrontSlider: boolean;\n searchUrl: string;\n resultsSearchCriteria: SearchCriteria;\n pagedResultsUrl: string;\n suppliers: SuppliersModel;\n suppressCoverageCheck: boolean;\n unavailableConnectionTypes: never[];\n embeddedMode: boolean;\n enforceAjax: boolean;\n };\n}\n\nconst initialState = {} as SearchSliceState;\n\nconst sliceName = 'broadband/search';\n\nconst slice = createSlice({\n name: sliceName,\n initialState,\n reducers: {\n disableMaximumResultLimits(state) {\n state.criteria.common.enforceMaximumResultLimits = false;\n state.settings.enforceAjax = true;\n },\n\n hideFeaturedResults(state) {\n state.criteria.common.includeFeaturedResults = false;\n state.settings.enforceAjax = true;\n },\n\n includeNbnConnections(state, action: PayloadAction) {\n const nbnConnectionTypes = action.payload;\n if (Array.isArray(nbnConnectionTypes)) {\n state.criteria.connectionTypes.values = [\n ...state.criteria.connectionTypes.values,\n ...nbnConnectionTypes\n ];\n } else {\n state.criteria.connectionTypes.values.push(nbnConnectionTypes);\n }\n },\n\n resetBundles(state) {\n state.criteria.bundles = {} as SearchCriteria['bundles'];\n },\n\n searchError(state) {\n return state;\n },\n\n searchSuccess(state, action: PayloadAction) {\n const result = action.payload;\n\n return produce(state, p => {\n // TODO: Remove 'values' property and use simple array\n // Remove unused isAll and isEmpty fields\n //p.search.criteria.common.suppliers = result.criteria.common.suppliers.values;\n\n p.settings.suppliers = result.suppliers;\n p.settings.coverage = result.coverage;\n p.settings.unavailableConnectionTypes = result.unavailableConnectionTypes;\n p.settings.allConnectionsSelected = result.allAvailableConnectionsSelected;\n p.settings.hideSupplierFilter = result.hideSupplierFilter;\n p.settings.resultsSearchCriteria = result.criteria;\n });\n },\n\n updateAddress(state, action: { payload: Address }) {\n if (isEqual(state.criteria.common.address, action.payload)) {\n return state;\n }\n\n const baseCriteria = state.settings.embeddedMode ? state.settings.defaultSearchCriteria : state.criteria;\n\n state.settings.enforceAjax = false;\n\n state.criteria = produce(baseCriteria, draft => {\n draft.common.address = action.payload;\n\n const defaultSuppliers = state.settings.defaultSuppliers;\n draft.common.suppliers.values = defaultSuppliers && defaultSuppliers.length ? defaultSuppliers : [];\n\n draft.common.tab = WhistleOut.getSiteConfiguration().broadbandConfig.defaultTab;\n draft.connectionTypes.values = [];\n draft.bundles = {} as SearchCriteria['bundles'];\n\n const isSingleProvider = state.criteria.common.suppliers.values?.length === 1;\n draft.common.enforceMaximumResultLimits = !isSingleProvider;\n\n // Preserve original criteria\n\n draft.speed = state.criteria.speed;\n draft.data = state.criteria.data;\n });\n },\n\n //changeBundles\n updateBundles(state, action: PayloadAction) {\n const bundles = action.payload;\n state.criteria.bundles.homePhone = bundles.homePhone;\n state.criteria.bundles.tv = bundles.tv;\n state.criteria.bundles.lineRental = bundles.lineRental;\n state.criteria.bundles.mobilePhone = bundles.mobilePhone;\n },\n\n updateConnectionTypes(state, action: PayloadAction) {\n state.settings.allConnectionsSelected = null;\n state.criteria.connectionTypes.values = Array.isArray(action.payload) ? action.payload : [action.payload];\n },\n\n // changeContractType\n updateContractType(state, action: PayloadAction<{ contractType: string; hide: boolean }>) {\n const { contractType, hide } = action.payload;\n if (contractType === 'prepaid') {\n return state;\n }\n\n const contractTerms = defaultTo(parseInt(contractType), null);\n\n if (hide === true) {\n if (state.criteria.common.contractTerms && state.criteria.common.contractTerms.length > 1) {\n state.criteria.common.contractTerms = state.criteria.common.contractTerms.filter(\n c => c !== contractTerms\n );\n } else {\n state.criteria.common.contractTerms = state.settings.allContractTerms.filter(\n c => c !== contractTerms\n );\n }\n } else {\n state.criteria.common.contractTerms = [contractTerms];\n }\n },\n\n updateCriteria(state, action: PayloadAction) {\n if (isEqual(state, action.payload)) {\n return state;\n }\n\n state.settings.allConnectionsSelected = null;\n state.criteria = produce(action.payload, draft => {\n if (state.criteria.modemShortUrl !== draft.modemShortUrl) {\n draft.common.tab = null;\n }\n });\n },\n\n // changeData\n updateData(state, action: PayloadAction) {\n if (action.payload === state.criteria.data) {\n return state;\n }\n state.criteria.data = action.payload;\n state.criteria.common.results.productLabel = null;\n },\n\n //changeModem\n updateModem(state, action: PayloadAction) {\n if (action.payload === state.criteria.modemShortUrl) {\n return;\n }\n\n state.criteria.modemShortUrl = action.payload;\n state.settings.enforceAjax = true;\n },\n\n // planSummarySupplierChanged\n updatePlanSummarySupplier(state, action: PayloadAction<{ supplier: string; maxResults: number }>) {\n const { supplier, maxResults } = action.payload;\n state.criteria.common.suppliers.values = supplier ? [supplier] : [];\n state.criteria.common.enforceMaximumResultLimits = supplier ? false : true;\n state.criteria.common.tab = '';\n state.criteria.common.results.maximumNumberOfResults = maxResults;\n state.settings.enforceAjax = true;\n },\n\n // changeSort\n updateSort(state, action: PayloadAction<{ expression: string; isAscending: boolean }>) {\n const { expression, isAscending } = action.payload;\n state.criteria.common.resultsSortExpression = expression;\n state.criteria.common.resultsSortAscending = isAscending;\n state.settings.enforceAjax = true;\n },\n\n // changeSpeed\n updateSpeed(state, action: PayloadAction) {\n if (action.payload === state.criteria.speed) {\n return state;\n }\n state.criteria.speed = action.payload;\n state.criteria.common.results.productLabel = null;\n },\n\n // changeSpend\n updateSpend(state, action) {\n const { minValue, maxValue } = action.payload;\n\n const commonCriteria = state.criteria.common;\n if (\n (minValue === commonCriteria.minimumSpend || (minValue === -1 && !commonCriteria.minimumSpend)) &&\n (maxValue === commonCriteria.maximumSpend || (maxValue === -1 && !commonCriteria.maximumSpend))\n ) {\n return state;\n }\n\n commonCriteria.maximumSpend = maxValue;\n commonCriteria.minimumSpend = minValue;\n },\n\n // changeSupplier\n updateSuppliers(state, action: PayloadAction) {\n state.criteria.common.suppliers = {\n values: Array.isArray(action.payload) ? action.payload : [action.payload]\n };\n state.settings.enforceAjax = true;\n },\n\n // changeTab(value) {\n updateTab(state, action: PayloadAction) {\n state.criteria.common.tab = action.payload;\n },\n\n widenResults(state, action: PayloadAction) {\n const options = action.payload;\n if (options.reduceData) {\n state.criteria.data = 0;\n }\n if (options.increasePriceRange) {\n state.criteria.common.maximumSpend = -1;\n state.criteria.common.minimumSpend = 0;\n }\n if (options.includeAllContractLengths) {\n state.criteria.common.contractTerms = [];\n }\n if (options.includeAllSuppliers === true) {\n state.criteria.common.suppliers = { values: [] };\n }\n if (options.reduceSpeed === true) {\n state.criteria.speed = 0;\n }\n if (options.noPeakData === true) {\n state.criteria.peakDataOnly = false;\n }\n if (options.includeMoreConnectionTypes === true) {\n state.criteria.connectionTypes = { values: [] };\n }\n if (options.noDealsOnly === true) {\n state.criteria.common.includeOffersWithCampaignOnly = false;\n }\n if (options.includeAllPrepaidExpiry === true) {\n state.criteria.prepaidExpiry = null;\n }\n if (options.removeSelectedModem === true) {\n state.criteria.modemShortUrl = null;\n state.criteria.simOnly = false;\n }\n if (options.noUploadCounted === true) {\n state.criteria.uploadNotCounted = false;\n }\n if (options.noStaticIp === true) {\n state.criteria.staticIp = false;\n }\n if (options.noBundling === true) {\n state.criteria.bundles.tv = null;\n state.criteria.bundles.homePhone = null;\n state.criteria.bundles.lineRental = null;\n state.criteria.bundles.mobilePhone = null;\n }\n if (options.sortBy === true) {\n state.criteria.common.resultsSortExpression = null;\n state.criteria.common.resultsSortAscending = true;\n }\n }\n }\n});\n\nexport const actions = slice.actions;\n\nconst extraSlice = createSlice({\n name: sliceName,\n initialState,\n reducers: {},\n extraReducers: builder => {\n builder.addCase(slice.actions.searchSuccess, (state, action: PayloadAction) => {\n slice.reducer(state, actions.updateCriteria(action.payload.criteria));\n });\n }\n});\n\nexport default function broadbandReducer(state: SearchSliceState, action: AnyAction) {\n return extraSlice.reducer(slice.reducer(state, action), action);\n}\n\nexport const selectCriteria = createSelector(\n (state: RootState) => state,\n state => state.broadband.search.criteria\n);\n","\nexport const EmailMySearch = {\n onSubmitClick: function(e) {\n const localContent = e.data.content;\n const email = localContent.find('input[data-email-address]');\n\n if (!e.data.emailMySearch.validateEmail(email, localContent)) {\n return;\n }\n\n const listId = localContent.find('[data-listid]').data('listid');\n const isSubscribeToNewsLetter = localContent.find('input[type=\"checkbox\"]').is(':checked');\n const data = {\n email: email.val(),\n listId: listId,\n searchUrl: window.location.href,\n isSubscribeToNewsLetter: isSubscribeToNewsLetter,\n token: wo$('#turnstile-response').val()\n };\n\n localContent.find('.fa-spinner').show();\n\n wo$.ajax({\n url: '/Marketing/SendVerificationEmail',\n data: data,\n type: 'POST',\n beforeSend: function () {\n localContent.find('button[data-save-search-submit]').prop('disabled', true);\n localContent.find('[data-invalid-email], [data-error]').hide();\n },\n success: function (data) {\n if (data.IsVerificationEmailSent) {\n const successMessage = localContent\n .find('[data-success-message]')\n .data('message')\n .replace('CustomerEmailAddress', email.val());\n localContent.find('[data-success-message]').html(successMessage);\n localContent.find('[data-invalid-email], [data-error], [data-formrow]').hide();\n localContent.find('[data-success]').show();\n } else if (data.IsVerifiedAlready) {\n localContent.find('[data-invalid-email], [data-error], [data-formrow]').hide();\n localContent.find('[data-verified-already]').show();\n } else {\n localContent.find('[data-error]').show();\n }\n },\n error: function () {\n localContent.find('[data-invalid-email]').hide();\n localContent.find('[data-error]').show();\n },\n complete: function () {\n localContent.find('.fa-spinner').hide();\n localContent.find('button[data-save-search-submit]').prop('disabled', false);\n\n if (WhistleOut.turnstileId && window.turnstile) {\n window.turnstile.reset(WhistleOut.turnstileId);\n }\n\n }\n });\n },\n modalInit: function (initContent) {\n this.modalContent = initContent;\n\n initContent.find('[data-invalid-email]').hide();\n\n initContent.on('show.bs.modal', () => {\n \n initContent.find('[data-formrow]').show();\n initContent.find('[data-invalid-email], [data-error], [data-success]').hide();\n\n initContent.find('input[type=\"checkbox\"]').prop('checked', false);\n initContent.find('input[data-email-address]').val('');\n initContent.find('div[data-formrow]').show();\n initContent.find('div[data-email-success]').hide();\n initContent.find('div[data-subscribe-success]').hide();\n initContent.find('[data-verified-already]').hide();\n initContent\n .find('button[data-save-search-submit]')\n .off('click')\n .on('click', { content: initContent, emailMySearch: this }, this.onSubmitClick);\n });\n },\n adInit: function (initContent, submitButton) {\n this.adContent = initContent;\n initContent.find('[data-invalid-email]').hide();\n\n if (submitButton) {\n submitButton.off('click').on('click', { content: initContent, emailMySearch: this }, this.onSubmitClick);\n }\n },\n\n validateEmail: function (email, content) {\n const config = WhistleOut.getSiteConfiguration();\n\n const regex = new RegExp(config.regex.email);\n\n if (!email.val() || !regex.test(email.val() as string)) {\n content.find('[data-invalid-email]').show();\n return false;\n }\n\n return true;\n }\n};\n","export async function initSlick() {\n if (wo$().slick) {\n return;\n }\n\n await import('./slick.nomodule');\n}\n","// TODO: Enable eslint rules and fix the code\n/* eslint-disable eqeqeq */\n\nexport class WhistleOutCore {\n showSiteNotice() {\n try {\n const siteNotice = wo$('#siteNotice');\n const divWrapper = siteNotice.children().first();\n if (divWrapper && divWrapper.length > 0) {\n const key = divWrapper.data('cookie-key') || 'SiteNotice';\n const expirationInHours = divWrapper.data('cookie-expiry');\n let slideTime = divWrapper.data('slide-duration');\n\n if (slideTime) slideTime = 300;\n\n let expirationDate: Date;\n if (expirationInHours && expirationInHours > 0) {\n expirationDate = new Date();\n expirationDate.setTime(expirationDate.getTime() + expirationInHours * 60 * 60 * 1000);\n } else {\n expirationDate = null;\n }\n if (Cookies.get(key) == undefined) {\n const closeButton = siteNotice.find('#siteNoticeClose');\n if (closeButton && closeButton.length > 0) {\n if (slideTime == 0) siteNotice.toggle();\n else siteNotice.slideToggle(slideTime);\n\n closeButton.click(function () {\n siteNotice.slideToggle(slideTime);\n Cookies.set(key, '', { path: '/', expires: expirationDate });\n });\n } else {\n if (slideTime == 0) siteNotice.toggle();\n else siteNotice.slideToggle(slideTime);\n\n Cookies.set(key, '', { path: '/', expires: expirationDate });\n }\n }\n }\n } catch (e) {\n // TODO: Use 'instanceof' to only ignore errors of a certain type, and re-throw others\n }\n }\n\n bindExpressNotice() {\n wo$('#expressDisable').click(function () {\n const config = WhistleOut.getSiteConfiguration();\n Cookies.remove(config.cookieName, {\n path: '/',\n domain: config.cookieDomain\n });\n if (location.href.indexOf('adi=') === -1) {\n location.reload();\n } else {\n const url = WhistleOut.updateQueryStringParameter(location.href, 'adi', null);\n location.href = url;\n }\n });\n }\n\n bindTopNav() {\n wo$('#site-search-form').show();\n\n wo$('#site-search-query, #site-search-query-2').on('keydown', e => {\n if (e.which === 13) {\n WhistleOut.Core.search(wo$(e.currentTarget).val() as string);\n return false;\n }\n });\n\n wo$('#search-term').on('keydown', e => {\n const target = wo$(e.currentTarget);\n if (e.which === 13 && target.val() && (target.val() as string).length) {\n WhistleOut.Core.search(target.val() as string);\n return false;\n }\n });\n\n wo$('#search-term-button').on('click', () => {\n if (wo$('#search-term').val() && (wo$('#search-term').val() as string).length) {\n WhistleOut.Core.search(wo$('#search-term').val() as string);\n }\n return false;\n });\n\n // Most likely based on https://stackoverflow.com/questions/36414922/how-to-keep-the-bootstrap-pop-over-enable-until-the-form-is-filled/36421312#36421312\n // Example: https://jsfiddle.net/sfw36go1/\n const popoverProto = () =>\n wo$.fn.popover as unknown as {\n Constructor(element: JQuery, options: Bootstrap.PopoverOptions): void;\n };\n\n const originalLeave = popoverProto().Constructor.prototype.leave;\n popoverProto().Constructor.prototype.leave = function (obj: JQuery.TriggeredEvent) {\n const self =\n obj instanceof this.constructor\n ? obj\n : wo$(obj.currentTarget)\n [this.type](this.getDelegateOptions())\n .data('bs.' + this.type);\n\n let container: JQuery;\n let timeout: NodeJS.Timeout;\n\n originalLeave.call(this, obj);\n\n if (obj.currentTarget) {\n container = wo$(obj.currentTarget).siblings('.popover');\n timeout = self.timeout;\n container.one('mouseenter', function () {\n clearTimeout(timeout);\n container.one('mouseleave', function () {\n popoverProto().Constructor.prototype.leave.call(self, self);\n });\n });\n }\n };\n\n const nav = wo$('.navbar');\n nav.find('a.dropdown-toggle').on('click', e => {\n const target = wo$(e.currentTarget);\n if (!nav.hasClass('in') && target.siblings('ul.dropdown-menu').is(':visible')) {\n const href = target.attr('href');\n location.href = href;\n }\n });\n\n wo$('.navbar').on('click', '#site-search-button-2', function () {\n const query = wo$('#site-search-query-2').val() as string;\n WhistleOut.Core.search(query);\n });\n }\n\n search(query) {\n const url = wo$('#site-search').data('url');\n window.location.href = url + '?q=' + encodeURIComponent(query);\n }\n\n checkCountry() {\n try {\n if (\n (Cookies.get('woCountrySelector') == null || typeof Cookies.get('woCountrySelector') === 'undefined') &&\n document.referrer.indexOf('.whistleout.') === -1\n ) {\n Cookies.set('woCountrySelector', '', { path: '/' });\n const config = WhistleOut.getSiteConfiguration();\n if (config.enableGeoCheck) {\n wo$.ajax({\n url: 'https://www.whistleout.com.au/cdn-cgi/trace',\n type: 'GET',\n success: function (result) {\n const matches = result.match('loc=(.{2})');\n if (matches && matches.length === 2) {\n let country = 0;\n switch (matches[1]) {\n case 'AU':\n country = 1;\n break;\n case 'US':\n country = 3;\n break;\n case 'CA':\n country = 5;\n break;\n case 'MX':\n country = 8;\n break;\n }\n if (country > 0 && country !== config.country) {\n WhistleOut.Core.showCountrySwitcher(country);\n }\n }\n }\n });\n }\n }\n } catch (e) {\n // TODO: Use 'instanceof' to only ignore errors of a certain type, and re-throw others\n }\n }\n\n showCountrySwitcher(country) {\n try {\n const data = {\n country: country\n };\n wo$.ajax({\n url: '/Layout/CountrySwitcher',\n data: data,\n type: 'GET',\n success: function (result) {\n if (result !== '') {\n wo$('#country-switcher-container').html(result);\n wo$('#country-switcher-modal').modal('show');\n }\n }\n });\n } catch (e) {\n // TODO: Use 'instanceof' to only ignore errors of a certain type, and re-throw others\n }\n }\n\n bindLinkStrip() {\n const strip = wo$('#suggested-articles');\n strip.affix({\n offset: { top: 400 }\n });\n\n wo$('#suggested-articles-close').on('click', function () {\n const expires = new Date();\n expires.setTime(expires.getTime() + 60 * 60 * 1000);\n Cookies.set('ShowStickyBottomStrip', '0', { path: '/', expires: expires });\n strip.hide();\n });\n }\n\n bindAdminLinks() {\n let timeout: NodeJS.Timeout;\n wo$('#admin-links').hover(\n e => {\n clearTimeout(timeout);\n const target = wo$(e.currentTarget);\n target.animate(\n {\n height: target.get(0).scrollHeight,\n opacity: 1\n },\n 250\n );\n },\n e => {\n const target = wo$(e.currentTarget);\n timeout = setTimeout(() => {\n target.animate(\n {\n height: '30px',\n opacity: 0.7\n },\n 250\n );\n }, 1000);\n }\n );\n\n wo$('#admin-purge-cache').click(function () {\n if (confirm('Are you sure you want to purge this page from the cache?')) {\n const data = {\n url: location.href\n };\n wo$.ajax({\n url: '/Internal/Shared/Infrastructure/PurgeCacheUrl',\n type: 'POST',\n data: data,\n success: function () {\n alert('Success!');\n },\n error: function () {\n alert('An error has occurred purging this URL from the cache');\n }\n });\n }\n });\n }\n\n init() {\n wo$(() => {\n this.showSiteNotice();\n this.bindExpressNotice();\n this.bindAdminLinks();\n this.bindTopNav();\n this.bindLinkStrip();\n });\n }\n}\n","/* globals ga, gtag */\n\nimport { API as SliderApi} from 'nouislider';\nimport type { NProgressOptions } from 'nprogress';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport * as QueryStringHelper from '../../../Widgets/js/common/utils/QueryStringHelper';\nimport * as ReferrerHelper from '../../../Widgets/js/common/utils/ReferrerHelper';\nimport type { CoverageMapType } from '../../../Widgets/js/CoverageMap';\nimport type { Ad } from '../@types/Ad';\nimport type { Address } from '../@types/Address';\nimport type { AddressMaxMind } from '../@types/AddressMaxMind';\nimport type { AnalyticsClientSideData } from '../@types/AnalyticsClientSideData';\nimport type { SearchCriteriaCommon } from '../@types/SearchCriteriaCommon';\nimport type { SiteConfiguration } from '../@types/SiteConfiguration';\nimport type { Staff } from '../@types/Staff';\nimport type { TypeaheadItem } from '../@types/TypeaheadItem';\nimport type {\n GetLocationError,\n GetLocationResult,\n NoUiDoubleSliderConfig,\n NoUiSliderConfig,\n NoUiSliderConfigPeg,\n RemarketingData\n} from '../@types/WhistleOutContext';\nimport type { WoDataLayerItem } from '../@types/WoDataLayer';\nimport { EmailMySearch } from '../EmailMySearch';\nimport { getState } from '../redux/store';\nimport { initDataLayer, pushDataLayerItem } from '../utils/datalayer';\nimport * as queryStringUtils from '../utils/queryString';\nimport { tryWaitFor } from '../utils/timer';\nimport * as deferred from '../vendor/deferred';\nimport { WhistleOutCore } from './core';\nimport { rollbar } from './rollbar';\n\nwindow['wo$'] = window['wo$'] || jQuery.noConflict();\nwindow.jQuery = window.jQuery || window['wo$'];\nwindow.Cookies = window.Cookies || Cookies;\n\nconst scrollDefaultDuration = 500;\nconst scrollDefaultOffset = -100;\n\ntype selectStoreHandler = (selectedStoreId: string, selectedStaff: unknown) => void;\n\nexport class WhistleOutContext {\n scope: 'shared' | 'widget' = 'shared';\n isInitRequested: boolean;\n Core = new WhistleOutCore();\n\n notifications = wo$.Callbacks('unique');\n retailSplashTimer: number;\n Rollbar: typeof rollbar.instance;\n turnstileId: string;\n\n // TODO: Comine with getSiteConfiguration()\n config: {\n rollbar: typeof rollbar.config;\n analytics: AnalyticsClientSideData;\n };\n siteConfiguration: SiteConfiguration;\n byoPhonePickerController: {\n show(\n selectedHandler: (selectedModel: { searchUrl: string }, genericSearchUrl: string) => void,\n brandShortUrl?: string,\n phoneShortUrl?: string\n ): void;\n };\n\n initWidget: () => void;\n CoverageMap: CoverageMapType;\n\n getQueryStringParameter: (name: string, url?: string) => string = QueryStringHelper.getQueryStringParameter;\n appendQueryParam: (queryString: string, param: string) => string = QueryStringHelper.appendQueryParam;\n updateQueryStringParameter: (url: string, key: string, value: string) => string =\n QueryStringHelper.updateQueryStringParameter;\n nbnTileLayer: string;\n\n async initializeRollbar() {\n if (this.Rollbar) {\n return;\n }\n\n this.config.rollbar = Object.assign(rollbar.config, this.config.rollbar);\n const siteConfig = this.getSiteConfiguration();\n if (siteConfig) {\n if (siteConfig.rollbarKey) rollbar.config.token = siteConfig.rollbarKey;\n if (siteConfig.rollbarEnvironment) rollbar.config.env = siteConfig.rollbarEnvironment;\n if (siteConfig.anonymiseTracking) rollbar.config.captureIp = siteConfig.anonymiseTracking !== true;\n }\n\n await rollbar.init();\n this.Rollbar = rollbar.instance;\n }\n\n readLookupData(\n parent: JQuery,\n force?: boolean\n ): T {\n if (!parent) throw Error('parent needs to be provided');\n\n if (force === true) {\n // Use attr instead to prevent jquery from caching client side data as it does not get updated when DOM is manipulated\n return JSON.parse(parent.find('div[data-client-side-data]').attr('data-client-side-data'));\n }\n\n return parent.find('div[data-client-side-data]').data('clientSideData') as T;\n }\n\n setLookupData(parent: JQuery, data: string | number | boolean | symbol | object) {\n if (!parent) throw Error('parent needs to be provided');\n return parent.find('div[data-client-side-data]').data('clientSideData', data);\n }\n\n getCurrentLocation(\n successCallback: (address: GetLocationResult) => void,\n failCallback?: (error?: GetLocationError) => void\n ) {\n this.getCurrentLocationViaHtml5(successCallback, () => {\n this.getCurrentLocationViaApi(successCallback, failCallback);\n });\n }\n\n getCurrentLatLng(\n successCallback: (address: GetLocationResult) => void,\n failCallback?: (error?: GetLocationError) => void\n ) {\n this.getCurrentLatLngViaHtml5(successCallback, () => {\n this.getCurrentLatLngViaApi(successCallback, failCallback);\n });\n }\n\n getCurrentLatLngViaHtml5(\n successCallback: (address: GetLocationResult) => void,\n failCallback: (error?: GetLocationError) => void\n ) {\n if (\n 'geolocation' in navigator &&\n (this.getSiteConfiguration() || {}).enableHtml5Geolocation\n ) {\n navigator.geolocation.getCurrentPosition(function (position) {\n successCallback({\n lat: position.coords.latitude,\n lng: position.coords.longitude\n });\n }, failCallback as unknown as PositionErrorCallback);\n } else {\n if (failCallback) failCallback();\n }\n }\n\n getCurrentLocationViaHtml5(\n successCallback: (address: GetLocationResult) => void,\n failCallback?: (error?: GetLocationError) => void\n ) {\n this.getCurrentLatLngViaHtml5(function (latLng) {\n const lat = latLng.lat;\n const lng = latLng.lng;\n wo$.ajax({\n type: 'GET',\n url: '/Ajax/Shared/Geo/Geocode?lat=' + lat + '&lng=' + lng,\n success: function (addressResult) {\n addressResult.street = null;\n addressResult.streetNumber = null;\n if (!addressResult.city || addressResult.city.length < 1) {\n if (failCallback) failCallback();\n return;\n }\n successCallback({\n label: this.getLabel(addressResult),\n lat: lat,\n lng: lng,\n countryCode: (addressResult.country || {}).shortName\n });\n },\n error: function (jqXHR, textStatus, errorThrown) {\n return failCallback({\n jqXHR: jqXHR,\n textStatus: textStatus,\n errorThrown: errorThrown\n });\n }\n });\n }, failCallback);\n }\n\n getCurrentLatLngViaApi(\n successCallback: (address: GetLocationResult) => void,\n failCallback: (error?: GetLocationError) => void\n ) {\n const cookie = this.getLocationCookie();\n if (cookie) {\n successCallback(cookie);\n return;\n }\n\n wo$.ajax({\n url: '/Ajax/Shared/Geo/GetCurrentCity',\n dataType: 'json,text',\n success: response => {\n if (!response || !response.city || response.city.length < 1) {\n if (failCallback) failCallback();\n return;\n }\n\n response.postal = null;\n\n const res = {\n lat: response.location.latitude,\n lng: response.location.longitude,\n countryCode: response.country.iso_code,\n label: this.getLabelFromMaxMind(response)\n };\n this.setLocationCookie(res);\n successCallback(res);\n },\n error: (jqXHR, textStatus, errorThrown) => {\n return failCallback({\n jqXHR: jqXHR,\n textStatus: textStatus,\n errorThrown: errorThrown\n });\n }\n });\n }\n\n getCurrentLocationViaApi(\n successCallback: (address: GetLocationResult) => void,\n failCallback: (error?: GetLocationError) => void\n ) {\n const cookie = this.getLocationCookie();\n if (cookie && cookie.label) {\n successCallback(cookie);\n return;\n }\n\n const config = this.getSiteConfiguration();\n if (!config || !config.autoDetectLocation) {\n if (failCallback) {\n failCallback();\n return;\n }\n }\n\n this.getCurrentLatLngViaApi(function (addressResult) {\n successCallback(addressResult);\n }, failCallback);\n }\n\n setLocationCookie(value: { lat: number; lng: number; countryCode: string; label: string }) {\n if (typeof window === 'undefined' || !window || !wo$) {\n return;\n }\n\n const key = 'location';\n if (!value) {\n Cookies.remove(key);\n return;\n }\n\n const now = new Date();\n const time = now.getTime();\n const oneDay = 1 * 24 * 60 * 60;\n const expireTime = time + oneDay;\n now.setTime(expireTime);\n\n Cookies.set(key, JSON.stringify(value), { path: '/', expires: now });\n }\n\n getLocationCookie() {\n const cookie = window.Cookies.get('location');\n return cookie ? JSON.parse(cookie) : null;\n }\n\n getLabel(address: Address) {\n let label: string;\n if (address.streetNumber || address.street) {\n label =\n this.getComponentValue(address.streetNumber) +\n ' ' +\n this.getComponentValue(address.street, true) +\n ' ' +\n this.getComponentValue(address.city) +\n ', ' +\n this.getComponentValue(address.state, true) +\n ' ' +\n this.getComponentValue(address.postcode);\n } else if (address.postcode || address.city) {\n label =\n this.getComponentValue(address.city) +\n ', ' +\n this.getComponentValue(address.state, true) +\n ' ' +\n this.getComponentValue(address.postcode);\n } else if (address.state) {\n label = this.getComponentValue(address.state);\n } else {\n label = this.getComponentValue(address.country);\n }\n return label.trim();\n }\n\n getLabelFromMaxMind(address: AddressMaxMind) {\n let label: string;\n if (address.city && (address.city.names || {}).en) {\n label = address.city.names.en;\n if (address.subdivisions && address.subdivisions.length) {\n label = label + ' ' + address.subdivisions[0].iso_code;\n }\n if (address.postal) {\n label = label + ', ' + address.postal.code;\n }\n } else if (address.subdivisions.length) {\n label = address.subdivisions[0].iso_code;\n } else {\n label = address.country.names.en;\n }\n return label.trim();\n }\n\n getComponentValue(\n component: {\n shortName: string;\n longName: string;\n },\n preferShorter?: boolean\n ) {\n if (!component) return '';\n if (preferShorter === true && component.shortName && component.shortName.length > 0) return component.shortName;\n return component.longName;\n }\n\n appendReferrer(widgetLink: JQuery) {\n const transaction = widgetLink.data('transaction');\n if (transaction === 'GoToSite') {\n const href = widgetLink.attr('href');\n const referrer = ReferrerHelper.getReferrerEncoded();\n if (referrer) {\n widgetLink.attr('href', QueryStringHelper.updateQueryStringParameter(href, 'r', referrer));\n }\n }\n }\n\n createSlider(\n sliderElement: JQuery,\n textElement: JQuery,\n sliderConfig: NoUiSliderConfig,\n format: wNumb.Instance,\n onChange: (peg?: NoUiSliderConfigPeg) => void,\n rebind: boolean\n ) {\n if (!sliderElement || !textElement || !sliderConfig) {\n return;\n }\n\n if (!rebind) {\n rebind = false;\n }\n\n if (!rebind) {\n sliderElement\n .noUiSlider({\n step: 1,\n behaviour: 'drag',\n connect: 'lower',\n format: format,\n range: { min: [0], max: [sliderConfig.pegs.length - 1] },\n start: [0]\n })\n .on({\n slide: function () {\n const index = sliderElement.val() as number;\n const text = sliderConfig.pegs[index].text;\n textElement.html(text);\n },\n set: function () {\n const index = sliderElement.val() as number;\n sliderConfig.currentPeg = sliderConfig.pegs[index];\n const text = sliderConfig.pegs[index].text;\n textElement.html(text);\n },\n change: function () {\n const index = sliderElement.val() as number;\n const currentPeg = sliderConfig.pegs[index];\n sliderConfig.currentPeg = currentPeg;\n if (onChange) {\n onChange(currentPeg);\n }\n }\n });\n }\n\n sliderElement.val(sliderConfig.currentPeg.index);\n }\n\n createDoubleSlider(\n sliderElement: JQuery,\n textElement: JQuery,\n sliderConfig: NoUiDoubleSliderConfig,\n format: wNumb.Instance,\n onChange: () => void,\n textMaxElement: JQuery,\n showMaxTextForFullRange: boolean\n ) {\n sliderElement\n .noUiSlider({\n step: 1,\n behaviour: 'drag',\n format: format,\n connect: true,\n range: { min: [0], max: [sliderConfig.pegs.length - 1] },\n start: [0, sliderConfig.pegs.length - 1]\n })\n .on({\n slide: function () {\n const index = sliderElement.val();\n if (textMaxElement) {\n textElement.html(sliderConfig.pegs[index[0]].text);\n textMaxElement.html(sliderConfig.pegs[index[1]].text);\n } else {\n let text = sliderConfig.pegs[index[0]].text + ' - ' + sliderConfig.pegs[index[1]].text;\n\n // If default ranges replace with any\n if (\n showMaxTextForFullRange &&\n sliderConfig.pegs[index[0]].value === sliderConfig.pegs[0].value &&\n sliderConfig.pegs[index[1]].value === sliderConfig.pegs[sliderConfig.pegs.length - 1].value\n ) {\n text = sliderConfig.pegs[index[1]].text;\n }\n\n textElement.html(text);\n }\n },\n set: function () {\n const index = sliderElement.val();\n sliderConfig.currentPeg1 = sliderConfig.pegs[index[0]];\n sliderConfig.currentPeg2 = sliderConfig.pegs[index[1]];\n if (textMaxElement) {\n textElement.html(sliderConfig.pegs[index[0]].text);\n textMaxElement.html(sliderConfig.pegs[index[1]].text);\n } else {\n let text = sliderConfig.pegs[index[0]].text + ' - ' + sliderConfig.pegs[index[1]].text;\n\n // If default ranges replace with any\n if (\n showMaxTextForFullRange &&\n sliderConfig.pegs[index[0]].value === sliderConfig.pegs[0].value &&\n sliderConfig.pegs[index[1]].value === sliderConfig.pegs[sliderConfig.pegs.length - 1].value\n ) {\n text = sliderConfig.pegs[index[1]].text;\n }\n\n textElement.html(text);\n }\n },\n update: function () {\n const index = sliderElement.val();\n if (textMaxElement) {\n textElement.html(sliderConfig.pegs[index[0]].text);\n textMaxElement.html(sliderConfig.pegs[index[1]].text);\n } else {\n const text = sliderConfig.pegs[index[0]].text + ' - ' + sliderConfig.pegs[index[1]].text;\n textElement.html(text);\n }\n },\n change: function () {\n const index = sliderElement.val();\n sliderConfig.currentPeg1 = sliderConfig.pegs[index[0]];\n sliderConfig.currentPeg2 = sliderConfig.pegs[index[1]];\n if (onChange) {\n onChange();\n }\n } \n })\n .val([sliderConfig.currentPeg1.index, sliderConfig.currentPeg2.index]);\n }\n\n isiOS() {\n return navigator && navigator.platform && /iP(hone|od|ad)/.test(navigator.platform);\n }\n\n readonly endProgressEventName = 'endProgressEvent';\n\n startProgress(parent: string, trickleRate: number, trickleSpeed: number, showSpinner?: boolean) {\n const element = wo$(parent);\n if (element.length === 0) return;\n\n if (typeof trickleRate === 'undefined') trickleRate = 0.1;\n if (typeof trickleSpeed === 'undefined') trickleSpeed = 0.1;\n if (typeof parent === 'undefined') parent = 'document';\n\n window.NProgress.configure({\n parent: parent,\n trickleRate: trickleRate,\n trickleSpeed: trickleSpeed,\n showSpinner: showSpinner === undefined ? true : showSpinner\n } as Partial);\n\n window.NProgress.start();\n element.block({ message: null });\n\n let endProgressTimer: ReturnType;\n if (this.isiOS()) {\n // HACK: In iOS, the standard events such as 'pageshow', 'popstate' or 'unload' don't work when the page is cached\n // So we need to end the progress manually after an interval\n endProgressTimer = setTimeout(() => {\n this.endProgress(parent);\n }, 5000);\n }\n\n const onPageShow = event => {\n this.endProgressOnPageShow(event, parent, endProgressTimer);\n };\n\n // We need to explicitly call endProgress() if the page is from cache\n // otherwise the indicator never stops on History.Back in Safari,\n // because Safari reads the page from the AppCache\n window.addEventListener('pageshow', onPageShow, false);\n\n window.addEventListener(this.endProgressEventName, () =>\n window.removeEventListener('pageshow', onpageshow, false)\n );\n }\n\n endProgressOnPageShow(\n event: PageTransitionEvent,\n parent: string,\n endProgressTimer?: ReturnType\n ) {\n if (event.persisted) {\n if (endProgressTimer) {\n // Disable the iOS hack, because it's a normal workflow\n clearTimeout(endProgressTimer);\n }\n\n this.endProgress(parent);\n }\n\n dispatchEvent(new CustomEvent(this.endProgressEventName));\n }\n\n endProgress(parent: string) {\n if (typeof parent === 'undefined') parent = 'document';\n window.NProgress.done();\n wo$(parent).unblock({ message: null });\n }\n\n isPositiveNumber(value: string | number) {\n return wo$.isNumeric(value) && value !== '-1' && value !== -1;\n }\n\n isNumber(value: string | number) {\n return wo$.isNumeric(value);\n }\n\n replaceQueryString(url: string, newQuery: string) {\n if (url === null || url === undefined) {\n return url;\n }\n\n const regex = /\\?(.*)$/gi;\n const baseUrl = url.replace(regex, '');\n if (newQuery === null || newQuery === undefined) {\n return baseUrl;\n }\n\n newQuery = newQuery.replace(/^\\?/, '');\n return newQuery.length ? `${baseUrl}?${newQuery}` : baseUrl;\n }\n\n getAnalyticsClientSideData(): AnalyticsClientSideData {\n return this.config.analytics;\n }\n\n getSiteConfiguration(): SiteConfiguration {\n if (this.siteConfiguration) {\n return this.siteConfiguration;\n }\n\n const siteConfigurationContainer: HTMLElement =\n document.querySelector('#site-configuration-container') ?? document.querySelector('#config');\n\n const config: SiteConfiguration = siteConfigurationContainer\n ? this.readLookupData(wo$(siteConfigurationContainer))\n : null;\n\n this.siteConfiguration = config;\n return config;\n }\n\n isCookieEnabledByCategory(category: string) {\n const oneTrustCookieValue = Cookies.get('OptanonConsent');\n if (!oneTrustCookieValue) {\n return true;\n }\n\n if (oneTrustCookieValue.indexOf(`${category}:1`) >= 0) {\n return true;\n }\n\n return false;\n }\n\n isPerformanceCookieEnabled() {\n return this.isCookieEnabledByCategory('C0002');\n }\n\n isTargetingCookieEnabled() {\n return this.isCookieEnabledByCategory('C0004');\n }\n\n setYouTubeEnhancedPrivacy() {\n if (!this.isTargetingCookieEnabled()) {\n const frames = document.getElementsByTagName('iframe');\n for (let i = 0; i < frames.length; i++) {\n frames[i].src = frames[i].src.replace(/www.youtube.com/gi, 'www.youtube-nocookie.com');\n }\n }\n }\n\n trackGaEvent(category: string, action: string, label: string, value: object, fields: object) {\n const analyticsClientSideData = this.getAnalyticsClientSideData();\n const config = analyticsClientSideData.config;\n const data = analyticsClientSideData.data;\n\n wo$.each(config.accounts, (index, account) => {\n if (!account.affiliateOwned && data.includeEventTracking) {\n try {\n if (typeof fields === 'undefined') {\n ga(account.trackerId + '.send', 'event', category, action, label, value);\n } else {\n ga(account.trackerId + '.send', 'event', category, action, label, value, fields);\n }\n } catch (err) {\n this.Rollbar.error(\n `WhistleOut.trackGaEvent: category=${category}, action=${action}, label=${label}`,\n err\n );\n }\n }\n });\n }\n\n trackEvent(category: string, action: string, label?: string, value?: { nonInteraction: boolean }, fields?: object) {\n try {\n if (!this.isPerformanceCookieEnabled()) {\n return;\n }\n\n this.trackGaEvent(category, action, label, value, fields);\n this.pushGtmEvent(category, action, label, value);\n } catch (err) {\n this.Rollbar.error(`WhistleOut.trackEvent: category=${category}, action=${action}, label=${label}`, err);\n }\n }\n\n trackEventV2(name: string, params?: Record) {\n try {\n if (!this.isPerformanceCookieEnabled()) {\n return;\n }\n\n this.pushGtmEventV2(name, params);\n } catch (err) {\n this.Rollbar.error(`WhistleOut.trackEventV2: name=${name}`, err);\n }\n }\n\n sendPageview(\n url: string,\n analyticsClientSideData?: AnalyticsClientSideData,\n config?: AnalyticsClientSideData['config'],\n data?: AnalyticsClientSideData['data']\n ) {\n try {\n if ((!url || url.length <= 0) && analyticsClientSideData.data) url = data.trackingUrl;\n if (!url || url.length <= 0) url = location.pathname + location.search;\n\n wo$.each(config.accounts, function (index: number, account) {\n ga('create', account.accountNumber, { name: account.trackerId, useAmpClientId: true }, 'auto');\n if (account.linkIdTracking) {\n ga(account.trackerId + '.require', 'linkid');\n }\n if (account.optimizeAccount) {\n ga(account.trackerId + '.require', account.optimizeAccount);\n }\n if (url && url.length > 0) {\n ga(account.trackerId + '.set', 'page', url);\n }\n if (data.dimensions && data.dimensions.length > 0) {\n wo$.each(data.dimensions, function (index: number, value) {\n ga(account.trackerId + '.set', 'dimension' + (index + 1), value);\n });\n }\n if (config.anonymiseTracking) {\n ga(account.trackerId + '.set', 'anonymizeIp', true);\n }\n ga(account.trackerId + '.send', 'pageview');\n });\n } catch (err) {\n this.Rollbar.error(`WhistleOut.sendPageview: url=${url}`, err);\n }\n }\n\n // TODO: Name of the function only differs in casing, replace all usages with the original one and remove\n sendPageView(\n url: string,\n analyticsClientSideData?: AnalyticsClientSideData,\n config?: AnalyticsClientSideData['config'],\n data?: AnalyticsClientSideData['data']\n ) {\n this.sendPageview(url, analyticsClientSideData, config, data);\n }\n\n addPageImpression(\n url: string,\n analyticsClientSideData: AnalyticsClientSideData,\n config: AnalyticsClientSideData['config'],\n data: AnalyticsClientSideData['data'],\n values: string[] | string,\n isAjax: boolean,\n referrer: string\n ) {\n try {\n if ((!url || url.length <= 0) && analyticsClientSideData.data) url = data.trackingUrl;\n if (!url || url.length <= 0) url = location.pathname + location.search;\n\n if (data.includeWhistleOutTracking) {\n if (!values || values.length <= 0) values = data.values;\n if (!values || values.length <= 0) values = '|||||||||||||||||||';\n if (isAjax !== true) isAjax = false;\n if (!referrer) referrer = document.referrer;\n const src =\n '/track?u=' +\n encodeURIComponent(url) +\n '&a=' +\n isAjax +\n '&v=' +\n values +\n '&p=' +\n data.productAreaId +\n '&af=' +\n config.affiliateId +\n '&ad=' +\n config.affiliateDomainId +\n '&tr=' +\n data.isTransaction +\n '&pr=' +\n data.isProduct +\n '&r=' +\n encodeURIComponent(referrer) +\n '&m=' +\n this.isMobileDevice();\n const image = new Image(1, 1);\n image.src = src;\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n image.onload = function () {};\n }\n } catch (err) {\n this.Rollbar.error(`WhistleOut.addPageImpression: url=${url}`, err);\n }\n }\n\n getWoUserId(userInfoCookieKey: string) {\n const userInfoCookieValue = Cookies.get(userInfoCookieKey);\n\n if (userInfoCookieValue) {\n const cookieValues = userInfoCookieValue.split('|');\n if (cookieValues && cookieValues[0]) {\n return cookieValues[0];\n }\n }\n\n return this.setWoUserId(userInfoCookieKey);\n }\n\n generateUuid() {\n // source code from https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid/2117523#2117523\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n setWoUserId(userInfoCookieKey: string) {\n let woUserId = '00000000-0000-0000-0000-000000000000';\n try {\n woUserId = uuidv4();\n } catch {\n woUserId = this.generateUuid();\n }\n\n Cookies.set(userInfoCookieKey, woUserId, { path: '/', expires: 60 });\n return woUserId;\n }\n\n trackPageView(url?: string, values?: string[] | string, isAjax?: boolean, referrer?: string) {\n try {\n const analyticsClientSideData = this.getAnalyticsClientSideData();\n const config = analyticsClientSideData.config;\n const data = analyticsClientSideData.data;\n\n if (config.trackPageImpression) {\n this.addPageImpression(url, analyticsClientSideData, config, data, values, isAjax, referrer);\n\n if (this.isPerformanceCookieEnabled()) {\n this.sendPageview(url, analyticsClientSideData, config, data);\n this.pushGtmPageView(config, data);\n }\n }\n } catch (err) {\n this.Rollbar.error(`WhistleOut.trackPageView: url=${url}`, err);\n }\n }\n\n pushDataLayerItem = pushDataLayerItem;\n\n pushGtmEvent(category: string, action: string, label: string, value: { nonInteraction: boolean }) {\n try {\n let customNonInteraction = false;\n if (value && value.nonInteraction) {\n customNonInteraction = true;\n }\n\n const analyticsClientSideData = this.getAnalyticsClientSideData();\n const data = analyticsClientSideData.data;\n\n this.pushDataLayerItem({\n event: `wo_${category}_${action}`.toLowerCase(),\n customCategory: category,\n customAction: action,\n customLabel: label,\n customNonInteraction: customNonInteraction,\n customValue: isNaN(value as never) ? undefined : +value,\n customCountry: data.country,\n customProductAreaId: data.productAreaId,\n customUserId: this.getWoUserId(analyticsClientSideData.config.userInfoCookieKey)\n });\n } catch (err) {\n this.Rollbar.error(`WhistleOut.pushGtmEvent: category=${category}, action=${action}, label=${label}`, err);\n }\n }\n\n pushGtmEventV2(name: string, params?: Record) {\n try {\n\n const analyticsClientSideData = this.getAnalyticsClientSideData();\n const data = analyticsClientSideData.data;\n this.pushDataLayerItem({\n event: name.toLowerCase(),\n customCountry: data.country,\n customProductAreaId: data.productAreaId,\n customUserId: this.getWoUserId(analyticsClientSideData.config.userInfoCookieKey),\n ...params\n });\n } catch (err) {\n this.Rollbar.error(`WhistleOut.pushGtmEventV2: name=${name}`, err);\n }\n }\n\n pushGtmPageView(config: AnalyticsClientSideData['config'], data: AnalyticsClientSideData['data']) {\n try {\n const dimensionNames = ['Author', 'LastUpdated', 'PageType'];\n const dataLayerValue = {\n event: 'customPageView',\n customUrl: `${location.pathname}${location.search}`\n };\n\n wo$.each(data.dimensions, function (index, value) {\n dataLayerValue[dimensionNames[index]] = value;\n });\n\n dataLayerValue['customCountry'] = data.country;\n dataLayerValue['customUserId'] = this.getWoUserId(config.userInfoCookieKey);\n\n this.pushDataLayerItem(dataLayerValue);\n } catch (err) {\n this.Rollbar.error('WhistleOut.pushGtmPageView', err);\n }\n }\n\n isMobileDevice() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n\n getAds(productArea: string) {\n const placements = wo$('[data-adplacement]');\n if (placements.length > 0) {\n const data = {\n productArea: productArea,\n url: location.pathname + location.search,\n placements: wo$.makeArray(\n placements.map((i, el) => {\n const data = wo$(el).data();\n return {\n name: data.adplacement,\n tab: data.tab\n };\n })\n )\n };\n wo$.ajax({\n url: '/Ajax/Shared/Ad/Get',\n data: data,\n dataType: 'json',\n type: 'POST',\n success: result => {\n for (let x = 0; x < result.length; x++) {\n this.processAd(placements, result[x]);\n }\n this.applyPopover();\n this.stopPropagation();\n this.bindSubscribe();\n this.notifications.fire('AdsLoaded', { ads: result });\n }\n });\n }\n }\n\n processAd(placements: JQuery, ad: Ad) {\n const filter =\n ad.Tab == null\n ? '[data-adplacement = \"' + ad.Placement + '\"]'\n : '[data-adplacement = \"' + ad.Placement + '\"][data-tab = \"' + ad.Tab + '\"]';\n const matchingPlacements = placements.filter(filter);\n if (matchingPlacements.length > 0) {\n let html = ad.Content;\n if (ad.TrackingHtml != null) {\n html += '
' + ad.TrackingHtml + '
';\n }\n if (html === '' || html == null) {\n if (ad.Placement !== 'TopNav') {\n // TODO: Fix invalid call, old API?\n matchingPlacements.slideUp(250, this.setAd(matchingPlacements, null) as unknown as string);\n }\n } else if (ad.Placement === 'StickyBottomStrip') {\n if (\n typeof Cookies.get('ShowStickyBottomStrip') === 'undefined' ||\n Cookies.get('ShowStickyBottomStrip') === null\n ) {\n wo$('#suggested-articles').remove();\n this.setAd(matchingPlacements, ad);\n\n matchingPlacements.each((i, el) => {\n this.setStickyBottomStripAd(wo$(el), ad);\n });\n }\n } else {\n this.setAd(matchingPlacements, ad);\n matchingPlacements.slideDown(250);\n }\n }\n }\n\n setAd(placements: JQuery, ad: Ad) {\n let html = '';\n if (ad != null) {\n html = ad.Content;\n if (ad.TrackingHtml != null) {\n html += '
' + ad.TrackingHtml + '
';\n }\n }\n\n const onPlacement = (el: HTMLElement) => {\n const placement = wo$(el);\n if (placement.children().length === 0) {\n placement.html(html);\n } else {\n placement.children().first().html(html);\n }\n if (ad != null && ad.Id != null) {\n const label = placement.data('adplacement') + ': ' + ad.Name + ' (' + ad.Id + ')';\n\n const observer = new IntersectionObserver((entries: IntersectionObserverEntry[]) => {\n if (entries.length > 0) {\n const entry = entries[0];\n if (entry.isIntersecting) {\n this.trackEvent('Ad', 'Show', label, { nonInteraction: true });\n observer.disconnect();\n }\n }\n }, {\n root: null,\n threshold: 0.1\n });\n observer.observe(placement[0]);\n\n placement.off('click').click(() => {\n this.trackEvent('Ad', 'Click', label);\n });\n\n EmailMySearch.adInit(\n placement.find('#ad-email-my-search'),\n placement.find('#ad-email-my-search').find('#my-search-ad-submit')\n );\n\n }\n };\n\n placements.each((i, el: HTMLElement) => {\n onPlacement(el);\n });\n }\n\n setStickyBottomStripAd(placement: JQuery, ad: Ad) {\n placement\n .affix({\n offset: { top: 400 }\n })\n .show()\n .find('[data-adclose]')\n .off('click')\n .on('click', (event: Event) => {\n const expires = new Date();\n expires.setTime(expires.getTime() + 60 * 60 * 1000);\n Cookies.set('ShowStickyBottomStrip', '0', { path: '/', expires: expires });\n placement.remove();\n const label = placement.data('adplacement') + ': ' + ad.Name + ' (' + ad.Id + ')';\n this.trackEvent('Ad', 'Close', label);\n event.stopPropagation();\n });\n }\n\n hideAllPopovers(e: JQuery.TriggeredEvent) {\n if (wo$('.popover.in').length === 0) {\n return;\n }\n\n wo$('[data-toggle=\"popover\"]').each((i, el) => {\n const jObj = wo$(el);\n if (\n !jObj.is(e.target) &&\n jObj.has(e.target).length === 0 &&\n wo$('.popover').has(e.target).length === 0 &&\n wo$('.popover').hasClass('in')\n ) {\n jObj.popover('hide');\n }\n });\n }\n\n applyPopover = (container?: JQuery) => {\n if (typeof container !== 'undefined') {\n container.find('[data-toggle=\"popover\"]').popover({ html: true });\n }\n\n wo$('[data-toggle=\"popover\"]').popover({ html: true });\n wo$('body').off('click', this.hideAllPopovers).on('click', this.hideAllPopovers);\n wo$('body')\n .off('hidden.bs.popover')\n .on('hidden.bs.popover', e => {\n if (wo$(e.target).data('bs.popover')) {\n wo$(e.target).data('bs.popover').inState.click = false;\n }\n });\n };\n\n triggerPopoverNotification(element: HTMLElement, content: string, position: Bootstrap.Placement) {\n // eslint-disable-next-line eqeqeq\n if (typeof position == 'undefined') {\n position = 'right';\n }\n const popoverElement = wo$(element);\n popoverElement.popover({\n trigger: 'manual',\n placement: position,\n html: true,\n content: content\n });\n popoverElement.popover('show');\n setTimeout(function () {\n popoverElement.popover('hide');\n }, 1200);\n }\n\n checkQueryParamExists(queryParam: string) {\n const url = location.href;\n if (url.indexOf('?' + queryParam + '=') !== -1) return true;\n else if (url.indexOf('&' + queryParam + '=') !== -1) return true;\n return false;\n }\n\n storeSelectorModal: { show: (selectedHandler: selectStoreHandler) => void } = {\n show: function (selectedHandler) {\n const modal = wo$('#store-selector-modal');\n if (!modal.length) return;\n\n modal.keyup(e => {\n if (e.keyCode === 13) {\n this.submitStoreSelectorModal(selectedHandler);\n }\n });\n\n modal.find('#continue-button').click(() => {\n this.submitStoreSelectorModal(selectedHandler);\n });\n const $staff = modal.find('#staff');\n if ($staff.length > 0) {\n $staff.typeahead({\n minLength: 2,\n items: 'all',\n addItem: {\n id: 0,\n code: 'Other',\n name: 'Other'\n },\n source: function (query, process) {\n return wo$.ajax({\n url: '/Store/FindStaff',\n data: { search: query },\n dataType: 'json',\n type: 'POST',\n success: function (json) {\n return process(json);\n }\n });\n },\n afterSelect: function (item: TypeaheadItem) {\n $staff.data('id', item.id);\n $staff.data('code', item.code);\n $staff.data('name', item.name);\n },\n matcher: function () {\n return true;\n },\n displayText: function (item: TypeaheadItem) {\n return item.code ? item.name + ' (' + item.code + ')' : item.name;\n }\n });\n }\n\n const siteConfiguration = this.getSiteConfiguration();\n const currentStoreId = Cookies.get(siteConfiguration.selectedStoreCookieKey);\n if (currentStoreId) {\n modal.find('#store-select').val(currentStoreId);\n }\n\n modal.modal('show').on('shown.bs.modal', function () {\n modal.find('#staff').focus();\n });\n }\n };\n\n submitStoreSelectorModal(selectedHandler: selectStoreHandler) {\n const modal = wo$('#store-selector-modal');\n if (!modal.length) return;\n\n const selectedStoreId = modal.find('#store-select').val() as string;\n\n const staff = modal.find('#staff');\n let selectedStaff = null;\n if (staff.length > 0) {\n selectedStaff = {\n id: staff.data('id'),\n code: staff.data('code'),\n name: staff.data('name')\n };\n }\n\n if (\n !selectedStoreId ||\n selectedStoreId.length <= 0 ||\n // TODO: Fix the violation and enable the rule\n // eslint-disable-next-line eqeqeq\n (staff.length > 0 && (!selectedStaff || selectedStaff.id == undefined))\n ) {\n modal.find('#store-error').show();\n return;\n }\n\n selectedHandler(selectedStoreId, selectedStaff);\n modal.find('#store-error').hide();\n modal.modal('hide');\n }\n\n showStoreSelector() {\n const siteConfiguration = this.getSiteConfiguration();\n if (\n (siteConfiguration &&\n siteConfiguration.forceStoreSelection === true &&\n (Cookies.get(siteConfiguration.selectedStoreCookieKey) == null ||\n Cookies.get(siteConfiguration.selectedStoreCookieKey) === '')) ||\n (siteConfiguration &&\n siteConfiguration.forceStoreStaffSelection === true &&\n (Cookies.get(siteConfiguration.selectedStaffCookieKey) == null ||\n Cookies.get(siteConfiguration.selectedStaffCookieKey) === ''))\n ) {\n this.storeSelectorModal.show(this.selectStore);\n }\n }\n\n resetStore() {\n const siteConfiguration = this.getSiteConfiguration();\n Cookies.remove(siteConfiguration.selectedStoreCookieKey, { path: '/' });\n Cookies.remove(siteConfiguration.selectedStaffCookieKey, { path: '/' });\n\n // TODO: Browser ignores the parameter in `location.reload(true)`. If needed it should be done differently\n // see: https://stackoverflow.com/questions/55127650/location-reloadtrue-is-deprecated\n location.reload();\n }\n\n resetStaff(reload?: boolean) {\n const siteConfiguration = this.getSiteConfiguration();\n Cookies.remove(siteConfiguration.selectedStaffCookieKey, { path: '/' });\n if (reload) {\n // TODO: Browser ignores the parameter in `location.reload(true)`. If needed it should be done differently\n // see: https://stackoverflow.com/questions/55127650/location-reloadtrue-is-deprecated\n location.reload();\n }\n }\n\n selectStore(selectedStoreId: string, selectedStaff: unknown) {\n const expires = new Date();\n expires.setFullYear(expires.getFullYear() + 1);\n Cookies.set(this.getSiteConfiguration().selectedStoreCookieKey, selectedStoreId, {\n path: '/',\n expires: expires\n });\n\n if (selectedStaff) {\n Cookies.set(this.getSiteConfiguration().selectedStaffCookieKey, JSON.stringify(selectedStaff), {\n path: '/',\n expires: expires\n });\n }\n\n // TODO: Browser ignores the parameter in `location.reload(true)`. If needed it should be done differently\n // see: https://stackoverflow.com/questions/55127650/location-reloadtrue-is-deprecated\n location.reload();\n }\n\n getStaff(): Staff {\n const value = Cookies.get(this.getSiteConfiguration().selectedStaffCookieKey);\n return JSON.parse(value);\n }\n\n getStaffId() {\n const staff = this.getStaff();\n return staff ? staff.id : '';\n }\n\n getStaffCode() {\n const staff = this.getStaff();\n return staff ? staff.code : '';\n }\n\n getStaffName() {\n const staff = this.getStaff();\n return staff ? staff.name : '';\n }\n\n getStoreName() {\n return this.getSiteConfiguration().storeName;\n }\n\n getStoreEmail() {\n return this.getSiteConfiguration().storeEmail;\n }\n\n async bindStateSwitcher() {\n try {\n await deferred.initBootstrapSelect();\n const $container = wo$('#state-switcher-container');\n if ($container.length === 0) return;\n\n const $province = $container.find('#province');\n if ($province && $province.length > 0) {\n this.applySelectPicker($province);\n this.applySelectPickersStyle();\n\n if (typeof Cookies.get('state') !== 'undefined' && Cookies.get('state') !== null) {\n $province.selectpicker('val', Cookies.get('state'));\n }\n\n $province.on('change', (e: Event) => {\n const el = e.currentTarget as HTMLSelectElement;\n let href: string;\n if (el.value === null || el.value === '') {\n Cookies.remove('state', { path: '/' });\n href = this.updateQueryStringParameter(location.href, 'state', null);\n } else {\n href = this.updateQueryStringParameter(location.href, 'state', el.value);\n }\n\n // TODO: Browser ignores the parameter in `location.reload(true)`. If needed it should be done differently\n // see: https://stackoverflow.com/questions/55127650/location-reloadtrue-is-deprecated\n if (href === location.href) window.location.reload();\n else location.href = href;\n });\n }\n } catch (e) {\n console.log('Error in WhistleOut.bindStateSwitcher:', e);\n }\n }\n\n bindModalLinks() {\n try {\n wo$('.js-modal-link').magnificPopup({\n type: 'iframe',\n removeDelay: 160,\n preloader: false,\n fixedContentPos: false\n });\n } catch (e) {\n console.log('Error in WhistleOut.bindModalLinks:', e);\n }\n }\n\n bindTextAdLinks() {\n wo$('#text-ads a').click(() => {\n const label = wo$(this).html();\n this.trackEvent('TextAd', 'Click', label);\n });\n }\n\n bindExpressResults() {\n wo$('#express-results-stop, #express-results-stop2').click(() => {\n Cookies.remove('expressmode', { path: '/' });\n const href = this.updateQueryStringParameter(location.href, 'express', null);\n\n // TODO: Browser ignores the parameter in `location.reload(true)`. If needed it should be done differently\n // see: https://stackoverflow.com/questions/55127650/location-reloadtrue-is-deprecated\n if (href === location.href) window.location.reload();\n else location.href = href;\n });\n }\n\n bindRetailSplash() {\n this.startRetailSplashTimer();\n wo$(document).on('click keydown keyup mousemove scroll', this.startRetailSplashTimer);\n }\n\n startRetailSplashTimer() {\n if (this.retailSplashTimer) {\n window.clearTimeout(this.retailSplashTimer);\n }\n this.retailSplashTimer = window.setTimeout(() => {\n if (wo$('#store-selector-modal').hasClass('in')) {\n this.startRetailSplashTimer();\n return;\n }\n\n wo$('#chatlio-widget').hide();\n wo$('#modal-retail-splash')\n .modal('show')\n .on('hide.bs.modal', () => {\n this.startRetailSplashTimer();\n wo$('#chatlio-widget').show();\n });\n }, 300000);\n }\n\n focusAndSelect(element: HTMLInputElement, copyToClipboard?: boolean) {\n const len = (wo$(element).val() as string).length;\n (wo$(element)[0] as HTMLInputElement).setSelectionRange(0, len, 'backward');\n wo$(element).focus();\n if (copyToClipboard === true) {\n document.execCommand('Copy');\n }\n }\n\n applySelectPicker(element: JQuery, config?: BootstrapSelectOptions) {\n const callback = () => {\n element\n .selectpicker('destroy')\n .selectpicker(config || {})\n .selectpicker('refresh');\n };\n\n if (wo$.fn.selectpicker) {\n callback();\n return;\n }\n\n deferred.initBootstrapSelect().then(callback);\n }\n\n applySelectPickersStyle(parent?: JQuery) {\n const callback = () => {\n if (!parent) {\n parent = wo$('document,html');\n }\n parent.find('.filter-option').addClass('needsclick');\n };\n\n if (wo$.fn.selectpicker) {\n callback();\n return;\n }\n\n deferred.initBootstrapSelect().then(callback);\n }\n\n stopPropagation() {\n wo$('[data-stop-propagation]').click(function (event) {\n event.stopPropagation();\n });\n wo$('.yamm .dropdown-menu').click(function (event) {\n const target = wo$(event.target);\n if (!target.is('a')) event.stopPropagation();\n });\n }\n\n bindCta(parent?: JQuery) {\n if (!parent) parent = wo$(document);\n\n parent.find('a[data-cta]').on('click', (e: Event) => {\n const data = wo$(e.currentTarget).data();\n const action = data.cta;\n const label = data.supplier;\n this.trackEvent('Transaction', action, label);\n });\n }\n\n bindClickUrl() {\n wo$('[data-click-url]').on('click', (e: Event) => {\n const url = wo$(e.currentTarget).data('click-url');\n if (url) {\n location.href = url;\n }\n });\n }\n\n bindTrackClick() {\n wo$('[data-track-click]').on('click', (e: Event) => {\n const url = wo$(e.currentTarget).data('track-click');\n if (url) {\n const html = '';\n wo$('body').append(html);\n }\n });\n }\n\n applyPromoAds(element: JQuery) {\n element.find('[data-promo-click]').on('click', (e: Event) => {\n e.stopPropagation();\n const parent = wo$(e.currentTarget).closest('[data-promo-url]');\n const supplier = parent.data('supplier');\n const url = parent.data('promo-url');\n this.trackEvent('DealStrip', 'Click', supplier);\n window.open(url, '_blank');\n });\n }\n\n checkSiteQueryString() {\n const state = this.getQueryStringParameter('state');\n if (state !== null) {\n if (state === '') Cookies.remove('state', { path: '/' });\n else Cookies.set('state', state, { path: '/', expires: 31 });\n }\n\n const express = this.getQueryStringParameter('express');\n if (express !== null) {\n Cookies.set('expressmode', 'true', { path: '/', expires: 60 });\n }\n }\n\n initHistoryTracker(obj: unknown) {\n obj.HistoryWrapper = {\n pushState: (data, title, url) => {\n history.pushState(data, title, url);\n },\n\n pushQuery: queryString => {\n const newUrl = this.replaceQueryString(\n `${window.location.origin}${window.location.pathname}`,\n queryString\n );\n history.pushState(null, document.title, newUrl);\n }\n };\n\n window.onpopstate = () => {\n location.reload();\n };\n }\n\n scrollTo(top: number | string | HTMLElement): void;\n scrollTo(top: number, scrollDuration?: number): void;\n scrollTo(target: string, scrollDuration?: number, scrollOffset?: number): void;\n scrollTo(target: number | string | HTMLElement, scrollDuration?: number, scrollOffset?: number): void {\n if (typeof target === 'number') {\n window.scrollTo({\n top: target as unknown as number,\n behavior: 'smooth'\n });\n return;\n }\n\n if (typeof scrollDuration === 'undefined') {\n scrollDuration = scrollDefaultDuration;\n }\n if (typeof scrollOffset === 'undefined') {\n scrollOffset = scrollDefaultOffset;\n }\n\n const el =\n typeof target === 'string'\n ? target?.startsWith('#')\n ? document.getElementById(target.slice(1))\n : document.querySelector(target)\n : target;\n\n if (!el) {\n return;\n }\n\n const y = el.getBoundingClientRect().top + window.scrollY;\n this.scrollTo(y + scrollOffset);\n }\n\n bindScrollTo() {\n wo$('a[data-scrollto]').on('click', (e: Event) => {\n e.stopPropagation();\n e.preventDefault();\n const el = e.currentTarget as HTMLElement;\n const data = el.dataset;\n const scrollto = data.scrollto;\n const scrollDuration = Number.parseInt(data.scrollduration) || scrollDefaultDuration;\n const scrollOffset = Number.parseInt(data.scrolloffset) || scrollDefaultOffset;\n this.scrollTo(scrollto, scrollDuration, scrollOffset);\n });\n }\n\n bindShow() {\n wo$('a[data-show]').on('click', (e: Event) => {\n const target = wo$(e.currentTarget).data('show');\n wo$(target).show();\n });\n }\n\n bindFocusAndSelect() {\n wo$('input[data-focusandselect]').on('click', (e: Event) => {\n const el = e.currentTarget as HTMLInputElement;\n this.focusAndSelect(el);\n });\n }\n\n bindTrackEvent() {\n wo$('body').on('click', '[data-trackevent]', (e: Event) => {\n const el = e.currentTarget as HTMLElement;\n const data = wo$(el).data();\n const category = data.category;\n const action = data.action;\n const label = data.label;\n this.trackEvent(category, action, label);\n });\n }\n\n async bindSlick() {\n await deferred.initSlick();\n\n const container = wo$('.slick-container .responsive');\n container.show();\n\n container.slick({\n dots: true,\n infinite: false,\n speed: 500,\n slidesToShow: 14,\n slidesToScroll: 14,\n responsive: [\n {\n breakpoint: 1200,\n settings: {\n slidesToShow: 10,\n slidesToScroll: 10,\n infinite: true,\n dots: true\n }\n },\n {\n breakpoint: 992,\n settings: {\n slidesToShow: 6,\n slidesToScroll: 6,\n dots: true\n }\n },\n {\n breakpoint: 768,\n settings: {\n slidesToShow: 3,\n slidesToScroll: 3,\n dots: false\n }\n }\n ]\n });\n }\n\n\n getRemarketingData(): RemarketingData {\n const remarketing = wo$('#remarketing');\n return remarketing.length === 0 ? null : this.readLookupData(remarketing);\n }\n\n remarketing(data: RemarketingData) {\n if (!this.isTargetingCookieEnabled()) {\n return;\n }\n\n const trackingCode = this.getSiteConfiguration().remarketingTrackingCode;\n if (data && typeof gtag !== 'undefined' && trackingCode) {\n gtag('event', 'conversion', {\n allow_custom_scripts: true,\n send_to: trackingCode,\n u1: data.supplier ? data.supplier : '',\n u2: data.data ? data.data : '',\n u3: data.planType ? data.planType : '',\n u4: data.phoneBrand ? data.phoneBrand : '',\n u5: data.phone ? data.phone : '',\n u6: data.tags ? data.tags : '',\n u7: data.connectionType ? data.connectionType : '',\n u8: data.bundles ? data.bundles : '',\n u9: data.numberOfLines ? data.numberOfLines : '',\n u10: data.postcode ? data.postcode : '',\n u11: data.tabletBrand ? data.tabletBrand : '',\n u12: data.tablet ? data.tablet : '',\n u13: data.speed ? data.speed : ''\n });\n }\n }\n\n bindGenericCallback() {\n wo$('[data-callback]').each(() => {\n const form = wo$(this);\n form.find('[data-submit]')\n .off('click')\n .on('click', () => {\n form.find('[data-success], [data-error]').hide();\n form.find('.has-error').removeClass('has-error');\n const $name = form.find('[data-name]');\n const $phone = form.find('[data-phone]');\n const $state = form.find('[data-state]');\n const data = {\n name: ($name.val() as string).trim(),\n phone: ($phone.val() as string).trim(),\n time: form.find('[data-time]').val(),\n state: $state.val()\n };\n let error = false;\n if (data.name === '') {\n $name.parents('.form-group').addClass('has-error');\n error = true;\n }\n const config = this.getSiteConfiguration();\n const regex = new RegExp(config.regex.phone);\n if (data.phone === '' || !regex.test(data.phone)) {\n $phone.parents('.form-group').addClass('has-error');\n error = true;\n }\n if (data.state === '') {\n $state.parents('.form-group').addClass('has-error');\n error = true;\n }\n if (!error) {\n wo$.ajax({\n url: '/Ajax/Shared/Callback/SubmitGeneric',\n type: 'POST',\n data: data,\n success: function () {\n form.find('[data-intro]').hide();\n form.find('[data-success]').show();\n form.find('[data-name]').val('');\n form.find('[data-phone]').val('');\n form.find('[data-state]').val('');\n },\n error: function () {\n form.find('[data-intro]').hide();\n form.find('[data-error]').show();\n }\n });\n }\n });\n });\n }\n\n checkAffiliateDomainCookie() {\n const config = this.getSiteConfiguration();\n if (config) {\n if (config.affiliateDomainId === 0) {\n Cookies.remove(config.cookieName, {\n path: '/',\n domain: config.cookieDomain\n });\n } else if (config.cookieDuration && config.cookieDuration !== '') {\n const expires = new Date();\n if (config.cookieDuration === -1) {\n expires.setTime(expires.getTime() + 525600 * 60 * 60 * 1000);\n } else {\n expires.setTime(expires.getTime() + (config.cookieDuration as number) * 60 * 1000);\n }\n Cookies.set(config.cookieName, String(config.affiliateDomainId), {\n path: '/',\n expires: expires,\n domain: config.cookieDomain\n });\n }\n }\n }\n\n bindDataTables() {\n function applySorting(element, config) {\n const sort = element.find('th[data-order]');\n const index = sort.index();\n const direction = sort.data('order') || 'asc';\n if (sort.length) {\n config.order = [[index, direction]];\n }\n }\n if (wo$.fn.dataTable) {\n wo$.fn.dataTable.ext.errMode = 'throw';\n wo$.extend(wo$.fn.dataTable.defaults, {\n searching: false,\n paging: false,\n info: false,\n ordering: true\n });\n\n wo$('.dataTables-sortableResponsive').each((i, el) => {\n const config = {\n columnDefs: [\n {\n orderable: false,\n targets: -1\n },\n {\n orderSequence: ['desc', 'asc'],\n targets: '_all'\n }\n ],\n fixedHeader: {\n headerOffset: 60\n },\n responsive: {\n details: false\n }\n };\n\n const jobj = wo$(el);\n applySorting(jobj, config);\n jobj.DataTable(config);\n });\n\n wo$('.dataTables-sortableResponsiveAllColumns').each((i, el) =>{\n const config = {\n columnDefs: [\n {\n orderable: true,\n },\n {\n orderSequence: ['desc', 'asc'],\n targets: '_all'\n }\n ],\n fixedHeader: {\n headerOffset: 60\n },\n responsive: {\n details: false\n }\n };\n\n const jobj = wo$(el);\n applySorting(jobj, config);\n jobj.DataTable(config);\n });\n\n wo$('.dataTables-Sortable').each((i, el) => {\n const config = {\n columnDefs: [\n {\n orderable: true\n },\n {\n orderSequence: ['desc', 'asc'],\n targets: '_all'\n }\n ],\n fixedHeader: false,\n responsive: false\n };\n\n const jobj = wo$(el);\n applySorting(jobj, config);\n jobj.DataTable(config);\n });\n\n // TODO: Object doesn't match the type definition, fix\n wo$('.dataTables-notSortable').DataTable({\n fixedHeader: {\n headerOffset: 60\n },\n responsive: {\n details: true\n },\n ordering: false\n } as unknown as DataTables.Settings);\n\n // TODO: Object doesn't match the type definition, fix\n wo$('.dataTables-fixedHeight').DataTable({\n fixedHeader: false,\n responsive: false,\n ordering: false,\n scrollY: '500px',\n scrollX: true,\n scrollCollapse: true\n } as unknown as DataTables.Settings);\n }\n }\n\n bindCitiesAutoComplete(page: JQuery) {\n const container = page.find('#cities');\n if (!container.length) return;\n\n const input = container.find('#search-city-input');\n input.val('');\n input.prop('disabled', false);\n\n const area = input.data('area');\n\n const icon = container.find('#city-search-icon');\n icon.removeClass();\n icon.addClass('fa fa-search');\n\n input.typeahead({\n selectOnBlur: false,\n minLength: 3,\n source: function (query, process) {\n return wo$.ajax({\n url: '/Ajax/Shared/Geo/Cities?query=' + query + '&area=' + area,\n dataType: 'json',\n success: function (json) {\n return process(json);\n }\n });\n },\n afterSelect: function (item: { url: string; displayText: string }) {\n if (item.url) {\n container.find('#search-city-input').prop('disabled', true);\n const icon = container.find('#city-search-icon');\n icon.removeClass();\n icon.addClass('fa fa-spinner fa-fw fa-spin');\n location.href = item.url;\n }\n },\n matcher: function () {\n return true;\n },\n displayText: function (item) {\n return (item as unknown as { displayText: string }).displayText;\n }\n });\n\n container.find('#search-city-input').on('blur.bootstrap3Typeahead', function () {\n if (!container.find('#search-city-input').prop('disabled')) {\n container.find('#search-city-input').val('');\n }\n });\n }\n\n setPrivateDataCookieValue(disabled: boolean) {\n if (typeof window === 'undefined' || !window || !wo$) {\n return;\n }\n\n Cookies.set('hidePrivateData', String(disabled), { path: '/', expires: 365 });\n }\n\n getPrivateDataCookieValue() {\n if (typeof window === 'undefined' || !window || !wo$) {\n return false;\n }\n\n const result = Cookies.get('hidePrivateData');\n if (typeof result === 'undefined' || result == null) {\n return false;\n }\n return result === 'true' || /true/i.test(result);\n }\n\n privateDataModalId = 'modal-privatedata';\n\n bindPrivateDataModal(container?: JQuery) {\n if (typeof container === 'undefined') {\n container = wo$('body');\n }\n\n const hideData = this.getPrivateDataCookieValue();\n const modal = container.find(`#${this.privateDataModalId}`);\n\n modal.off('show.bs.modal').on('show.bs.modal', () => {\n const checkBox = container.find('#private-data-checkbox');\n checkBox.prop('checked', hideData);\n const applyButton = container.find('#private-data-apply-button');\n applyButton.off().click(() => {\n const checked = checkBox.prop('checked');\n if (checked !== hideData) {\n this.setPrivateDataCookieValue(checked);\n\n location.reload();\n }\n });\n });\n }\n\n bindPhoneSpecsModal(container?: JQuery) {\n if (typeof container === 'undefined') {\n container = wo$('body');\n }\n\n container\n .find('a[data-phone-specs-button]')\n .off('click')\n .on('click', (e: Event) => {\n const el = e.currentTarget;\n const phoneShortUrl = wo$(el).data('phone-specs-button');\n if (!phoneShortUrl || phoneShortUrl.length < 1) return;\n\n let phoneSpecsContainer = wo$('#phone-specs-container');\n if (\n phoneSpecsContainer &&\n phoneSpecsContainer.length > 0 &&\n phoneSpecsContainer.data('phone-short-url') === phoneShortUrl\n ) {\n phoneSpecsContainer.find('[data-phone-specs-modal]').modal('show');\n } else {\n const data = {\n phoneShortUrl: phoneShortUrl\n };\n const siteConfiguration = this.getSiteConfiguration();\n wo$.ajax({\n url: siteConfiguration.phoneSpecsModalUrl,\n data: data,\n type: 'GET',\n success: function (result) {\n if (result !== '') {\n if (!phoneSpecsContainer || phoneSpecsContainer.length < 1) {\n wo$('body').append('
');\n phoneSpecsContainer = wo$('#phone-specs-container');\n }\n phoneSpecsContainer.data('phone-short-url', phoneShortUrl);\n phoneSpecsContainer.html(result);\n phoneSpecsContainer.find('[data-phone-specs-modal]').modal('show');\n }\n }\n });\n }\n });\n }\n\n bindTabletSpecsModal(container?: JQuery) {\n if (typeof container === 'undefined') {\n container = wo$('body');\n }\n\n container\n .find('a[data-tablet-specs-button]')\n .off('click')\n .on('click', (e: Event) => {\n const tabletShortUrl = wo$(e.currentTarget).data('tablet-specs-button');\n if (!tabletShortUrl || tabletShortUrl.length < 1) return;\n\n this.showTabletSpecs(tabletShortUrl);\n });\n }\n\n showTabletSpecs(tabletShortUrl: string) {\n let tabletSpecsContainer = wo$('#tablet-specs-container');\n if (\n tabletSpecsContainer &&\n tabletSpecsContainer.length > 0 &&\n tabletSpecsContainer.data('tablet-short-url') === tabletShortUrl\n ) {\n tabletSpecsContainer.find('[data-tablet-specs-modal]').modal('show');\n } else {\n const data = {\n tabletShortUrl: tabletShortUrl\n };\n const siteConfiguration = this.getSiteConfiguration();\n wo$.ajax({\n url: siteConfiguration.tabletSpecsModalUrl,\n data: data,\n type: 'GET',\n success: function (result) {\n if (result !== '') {\n if (!tabletSpecsContainer || tabletSpecsContainer.length < 1) {\n wo$('body').append('
');\n tabletSpecsContainer = wo$('#tablet-specs-container');\n }\n tabletSpecsContainer.data('tablet-short-url', tabletShortUrl);\n tabletSpecsContainer.html(result);\n tabletSpecsContainer.find('[data-tablet-specs-modal]').modal('show');\n }\n }\n });\n }\n }\n\n bindBYODModal(container?: JQuery) {\n if (typeof container === 'undefined') {\n container = wo$('body');\n }\n\n container\n .find('[data-byod-modal-button]')\n .off('click')\n .on('click', () => {\n let byoModalContainer = wo$('#byo-modal-container');\n if (byoModalContainer && byoModalContainer.length > 0) {\n this.showBYODModal();\n } else {\n const siteConfiguration = this.getSiteConfiguration();\n wo$.ajax({\n url: siteConfiguration.byoPhonePickerModalUrl,\n type: 'GET',\n success: function (result) {\n if (result !== '') {\n if (!byoModalContainer || byoModalContainer.length < 1) {\n wo$('body').append('
');\n byoModalContainer = wo$('#byo-modal-container');\n }\n byoModalContainer.html(result);\n this.showBYODModal();\n }\n }\n });\n }\n });\n }\n\n showBYODModal() {\n if (this.byoPhonePickerController) {\n this.byoPhonePickerController.show(function (\n selectedModel: { searchUrl: string },\n genericSearchUrl: string\n ) {\n if (selectedModel) {\n location.href = selectedModel.searchUrl;\n } else if (genericSearchUrl) {\n location.href = genericSearchUrl;\n }\n });\n }\n }\n\n bindPhoneGallery(container?: JQuery) {\n if (typeof container === 'undefined') {\n container = wo$('body');\n }\n\n container\n .find('a[data-phone-gallery-button]')\n .off('click')\n .on('click', (e: Event) => {\n const link = wo$(e.currentTarget);\n const phoneShortUrl = link.data('phone-gallery-button');\n if (!phoneShortUrl || phoneShortUrl.length < 1) return;\n\n const data = {\n phoneShortUrl: phoneShortUrl\n };\n const siteConfiguration = this.getSiteConfiguration();\n wo$.ajax({\n url: siteConfiguration.phoneGalleryUrl,\n data: data,\n type: 'GET',\n success: function (result) {\n if (result !== '') {\n const items = [];\n wo$.each(result, function (index, item) {\n items.push({ src: item });\n });\n\n wo$.magnificPopup.open({\n items: items,\n type: 'image',\n gallery: {\n enabled: true\n }\n });\n }\n }\n });\n });\n }\n\n showTabletGallery(tabletShortUrl: string) {\n const data = {\n tabletShortUrl: tabletShortUrl\n };\n const siteConfiguration = this.getSiteConfiguration();\n wo$.ajax({\n url: siteConfiguration.tabletGalleryUrl,\n data: data,\n type: 'GET',\n success: function (result) {\n if (result !== '') {\n const items = [];\n wo$.each(result, function (index, item) {\n items.push({ src: item });\n });\n\n wo$.magnificPopup.open({\n items: items,\n type: 'image',\n gallery: {\n enabled: true\n }\n });\n }\n }\n });\n }\n\n bindTabletGallery(container?: JQuery) {\n if (typeof container === 'undefined') {\n container = wo$('body');\n }\n\n container\n .find('a[data-tablet-gallery-button]')\n .off('click')\n .on('click', (e: Event) => {\n const link = wo$(e.currentTarget);\n const tabletShortUrl = link.data('tablet-gallery-button');\n if (!tabletShortUrl || tabletShortUrl.length < 1) return;\n\n this.showTabletGallery(tabletShortUrl);\n });\n }\n\n copyToClipboard(value: string) {\n const input = wo$('').appendTo('body');\n input.val(value);\n input.select();\n document.execCommand('Copy');\n input.remove();\n }\n\n bindSubscribe() {\n const config = this.getSiteConfiguration();\n wo$('[data-subscribe]:not([data-bound])').each((i, el) => {\n const target = wo$(el);\n const email = target.find('[data-email]');\n const listId = target.data('listid');\n const eventLabel = target.data('eventlabel');\n target\n .find('[data-submit]')\n .off('click')\n .on('click', () => {\n target.find('[data-error]').hide();\n const regex = new RegExp(config.regex.email);\n if (!email.val() || !regex.test(email.val() as string)) {\n target.find('[data-info]').hide();\n target.find('[data-info]').hide();\n target.find('[data-validate]').show();\n return;\n }\n if (!target.find('[data-consent]').is(':checked')) {\n target.find('[data-info]').hide();\n target.find('[data-validate]').show();\n return;\n }\n const data = {\n email: email.val(),\n listId: listId\n };\n wo$.ajax({\n url: config.subscribeUrl,\n data: data,\n type: 'POST',\n success: () => {\n target.find('[data-formrow]').hide();\n target.find('[data-success]').show();\n this.trackEvent('Subscribers', 'Subscribed', eventLabel || listId);\n },\n error: function () {\n target.find('[data-error]').show();\n },\n complete: function () {\n target.find('[data-info]').hide();\n target.find('[data-validate]').hide();\n }\n });\n });\n target.attr('data-bound', true as unknown as string); // TODO: Fix invalid parameter type\n });\n }\n\n bindNewsCarousel() {\n deferred.initSlick().then(() => {\n wo$('.news-carousel')\n .slick({\n dots: false,\n infinite: false,\n speed: 500,\n slidesToShow: 6,\n slidesToScroll: 6,\n responsive: [\n {\n breakpoint: 1200,\n settings: {\n slidesToShow: 6,\n slidesToScroll: 6,\n infinite: true,\n dots: false\n }\n },\n {\n breakpoint: 992,\n settings: {\n slidesToShow: 4,\n slidesToScroll: 4,\n dots: false\n }\n },\n {\n breakpoint: 768,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n dots: false\n }\n }\n ]\n })\n .show();\n });\n }\n\n bindSlickSingle() {\n deferred.initSlick().then(() => {\n wo$('.slick-single')\n .slick({\n dots: false,\n infinite: false,\n speed: 500,\n slidesToShow: 1,\n slidesToScroll: 1\n })\n .show();\n });\n }\n\n encodeHtml(str: string) {\n const el = document.createElement('span');\n el.append(document.createTextNode(str));\n return el.innerHTML;\n }\n\n trueOrNull(val: string | boolean) {\n return val === true || val === 'true' ? true : null;\n }\n\n falseOrNull(val: string | boolean) {\n return val === false || val === 'false' ? false : null;\n }\n\n boolOrNull(val: string | boolean) {\n return this.trueOrNull(val) === true ? true : this.falseOrNull(val) === false ? false : null;\n }\n\n bindCriteriaFilters<\n TCriteria extends {\n common: SearchCriteriaCommon;\n results: SearchCriteriaCommon['results'];\n }\n >(\n elements: JQuery,\n callback: (element: JQuery, criteria: TCriteria) => void,\n criteria: TCriteria,\n mappingOverrides: { [key: string]: (e: TCriteria, val: string, key?: string) => unknown }\n ) {\n if (!elements || elements.length === 0) {\n return;\n }\n\n const getCommon = function (e: TCriteria) {\n if (!e.common) {\n e.common = {};\n }\n return e.common;\n };\n\n const getResults = function (e: TCriteria) {\n if (!e.results) {\n e.results = {};\n }\n return e.results;\n };\n\n const trueOrNull = this.trueOrNull;\n const falseOrNull = this.falseOrNull;\n\n // Based on Areas\\Shared\\React\\js\\utils\\CommonQueryString.js\n const mappings = Object.assign(\n {\n address: function (e, val, key) {\n getCommon(e)[key] = val;\n },\n cache: function (e, val) {\n getCommon(e).useCache = falseOrNull(val);\n },\n campaignGroup: function (e, val, key) {\n getCommon(e)[key] = parseInt(val);\n },\n contract: function (e, val) {\n getCommon(e).contractTerms = (val || '').split(',') as unknown as number[]; // TODO: Convert explicitly?\n },\n currentsupplier: function (e, val) {\n getCommon(e).currentSupplierShortUrl = val;\n },\n customer: function (e, val) {\n getCommon(e).customerType = val;\n },\n dealsonly: function (e, val) {\n getCommon(e).includeOffersWithCampaignOnly = trueOrNull(val);\n },\n debug: function (e, val, key) {\n getCommon(e)[key] = trueOrNull(val);\n },\n enforcemaximumresultlimits: function (e, val) {\n getCommon(e).enforceMaximumResultLimits = falseOrNull(val);\n },\n hidecoverage: function (e, val) {\n getCommon(e).hideCoverage = trueOrNull(val);\n },\n hideemptytabs: function (e, val) {\n getCommon(e).hideEmptyTabs = trueOrNull(val);\n },\n hideshare: function (e, val) {\n getCommon(e).hideShare = trueOrNull(val);\n },\n hidesort: function (e, val) {\n getCommon(e).hideSort = trueOrNull(val);\n },\n hidewidenresults: function (e, val) {\n getCommon(e).hideWidenResults = trueOrNull(val);\n },\n includefeatured: function (e, val) {\n getCommon(e).includeFeaturedResults = falseOrNull(val);\n },\n maxresults: function (e, val) {\n getResults(e).maximumNumberOfResults = parseInt(val);\n },\n maxresultspersupplier: function (e, val) {\n getCommon(e).maxResultsPerSupplier = parseInt(val);\n },\n minspend: function (e, val) {\n getCommon(e).minimumSpend = Number(val);\n },\n monetised: function (e, val) {\n getCommon(e).monetisedResultsOnly = trueOrNull(val);\n },\n pagesize: function (e, val) {\n getCommon(e).pageSize = parseInt(val);\n },\n product: function (e, val) {\n getCommon(e).products = (val || '').split(',') as unknown as number[]; // TODO: Convert explicitly?\n },\n productlabel: function (e, val) {\n getCommon(e).productLabel = decodeURIComponent(val);\n },\n showall: function (e, val) {\n getCommon(e).showAllResults = trueOrNull(val);\n },\n showlessresults: function (e, val) {\n getCommon(e).showLessResults = trueOrNull(val);\n },\n showrowfilters: function (e, val) {\n getCommon(e).showRowFilters = falseOrNull(val);\n },\n showrowsorts: function (e, val) {\n getCommon(e).showRowSorts = falseOrNull(val);\n },\n sort: function (e, val) {\n getCommon(e).resultsSortExpression = val;\n },\n sortascending: function (e, val) {\n getCommon(e).resultsSortAscending = falseOrNull(val);\n },\n spend: function (e, val) {\n getCommon(e).maximumSpend = Number(val);\n },\n supplier: function (e, val) {\n getCommon(e).suppliers = {\n values: !val || val === '' ? [] : val.split(',')\n };\n },\n tab: function (e, val, key) {\n getCommon(e)[key] = val;\n },\n transact: function (e, val) {\n getCommon(e).hideTransactionLinks = falseOrNull(val);\n },\n upfront: function (e, val) {\n getCommon(e).maximumUpfront = Number(val);\n }\n },\n mappingOverrides\n );\n\n // Store the criteria as a string to prevent it from being modified\n const defaultCriteria = JSON.stringify(criteria);\n\n elements\n .find('[data-criteria]')\n .off('click')\n .on('click', function (e) {\n e.preventDefault();\n\n let criteria = JSON.parse(defaultCriteria);\n\n const element = wo$(e.currentTarget);\n const query: string = element.data('criteria') || element.closest('[data-criteria]').data('criteria');\n if (!query) {\n callback(element, criteria);\n return;\n }\n\n if (!criteria) {\n criteria = {};\n }\n\n const keys = Object.keys(mappings);\n const args = query.split('&');\n for (let i = 0; i < args.length; i++) {\n const keyVal = args[i].split('=');\n\n if (keyVal[0]) {\n const key = keyVal[0].toLowerCase();\n const value = keyVal[1];\n\n if (keys.includes(key)) {\n for (let j = 0; j < keys.length; j++) {\n if (key === keys[j].toLowerCase()) {\n mappings[key](criteria, value, key);\n break;\n }\n }\n } else {\n criteria[key] = value;\n }\n }\n }\n callback(element, criteria);\n });\n }\n\n // Extracted from widgets/js/common\n showTracking() {\n const tracking = wo$('#tracking');\n const config = this.getSiteConfiguration();\n if (config.enableGeoCheck) {\n let country = 0;\n wo$.ajax({\n url: '/cdn-cgi/trace',\n type: 'GET',\n success: function (result) {\n const matches = result.match('loc=(.{2})');\n if (matches && matches.length === 2) {\n switch (matches[1]) {\n case 'AU':\n country = 1;\n break;\n case 'GB':\n country = 2;\n break;\n case 'US':\n country = 3;\n break;\n case 'NZ':\n country = 4;\n break;\n case 'CA':\n country = 5;\n break;\n case 'MX':\n country = 8;\n break;\n case 'CL':\n country = 9;\n break;\n }\n if (country === config.country) {\n tracking.html(tracking.data('html'));\n }\n }\n }\n });\n }\n }\n\n setCoverageCookie(coverage: string) {\n if (typeof window === 'undefined' || !window || !wo$) {\n return;\n }\n\n if (!coverage) {\n Cookies.set('coverage', null, { path: '/', expires: -1 });\n return;\n }\n\n Cookies.set('coverage', coverage, { path: '/', expires: 1 });\n }\n\n setDropdownIndex( dropdown: JQuery, optionValue: string) {\n dropdown.val(optionValue);\n dropdown.trigger('change');\n }\n\n resetDoubleSlider(slider: JQuery, sliderConfig: NoUiDoubleSliderConfig) {\n slider.val([sliderConfig.pegs[0].index, sliderConfig.pegs[sliderConfig.pegs.length - 1].index]);\n }\n\n initialised: string[] = [];\n\n /**\n * Initialises module on document ready\n * @param module Module name, typically `import.meta.url`\n * @param init Initialisation function, including support for `async` functions\n */\n initModule(module: string = import.meta.url, init: () => void | Promise) {\n if (this.initialised.includes(module)) {\n return;\n }\n this.initialised.push(module);\n\n wo$(async () => {\n const result = init();\n if (result instanceof Promise) {\n await result;\n }\n });\n }\n\n async waitForAddressCookieInit(addressInstance: 'exact' | 'any') {\n console.time(`waitForAddressCookieInit(${addressInstance})`);\n await tryWaitFor(\n () => {\n const state = getState().shared;\n /*\n console.debug({\n initialiesdWith: state.addressCookie.initialiesdWith?.label,\n cookie: JSON.parse(Cookies.get('address'))?.label\n });\n */\n\n return (\n !document.getElementById('location-header') ||\n (state.addressCookie.initialiesdWith?.label &&\n (addressInstance === 'any' ||\n state.addressCookie.initialiesdWith?.label === JSON.parse(Cookies.get('address'))?.label))\n );\n },\n {\n intervalMs: 100,\n timeoutMs: 500,\n timeoutMessage: `Timeout on waitForAddressCookieInit(${addressInstance})`,\n onTimeout: e => {\n console.warn(e);\n this.Rollbar.warning(e);\n }\n }\n );\n\n console.timeEnd(`waitForAddressCookieInit(${addressInstance})`);\n /*\n const state = getState().shared;\n console.debug({\n initialiesdWith: state.addressCookie.initialiesdWith?.label,\n cookie: JSON.parse(Cookies.get('address'))?.label\n });\n */\n }\n\n async waitForExtraAnalyticsData() {\n await this.waitForAddressCookieInit('exact');\n\n // Fallback to any address if the exact check failed\n await this.waitForAddressCookieInit('any');\n\n console.time('waitForExtraAnalyticsData -> address or coverage cookie present');\n await tryWaitFor(() => !!Cookies.get('address') || !!Cookies.get('coverage'), {\n timeoutMessage: 'Timeout on waiting for address or coverage cookie',\n timeoutMs: 100\n });\n console.timeEnd('waitForExtraAnalyticsData -> address or coverage cookie present');\n }\n\n async initAnalytics() {\n initDataLayer();\n\n const analyticsClientSideData = this.getAnalyticsClientSideData();\n if (!analyticsClientSideData) {\n return;\n }\n\n const { data } = analyticsClientSideData;\n if (!data.trackInitialPageview) {\n return;\n }\n\n await this.waitForExtraAnalyticsData();\n\n if (this.scope === 'shared') {\n this.trackPageView(null, null, null, data.referrer);\n } else {\n this.trackPageView();\n }\n }\n\n /**\n * Common initialisation for both core site and widgets\n **/\n async initBase() {\n this.isInitRequested = true;\n\n await this.initializeRollbar();\n this.initAnalytics();\n this.applyPopover();\n\n window.dispatchEvent(new CustomEvent('jQueryReady'));\n }\n\n async init() {\n if (this.isInitRequested) {\n return;\n }\n\n await this.initBase();\n\n queryStringUtils.extendPrototype();\n\n this.initModule(import.meta.url, async () => {\n this.setYouTubeEnhancedPrivacy();\n this.checkSiteQueryString();\n wo$.blockUI.defaults.overlayCSS = {};\n\n this.showStoreSelector();\n await this.bindStateSwitcher();\n this.bindModalLinks();\n this.bindTextAdLinks();\n this.bindExpressResults();\n this.bindRetailSplash();\n this.stopPropagation();\n this.bindClickUrl();\n this.bindTrackClick();\n this.bindTrackEvent();\n this.bindShow();\n this.bindScrollTo();\n this.bindFocusAndSelect();\n this.bindGenericCallback();\n this.checkAffiliateDomainCookie();\n this.bindPhoneSpecsModal();\n this.bindTabletSpecsModal();\n this.bindPhoneGallery();\n this.bindTabletGallery();\n this.bindSubscribe();\n this.bindDataTables();\n this.bindPrivateDataModal();\n this.bindBYODModal();\n this.bindNewsCarousel();\n this.bindSlickSingle();\n\n this.Core.init();\n });\n }\n}\n","export function replaceQueryString(url: string, newQuery: string) {\n const regex = /\\?(.*)$/gi;\n let newUrl = url.replace(regex, '');\n if (newQuery[0] !== '?') newUrl += '?';\n newUrl += newQuery;\n return newUrl;\n}\n\n// TODO: Don't extend prototype, use a separate helper function instead\nexport function extendPrototype() {\n if (!String.prototype.replaceQueryString) {\n // ReSharper disable once NativeTypePrototypeExtending\n /* eslint-disable-next-line no-extend-native */\n String.prototype.replaceQueryString = function (this: string, newQuery: string) {\n return replaceQueryString(this, newQuery);\n };\n }\n}\n","import type rollbarType from 'rollbar';\n\nexport const rollbar = {\n instance: {},\n config: <\n {\n env: string;\n token: string;\n captureIp: boolean;\n }\n >{\n captureIp: false\n },\n async init() {\n const Rollbar = (await import('rollbar')).default;\n\n this.instance = new Rollbar({\n accessToken: this.config.token,\n captureUncaught: false,\n captureUnhandledRejections: false,\n captureIp: this.config.captureIp,\n payload: {\n environment: this.config.env\n }\n });\n\n this.instance.configure({\n scrubFields: ['apiKey', 'password']\n });\n }\n};\n","// See: https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API#Concepts_and_usage -> Falling back to setTimeout\n\nexport function init() {\n if (!window.requestIdleCallback) {\n window.requestIdleCallback =\n window.requestIdleCallback ||\n function (handler) {\n const startTime = Date.now();\n\n return setTimeout(function () {\n handler({\n didTimeout: false,\n timeRemaining: function () {\n return Math.max(0, 50.0 - (Date.now() - startTime));\n }\n });\n }, 1) as unknown as number;\n };\n }\n\n if (!window.cancelIdleCallback) {\n window.cancelIdleCallback =\n window.cancelIdleCallback ||\n function (id) {\n clearTimeout(id);\n };\n }\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nimport type { Address } from '../@types/Address';\n\nconst sharedSlice = createSlice({\n name: 'shared',\n initialState: {\n addressCookie: {\n initialiesdWith: null\n }\n },\n reducers: {\n addressCookieInit(state, action: PayloadAction<{ address: Address }>) {\n state.addressCookie.initialiesdWith = action.payload.address;\n }\n }\n});\n\nexport default sharedSlice.reducer;\nexport const actions = sharedSlice.actions;\n","import { combineReducers } from 'redux';\n\nimport { broadbandApi } from '../../../Broadband/js/redux/broadbandApi';\nimport broadband from '../../../Broadband/js/redux/broadbandSlice';\nimport shared from './sharedSlice';\n\nconst features = {\n broadband,\n shared\n};\n\nconst apis = {\n // Unable to declare API in the broadband slice directly,\n // because 'state.' prefix is added causing incorrect state name, i.e. 'state.broadband/api'.\n [broadbandApi.reducerPath]: broadbandApi.reducer\n};\n\nconst rootReducer = combineReducers({\n ...features,\n ...apis\n});\n\nexport default rootReducer;\nexport type RootState = ReturnType;\n","/* globals process */\n\nimport { configureStore, PreloadedState } from '@reduxjs/toolkit';\nimport { setupListeners } from '@reduxjs/toolkit/query/react';\n\nimport { broadbandApi } from '../../../Broadband/js/redux/broadbandApi';\nimport rootReducer, { RootState } from './rootReducer';\n\nconst createStore = () => {\n const store = configureStore({\n preloadedState: >{\n broadband: {}\n },\n reducer: rootReducer,\n devTools: process.env.NODE_ENV !== 'production',\n middleware: getDefaultMiddleware => getDefaultMiddleware().concat(broadbandApi.middleware)\n });\n\n // optional, but required for refetchOnFocus/refetchOnReconnect behaviors\n // see `setupListeners` docs - takes an optional callback as the 2nd arg for customization\n setupListeners(store.dispatch);\n return store;\n};\n\nexport const store = createStore();\nexport const { dispatch, getState, subscribe } = store;\n","export const onArrayPush = (target: T[], callback: (added: T[]) => void) => {\n target.push = (...items: T[]) => {\n const res = Array.prototype.push.call(target, ...items);\n callback(items);\n return res;\n };\n};\n","import type { DataLayerItemWidget, WoDataLayerItem } from '../@types/WoDataLayer';\nimport { onArrayPush } from './array';\n\nexport function pushDataLayerItem(item: WoDataLayerItem) {\n window.woDataLayer = window.woDataLayer || [];\n window.woDataLayer.push(item);\n}\n\nexport function pushDataLayerItemWidget(item: DataLayerItemWidget) {\n pushDataLayerItem(item);\n}\n\nfunction getWidgetType() {\n const pathName = window.location.pathname;\n const matches = /^\\/widgets\\/(\\w+)([/|?].+)?/i.exec(pathName);\n return matches ? matches[1] : undefined;\n}\n\nexport function initDataLayer() {\n window.woDataLayer = window.woDataLayer ?? [];\n\n // Set default values, reset unused (not explicitly set) parameters\n onArrayPush(window.woDataLayer, items => {\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n item['duration'] ??= undefined;\n item['error'] ??= undefined;\n item['widget_type'] ??= undefined;\n item['widget_placement'] ??= undefined;\n\n item['widget_type'] ??= getWidgetType();\n }\n });\n}\n","type WaitForArgs = {\n /** Periodic interval in milliseconds to call condition check */\n intervalMs?: number;\n /** Timeout in milliseconds */\n timeoutMs?: number;\n timeoutMessage?: string;\n onTimeout?: (e: Error) => void;\n};\n\nfunction initWaitForArgs(source: WaitForArgs) {\n // Set defaults\n return Object.assign(\n {\n intervalMs: 50,\n timeoutMs: 5000,\n timeoutMessage: 'Timeout on waiting for condition',\n onTimeout: e => console.warn(e)\n },\n source\n );\n}\n\n/**\n * Awaits for condition\n * @param condition condition check function\n * @param args\n * @throws Will throw error on timeout\n */\nexport function waitFor(condition: () => boolean, args?: WaitForArgs) {\n args = initWaitForArgs(args);\n\n return new Promise((resolve, reject) => {\n const onResolve = () => {\n // console.debug(`Condition met, location: ${window.location}`);\n resolve();\n };\n\n if (condition()) {\n onResolve();\n return;\n }\n\n let cancel = false;\n const interval = setInterval(() => {\n // console.debug(`Checking condition, location: ${window.location}`);\n if (!condition()) {\n return;\n }\n\n clearInterval(interval);\n cancel = true;\n onResolve();\n }, args.intervalMs);\n\n setTimeout(() => {\n clearInterval(interval);\n if (cancel) {\n return;\n }\n\n // Don't create the error immediately to avoid it being logged incorrectly\n const error = () => new Error(args.timeoutMessage);\n reject(error());\n\n if (args.onTimeout) {\n args.onTimeout(error());\n }\n }, args.timeoutMs);\n });\n}\n\n/**\n * Awaits for condition wihtout throwing timeout error\n * @param condition condition check function\n * @param args\n */\nexport async function tryWaitFor(condition: () => boolean, args?: WaitForArgs) {\n args = initWaitForArgs(args);\n try {\n await waitFor(condition, args);\n } catch (error) {\n if (error.message === args.timeoutMessage && args.onTimeout) {\n args.onTimeout(error);\n return;\n }\n\n WhistleOut.Rollbar.warning(error);\n }\n}\n","import once from 'lodash/once';\n\nimport { waitFor } from '../../utils/timer';\n\nconst isInitialised = () => {\n return !!wo$.fn.selectpicker;\n};\n\nexport const initBootstrapSelect = once(async () => {\n if (isInitialised()) {\n return;\n }\n\n await import('./bootstrap-select.nomodule');\n await waitFor(isInitialised);\n\n const context = wo$.fn.selectpicker.Constructor;\n context.BootstrapVersion = '3.3.6';\n context.DEFAULTS.iconBase = 'fa';\n context.DEFAULTS.tickIcon = 'fa-check';\n});\n"],"names":["appendQueryParam","queryString","param","value","length","updateQueryStringParameter","url","key","regex","RegExp","separator","indexOf","match","replace","getQueryStringParameter","name","window","location","href","matches","exec","decodeURIComponent","getReferrerEncoded","QueryStringHelper","encodeURIComponent","document","referrer","broadbandApi","reducerPath","baseQuery","baseUrl","endpoints","builder","getSearchResults","query","getTransactUrl","args","URLSearchParams","toString","mapSearchModelToState","searchModel","state","criteria","settings","coverageUrl","searchUrl","resultsSearchCriteria","pagedResultsUrl","suppressCoverageCheck","embeddedMode","enforceAjax","allConnectionsSelected","coverage","hideSupplierFilter","showMaxUpfrontSlider","suppliers","unavailableConnectionTypes","defaultSearchCriteria","defaultPrepaidExpiryDays","filters","allContractTerms","defaultSuppliers","broadbandSlice","initialState","reducers","init","action","search","payload","features","modal","broadbandReducer","featuresState","reducer","actions","modalSlice","showModal","activeTab","tabName","draft","isOpen","hideModal","selectTab","updateCriteria","updateData","data","updatePeakDataOnly","peakDataOnly","updateSpeed","speed","updateSpend","min","max","common","minimumSpend","maximumSpend","updateUpfront","maximumUpfront","updateSelectedSuppliers","keys","customerType","values","updateCustomerType","updateContractTerms","selected","all","contractTerms","updateAdvancedOptions","options","maxResultsPerSupplier","staticIp","uploadNotCounted","showLessResults","updatePrepaidExpiry","prepaidExpiry","updateCurrentSupplier","currentSupplierShortUrl","updateIncludeDealsOnly","includeOffersWithCampaignOnly","updatePhoneBundle","bundles","homePhone","updatePhoneCallsBundle","homePhoneCalls","updateTvBundle","tv","updateTvChannels","tvChannels","updateLineRentalBundle","lineRental","updateMobileBundle","mobilePhone","updateModem","modemShortUrl","simOnly","updateConnectionTypes","connectionTypes","addressChanged","broadband","p","sliceName","slice","disableMaximumResultLimits","enforceMaximumResultLimits","hideFeaturedResults","includeFeaturedResults","includeNbnConnections","nbnConnectionTypes","Array","isArray","push","resetBundles","searchError","searchSuccess","result","allAvailableConnectionsSelected","updateAddress","address","baseCriteria","tab","WhistleOut","getSiteConfiguration","broadbandConfig","defaultTab","isSingleProvider","updateBundles","updateContractType","contractType","hide","parseInt","filter","c","results","productLabel","updatePlanSummarySupplier","supplier","maxResults","maximumNumberOfResults","updateSort","expression","isAscending","resultsSortExpression","resultsSortAscending","minValue","maxValue","commonCriteria","updateSuppliers","updateTab","widenResults","reduceData","increasePriceRange","includeAllContractLengths","includeAllSuppliers","reduceSpeed","noPeakData","includeMoreConnectionTypes","noDealsOnly","includeAllPrepaidExpiry","removeSelectedModem","noUploadCounted","noStaticIp","noBundling","sortBy","extraSlice","extraReducers","addCase","EmailMySearch","onSubmitClick","e","localContent","content","email","find","emailMySearch","validateEmail","listId","isSubscribeToNewsLetter","is","val","token","wo$","show","ajax","type","beforeSend","prop","success","IsVerificationEmailSent","successMessage","html","IsVerifiedAlready","error","complete","turnstileId","turnstile","reset","modalInit","initContent","this","modalContent","on","off","adInit","submitButton","adContent","config","test","initSlick","slick","WhistleOutCore","showSiteNotice","siteNotice","divWrapper","children","first","expirationInHours","expirationDate","slideTime","Date","setTime","getTime","undefined","Cookies","get","closeButton","toggle","slideToggle","click","set","path","expires","bindExpressNotice","remove","cookieName","domain","cookieDomain","reload","bindTopNav","which","Core","currentTarget","target","popoverProto","fn","popover","originalLeave","Constructor","prototype","leave","obj","self","constructor","getDelegateOptions","container","timeout","call","siblings","one","clearTimeout","nav","hasClass","attr","checkCountry","enableGeoCheck","country","showCountrySwitcher","bindLinkStrip","strip","affix","offset","top","bindAdminLinks","hover","animate","height","scrollHeight","opacity","setTimeout","confirm","alert","jQuery","noConflict","WhistleOutContext","scope","notifications","Callbacks","endProgressEventName","pushDataLayerItem","applyPopover","hideAllPopovers","inState","storeSelectorModal","selectedHandler","keyup","keyCode","submitStoreSelectorModal","$staff","typeahead","minLength","items","addItem","id","code","source","process","dataType","json","afterSelect","item","matcher","displayText","siteConfiguration","currentStoreId","selectedStoreCookieKey","focus","privateDataModalId","initialised","initializeRollbar","Rollbar","rollbar","Object","assign","siteConfig","rollbarKey","rollbarEnvironment","anonymiseTracking","readLookupData","parent","force","Error","JSON","parse","setLookupData","getCurrentLocation","successCallback","failCallback","getCurrentLocationViaHtml5","getCurrentLocationViaApi","getCurrentLatLng","getCurrentLatLngViaHtml5","getCurrentLatLngViaApi","navigator","enableHtml5Geolocation","geolocation","getCurrentPosition","position","lat","coords","latitude","lng","longitude","latLng","addressResult","street","streetNumber","city","label","getLabel","countryCode","shortName","jqXHR","textStatus","errorThrown","cookie","getLocationCookie","response","postal","res","iso_code","getLabelFromMaxMind","setLocationCookie","autoDetectLocation","now","expireTime","stringify","getComponentValue","postcode","trim","names","en","subdivisions","component","preferShorter","longName","appendReferrer","widgetLink","ReferrerHelper","createSlider","sliderElement","textElement","sliderConfig","format","onChange","rebind","noUiSlider","step","behaviour","connect","range","pegs","start","slide","index","text","currentPeg","change","createDoubleSlider","textMaxElement","showMaxTextForFullRange","currentPeg1","currentPeg2","update","isiOS","platform","startProgress","trickleRate","trickleSpeed","showSpinner","element","endProgressTimer","NProgress","configure","block","message","endProgress","addEventListener","event","endProgressOnPageShow","removeEventListener","onpageshow","persisted","dispatchEvent","CustomEvent","done","unblock","isPositiveNumber","isNumeric","isNumber","replaceQueryString","newQuery","getAnalyticsClientSideData","analytics","siteConfigurationContainer","querySelector","isCookieEnabledByCategory","category","oneTrustCookieValue","isPerformanceCookieEnabled","isTargetingCookieEnabled","setYouTubeEnhancedPrivacy","frames","getElementsByTagName","i","src","trackGaEvent","fields","analyticsClientSideData","each","accounts","account","affiliateOwned","includeEventTracking","ga","trackerId","err","trackEvent","pushGtmEvent","trackEventV2","params","pushGtmEventV2","sendPageview","trackingUrl","pathname","accountNumber","useAmpClientId","linkIdTracking","optimizeAccount","dimensions","sendPageView","addPageImpression","isAjax","includeWhistleOutTracking","productAreaId","affiliateId","affiliateDomainId","isTransaction","isProduct","isMobileDevice","image","Image","onload","getWoUserId","userInfoCookieKey","userInfoCookieValue","cookieValues","split","setWoUserId","generateUuid","r","Math","random","woUserId","trackPageView","trackPageImpression","pushGtmPageView","customNonInteraction","nonInteraction","toLowerCase","customCategory","customAction","customLabel","customValue","isNaN","customCountry","customProductAreaId","customUserId","dimensionNames","dataLayerValue","customUrl","userAgent","getAds","productArea","placements","makeArray","map","el","adplacement","x","processAd","stopPropagation","bindSubscribe","fire","ads","ad","Tab","Placement","matchingPlacements","Content","TrackingHtml","slideUp","setAd","setStickyBottomStripAd","slideDown","onPlacement","placement","Id","Name","observer","IntersectionObserver","entries","isIntersecting","disconnect","root","threshold","observe","jObj","has","triggerPopoverNotification","popoverElement","trigger","checkQueryParamExists","queryParam","selectedStoreId","staff","selectedStaff","showStoreSelector","forceStoreSelection","forceStoreStaffSelection","selectedStaffCookieKey","selectStore","resetStore","resetStaff","setFullYear","getFullYear","getStaff","getStaffId","getStaffCode","getStaffName","getStoreName","storeName","getStoreEmail","storeEmail","bindStateSwitcher","$container","$province","applySelectPicker","applySelectPickersStyle","selectpicker","bindModalLinks","magnificPopup","removeDelay","preloader","fixedContentPos","bindTextAdLinks","bindExpressResults","bindRetailSplash","startRetailSplashTimer","retailSplashTimer","focusAndSelect","copyToClipboard","len","setSelectionRange","execCommand","callback","then","addClass","bindCta","cta","bindClickUrl","bindTrackClick","append","applyPromoAds","closest","open","checkSiteQueryString","initHistoryTracker","HistoryWrapper","pushState","title","history","pushQuery","newUrl","origin","onpopstate","scrollTo","scrollDuration","scrollOffset","behavior","startsWith","getElementById","y","getBoundingClientRect","scrollY","bindScrollTo","preventDefault","dataset","scrollto","Number","scrollduration","scrolloffset","bindShow","bindFocusAndSelect","bindTrackEvent","bindSlick","dots","infinite","slidesToShow","slidesToScroll","responsive","breakpoint","getRemarketingData","remarketing","trackingCode","remarketingTrackingCode","gtag","allow_custom_scripts","send_to","u1","u2","u3","planType","u4","phoneBrand","u5","phone","u6","tags","u7","connectionType","u8","u9","numberOfLines","u10","u11","tabletBrand","u12","tablet","u13","bindGenericCallback","form","removeClass","$name","$phone","$state","time","parents","checkAffiliateDomainCookie","cookieDuration","String","bindDataTables","applySorting","sort","direction","order","dataTable","ext","errMode","extend","defaults","searching","paging","info","ordering","columnDefs","orderable","targets","orderSequence","fixedHeader","headerOffset","details","jobj","DataTable","scrollX","scrollCollapse","bindCitiesAutoComplete","page","input","area","icon","selectOnBlur","setPrivateDataCookieValue","disabled","getPrivateDataCookieValue","bindPrivateDataModal","hideData","checkBox","checked","bindPhoneSpecsModal","phoneShortUrl","phoneSpecsContainer","phoneSpecsModalUrl","bindTabletSpecsModal","tabletShortUrl","showTabletSpecs","tabletSpecsContainer","tabletSpecsModalUrl","bindBYODModal","byoModalContainer","showBYODModal","byoPhonePickerModalUrl","byoPhonePickerController","selectedModel","genericSearchUrl","bindPhoneGallery","phoneGalleryUrl","gallery","enabled","showTabletGallery","tabletGalleryUrl","bindTabletGallery","appendTo","select","eventLabel","subscribeUrl","bindNewsCarousel","bindSlickSingle","encodeHtml","str","createElement","createTextNode","innerHTML","trueOrNull","falseOrNull","boolOrNull","bindCriteriaFilters","elements","mappingOverrides","getCommon","mappings","cache","useCache","campaignGroup","contract","currentsupplier","customer","dealsonly","debug","enforcemaximumresultlimits","hidecoverage","hideCoverage","hideemptytabs","hideEmptyTabs","hideshare","hideShare","hidesort","hideSort","hidewidenresults","hideWidenResults","includefeatured","maxresults","getResults","maxresultspersupplier","minspend","monetised","monetisedResultsOnly","pagesize","pageSize","product","products","productlabel","showall","showAllResults","showlessresults","showrowfilters","showRowFilters","showrowsorts","showRowSorts","sortascending","spend","transact","hideTransactionLinks","upfront","defaultCriteria","keyVal","includes","j","showTracking","tracking","setCoverageCookie","setDropdownIndex","dropdown","optionValue","resetDoubleSlider","slider","initModule","module","waitForAddressCookieInit","addressInstance","shared","addressCookie","initialiesdWith","intervalMs","timeoutMs","timeoutMessage","onTimeout","warning","waitForExtraAnalyticsData","initAnalytics","trackInitialPageview","initBase","isInitRequested","blockUI","overlayCSS","instance","captureIp","default","accessToken","captureUncaught","captureUnhandledRejections","environment","env","scrubFields","requestIdleCallback","handler","startTime","didTimeout","timeRemaining","cancelIdleCallback","sharedSlice","addressCookieInit","apis","store","preloadedState","devTools","middleware","getDefaultMiddleware","concat","dispatch","createStore","getState","subscribe","onArrayPush","woDataLayer","pushDataLayerItemWidget","getWidgetType","pathName","initDataLayer","o","initWaitForArgs","waitFor","condition","Promise","resolve","reject","onResolve","cancel","interval","setInterval","clearInterval","tryWaitFor","isInitialised","initBootstrapSelect","context","BootstrapVersion","DEFAULTS","iconBase","tickIcon"],"sourceRoot":""}