{"version":3,"sources":["./src/ui/DidYouMean/DidYouMean.ts","./sass/_DidYouMean.scss"],"names":[],"mappings":"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","file":"DidYouMean__d2b01b0f173a0c131e66.js","sourcesContent":["import 'styling/_DidYouMean';\nimport * as _ from 'underscore';\nimport { exportGlobally } from '../../GlobalExports';\nimport { IBuildingQueryEventArgs, INoResultsEventArgs, IQuerySuccessEventArgs, QueryEvents } from '../../events/QueryEvents';\nimport { Assert } from '../../misc/Assert';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { IQueryCorrection } from '../../rest/QueryCorrection';\nimport { l } from '../../strings/Strings';\nimport { $$ } from '../../utils/Dom';\nimport { StringUtils } from '../../utils/StringUtils';\nimport { Utils } from '../../utils/Utils';\nimport { IAnalyticsNoMeta, analyticsActionCauseList } from '../Analytics/AnalyticsActionListMeta';\nimport { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Initialization } from '../Base/Initialization';\n\nexport interface IDidYouMeanOptions {\n enableAutoCorrection?: boolean;\n}\n\n/**\n * The DidYouMean component is responsible for displaying query corrections. If this component is in the page and the\n * query returns no result but finds a possible query correction, the component either suggests the correction or\n * automatically triggers a new query with the suggested term.\n */\nexport class DidYouMean extends Component {\n static ID = 'DidYouMean';\n\n static doExport = () => {\n exportGlobally({\n DidYouMean: DidYouMean\n });\n };\n\n /**\n * The options for the component\n * @componentOptions\n */\n static options: IDidYouMeanOptions = {\n /**\n * Specifies whether the DidYouMean component automatically triggers a new query when a query returns no result and\n * a possible correction is available.\n *\n * Default value is `true`.\n */\n enableAutoCorrection: ComponentOptions.buildBooleanOption({ defaultValue: true })\n };\n\n public correctedTerm: string;\n\n private hideNext: boolean;\n\n private ignoreNextNoResults: boolean;\n\n /**\n * Creates a new DidYouMean component.\n * @param element The HTMLElement on which to instantiate the component.\n * @param options The options for the DidYouMean component.\n * @param bindings The bindings that the component requires to function normally. If not set, these will be\n * automatically resolved (with a slower execution time).\n */\n constructor(public element: HTMLElement, public options?: IDidYouMeanOptions, public bindings?: IComponentBindings) {\n super(element, DidYouMean.ID, bindings);\n\n this.options = ComponentOptions.initComponentOptions(element, DidYouMean, options);\n Assert.exists(element);\n Assert.exists(this.options);\n\n this.hideNext = true;\n\n this.ignoreNextNoResults = false;\n\n this.correctedTerm = null;\n\n this.bind.onRootElement(QueryEvents.buildingQuery, this.handlePrepareQueryBuilder);\n this.bind.onRootElement(QueryEvents.querySuccess, this.handleProcessNewQueryResults);\n this.bind.onRootElement(QueryEvents.noResults, this.handleNoResults);\n this.bind.onRootElement(QueryEvents.newQuery, this.handleNewQuery);\n $$(this.element).hide();\n }\n\n /**\n * Executes a query with the corrected term.\n * Throws an exception if the corrected term has not been initialized.\n * If successful, logs a `didyoumeanClick` event in the usage analytics.\n */\n public doQueryWithCorrectedTerm() {\n Assert.exists(this.correctedTerm);\n this.queryStateModel.set(QueryStateModel.attributesEnum.q, this.correctedTerm);\n this.queryController.deferExecuteQuery({\n beforeExecuteQuery: () => this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.didyoumeanClick, {})\n });\n }\n\n private handleNewQuery() {\n if (this.hideNext) {\n $$(this.element).empty();\n $$(this.element).hide();\n this.correctedTerm = null;\n } else {\n this.hideNext = true;\n }\n }\n\n private handlePrepareQueryBuilder(data: IBuildingQueryEventArgs) {\n Assert.exists(data);\n data.queryBuilder.enableDidYouMean = true;\n }\n\n private handleNoResults(data: INoResultsEventArgs) {\n if (this.ignoreNextNoResults) {\n this.logger.warn('Query is being automatically corrected twice while returning no results.');\n return;\n }\n\n // We do not auto-correct on search-as-you-type queries\n if (Utils.isNonEmptyArray(data.results.queryCorrections) && !data.searchAsYouType && this.options.enableAutoCorrection) {\n this.ignoreNextNoResults = true;\n let originalQuery = this.queryStateModel.get(QueryStateModel.attributesEnum.q);\n this.correctedTerm = data.results.queryCorrections[0].correctedQuery;\n let correctedSentence = this.buildCorrectedSentence(data.results.queryCorrections[0]);\n this.queryStateModel.set(QueryStateModel.attributesEnum.q, data.results.queryCorrections[0].correctedQuery);\n this.searchInterface.historyManager.replaceState(this.queryStateModel.getAttributes());\n data.retryTheQuery = true;\n this.hideNext = false;\n\n let noResultsFor = $$('div', { className: 'coveo-did-you-mean-no-results-for' }).el;\n noResultsFor.innerHTML = l(\n 'noResultFor',\n '<span class=\"coveo-highlight coveo-did-you-mean-highlight\">' + StringUtils.htmlEncode(originalQuery) + '</span>'\n );\n this.element.appendChild(noResultsFor);\n\n let automaticCorrect = $$('div', { className: 'coveo-did-you-mean-automatic-correct' }).el;\n automaticCorrect.innerHTML = l('autoCorrectedQueryTo', '<span class=\"coveo-highlight\">' + correctedSentence + '</span>');\n this.element.appendChild(automaticCorrect);\n\n $$(this.element).show();\n this.usageAnalytics.logSearchEvent<IAnalyticsNoMeta>(analyticsActionCauseList.didyoumeanAutomatic, {});\n }\n }\n\n private handleProcessNewQueryResults(data: IQuerySuccessEventArgs) {\n Assert.exists(data);\n Assert.exists(data.results);\n this.ignoreNextNoResults = false;\n\n let results = data.results;\n this.logger.trace('Received query results from new query', results);\n\n if (Utils.isNonEmptyArray(results.queryCorrections)) {\n const correctedSentence = this.buildCorrectedSentence(results.queryCorrections[0]);\n this.correctedTerm = results.queryCorrections[0].correctedQuery;\n\n const correctedWordEl = $$('button', { type: 'button' }, correctedSentence).el;\n const didYouMean = $$('div', { className: 'coveo-did-you-mean-suggestion' }, l('didYouMean', correctedWordEl.outerHTML));\n this.element.appendChild(didYouMean.el);\n\n const appendedCorrectedWordEl = didYouMean.find(correctedWordEl.tagName);\n $$(appendedCorrectedWordEl).on('click', () => this.doQueryWithCorrectedTerm());\n\n $$(this.element).show();\n }\n }\n\n private buildCorrectedSentence(correction: IQueryCorrection) {\n let toReturn = [];\n let tagStart = \"<span class='coveo-did-you-mean-word-correction'>\";\n let tagEnd = '</span>';\n let currentOffset = 0;\n _.each(correction.wordCorrections, wordCorrection => {\n toReturn.push(StringUtils.htmlEncode(correction.correctedQuery.slice(currentOffset, wordCorrection.offset)));\n currentOffset = wordCorrection.offset;\n toReturn.push(tagStart);\n toReturn.push(StringUtils.htmlEncode(correction.correctedQuery.slice(currentOffset, wordCorrection.length + currentOffset)));\n toReturn.push(tagEnd);\n currentOffset = wordCorrection.offset + wordCorrection.length;\n });\n toReturn.push(StringUtils.htmlEncode(correction.correctedQuery.slice(currentOffset)));\n return toReturn.join('');\n }\n}\n\nInitialization.registerAutoCreateComponent(DidYouMean);\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/DidYouMean/DidYouMean.ts","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./sass/_DidYouMean.scss\n// module id = 604\n// module chunks = 74 88"],"sourceRoot":""}