coveo-search-ui
Version:
Coveo JavaScript Search Framework
1,107 lines (1,054 loc) • 504 kB
JavaScript
webpackJsonpCoveo__temporary([7,1,3,19],{
/***/ 118:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Component_1 = __webpack_require__(7);
var ResultList_1 = __webpack_require__(93);
var Dom_1 = __webpack_require__(1);
var underscore_1 = __webpack_require__(0);
var Logger_1 = __webpack_require__(9);
var ResultListUtils = /** @class */ (function () {
function ResultListUtils() {
}
ResultListUtils.hideIfInfiniteScrollEnabled = function (cmp) {
var infiniteScrollEnabled = ResultListUtils.isInfiniteScrollEnabled(cmp.searchInterface.element);
if (infiniteScrollEnabled) {
cmp.disable();
Dom_1.$$(cmp.element).hide();
ResultListUtils.warnIfComponentNotNeeded(cmp);
}
else {
cmp.enable();
Dom_1.$$(cmp.element).unhide();
}
};
ResultListUtils.isInfiniteScrollEnabled = function (root) {
var resultList = ResultListUtils.getMainResultList(root);
return resultList ? !!resultList.options.enableInfiniteScroll : false;
};
ResultListUtils.scrollToTop = function (root) {
var resultList = ResultListUtils.getMainResultList(root);
if (!resultList) {
new Logger_1.Logger(this).warn('No active ResultList, scrolling to the top of the Window');
return window.scrollTo(0, 0);
}
var searchInterfacePosition = resultList.searchInterface.element.getBoundingClientRect().top;
if (searchInterfacePosition > 0) {
return;
}
window.scrollTo(0, window.pageYOffset + searchInterfacePosition);
};
ResultListUtils.getMainResultList = function (root) {
var resultLists = ResultListUtils.getResultLists(root);
return underscore_1.find(resultLists, function (resultList) {
var isRecInterface = resultList.searchInterface.element.classList.contains('CoveoRecommendation');
return !resultList.disabled && !isRecInterface;
});
};
ResultListUtils.getResultLists = function (root) {
return Dom_1.$$(root)
.findAll("." + ResultListUtils.cssClass())
.map(function (el) { return Component_1.Component.get(el, ResultList_1.ResultList); });
};
ResultListUtils.cssClass = function () {
return Component_1.Component.computeCssClassName(ResultList_1.ResultList);
};
ResultListUtils.warnIfComponentNotNeeded = function (cmp) {
var root = cmp.searchInterface.root;
var allListsUseInfiniteScroll = ResultListUtils.allResultListsUseInfiniteScroll(root);
allListsUseInfiniteScroll && ResultListUtils.notNeededComponentWarning(cmp);
};
ResultListUtils.allResultListsUseInfiniteScroll = function (root) {
var listsWithInfiniteScrollDisabled = ResultListUtils.getResultLists(root).filter(function (resultList) { return !resultList.options.enableInfiniteScroll; });
return listsWithInfiniteScrollDisabled.length === 0;
};
ResultListUtils.notNeededComponentWarning = function (cmp) {
var cmpCssClass = Component_1.Component.computeCssClassNameForType(cmp.type);
var message = "The " + cmpCssClass + " component is not needed because all " + ResultListUtils.cssClass() + " components have enableInfiniteScroll set to 'true'.\n For the best performance, remove the " + cmpCssClass + " component from your search page.";
new Logger_1.Logger(cmp).warn(message);
};
return ResultListUtils;
}());
exports.ResultListUtils = ResultListUtils;
/***/ }),
/***/ 119:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Assert_1 = __webpack_require__(5);
var Utils_1 = __webpack_require__(4);
var Globalize = __webpack_require__(23);
var underscore_1 = __webpack_require__(0);
/**
* A class which holds information and operation available on a single facet value returned by a {@link IGroupByRequest}.<br/>
* This class is used extensively in the {@link Facet} component.
*/
var FacetValue = /** @class */ (function () {
function FacetValue() {
this.selected = false;
this.excluded = false;
this.waitingForDelta = false;
}
FacetValue.prototype.reset = function () {
this.selected = false;
this.excluded = false;
};
FacetValue.prototype.updateCountsFromNewValue = function (newValue) {
Assert_1.Assert.exists(newValue);
this.occurrences = newValue.occurrences;
this.delta = newValue.delta;
this.computedField = newValue.computedField;
};
FacetValue.prototype.clone = function () {
this.computedField = undefined;
this.delta = undefined;
return this;
};
FacetValue.prototype.cloneWithZeroOccurrences = function () {
this.occurrences = 0;
return this.clone();
};
FacetValue.prototype.cloneWithDelta = function (count, delta) {
Assert_1.Assert.isLargerOrEqualsThan(0, count);
var clone = this.cloneWithZeroOccurrences();
clone.delta = delta;
clone.occurrences = count;
return clone;
};
FacetValue.prototype.getFormattedCount = function () {
var count = undefined;
if (Utils_1.Utils.exists(this.delta) && this.delta > 0) {
count = '+' + Globalize.format(this.delta, 'n0');
}
else {
if (this.occurrences > 0) {
count = Globalize.format(this.occurrences, 'n0');
}
}
return count;
};
FacetValue.prototype.getFormattedComputedField = function (format) {
if (this.computedField != 0) {
return Globalize.format(this.computedField, format);
}
else {
return undefined;
}
};
FacetValue.create = function (value) {
if (underscore_1.isString(value)) {
return FacetValue.createFromValue(value);
}
else if (underscore_1.isObject(value)) {
if ('computedFieldResults' in value) {
return FacetValue.createFromGroupByValue(value);
}
else {
return FacetValue.createFromFieldValue(value);
}
}
else {
throw new Error("Can't create value from " + value);
}
};
FacetValue.createFromValue = function (value) {
Assert_1.Assert.isNonEmptyString(value);
var facetValue = new FacetValue();
facetValue.value = value;
facetValue.lookupValue = value;
return facetValue;
};
FacetValue.createFromGroupByValue = function (groupByValue) {
Assert_1.Assert.exists(groupByValue);
Assert_1.Assert.exists(groupByValue);
var facetValue = new FacetValue();
facetValue.value = groupByValue.value;
facetValue.lookupValue = Utils_1.Utils.exists(groupByValue.lookupValue) ? groupByValue.lookupValue : groupByValue.value;
facetValue.occurrences = groupByValue.numberOfResults;
facetValue.computedField = Utils_1.Utils.isNonEmptyArray(groupByValue.computedFieldResults) ? groupByValue.computedFieldResults[0] : undefined;
facetValue.score = groupByValue.score;
return facetValue;
};
FacetValue.createFromFieldValue = function (fieldValue) {
Assert_1.Assert.exists(fieldValue);
var facetValue = new FacetValue();
facetValue.value = fieldValue.value;
facetValue.lookupValue = fieldValue.lookupValue;
facetValue.occurrences = fieldValue.numberOfResults;
return facetValue;
};
return FacetValue;
}());
exports.FacetValue = FacetValue;
/***/ }),
/***/ 131:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ResponsiveDropdownContent_1 = __webpack_require__(94);
var ResponsiveComponentsUtils = /** @class */ (function () {
function ResponsiveComponentsUtils() {
}
ResponsiveComponentsUtils.shouldDrawFacetSlider = function (root, facetSliderElement) {
return ResponsiveDropdownContent_1.ResponsiveDropdownContent.isTargetInsideOpenedDropdown(facetSliderElement) || !this.isSmallFacetActivated(root);
};
ResponsiveComponentsUtils.isSmallTabsActivated = function (root) {
return root.hasClass(this.smallTabsClassName);
};
ResponsiveComponentsUtils.isSmallFacetActivated = function (root) {
return root.hasClass(this.smallFacetClassName);
};
ResponsiveComponentsUtils.isSmallRecommendationActivated = function (root) {
return root.hasClass(this.smallRecommendationClassName);
};
ResponsiveComponentsUtils.activateSmallTabs = function (root) {
root.addClass(this.smallTabsClassName);
};
ResponsiveComponentsUtils.deactivateSmallTabs = function (root) {
root.removeClass(this.smallTabsClassName);
};
ResponsiveComponentsUtils.activateSmallFacet = function (root) {
root.addClass(this.smallFacetClassName);
};
ResponsiveComponentsUtils.deactivateSmallFacet = function (root) {
root.removeClass(this.smallFacetClassName);
};
ResponsiveComponentsUtils.activateSmallRecommendation = function (root) {
root.addClass(this.smallRecommendationClassName);
};
ResponsiveComponentsUtils.deactivateSmallRecommendation = function (root) {
root.removeClass(this.smallRecommendationClassName);
};
ResponsiveComponentsUtils.smallTabsClassName = 'coveo-small-tabs';
ResponsiveComponentsUtils.smallFacetClassName = 'coveo-small-facets';
ResponsiveComponentsUtils.smallRecommendationClassName = 'coveo-small-recommendation';
return ResponsiveComponentsUtils;
}());
exports.ResponsiveComponentsUtils = ResponsiveComponentsUtils;
/***/ }),
/***/ 132:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/// <reference path="Facet.ts" />
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var ValueElement_1 = __webpack_require__(477);
var FacetValueElement = /** @class */ (function (_super) {
__extends(FacetValueElement, _super);
function FacetValueElement(facet, facetValue, keepDisplayedValueNextTime) {
var _this = _super.call(this, facet, facetValue) || this;
_this.facet = facet;
_this.facetValue = facetValue;
_this.keepDisplayedValueNextTime = keepDisplayedValueNextTime;
return _this;
}
FacetValueElement.prototype.bindEvent = function () {
_super.prototype.bindEvent.call(this, {
displayNextTime: this.keepDisplayedValueNextTime,
pinFacet: this.facet.options.preservePosition
});
};
return FacetValueElement;
}(ValueElement_1.ValueElement));
exports.FacetValueElement = FacetValueElement;
/***/ }),
/***/ 173:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/// <reference path="Facet.ts" />
Object.defineProperty(exports, "__esModule", { value: true });
var Utils_1 = __webpack_require__(4);
var FacetUtils_1 = __webpack_require__(40);
var QueryBuilder_1 = __webpack_require__(49);
var Dom_1 = __webpack_require__(1);
var _ = __webpack_require__(0);
var AllowedValuesPatternType_1 = __webpack_require__(476);
var FacetSearchParameters = /** @class */ (function () {
function FacetSearchParameters(facet) {
this.facet = facet;
this.valueToSearch = '';
this.alwaysInclude = [];
this.alwaysExclude = [];
this.sortCriteria = 'occurrences';
this.fetchMore = false;
this.completeFacetWithStandardValues = true;
this.nbResults = facet.options.numberOfValuesInFacetSearch;
this.ignoreAccents = facet.options.facetSearchIgnoreAccents;
}
FacetSearchParameters.prototype.setValueToSearch = function (value) {
this.valueToSearch = value;
if (Utils_1.Utils.isNonEmptyString(value)) {
this.valueToSearch = this.valueToSearch.trim();
this.alwaysInclude = this.alwaysInclude.concat(FacetUtils_1.FacetUtils.getValuesToUseForSearchInFacet(this.valueToSearch, this.facet));
}
return this;
};
FacetSearchParameters.prototype.excludeCurrentlyDisplayedValuesInSearch = function (searchResults) {
var _this = this;
_.each(this.getCurrentlyShowedValueInSearch(searchResults), function (v) {
var expandedValues = FacetUtils_1.FacetUtils.getValuesToUseForSearchInFacet(v, _this.facet);
_.each(expandedValues, function (expanded) {
_this.alwaysExclude.push(expanded);
});
});
_.each(this.facet.getDisplayedFacetValues(), function (v) {
_this.alwaysExclude.push(v.value);
});
};
FacetSearchParameters.prototype.getGroupByRequest = function () {
this.lowerCaseAll();
var nbResults = this.nbResults;
nbResults += this.alwaysExclude.length;
var typedByUser = [];
if (this.valueToSearch) {
typedByUser = ['*' + this.valueToSearch + '*'];
}
var allowedValues;
if (this.valueToSearch) {
allowedValues = typedByUser.concat(this.alwaysInclude).concat(this.alwaysExclude);
}
else {
allowedValues = _.compact(typedByUser.concat(this.alwaysInclude).concat(this.facet.options.allowedValues));
}
var completeFacetWithStandardValues = this.completeFacetWithStandardValues;
if (this.facet.options.lookupField != null) {
completeFacetWithStandardValues = false;
}
var request = {
allowedValues: allowedValues,
allowedValuesPatternType: this.facet.options.useWildcardsInFacetSearch
? AllowedValuesPatternType_1.AllowedValuesPatternType.Wildcards
: AllowedValuesPatternType_1.AllowedValuesPatternType.Legacy,
maximumNumberOfValues: nbResults,
completeFacetWithStandardValues: completeFacetWithStandardValues,
field: this.facet.options.field,
sortCriteria: this.facet.options.sortCriteria || this.sortCriteria,
injectionDepth: this.facet.options.injectionDepth
};
if (this.facet.options.lookupField) {
request.lookupField = this.facet.options.lookupField;
}
if (this.facet.options.computedField) {
request.computedFields = [
{
field: this.facet.options.computedField,
operation: this.facet.options.computedFieldOperation
}
];
}
return request;
};
FacetSearchParameters.prototype.getQuery = function () {
var lastQuery = _.clone(this.facet.queryController.getLastQuery());
if (!lastQuery) {
// There should normally always be a last query available
// If not, just create an empty one.
lastQuery = new QueryBuilder_1.QueryBuilder().build();
}
// We want to always force query syntax to true for a facet search,
// but arrange for the basic expression to adapt itself with no syntax block
if (lastQuery.enableQuerySyntax) {
lastQuery.q = this.facet.facetQueryController.basicExpressionToUseForFacetSearch;
}
else if (Utils_1.Utils.isNonEmptyString(this.facet.facetQueryController.basicExpressionToUseForFacetSearch)) {
lastQuery.q = "<@- " + this.facet.facetQueryController.basicExpressionToUseForFacetSearch + " -@>";
}
else {
lastQuery.q = '';
}
lastQuery.enableQuerySyntax = true;
lastQuery.cq = this.facet.facetQueryController.constantExpressionToUseForFacetSearch;
lastQuery.aq = this.facet.facetQueryController.advancedExpressionToUseForFacetSearch;
lastQuery.enableDidYouMean = false;
lastQuery.firstResult = 0;
lastQuery.numberOfResults = 0;
lastQuery.fieldsToInclude = [];
lastQuery.groupBy = [this.getGroupByRequest()];
return lastQuery;
};
FacetSearchParameters.prototype.getCurrentlyShowedValueInSearch = function (searchResults) {
return _.map(Dom_1.$$(searchResults).findAll('.coveo-facet-value-caption'), function (val) {
return Dom_1.$$(val).getAttribute('data-original-value') || Dom_1.$$(val).text();
});
};
FacetSearchParameters.prototype.lowerCaseAll = function () {
this.alwaysExclude = _.chain(this.alwaysExclude)
.map(function (v) {
return v.toLowerCase();
})
.uniq()
.value();
this.alwaysInclude = _.chain(this.alwaysInclude)
.map(function (v) {
return v.toLowerCase();
})
.uniq()
.value();
};
return FacetSearchParameters;
}());
exports.FacetSearchParameters = FacetSearchParameters;
/***/ }),
/***/ 174:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var underscore_1 = __webpack_require__(0);
var Core_1 = __webpack_require__(20);
var ComponentsTypes_1 = __webpack_require__(47);
var Dom_1 = __webpack_require__(1);
var InitializationEvents_1 = __webpack_require__(17);
var DependsOnManager = /** @class */ (function () {
function DependsOnManager(facet) {
var _this = this;
this.facet = facet;
Dom_1.$$(this.facet.ref.searchInterface.element).on(Core_1.QueryEvents.buildingQuery, function () { return _this.handleBuildingQuery(); });
if (this.getDependsOn(this.facet.ref)) {
this.facet.ref.bind.onRootElement(InitializationEvents_1.InitializationEvents.afterComponentsInitialization, function () { return _this.setupDependentFacet(); });
}
}
DependsOnManager.prototype.setupDependentFacet = function () {
var _this = this;
Dom_1.$$(this.facet.ref.element).addClass('coveo-hidden-dependant-facet');
this.parentFacetRef = this.getParentFacet(this.facet.ref);
if (this.parentFacetRef) {
Dom_1.$$(this.facet.ref.root).on('state:change', function () { return _this.resetIfConditionUnfullfiled(); });
}
};
DependsOnManager.prototype.resetIfConditionUnfullfiled = function () {
var condition = this.getDependsOnCondition(this.facet.ref);
if (!condition(this.parentFacetRef)) {
this.facet.reset();
}
};
DependsOnManager.prototype.getId = function (component) {
var id = component.options.id;
return id ? "" + id : null;
};
DependsOnManager.prototype.getDependsOn = function (component) {
var dependsOn = component.options.dependsOn;
return dependsOn ? "" + dependsOn : null;
};
DependsOnManager.prototype.getDependsOnCondition = function (component) {
var _this = this;
var conditionOption = component.options.dependsOnCondition;
return conditionOption && underscore_1.isFunction(conditionOption)
? conditionOption
: function () { return _this.parentHasSelectedValues(component) && _this.parentIsEnabled(component); };
};
DependsOnManager.prototype.parentHasSelectedValues = function (component) {
var parent = this.getParentFacet(component);
return parent && this.valuesExistForFacetWithId(this.getId(parent));
};
DependsOnManager.prototype.parentIsEnabled = function (component) {
var parent = this.getParentFacet(component);
return parent && !parent.disabled;
};
DependsOnManager.prototype.valuesExistForFacetWithId = function (facetId) {
var values = this.facet.ref.queryStateModel.get(Core_1.QueryStateModel.getFacetId(facetId));
return !!values && !!values.length;
};
Object.defineProperty(DependsOnManager.prototype, "allFacetsInInterface", {
get: function () {
return ComponentsTypes_1.ComponentsTypes.getAllFacetsFromSearchInterface(this.facet.ref.searchInterface);
},
enumerable: true,
configurable: true
});
DependsOnManager.prototype.getParentFacet = function (component) {
var _this = this;
var parent = this.allFacetsInInterface.filter(function (potentialParentFacet) { return _this.getId(potentialParentFacet) === _this.getDependsOn(component); });
if (!parent.length) {
component.logger.warn('DependsOn reference does not exist', this.getDependsOn(this.facet.ref));
return null;
}
return parent[0];
};
Object.defineProperty(DependsOnManager.prototype, "dependentFacets", {
get: function () {
var _this = this;
return this.allFacetsInInterface.filter(function (potentialDependentFacet) { return _this.getId(_this.facet.ref) === _this.getDependsOn(potentialDependentFacet); });
},
enumerable: true,
configurable: true
});
DependsOnManager.prototype.handleBuildingQuery = function () {
var _this = this;
this.dependentFacets.forEach(function (dependentFacet) {
var condition = _this.getDependsOnCondition(dependentFacet);
if (condition(_this.facet.ref)) {
Dom_1.$$(dependentFacet.element).removeClass('coveo-hidden-dependant-facet');
return dependentFacet.enable();
}
dependentFacet.disable();
Dom_1.$$(dependentFacet.element).addClass('coveo-hidden-dependant-facet');
});
};
Object.defineProperty(DependsOnManager.prototype, "hasDependentFacets", {
get: function () {
return !!this.dependentFacets.length;
},
enumerable: true,
configurable: true
});
Object.defineProperty(DependsOnManager.prototype, "dependentFacetsHaveSelectedValues", {
get: function () {
var _this = this;
return this.dependentFacets.some(function (dependentFacet) { return _this.valuesExistForFacetWithId(_this.getId(dependentFacet)); });
},
enumerable: true,
configurable: true
});
return DependsOnManager;
}());
exports.DependsOnManager = DependsOnManager;
/***/ }),
/***/ 175:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var ResponsiveFacetColumn_1 = __webpack_require__(216);
var Facet_1 = __webpack_require__(70);
var ResponsiveFacets = /** @class */ (function (_super) {
__extends(ResponsiveFacets, _super);
function ResponsiveFacets() {
return _super !== null && _super.apply(this, arguments) || this;
}
ResponsiveFacets.init = function (root, component, options) {
ResponsiveFacetColumn_1.ResponsiveFacetColumn.init(ResponsiveFacets, root, component, options, Facet_1.Facet.ID);
};
return ResponsiveFacets;
}(ResponsiveFacetColumn_1.ResponsiveFacetColumn));
exports.ResponsiveFacets = ResponsiveFacets;
/***/ }),
/***/ 190:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/// <reference path='../Facet/Facet.ts' />
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var Facet_1 = __webpack_require__(70);
var ComponentOptions_1 = __webpack_require__(8);
var TemplateHelpers_1 = __webpack_require__(122);
var FacetRangeQueryController_1 = __webpack_require__(573);
var Initialization_1 = __webpack_require__(2);
var Globalize = __webpack_require__(23);
var GlobalExports_1 = __webpack_require__(3);
var ResponsiveFacetOptions_1 = __webpack_require__(85);
var ResponsiveFacets_1 = __webpack_require__(175);
var underscore_1 = __webpack_require__(0);
/**
* A `FacetRange` is a [facet](https://docs.coveo.com/en/198/) whose values are expressed as ranges.
*
* You must set the [`field`]{@link Facet.options.field} option to a value targeting a numeric or date [field](https://docs.coveo.com/en/200/) in your index for this component to work.
*
* This component extends the [`Facet`]{@link Facet} component and supports all `Facet` options except:
*
* - **Settings** menu options
* - [`enableSettings`]{@link Facet.options.enableSettings}
* - [`enableSettingsFacetState`]{@link Facet.options.enableSettingsFacetState}
* - [`enableCollapse`]{@link Facet.options.enableCollapse}
* - [`availableSorts`]{@link Facet.options.availableSorts}
* - [`customSort`]{@link Facet.options.customSort}
* - [`computedFieldCaption`]{@link Facet.options.computedFieldCaption}
* - **Facet Search** options
* - [`enableFacetSearch`]{@link Facet.options.enableFacetSearch}
* - [`facetSearchDelay`]{@link Facet.options.facetSearchDelay}
* - [`facetSearchIgnoreAccents`]{@link Facet.options.facetSearchIgnoreAccents}
* - [`numberOfValuesInFacetSearch`]{@link Facet.options.numberOfValuesInFacetSearch}
* - **More and Less** options
* - [`enableMoreLess`]{@link Facet.options.enableMoreLess}
* - [`pageSize`]{@link Facet.options.pageSize}
*
* @notSupportedIn salesforcefree
*/
var FacetRange = /** @class */ (function (_super) {
__extends(FacetRange, _super);
/**
* Creates a new `FacetRange`.
* @param element The HTML element on which to instantiate the component.
* @param options The configuration options to apply when creating the component.
* @param bindings The bindings required by the component.
*/
function FacetRange(element, options, bindings) {
var _this = _super.call(this, element, ComponentOptions_1.ComponentOptions.initComponentOptions(element, FacetRange, options), bindings, FacetRange.ID) || this;
_this.element = element;
_this.isFieldValueCompatible = false;
_this.options.enableFacetSearch = false;
_this.options.enableSettings = false;
_this.options.includeInOmnibox = false;
_this.options.enableMoreLess = false;
ResponsiveFacets_1.ResponsiveFacets.init(_this.root, _this, _this.options);
return _this;
}
FacetRange.prototype.getValueCaption = function (facetValue) {
if (this.options.valueCaption || this.isLabelSpecifiedForValue(facetValue)) {
return _super.prototype.getValueCaption.call(this, facetValue);
}
return this.translateValuesFromFormat(facetValue);
};
FacetRange.prototype.isLabelSpecifiedForValue = function (facetValue) {
return this.options.ranges && !!underscore_1.find(this.options.ranges, function (range) { return !underscore_1.isUndefined(range.label) && range.label === facetValue.lookupValue; });
};
FacetRange.prototype.initFacetQueryController = function () {
this.facetQueryController = new FacetRangeQueryController_1.FacetRangeQueryController(this);
};
FacetRange.prototype.processNewGroupByResults = function (groupByResults) {
var _this = this;
if (groupByResults != null && this.options.ranges == null) {
groupByResults.values.sort(function (valueA, valueB) { return _this.sortRangeGroupByResults(valueA.value, valueB.value); });
}
_super.prototype.processNewGroupByResults.call(this, groupByResults);
};
FacetRange.prototype.sortRangeGroupByResults = function (valueA, valueB) {
var startEndA = this.extractStartAndEndValue(valueA);
var startEndB = this.extractStartAndEndValue(valueB);
var firstValue;
var secondValue;
if (!startEndA) {
firstValue = valueA;
}
else {
firstValue = startEndA.start;
}
if (!startEndB) {
secondValue = valueB;
}
else {
secondValue = startEndB.start;
}
if (this.options.dateField) {
return Date.parse(firstValue) - Date.parse(secondValue);
}
return Number(firstValue) - Number(secondValue);
};
FacetRange.prototype.translateValuesFromFormat = function (facetValue) {
var startAndEnd = this.extractStartAndEndValue(facetValue.lookupValue || facetValue.value);
if (!startAndEnd) {
return null;
}
return this.formatValue(startAndEnd.start) + " - " + this.formatValue(startAndEnd.end);
};
FacetRange.prototype.extractStartAndEndValue = function (value) {
var startAndEnd = /^(.*)\.\.(.*)$/.exec(value);
if (startAndEnd == null) {
return null;
}
return {
start: startAndEnd[1],
end: startAndEnd[2]
};
};
FacetRange.prototype.formatValue = function (value) {
var isNumber = !!value.match(/^[\+\-]?[0-9]+(\.[0-9]+)?$/);
return this.options.dateField || !isNumber ? this.formatDateValue(value) : this.formatNumberValue(Number(value));
};
FacetRange.prototype.formatDateValue = function (value) {
var helper = TemplateHelpers_1.TemplateHelpers.getHelper('dateTime');
var helperOptions = {
alwaysIncludeTime: false,
includeTimeIfThisWeek: false,
includeTimeIfToday: false,
omitYearIfCurrentOne: false,
useTodayYesterdayAndTomorrow: false,
useWeekdayIfThisWeek: false
};
return helper(value, helperOptions);
};
FacetRange.prototype.formatNumberValue = function (value) {
return Globalize.format(value, this.options.valueFormat);
};
FacetRange.ID = 'FacetRange';
FacetRange.parent = Facet_1.Facet;
FacetRange.doExport = function () {
GlobalExports_1.exportGlobally({
FacetRange: FacetRange
});
};
/**
* The options for the component
* @componentOptions
*/
FacetRange.options = __assign({
/**
* Whether the specified [`field`]{@link Facet.options.field} option value targets a date field in your index.
*
* This allows the component to correctly build the outgoing [Group By](https://docs.coveo.com/en/203/).
*
* **Default:** `false`.
*/
dateField: ComponentOptions_1.ComponentOptions.buildBooleanOption({ defaultValue: false }),
/**
* The list of [range values]{@link IRangeValue} to request (see [Requesting Specific FacetRange Values](https://docs.coveo.com/en/2790/)).
*
* By default, the index automatically generates range values.
*
* **Note:**
* > The index cannot automatically generate range values for a `FacetRange` whose [`field`]{@link Facet.options.field} option value references a dynamic field generated by a [query function](https://docs.coveo.com/en/232/). In such a case, you _must_ use the `ranges` option.
*/
ranges: ComponentOptions_1.ComponentOptions.buildJsonOption(),
/**
* The format to apply to the range values. Only works for numeric values.
*
* Some of the most commonly used formats are:
*
* - `c0`: format a numeric value as currency.
* - `n0`: formats a numeric value as an integer.
* - `n2`: formats a numeric value as a floating point number with two decimal digits.
*
* The available formats are defined in the [Globalize](https://github.com/klaaspieter/jquery-global#numbers) library.
*
* **Note:** This option is ignored when the [`valueCaption`]{@link Facet.options.valueCaption} is defined.
*/
valueFormat: ComponentOptions_1.ComponentOptions.buildStringOption({ defaultValue: 'n0' }) }, ResponsiveFacetOptions_1.ResponsiveFacetOptions);
return FacetRange;
}(Facet_1.Facet));
exports.FacetRange = FacetRange;
Initialization_1.Initialization.registerAutoCreateComponent(FacetRange);
/***/ }),
/***/ 215:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Component_1 = __webpack_require__(7);
var _ = __webpack_require__(0);
var ResultListRenderer = /** @class */ (function () {
function ResultListRenderer(resultListOptions, autoCreateComponentsFn) {
this.resultListOptions = resultListOptions;
this.autoCreateComponentsFn = autoCreateComponentsFn;
}
ResultListRenderer.prototype.renderResults = function (resultElements, append, resultDisplayedCallback) {
var _this = this;
if (append === void 0) { append = false; }
return Promise.all([this.getStartFragment(resultElements, append), this.getEndFragment(resultElements, append)]).then(function (_a) {
var startFrag = _a[0], endFrag = _a[1];
var resultsFragment = document.createDocumentFragment();
if (startFrag) {
resultsFragment.appendChild(startFrag);
}
_.each(resultElements, function (resultElement) {
resultsFragment.appendChild(resultElement);
resultDisplayedCallback(Component_1.Component.getResult(resultElement), resultElement);
});
if (endFrag) {
resultsFragment.appendChild(endFrag);
}
_this.resultListOptions.resultsContainer.appendChild(resultsFragment);
});
};
ResultListRenderer.prototype.getStartFragment = function (resultElements, append) {
return Promise.resolve(document.createDocumentFragment());
};
ResultListRenderer.prototype.getEndFragment = function (resultElements, append) {
return Promise.resolve(document.createDocumentFragment());
};
return ResultListRenderer;
}());
exports.ResultListRenderer = ResultListRenderer;
/***/ }),
/***/ 216:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
__webpack_require__(536);
var QueryEvents_1 = __webpack_require__(11);
var Logger_1 = __webpack_require__(9);
var Strings_1 = __webpack_require__(6);
var Dom_1 = __webpack_require__(1);
var Utils_1 = __webpack_require__(4);
var Component_1 = __webpack_require__(7);
var SearchInterface_1 = __webpack_require__(19);
var ResponsiveComponents_1 = __webpack_require__(55);
var ResponsiveComponentsManager_1 = __webpack_require__(62);
var ResponsiveComponentsUtils_1 = __webpack_require__(131);
var ResponsiveDropdown_1 = __webpack_require__(124);
var ResponsiveDropdownContent_1 = __webpack_require__(94);
var ResponsiveDropdownHeader_1 = __webpack_require__(136);
var underscore_1 = __webpack_require__(0);
var ComponentsTypes_1 = __webpack_require__(47);
var ResponsiveDropdownModalContent_1 = __webpack_require__(537);
var FacetsMobileMode_1 = __webpack_require__(86);
var FacetsMobileModeEvents_1 = __webpack_require__(538);
var ResponsiveFacetColumn = /** @class */ (function () {
function ResponsiveFacetColumn(coveoRoot, ID, options, responsiveDropdown) {
this.coveoRoot = coveoRoot;
this.ID = ID;
this.componentsInFacetColumn = [];
this.preservePositionOriginalValues = [];
this.searchInterface = Component_1.Component.get(this.coveoRoot.el, SearchInterface_1.SearchInterface, false);
this.dropdownHeaderLabel = this.getDropdownHeaderLabel();
this.dropdown = this.buildDropdown(responsiveDropdown);
this.bindDropdownContentEvents();
this.bindFacetsMobileModeEvents();
this.registerOnCloseHandler();
this.registerQueryEvents();
this.initializeBreakpoint(options.responsiveBreakpoint);
}
ResponsiveFacetColumn.init = function (responsiveComponentConstructor, root, component, options, ID) {
var column = this.findColumn(root);
if (!column) {
return;
}
ResponsiveComponentsManager_1.ResponsiveComponentsManager.register(ResponsiveFacetColumn, Dom_1.$$(root), 'ResponsiveFacetColumn', component, options);
ResponsiveComponentsManager_1.ResponsiveComponentsManager.register(responsiveComponentConstructor, Dom_1.$$(root), ID, component, options);
};
ResponsiveFacetColumn.findColumn = function (root) {
var column = Dom_1.$$(root).find('.coveo-facet-column');
if (!column) {
this.logger.info('No element with class coveo-facet-column. Responsive facets cannot be enabled');
}
return column;
};
Object.defineProperty(ResponsiveFacetColumn.prototype, "facetsMobileModeComponent", {
get: function () {
return this.searchInterface ? this.searchInterface.getComponents(FacetsMobileMode_1.FacetsMobileMode.ID)[0] : null;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ResponsiveFacetColumn.prototype, "facetsMobileModeOptions", {
get: function () {
var facetsMobileModeComponent = this.facetsMobileModeComponent;
if (!facetsMobileModeComponent) {
ResponsiveFacetColumn.logger.warn('The "FacetsMobileMode" component did not load properly, disabling the ResponsiveFacets modal.');
return {
isModal: false,
preventScrolling: false,
displayOverlayWhileOpen: true
};
}
return facetsMobileModeComponent.options;
},
enumerable: true,
configurable: true
});
ResponsiveFacetColumn.prototype.registerComponent = function (accept) {
this.componentsInFacetColumn.push(accept);
this.preservePositionOriginalValues.push(accept.options.preservePosition);
return true;
};
ResponsiveFacetColumn.prototype.needDropdownWrapper = function () {
return this.needSmallMode();
};
ResponsiveFacetColumn.prototype.handleResizeEvent = function () {
if (this.needSmallMode() && !ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallFacetActivated(this.coveoRoot)) {
this.changeToSmallMode();
}
else if (!this.needSmallMode() && ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.isSmallFacetActivated(this.coveoRoot)) {
this.changeToLargeMode();
}
if (this.dropdown.isOpened) {
this.dropdown.dropdownContent.positionDropdown();
}
};
ResponsiveFacetColumn.prototype.dismissFacetSearches = function () {
underscore_1.each(this.componentsInFacetColumn, function (component) {
if (component.facetSearch && component.facetSearch.currentlyDisplayedResults) {
component.facetSearch.dismissSearchResults();
}
});
};
ResponsiveFacetColumn.prototype.needSmallMode = function () {
if (!this.searchInterface) {
return (this.coveoRoot.width() <=
(Utils_1.Utils.isNullOrUndefined(this.breakpoint) ? new ResponsiveComponents_1.ResponsiveComponents().getMediumScreenWidth() : this.breakpoint));
}
switch (this.searchInterface.responsiveComponents.getResponsiveMode()) {
case 'small':
case 'medium':
return true;
case 'auto':
return (this.coveoRoot.width() <=
(Utils_1.Utils.isNullOrUndefined(this.breakpoint) ? this.searchInterface.responsiveComponents.getMediumScreenWidth() : this.breakpoint));
default:
return false;
}
};
ResponsiveFacetColumn.prototype.changeToSmallMode = function () {
this.dropdown.close();
this.disableFacetPreservePosition();
Dom_1.$$(this.coveoRoot.find("." + ResponsiveComponentsManager_1.ResponsiveComponentsManager.DROPDOWN_HEADER_WRAPPER_CSS_CLASS)).append(this.dropdown.dropdownHeader.element.el);
ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.activateSmallFacet(this.coveoRoot);
};
ResponsiveFacetColumn.prototype.changeToLargeMode = function () {
this.restoreFacetPreservePositionValue();
this.dropdown.cleanUp();
ResponsiveComponentsUtils_1.ResponsiveComponentsUtils.deactivateSmallFacet(this.coveoRoot);
};
ResponsiveFacetColumn.prototype.buildDropdown = function (responsiveDropdown) {
var dropdownContent = this.buildDropdownContent();
var dropdownHeader = this.buildDropdownHeader();
var dropdown = responsiveDropdown ? responsiveDropdown : new ResponsiveDropdown_1.ResponsiveDropdown(dropdownContent, dropdownHeader, this.coveoRoot);
if (!this.facetsMobileModeOptions.displayOverlayWhileOpen) {
dropdown.disablePopupBackground();
}
if (this.facetsMobileModeOptions.preventScrolling) {
dropdown.enableScrollLocking(this.facetsMobileModeOptions.scrollContainer);
}
return dropdown;
};
ResponsiveFacetColumn.prototype.buildDropdownContent = function () {
var _this = this;
var dropdownContentElement = Dom_1.$$(this.coveoRoot.find('.coveo-facet-column'));
var filterByContainer = Dom_1.$$('div', { className: 'coveo-facet-header-filter-by-container', style: 'display: none' });
var filterBy = Dom_1.$$('div', { className: 'coveo-facet-header-filter-by' });
filterBy.text(Strings_1.l('Filter by:'));
filterByContainer.append(filterBy.el);
dropdownContentElement.prepend(filterByContainer.el);
if (this.facetsMobileModeOptions.isModal) {
return new ResponsiveDropdownModalContent_1.ResponsiveDropdownModalContent('facet', dropdownContentElement, Strings_1.l('CloseFiltersDropdown'), function () { return _this.dropdown.close(); });
}
return new ResponsiveDropdownContent_1.ResponsiveDropdownContent('facet', dropdownContentElement, this.coveoRoot, ResponsiveFacetColumn.DROPDOWN_MIN_WIDTH, ResponsiveFacetColumn.DROPDOWN_WIDTH_RATIO);
};
ResponsiveFacetColumn.prototype.buildDropdownHeader = function () {
var dropdownHeaderElement = Dom_1.$$('a');
var content = Dom_1.$$('p');
content.text(this.dropdownHeaderLabel);
dropdownHeaderElement.el.appendChild(content.el);
var dropdownHeader = new ResponsiveDropdownHeader_1.ResponsiveDropdownHeader('facet', dropdownHeaderElement);
return dropdownHeader;
};
ResponsiveFacetColumn.prototype.initializeBreakpoint = function (defaultBreakpoint) {
var facetsMobileModeBreakpoint = this.facetsMobileModeOptions.breakpoint;
this.breakpoint = Utils_1.Utils.isNullOrUndefined(facetsMobileModeBreakpoint) ? defaultBreakpoint : facetsMobileModeBreakpoint;
};
ResponsiveFacetColumn.prototype.registerOnCloseHandler = function () {
this.dropdown.registerOnCloseHandler(this.dismissFacetSearches, this);
};
ResponsiveFacetColumn.prototype.registerQueryEvents = function () {
var _this = this;
this.coveoRoot.on(QueryEvents_1.QueryEvents.noResults, function () { return _this.handleNoResults(); });
this.coveoRoot.on(QueryEvents_1.QueryEvents.querySuccess, function (e, data) { return _this.handleQuerySuccess(data); });
this.coveoRoot.on(QueryEvents_1.QueryEvents.queryError, function () { return _this.handleQueryError(); });
};
ResponsiveFacetColumn.prototype.bindDropdownContentEvents = function () {
var _this = this;
this.dropdown.dropdownContent.element.on('scroll', underscore_1.debounce(function () {
underscore_1.each(_this.componentsInFacetColumn, function (component) {
var facetSearch = component.facetSearch;
if (facetSearch && facetSearch.currentlyDisplayedResults && !_this.isFacetSearchScrolledIntoView(facetSearch.search)) {
component.facetSearch.positionSearchResults(_this.dropdown.dropdownContent.element.el);
}
else if (facetSearch && component.facetSearch.currentlyDisplayedResults) {
component.facetSearch.positionSearchResults();
}
});
}, ResponsiveFacetColumn.DEBOUNCE_SCROLL_WAIT));
};
ResponsiveFacetColumn.prototype.bindFacetsMobileModeEvents = function () {
var facetsMobileModeComponent = this.facetsMobileModeComponent;
if (facetsMobileModeComponent) {
this.dropdown.registerOnOpenHandler(function () { return Dom_1.$$(facetsMobileModeComponent.element).trigger(FacetsMobileModeEvents_1.FacetsMobileModeEvents.popupOpened); }, facetsMobileModeComponent);
this.dropdown.registerOnCloseHandler(function () { return Dom_1.$$(facetsMobileModeComponent.element).trigger(FacetsMobileModeEvents_1.FacetsMobileModeEvents.popupClosed); }, facetsMobileModeComponent);
}
};
ResponsiveFacetColumn.prototype.restoreFacetPreservePositionValue = function () {
var _this = this;
underscore_1.each(this.componentsInFacetColumn, function (component, index) {
if (component.options) {
component.options.preservePosition = _this.preservePositionOriginalValues[index];
}
});
};
ResponsiveFacetColumn.prototype.disableFacetPreservePosition = function () {
underscore_1.each(this.componentsInFacetColumn, function (component) {
if (component.options) {
component.options.preservePosition = false;
}
});
};
ResponsiveFacetColumn.prototype.isFacetSearchScrolledIntoView = function (facetSearchElement) {
var facetTop = facetSearchElement.getBoundingClientRect().top;
var facetBottom = facetSearchElement.getBoundingClientRect().bottom;
var dropdownTop = this.dropdown.dropdownContent.element.el.getBoundingClientRect().top;
var dropdownBottom = this.dropdown.dropdownContent.element.el.getBoundingClientRect().bottom;
dropdownTop = dropdownTop >= 0 ? dropdownTop : 0;
return facetTop >= dropdownTop && facetBottom <= dropdownBottom;
};
ResponsiveFacetColumn.prototype.getDropdownHeaderLabel = function () {
var dropdownHeaderLabel;
ComponentsTypes_1.ComponentsTypes.getAllFacetInstancesFromElement(this.coveoRoot.find('.coveo-facet-column')).forEach(function (facet) {
var options = facet.options;
if (!dropdownHeaderLabel && options.dropdownHeaderLabel) {
dropdownHeaderLabel = options.dropdownHeaderLabel;
}
});
if (!dropdownHeaderLabel) {
dropdownHeaderLabel = Strings_1.l(ResponsiveFacetColumn.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE);
}
return dropdownHeaderLabel;
};
ResponsiveFacetColumn.prototype.handleNoResults = function () {
this.dropdown.dropdownHeader.hide();
};
ResponsiveFacetColumn.prototype.handleQueryError = function () {
this.dropdown.dropdownHeader.hide();
};
ResponsiveFacetColumn.prototype.handleQuerySuccess = function (data) {
if (data.results.totalCount === 0) {
this.dropdown.dropdownHeader.hide();
}
else {
this.dropdown.dropdownHeader.show();
}
};
ResponsiveFacetColumn.DEBOUNCE_SCROLL_WAIT = 250;
ResponsiveFacetColumn.logger = new Logger_1.Logger('ResponsiveFacets');
ResponsiveFacetColumn.DROPDOWN_MIN_WIDTH = 280;
ResponsiveFacetColumn.DROPDOWN_WIDTH_RATIO = 0.35; // Used to set the width relative to the coveo root.
ResponsiveFacetColumn.DROPDOWN_HEADER_LABEL_DEFAULT_VALUE = 'Filters';
return ResponsiveFacetColumn;
}());
exports.ResponsiveFacetColumn = ResponsiveFacetColumn;
/***/ }),
/***/ 217:
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/// <reference path='../ui/Facet/Facet.ts' />
Object.defineProperty(exports, "__esModule", { value: true });
var ExpressionBuilder_1 = __webpack_require__(75);
var Utils_1 = __webpack_require__(4);
var FacetSearchParameters_1 = __webpack_require__(173);
var Assert_1 = __webpack_require__(5);
var FacetUtils_1 = __webpack_require__(40);
var _ = __webpack_require__(0);
var QueryBuilderExpression_1 = __webpack_require__(185);
var FacetQueryController = /** @class */ (function () {
function FacetQueryController(facet, shouldEscapeValueInFieldExpress