{"version":3,"sources":["Triggers.min__d957946aa95219e5e0e2.js","./src/ui/Triggers/Triggers.ts"],"names":["webpackJsonpCoveo__temporary","284","module","exports","__webpack_require__","__extends","this","extendStatics","Object","setPrototypeOf","__proto__","Array","d","b","p","hasOwnProperty","__","constructor","prototype","create","defineProperty","value","element","options","bindings","_window","Triggers","ID","window","ComponentOptions","initComponentOptions","Assert","exists","notifications","bind","onRootElement","QueryEvents","querySuccess","handleProcessNewQueryResults","_this","data","results","$$","empty","length","showElement","undefined","triggers","toggleClass","executeTriggers","trigger","usageAnalytics","logCustomEvent","analyticsActionCauseList","triggerNotify","notification","content","push","appendChild","className","el","triggerRedirect","redirectedTo","location","replace","queryStateModel","set","QueryStateModel","attributesEnum","q","queryController","executeQuery","beforeExecuteQuery","triggerQuery","query","func","name","params","object","map","index","triggerExecute","executed","apply","logger","error","type","single","triggersOfType","filter","oneOrAllTriggers","take","Number","MAX_VALUE","each","doExport","exportGlobally","Component","Initialization","registerAutoCreateComponent","675"],"mappings":"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","file":"Triggers.min__d957946aa95219e5e0e2.js","sourcesContent":["webpackJsonpCoveo__temporary([58],{\n\n/***/ 284:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Component_1 = __webpack_require__(7);\nvar ComponentOptions_1 = __webpack_require__(8);\nvar Assert_1 = __webpack_require__(5);\nvar QueryEvents_1 = __webpack_require__(11);\nvar Dom_1 = __webpack_require__(1);\nvar AnalyticsActionListMeta_1 = __webpack_require__(10);\nvar QueryStateModel_1 = __webpack_require__(13);\nvar Initialization_1 = __webpack_require__(2);\nvar underscore_1 = __webpack_require__(0);\nvar GlobalExports_1 = __webpack_require__(3);\n__webpack_require__(675);\n/**\n * The Triggers component enables the use of triggers (`notify`, `execute`, `query`, `redirect`) generated by the Coveo\n * Search API (see [Trigger](https://docs.coveo.com/en/1458/)) in the query pipeline (see\n * [Managing the Query Pipeline](https://docs.coveo.com/en/1450/)).\n *\n * Note: adding the Triggers component gives query pipeline administrators the power to influence users' search experience.\n * Bad actors will be able to perform XSS attacks, or redirect users to dangerous sites. Make sure only individuals you trust\n * have query pipeline edit privileges.\n */\nvar Triggers = /** @class */ (function (_super) {\n __extends(Triggers, _super);\n /**\n * Creates a new Triggers component.\n * @param element The HTMLElement on which to instantiate the component.\n * @param options The options for the Triggers 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 * @param _window The window on which to execute the triggers.\n */\n function Triggers(element, options, bindings, _window) {\n var _this = _super.call(this, element, Triggers.ID, bindings) || this;\n _this.element = element;\n _this.options = options;\n _this.bindings = bindings;\n _this._window = _window;\n _this._window = _this._window || window;\n _this.options = ComponentOptions_1.ComponentOptions.initComponentOptions(element, Triggers, options);\n Assert_1.Assert.exists(element);\n Assert_1.Assert.exists(_this.options);\n _this.notifications = [];\n _this.bind.onRootElement(QueryEvents_1.QueryEvents.querySuccess, _this.handleProcessNewQueryResults);\n return _this;\n }\n Triggers.prototype.handleProcessNewQueryResults = function (data) {\n var _this = this;\n Assert_1.Assert.exists(data);\n Assert_1.Assert.exists(data.results);\n Dom_1.$$(this.element).empty();\n this.notifications.length = 0;\n var showElement = false;\n if (data.results.triggers === undefined) {\n Dom_1.$$(this.element).toggleClass('coveo-visible', showElement);\n return;\n }\n this.executeTriggers(data.results.triggers, 'notify', function (trigger) {\n _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerNotify, {\n notification: trigger.content\n }, _this.element);\n _this.notifications.push(trigger.content);\n _this.element.appendChild(Dom_1.$$('div', { className: 'coveo-trigger-notify' }, trigger.content).el);\n showElement = true;\n });\n this.executeTriggers(data.results.triggers, 'redirect', function (trigger) {\n _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerRedirect, {\n redirectedTo: trigger.content\n }, _this.element);\n _this._window.location.replace(trigger.content);\n }, true);\n this.executeTriggers(data.results.triggers, 'query', function (trigger) {\n _this.queryStateModel.set(QueryStateModel_1.QueryStateModel.attributesEnum.q, trigger.content);\n _this.queryController.executeQuery({\n beforeExecuteQuery: function () {\n _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerQuery, {\n query: trigger.content\n }, _this.element);\n }\n });\n }, true);\n this.executeTriggers(data.results.triggers, 'execute', function (trigger) {\n try {\n var func = _this._window['' + trigger.content.name];\n if (typeof func === 'function') {\n var params = underscore_1.object(underscore_1.map(trigger.content.params, function (value, index) {\n return ['param' + (index + 1), value];\n }));\n params['element'] = _this.element;\n _this.usageAnalytics.logCustomEvent(AnalyticsActionListMeta_1.analyticsActionCauseList.triggerExecute, {\n executed: trigger.content.name\n }, _this.element);\n func.apply(_this._window, [params]);\n }\n else {\n _this.logger.error(\"A trigger tried to call the function '\" + trigger.content.name + \"', which doesn't exist.\", _this, data.query, trigger);\n }\n }\n catch (error) {\n _this.logger.error(\"A trigger called the function '\" + trigger.content.name + \"', which threw an error.\", _this, data.query, trigger);\n }\n });\n Dom_1.$$(this.element).toggleClass('coveo-visible', showElement);\n };\n Triggers.prototype.executeTriggers = function (trigger, type, func, single) {\n if (single === void 0) { single = false; }\n var triggersOfType = underscore_1.filter(trigger, function (trigger) {\n return trigger.type == type;\n });\n var oneOrAllTriggers = underscore_1.take(triggersOfType, single ? 1 : Number.MAX_VALUE);\n underscore_1.each(oneOrAllTriggers, func);\n };\n Triggers.ID = 'Triggers';\n Triggers.options = {};\n Triggers.doExport = function () {\n GlobalExports_1.exportGlobally({\n Triggers: Triggers\n });\n };\n return Triggers;\n}(Component_1.Component));\nexports.Triggers = Triggers;\nInitialization_1.Initialization.registerAutoCreateComponent(Triggers);\n\n\n/***/ }),\n\n/***/ 675:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// Triggers.min__d957946aa95219e5e0e2.js","import { Component } from '../Base/Component';\nimport { IComponentBindings } from '../Base/ComponentBindings';\nimport { ComponentOptions } from '../Base/ComponentOptions';\nimport { Assert } from '../../misc/Assert';\nimport { QueryEvents, IQuerySuccessEventArgs } from '../../events/QueryEvents';\nimport { ITriggerNotify, ITriggerExecute, ITriggerRedirect, ITriggerQuery, ITrigger } from '../../rest/Trigger';\nimport { $$ } from '../../utils/Dom';\nimport {\n IAnalyticsTriggerNotify,\n analyticsActionCauseList,\n IAnalyticsTriggerRedirect,\n IAnalyticsTriggerQuery,\n IAnalyticsTriggerExecute\n} from '../Analytics/AnalyticsActionListMeta';\nimport { QueryStateModel } from '../../models/QueryStateModel';\nimport { Initialization } from '../Base/Initialization';\nimport { object, map, filter, each, take } from 'underscore';\nimport { exportGlobally } from '../../GlobalExports';\n\nimport 'styling/_Triggers';\n\nexport interface ITriggersOptions {}\n\n/**\n * The Triggers component enables the use of triggers (`notify`, `execute`, `query`, `redirect`) generated by the Coveo\n * Search API (see [Trigger](https://docs.coveo.com/en/1458/)) in the query pipeline (see\n * [Managing the Query Pipeline](https://docs.coveo.com/en/1450/)).\n *\n * Note: adding the Triggers component gives query pipeline administrators the power to influence users' search experience.\n * Bad actors will be able to perform XSS attacks, or redirect users to dangerous sites. Make sure only individuals you trust\n * have query pipeline edit privileges.\n */\nexport class Triggers extends Component {\n static ID = 'Triggers';\n static options: ITriggersOptions = {};\n\n static doExport = () => {\n exportGlobally({\n Triggers: Triggers\n });\n };\n\n /**\n * The list of notifications returned by the Search API for the current query (via `notify` triggers).\n *\n * The Triggers component automatically renders this list visually.\n */\n public notifications: string[];\n\n /**\n * Creates a new Triggers component.\n * @param element The HTMLElement on which to instantiate the component.\n * @param options The options for the Triggers 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 * @param _window The window on which to execute the triggers.\n */\n constructor(\n public element: HTMLElement,\n public options?: ITriggersOptions,\n public bindings?: IComponentBindings,\n public _window?: Window\n ) {\n super(element, Triggers.ID, bindings);\n\n this._window = this._window || window;\n this.options = ComponentOptions.initComponentOptions(element, Triggers, options);\n Assert.exists(element);\n Assert.exists(this.options);\n\n this.notifications = [];\n\n this.bind.onRootElement(QueryEvents.querySuccess, this.handleProcessNewQueryResults);\n }\n\n private handleProcessNewQueryResults(data: IQuerySuccessEventArgs) {\n Assert.exists(data);\n Assert.exists(data.results);\n\n $$(this.element).empty();\n this.notifications.length = 0;\n let showElement = false;\n\n if (data.results.triggers === undefined) {\n $$(this.element).toggleClass('coveo-visible', showElement);\n return;\n }\n\n this.executeTriggers(data.results.triggers, 'notify', (trigger: ITriggerNotify) => {\n this.usageAnalytics.logCustomEvent(\n analyticsActionCauseList.triggerNotify,\n {\n notification: trigger.content\n },\n this.element\n );\n\n this.notifications.push(trigger.content);\n this.element.appendChild($$('div', { className: 'coveo-trigger-notify' }, trigger.content).el);\n\n showElement = true;\n });\n\n this.executeTriggers(\n data.results.triggers,\n 'redirect',\n (trigger: ITriggerRedirect) => {\n this.usageAnalytics.logCustomEvent(\n analyticsActionCauseList.triggerRedirect,\n {\n redirectedTo: trigger.content\n },\n this.element\n );\n\n this._window.location.replace(trigger.content);\n },\n true\n );\n\n this.executeTriggers(\n data.results.triggers,\n 'query',\n (trigger: ITriggerQuery) => {\n this.queryStateModel.set(QueryStateModel.attributesEnum.q, trigger.content);\n this.queryController.executeQuery({\n beforeExecuteQuery: () => {\n this.usageAnalytics.logCustomEvent(\n analyticsActionCauseList.triggerQuery,\n {\n query: trigger.content\n },\n this.element\n );\n }\n });\n },\n true\n );\n\n this.executeTriggers(data.results.triggers, 'execute', (trigger: ITriggerExecute) => {\n try {\n let func: Function = this._window['' + trigger.content.name];\n if (typeof func === 'function') {\n let params = object(\n map(trigger.content.params, (value, index) => {\n return ['param' + (index + 1), value];\n })\n );\n params['element'] = this.element;\n\n this.usageAnalytics.logCustomEvent(\n analyticsActionCauseList.triggerExecute,\n {\n executed: trigger.content.name\n },\n this.element\n );\n\n func.apply(this._window, [params]);\n } else {\n this.logger.error(\n `A trigger tried to call the function '${trigger.content.name}', which doesn't exist.`,\n this,\n data.query,\n trigger\n );\n }\n } catch (error) {\n this.logger.error(`A trigger called the function '${trigger.content.name}', which threw an error.`, this, data.query, trigger);\n }\n });\n\n $$(this.element).toggleClass('coveo-visible', showElement);\n }\n\n private executeTriggers(trigger: ITrigger[], type: string, func: (trigger: ITrigger) => any, single: boolean = false) {\n let triggersOfType = filter(trigger, (trigger: ITrigger) => {\n return trigger.type == type;\n });\n let oneOrAllTriggers = take(triggersOfType, single ? 1 : Number.MAX_VALUE);\n\n each(oneOrAllTriggers, func);\n }\n}\n\nInitialization.registerAutoCreateComponent(Triggers);\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui/Triggers/Triggers.ts"],"sourceRoot":""}