{"version":3,"sources":["inoMsScreenerCore.js","inoMsScreenerCore.tmpl.js","inoMsScreener.addons.shareLink.js","inoMsScreener.addons.shareLink.tmpl.js"],"names":["inovestor","ms","screenercore","registeredAddons","helper","findFieldTypeByKey","key","normalizedKey","toLowerCase","i","fieldTypes","length","fieldType","ko","mappers","queryCriteriaMapper","viewModel","self","this","mapQueryCriteriasToViewModelCompatibleCriterias","queryCriterias","property","uiCriteria","uiCriterias","hasOwnProperty","fieldKey","criteria","valuesDefinition","valueItems","fieldTypeDefinition","fieldTypeKey","core","isNullOrUndefined","min","max","symbol","displayType","comparerType","operator","operatorKey","valueItem1","valueItem2","valueItem3","criteriaValues","utils","unwrapObservable","getCriteriasForComparerType","Object","Array","isArray","in","forEach","x","value","findRangeMatchingValue","rangeOperator","range","values","findEqualMatchingValue","filter","push","mapViewModelCriteriasToQueryCriterias","viewModelCriterias","currentCriteria","criteriaKey","query","map",">","<","=","valueItem","sliderMin","sliderMax","flattenArray","array","reduce","agg","y","libRef","jQuery","adapters","dividedBy100Adapter","isAdaptable","isNaN","fromServer","toServer","multipliedBy100Adapter","bindingHandlers","accessibleClick","update","element","addEventListener","event","keyCode","click","$","JSON","pluginCore","options","$element","elem","setViewModel","vm","_viewModel","screenerType","categoryType","serverSidePagination","setTableService","ts","_tableService","instances","register","bindEvents","on","name","onReady","call","focusBeforeOpeningModal","visibleColumnDropdown","document","activeElement","find","focus","criteriaFilter","criteriaSelectedTab","criteriaCategories","focusOutColumnDropdownHandler","e","stopPropagation","setTimeout","dropdown","clearTimeout","evt","id","sortType","results","isBusy","removeClass","target","addClass","attr","sortColumn","predefinedScreens","f","resourceKey","search","parents","apiErrorHandler","apiError","errorFlag","onError","result","generateError","errors","hasError","invalidIdentifierHandler","invalidIdentifier","isInvalidIdentifier","render","updateResources","_setUpPagination","numResults","rows","criterias","setSliderRange","initializeDateRange","items","j","currentItem","k","currentValue","currentLanguage","nameEn","nameFr","bindModel","applyBindings","url","getQuerystring","isEmptyString","screener","config","apiRelativeUrl","serverSide","_makeServerSideQuery","performInitialSortingServerSide","_makeInitialSortingServerSideQuery","searchResults","shouldSearch","type","contentType","data","stringify","error","ajaxApi","apiBaseUrl","then","_handleApiSearchResult","always","isEmptyTable","requestStatus","columnNames","count","adaptResults","rowIndex","columnIndex","columnFieldTypeDefinitions","adapter","_formatResults","createDataTable","redirectUrl","resultsPerPage","sortedBy","sortOrder","offset","columns","colIndex","serverName","indexOf","stringFormat","queryString","$pagination","numPages","startPage","twbsPagination","totalPages","visiblePages","initiateStartPageClick","first","resources","dataTableLanguage","paginate","prev","previous","next","last","onPageClick","page","oldOffset","setOffset","fieldTypesColumns","columnClasses","d","columnKey","formLabels","css","alignmentCss","sortingDisabled","hidden","includeForTable","columnFilteringDisabled","valRow","tempDiv","val","fieldDef","showAsText","toString","decimalPlaces","groupKey","number","showZero","showAsLargeNumber","enableDisplayNumericLargeFormat","Date","toISOString","substring","allCriterias","usedKeys","valueEn","valueFr","normalizedValue","serverValue","exportToCsv","csvRows","csvString","column","row","ticker","code","join","blob","Blob","saveAs","screenerLoaders","dfd","Deferred","keyParts","split","screeners","resolve","reject","promise","loadDefinedScreenerOrDefault","screenerKey","initialCall","addPredifinedCriteria","loadScreenerRecursive","loaderIndex","fail","viewModels","screenerCoreViewModel","shareBaseUrl","numericOperators","isExportEnabled","corePlugin","screenerResultsViewModel","isWildCardOnlyQuery","observable","areFiltersBusy","observableArray","sliderAllMinMaxValues","sliderAllMinMaxValuesAreUnavailable","noCriterias","isMinimizedCriteria","currentScreener","description","predefinedFilter","predefinedCriteriaNames","category","item","isSelected","requestedCriterias","requestedCriteria","criteriaToAdd","screenerCriteriaViewModel","field","fieldName","fieldNames","displayName","fieldDefinitionItem","sliderOptions","minMaxOptions","setAutocomplete","valueHasMutated","currentResource","computed","categories","criteriaList","isNoCriteria","isGroupAlreadyAdded","categoryFields","index","setColumnNames","colNames","indicesToSkip","oldColumnNames","inArray","isVisible","subscribe","initialScreenerIsLoading","paginationRows","slice","onTableHeaderClick","setColumnHeaderStyling","tmp","sortRows","sortVal1","sortVal2","dataIndex","sortField","sort","left","right","leftVal","rightVal","verifyWildCardOnlyCriterias","toggleMinimizedCriteria","showingResultsString","start","total","formatString","info","end","resultsString","serverSideLimit","infoLimit","getRowClickHandler","mic","encodeURIComponent","isValid","criteriaValue","isDefault","anyAsWildcard","_appendToQueryString","logicalOperator","preferInOperatorOverOr","inItemsList","separator","current","symbolInfos","wildCardOnlyQuery","parseQuerystring","querystring","param","params","substr","queryStr","fieldTypeIndex","numericOperatorIndex","numericOperator","criteriaData","criteriaViewModel","changeSelectedField","numericValues","parseInt","dateValues","criteriaValuesIndex","canSearch","isAllCriteriasValid","tryAddCriteria","keyToFind","c","criteriaToRemove","indexForCriteriaToRemove","splice","editableMinimizedCriteria","remove","removeCriteria","askResetConfirmation","modal","reset","toggleEditableMinimizedCriteria","includes","dropdownFilter","criteriaValuesAreUnavailable","isPanelOpen","extractValue","trim","clearCriteria","minValue","maxValue","selectedValuesString","criteriaString","any","arrayForEach","formattedLowSliderValue","pureComputed","read","numString","html","write","newValue","lowValue","abbreviatedStringToNumber","slider","owner","removeValueItem","resetDropdownFilter","modifyValueItems","getIndexForCriteria","valueItemStr","formattedHighSliderValue","highValue","selectedCriterias","isItemInValueItems","arrayFilter","selectedFieldName","selectField","fieldGroupNames","isValueValid","isOperatorValid","autocomplete","componentConfigurations","apiSearchBaseUrl","concatUrl","getComponentConfigurations","inoMsAutocomplete","extend","language","shouldRenderMoreResults","shouldSelectOnNonMatch","shouldAutoSelect","onSelect","filters","Math","floor","parseFloat","ceil","animate","slide","ui","change","maxString","minString","fromDatepicker","datepicker","minDate","maxDate","defaultDate","dateFormat","dateText","instance","selectedFromDate","toDatepicker","selectedToDate","hasValidData","window","addons","shareLink","share","shareName","generate","copySuccessToast","copyErrorToast","generateLink","mapper","mapShareLinkScreenerToPredefinedScreener","source","mapViewModelStateToShareLinkScreener","screenerLoader","load","keyData","parse","viewModelExtension","urlGenerator","container","shareModal","generatedLink","linkScreenerData","toast","select","execCommand","err","addon","plugin","getTemplate","templatePath","defaultFilename","fileCacheKey","filePath","templateRootUrl","match","extendViewModel","__shareLink","deferred","templates","when","templatePaths","shareButton","useNewTemplate","template","append","defaultOptions","location","protocol","host","pathname","addonOptions"],"mappings":"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","file":"../inoMsScreenerCore.min.js","sourcesContent":["; inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n; (function (screenercore, undefined) {\n screenercore.registeredAddons = {}; // addons will be registered in this property\n})(inovestor.ms.screenercore);\n\n; (function (inovestor) {\n 'use strict';\n \n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n\n inovestor.ms.screenercore.helper = {\n findFieldTypeByKey: function (key) {\n var normalizedKey = key.toLowerCase();\n for (var i = 0; i < inovestor.ms.screenercore.fieldTypes.length; i++) {\n var fieldType = inovestor.ms.screenercore.fieldTypes[i];\n if (fieldType && fieldType.key && fieldType.key.toLowerCase() === normalizedKey)\n return fieldType;\n }\n return null;\n }\n };\n})(inovestor);\n\n; (function ($, ko, inovestor, undefined) {\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.mappers = inovestor.ms.screenercore.mappers || {};\n\n inovestor.ms.screenercore.mappers.queryCriteriaMapper = function (viewModel) {\n var self = this;\n self.viewModel = viewModel;\n\n self.mapQueryCriteriasToViewModelCompatibleCriterias = function (queryCriterias) {\n var uiCriterias = [];\n\n for (var property in queryCriterias) {\n if (queryCriterias.hasOwnProperty(property)) {\n var uiCriteria = mapQueryCriteriaToUICriteria(property, queryCriterias[property]);\n if (uiCriteria) uiCriterias.push(uiCriteria);\n }\n }\n\n return uiCriterias;\n };\n\n self.mapViewModelCriteriasToQueryCriterias = function (viewModelCriterias) {\n var queryCriterias = {};\n viewModelCriterias.forEach(function (x) { \n var key = ko.utils.unwrapObservable(x.currentCriteria.criteriaKey);\n queryCriterias[key] = mapViewModelCriteriaToQueryCriteria(x); \n });\n return queryCriterias;\n };\n\n function mapViewModelCriteriaToQueryCriteria (criteria) {\n var query = {};\n\n if (criteria.displayType() === 'buttonListNumeric') {\n query = {\n in: criteria.currentCriteria.valueItems().map(function (x) { \n if (x.operator === 'between') {\n return { '>': x.values.min, '<': x.values.max };\n } else if (x.operator === '>') {\n return { '>': x.value };\n } else if (x.operator === '<') {\n return { '<': x.value };\n } else if (x.operator === '=') {\n return { '=': x.value }\n }\n })\n };\n } else if (criteria.displayType() === 'slider') {\n if (criteria.currentCriteria.valueItem() !== criteria.currentCriteria.sliderMin()) query['>'] = criteria.currentCriteria.valueItem();\n if (criteria.currentCriteria.valueItem2() !== criteria.currentCriteria.sliderMax()) query['<'] = criteria.currentCriteria.valueItem2();\n } else if (criteria.displayType() === 'dateRange') {\n if (criteria.currentCriteria.valueItem()) query['>'] = criteria.currentCriteria.valueItem();\n if (criteria.currentCriteria.valueItem2()) query['<'] = criteria.currentCriteria.valueItem2();\n } else if (criteria.displayType() === 'stockReplacement') {\n if (criteria.currentCriteria.valueItem()) {\n query['symbol'] = criteria.currentCriteria.valueItem();\n if (criteria.currentCriteria.valueItem2()) query['>'] = criteria.currentCriteria.valueItem2();\n if (criteria.currentCriteria.valueItem3()) query['<'] = criteria.currentCriteria.valueItem3();\n }\n } else {\n query = { in: flattenArray(criteria.currentCriteria.valueItems().map(function (x) { return x.value; })) };\n }\n\n return query;\n }\n\n function mapQueryCriteriaToUICriteria (fieldKey, criteria) {\n var fieldTypeDefinition = findFieldTypeDefinition(fieldKey);\n if (inovestor.ms.core.isNullOrUndefined(fieldTypeDefinition)) return;\n\n //notice that it is important to use below fieldTypeDefinition.key instead of fieldKey because of the case-sensitivity issue\n\n // Slider and DateRange are single range only, so we'll treat them as exception for now\n // Stock replacement is a little bit of an exception because it has a symbol and a range\n if (fieldTypeDefinition.displayType === 'slider') return mapQueryCriteriaToUICriteriaForSlider(fieldTypeDefinition.key, criteria, fieldTypeDefinition);\n if (fieldTypeDefinition.displayType === 'dateRange') return mapQueryCriteriaToUICriteriaForDateRange(fieldTypeDefinition.key, criteria, fieldTypeDefinition);\n if (fieldTypeDefinition.displayType === 'stockReplacement') return mapQueryCriteriaToUICriteriaForStockReplacement(fieldTypeDefinition.key, criteria, fieldTypeDefinition);\n\n var valuesDefinition = findCriteriaValuesDefinition(fieldTypeDefinition.comparerType);\n\n criteria = normalizeToInOperatorCriteria(criteria);\n\n var valueItems = [];\n criteria['in'].forEach(function (x) {\n var value = findMatchingValue(fieldTypeDefinition, valuesDefinition, x);\n if (value) {\n if (value.key) {\n var existingValueItemsWithSameKey = valueItems.filter(function (x) { return x.key === value.key });\n if (existingValueItemsWithSameKey.length === 0) valueItems.push(value);\n } else {\n valueItems.push(value);\n }\n }\n });\n\n return { key: fieldTypeDefinition.key, comparerType: fieldTypeDefinition.comparerType, valueItems: valueItems };\n }\n\n function mapQueryCriteriaToUICriteriaForSlider (fieldKey, criteria, fieldTypeDefinition) {\n var min = inovestor.ms.core.isNullOrUndefined(criteria['>']) ? '' : criteria['>'];\n var max = inovestor.ms.core.isNullOrUndefined(criteria['<']) ? '' : criteria['<'];\n return { key: fieldKey, comparerType: fieldTypeDefinition.comparerType, operator: 'between', operatorKey: 'between', valueItem1: min, valueItem2: max };\n }\n\n function mapQueryCriteriaToUICriteriaForDateRange (fieldKey, criteria, fieldTypeDefinition) {\n var min = inovestor.ms.core.isNullOrUndefined(criteria['>']) ? '' : criteria['>'];\n var max = inovestor.ms.core.isNullOrUndefined(criteria['<']) ? '' : criteria['<'];\n return { key: fieldKey, comparerType: fieldTypeDefinition.comparerType, operator: 'between', operatorKey: 'between', valueItem1: min, valueItem2: max };\n }\n\n function mapQueryCriteriaToUICriteriaForStockReplacement (fieldKey, criteria, fieldTypeDefinition) {\n var symbol = inovestor.ms.core.isNullOrUndefined(criteria['symbol']) ? null : criteria['symbol'];\n var min = inovestor.ms.core.isNullOrUndefined(criteria['>']) ? null : criteria['>'];\n var max = inovestor.ms.core.isNullOrUndefined(criteria['<']) ? null : criteria['<'];\n return { key: fieldKey, comparerType: fieldTypeDefinition.comparerType, operator: 'between', operatorKey: 'between', valueItem1: symbol, valueItem2: min, valueItem3: max };\n }\n\n function normalizeToInOperatorCriteria (criteria) {\n if (criteria instanceof Object && !inovestor.ms.core.isNullOrUndefined(criteria['in'])) return criteria;\n if (Array.isArray(criteria)) return { 'in': criteria };\n return { 'in': [criteria] };\n }\n\n function findFieldTypeDefinition (fieldTypeKey) {\n for (var i = 0; i < inovestor.ms.screenercore.fieldTypes.length; i++)\n if (inovestor.ms.screenercore.fieldTypes[i].key.toLowerCase() === fieldTypeKey.toLowerCase())\n return inovestor.ms.screenercore.fieldTypes[i];\n }\n\n function findCriteriaValuesDefinition (comparerType) {\n if (!inovestor.ms.core.isNullOrUndefined(inovestor.ms.screenercore.criteriaValues[comparerType]))\n return inovestor.ms.screenercore.criteriaValues[comparerType]();\n return ko.utils.unwrapObservable(self.viewModel.getCriteriasForComparerType(comparerType));\n }\n\n function findMatchingValue (fieldTypeDefinition, valuesDefinition, value) {\n if (fieldTypeDefinition.displayType === 'buttonListNumeric')\n return findRangeMatchingValue(valuesDefinition, value);\n return findEqualMatchingValue(valuesDefinition, value);\n }\n\n function findEqualMatchingValue (valuesDefinition, value) {\n for (var i = 0; i < valuesDefinition.length; i++) {\n if (Array.isArray(valuesDefinition[i].value)) {\n var matches = valuesDefinition[i].value.filter(function (x) { return x === value });\n if (matches.length > 0) return valuesDefinition[i];\n } else if (valuesDefinition[i].value == value) {\n return valuesDefinition[i];\n }\n }\n }\n\n function findRangeMatchingValue (valuesDefinition, range) {\n if (inovestor.ms.core.isNullOrUndefined(range)) return null\n\n var rangeOperator;\n if (!inovestor.ms.core.isNullOrUndefined(range['>']) && !inovestor.ms.core.isNullOrUndefined(range['<'])) {\n rangeOperator = 'between';\n } else if (!inovestor.ms.core.isNullOrUndefined(range['>'])) {\n rangeOperator = '>';\n } else if (!inovestor.ms.core.isNullOrUndefined(range['<'])) {\n rangeOperator = '<';\n } else if (!inovestor.ms.core.isNullOrUndefined(range['='])) {\n rangeOperator = '=';\n }\n\n for (var i = 0; i < valuesDefinition.length; i++) {\n if (valuesDefinition[i].operator === rangeOperator) {\n if (\n (rangeOperator === 'between' && valuesDefinition[i].values.min == range['>'] && valuesDefinition[i].values.max == range['<']) ||\n (rangeOperator === '>' && valuesDefinition[i].value == range['>']) ||\n (rangeOperator === '<' && valuesDefinition[i].value == range['<']) ||\n (rangeOperator === '=' && valuesDefinition[i].value == range['='])\n ) {\n return valuesDefinition[i];\n }\n }\n }\n }\n\n function flattenArray (array) {\n return array.reduce(function (agg, x) {\n if (Array.isArray(x)) {\n flattenArray(x).forEach(function (y) { agg.push(y) });\n } else {\n agg.push(x)\n }\n return agg\n }, []);\n }\n }\n\n})(inovestor.ms.libRef.jQuery, inovestor.ms.libRef.ko, inovestor, undefined);\n; (function (inovestor) {\n 'use strict';\n \n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.adapters = inovestor.ms.screenercore.adapters || {};\n\n inovestor.ms.screenercore.adapters.dividedBy100Adapter = function () {\n var self = this;\n \n self.fromServer = function (value) {\n if (isAdaptable(value)) return value / 100;\n return value;\n };\n\n self.toServer = function (value) {\n if (isAdaptable(value)) return value * 100;\n return value;\n };\n\n function isAdaptable (value) {\n return value != null && value !== '' && !isNaN(value);\n }\n }\n})(inovestor);\n\n; (function (inovestor) {\n 'use strict';\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.adapters = inovestor.ms.screenercore.adapters || {};\n\n inovestor.ms.screenercore.adapters.multipliedBy100Adapter = function () {\n var self = this;\n \n self.fromServer = function (value) {\n if (isAdaptable(value)) return value * 100;\n return value;\n };\n\n self.toServer = function (value) {\n if (isAdaptable(value)) return value / 100;\n return value;\n };\n\n function isAdaptable (value) {\n return value != null && value !== '' && !isNaN(value);\n }\n }\n})(inovestor);\n\nko.bindingHandlers.accessibleClick = {\n update: function (element) {\n element.addEventListener('keydown', function (event) {\n if (event.keyCode === 13 || event.keyCode === 32) {\n element.click()\n }\n })\n }\n}\n; (function ($, ko, inovestor, JSON, undefined) {\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n\n /**\n * Provides core functionality for the Inovestor Screeners.\n * \n * @constructor\n * @param {string} element The selector for the DOM element the screener plugin was called on.\n * @param {Object} options The options for the screener plugin.\n */\n inovestor.ms.screenercore.pluginCore = function (element, options) {\n\n var self = this;\n self.$element = $(element); // Cached DOM node for performance\n self.elem = element; // Handle to the selector\n self.options = options; // Options object for plugin\n\n self.setViewModel = function (vm) {\n self._viewModel = vm;\n self._viewModel.screenerType(inovestor.ms.screenercore.categoryType);\n self._viewModel.serverSidePagination(inovestor.ms.screenercore.serverSidePagination);\n };\n\n self.setTableService = function (ts) {\n self._tableService = ts;\n }\n\n // Setup what plugin needs to do on language change\n inovestor.ms.core.instances.register(self, function () {\n self.update();\n });\n\n /**\n * Binds the events for the plugin. Should be called from the plugin that implements\n * the core.\n */\n self.bindEvents = function () {\n self.$element.on('ready' + '.' + self.options.name, function () {\n var onReady = self.options.onReady;\n if (typeof onReady === 'function')\n onReady.call(self.$element);\n });\n\n var focusBeforeOpeningModal = null\n $(document).on('show.bs.modal', '.modal', function() {\n focusBeforeOpeningModal = document.activeElement;\n });\n $(document).on('shown.bs.modal', '.modal', function() {\n $(this).find('[autofocus]').focus();\n });\n $(document).on('hidden.bs.modal', '.modal', function() {\n if (focusBeforeOpeningModal) {\n focusBeforeOpeningModal.focus();\n focusBeforeOpeningModal = null;\n }\n });\n\n self.$element.find('#ScreenerAddFilterModal').on('hidden.bs.modal', function () {\n self._viewModel.criteriaFilter('');\n });\n\n self.$element.find('#ScreenerAddFilterModal').on('show.bs.modal', function () {\n // $('.ScreenerAddFilterModal__CategoryTabs a:first').tab('show') // Select first tab\n self._viewModel.criteriaSelectedTab(self._viewModel.criteriaCategories()[0].name);\n });\n\n var visibleColumnDropdown = false\n\n self.$element.on('click', '.ScreenerColumnDropdown__anchor', function () {\n visibleColumnDropdown = !visibleColumnDropdown\n })\n\n self.$element.on('click', '.ScreenerCriteriaDropdown, .ScreenerColumnDropdown__menu', function (e) {\n e.stopPropagation()\n });\n\n self.$element.on('click', '.ScreenerColumnDropdown__menu a, .ScreenerColumnDropdown__menu label', function (e) {\n $(this).find('input').click()\n })\n\n self.$element.on('click', '.ScreenerColumnDropdown__menu input', function (e) {\n e.stopPropagation()\n })\n\n var focusOutColumnDropdownHandler = null\n self.$element.on('focusout', '.ScreenerColumnDropdown__menu', function (e) {\n focusOutColumnDropdownHandler = setTimeout(function () {\n if (visibleColumnDropdown) {\n $('.ScreenerColumnDropdown__anchor').dropdown('toggle');\n }\n }, 100)\n })\n self.$element.on('focusin', '.ScreenerColumnDropdown__menu', function (e) {\n if (focusOutColumnDropdownHandler) clearTimeout(focusOutColumnDropdownHandler)\n })\n\n self.$element.find('.predifined-screens-item').on('click', function (evt) {\n if (!self._viewModel.results.isBusy()) {\n // Remove bold from all other screen links\n $('.predifined-screens-item').removeClass('font-bold');\n $(evt.target).addClass('font-bold');\n\n // Get the sort column from the predefined screen\n var id = $(evt.target).attr('id');\n var sortColumn = inovestor.ms.screenercore.predefinedScreens.filter(function (f) { return f.resourceKey.toLowerCase() === id.toLowerCase() })[0].sortColumn;\n var sortType = inovestor.ms.screenercore.predefinedScreens.filter(function (f) { return f.resourceKey.toLowerCase() === id.toLowerCase() })[0].sortType;\n\n // We want to perform a search when a default filter is clicked\n self._viewModel.sortColumn(sortColumn);\n self._viewModel.sortType(sortType);\n self.search();\n }\n });\n\n self.$element.on('click', '.ScreenerCriteriaDropdown__close', function () {\n $(this).parents('.ScreenerCriteriaDropdownMenu').find('.ScreenerCriteria__dropdown-anchor').dropdown('toggle')\n })\n };\n\n self.apiErrorHandler = function (apiError, errorFlag) {\n var onError = self.options.onError;\n if (typeof onError === 'function') {\n var result = onError.call(inovestor.ms.core.generateError(inovestor.ms.core.errors.apiError, apiError, self));\n // If callback returns false, do not execute default behavior\n if (!inovestor.ms.core.isNullOrUndefined(result) && result === false)\n return;\n }\n\n if (typeof errorFlag === 'function') {\n errorFlag(true);\n } else {\n self._viewModel.hasError(true);\n }\n };\n\n self.invalidIdentifierHandler = function () {\n var onError = self.options.onError;\n if (typeof onError === 'function') {\n var result = onError.call(inovestor.ms.core.generateError(inovestor.ms.core.errors.invalidIdentifier, null, self));\n // If callback returns false, do not execute default behavior\n if (!inovestor.ms.core.isNullOrUndefined(result) && result === false)\n return;\n }\n\n self._viewModel.isInvalidIdentifier(true);\n };\n\n self.render = function () {\n self._viewModel.updateResources();\n };\n\n self.update = function () {\n self._viewModel.updateResources();\n self._setUpPagination(self._viewModel.numResults());\n\n // Force Knockout to update the rows\n var rows = self._viewModel.rows();\n self._viewModel.rows([]);\n self._viewModel.rows(rows);\n\n // For Knockout to update the criterias\n var criterias = self._viewModel.criterias();\n self._viewModel.criterias([]);\n self._viewModel.criterias(criterias);\n\n // Add the sliders back\n for (var i = 0; i < criterias.length; i++) {\n var currentCriteria = criterias[i];\n\n // Set up sliders for numeric criterias\n if (currentCriteria.comparerType() === 'numeric') {\n var options = {\n min: currentCriteria.currentCriteria.sliderMin(),\n max: currentCriteria.currentCriteria.sliderMax()\n };\n\n // Make sure the valueItems are not default\n if (currentCriteria.currentCriteria.valueItem() === currentCriteria.currentCriteria.sliderMin())\n currentCriteria.currentCriteria.valueItem('');\n\n if (currentCriteria.currentCriteria.valueItem2() === currentCriteria.currentCriteria.sliderMax())\n currentCriteria.currentCriteria.valueItem2('');\n\n currentCriteria.setSliderRange(currentCriteria, options);\n }\n\n if (currentCriteria.displayType() === 'dateRange') {\n var options = {\n min: currentCriteria.currentCriteria.sliderMin(),\n max: currentCriteria.currentCriteria.sliderMax()\n };\n\n // Make sure the valueItems are not default\n if (currentCriteria.currentCriteria.valueItem() === currentCriteria.currentCriteria.sliderMin())\n currentCriteria.currentCriteria.valueItem('');\n\n if (currentCriteria.currentCriteria.valueItem2() === currentCriteria.currentCriteria.sliderMax())\n currentCriteria.currentCriteria.valueItem2('');\n\n currentCriteria.initializeDateRange(currentCriteria);\n }\n\n // Change the language for checkbox lists/radio buttons\n if (currentCriteria.currentCriteria.valueItems && currentCriteria.currentCriteria.valueItems().length > 0) {\n var items = currentCriteria.currentCriteria.valueItems();\n\n for (var j = 0; j < items.length; j++) {\n var currentItem = items[j];\n\n for (var k = 0; k < currentCriteria.currentCriteria.criteriaValues.length; k++) {\n var currentValue = currentCriteria.currentCriteria.criteriaValues[k];\n\n if (currentItem.value === currentValue.value) {\n currentItem.name = inovestor.ms.core.currentLanguage === 'en' ? currentValue.nameEn : currentValue.nameFr;\n break;\n }\n }\n }\n\n currentCriteria.currentCriteria.valueItems([]);\n currentCriteria.currentCriteria.valueItems(items);\n }\n };\n };\n\n self.bindModel = function () {\n ko.applyBindings(self._viewModel, self.elem);\n };\n\n self.search = function () {\n // Make sure required variables are set\n var query = self._viewModel.getQuerystring();\n\n if (inovestor.ms.core.isNullOrUndefined(query) || inovestor.ms.core.isEmptyString(query)) {\n self._viewModel.results.isEmptyTable(true);\n return;\n }\n\n // Setup API url with term\n var url = inovestor.ms.screenercore.screener.config.apiRelativeUrl;\n\n //full server side, paging and sorting vs server-side initial sorting only\n if (inovestor.ms.screenercore.serverSide)\n url = self._makeServerSideQuery(url, query);\n else if (inovestor.ms.screenercore.performInitialSortingServerSide)\n url = self._makeInitialSortingServerSideQuery(url, query);\n\n \n // Reset relevant Data before calling API\n //self.$element.find('.results .summary').html('');\n self._viewModel.results.searchResults(null);\n self._viewModel.results.hasError(false);\n self._viewModel.results.isBusy(true);\n self._viewModel.shouldSearch(false);\n\n // Call API and bind model\n var options = { type: 'POST', contentType: 'application/json', data: JSON.stringify(query), error: function (error) { self.apiErrorHandler(error, self._viewModel.results.hasError); } };\n return inovestor.ms.core.ajaxApi(url, options, self.options.apiBaseUrl).then(self._handleApiSearchResult).always(function () {\n self._viewModel.results.isBusy(false);\n });\n };\n\n self._handleApiSearchResult = function (data) {\n if (!inovestor.ms.core.isNullOrUndefined(data)) {\n if (data.requestStatus === 'invalidIdentifier')\n self.invalidIdentifierHandler();\n\n if (!inovestor.ms.core.isNullOrUndefined(data.values) &&\n !inovestor.ms.core.isNullOrUndefined(data.columnNames) &&\n data.values.length !== 0) {\n self._setUpPagination(data.count || data.values.length);\n self._viewModel.numResults(data.count || data.values.length);\n adaptResults(data);\n self._viewModel.results.searchResults(data);\n self._formatResults(data);\n self._tableService.createDataTable(data, self.options.redirectUrl);\n self._viewModel.results.isEmptyTable(false);\n } else {\n self._viewModel.results.isEmptyTable(true);\n }\n }\n };\n\n /**\n * Sets up the query string for screeners that are using server side pagination\n * and sorting\n * \n * @param {string} url - The current request url\n * @param {string} query - The criteria query string for the POST body\n * @return {string} - The query string\n */\n self._makeServerSideQuery = function (url, query) {\n var count = self._viewModel.resultsPerPage();\n var sortedBy = self._viewModel.sortColumn();\n var sortOrder = self._viewModel.sortType() === 'asc' ? 'ascending' : 'descending';\n var offset = self._viewModel.offset();\n var columns = self._viewModel.columnNames();\n\n var colIndex = -1;\n if (columns.length === 0) {\n // this is the first loading and the default sorting is usually set by a known source\n colIndex = 0;\n } else {\n for (var i = 0; i < columns.length; i++) {\n if (columns[i].serverName.toLowerCase() === sortedBy.toLowerCase()) {\n colIndex = i;\n break;\n }\n }\n }\n\n var queryString = '';\n // Okay if index is 0 or 1 for Code and Name\n if (query.toLowerCase().indexOf(sortedBy.toLowerCase()) >= 0 || colIndex == 0 || colIndex == 1) {\n queryString = '?count={0}&sortedBy={1}&sortOrder={2}&offset={3}';\n queryString = inovestor.ms.core.stringFormat\n (queryString, [count, sortedBy, sortOrder, offset]);\n } else {\n // Omit the sorting if the sort column isn't part of the query\n queryString = '?count={0}&offset={1}';\n queryString = inovestor.ms.core.stringFormat\n (queryString, [count, offset]);\n }\n return url + queryString;\n };\n\n self._makeInitialSortingServerSideQuery = function (url, query) {\n var sortedBy = self._viewModel.sortColumn();\n var sortOrder = self._viewModel.sortType() === 'asc' ? 'ascending' : 'descending';\n\n var queryString = '';\n\n if (sortedBy) {\n queryString = '?sortedBy={0}&sortOrder={1}';\n queryString = inovestor.ms.core.stringFormat\n (queryString, [sortedBy, sortOrder]);\n }\n\n return url + queryString;\n };\n\n /**\n * Sets up the pagination plugin at the bottom of the page. Using\n * the twbs-pagination plugin found at https://esimakin.github.io/twbs-pagination\n * \n * @param {number} numResults - The number of results returned by the server\n */\n self._setUpPagination = function (numResults) {\n if (numResults > 0) {\n var resultsPerPage = self._viewModel.resultsPerPage();\n var $pagination = $('.ino-pagination');\n var numPages = numResults / resultsPerPage;\n if (numResults % resultsPerPage > 0)\n numPages++;\n\n var startPage = inovestor.ms.screenercore.serverSide ?\n self._viewModel.offset() / resultsPerPage + 1 : 1;\n\n // Destroy old instance of the plugin then recreate\n $pagination.twbsPagination('destroy');\n $pagination.twbsPagination({\n totalPages: numPages,\n visiblePages: 5,\n initiateStartPageClick: false,\n startPage: startPage,\n first: self._viewModel.resources().dataTableLanguage.paginate.first,\n prev: self._viewModel.resources().dataTableLanguage.paginate.previous,\n next: self._viewModel.resources().dataTableLanguage.paginate.next,\n last: self._viewModel.resources().dataTableLanguage.paginate.last,\n onPageClick: function (event, page) {\n var oldOffset = self._viewModel.offset();\n self._viewModel.setOffset(page);\n\n if (oldOffset !== self._viewModel.offset()\n && inovestor.ms.screenercore.serverSidePagination) {\n self.search();\n }\n }\n });\n }\n };\n\n function adaptResults (data) {\n if (inovestor.ms.core.isNullOrUndefined(data) || inovestor.ms.core.isNullOrUndefined(data.columnNames) || inovestor.ms.core.isNullOrUndefined(data.values))\n return;\n\n var columnFieldTypeDefinitions = [];\n for (var i = 0; i < data.columnNames.length; i++)\n columnFieldTypeDefinitions.push(inovestor.ms.screenercore.helper.findFieldTypeByKey(data.columnNames[i]));\n\n for (var rowIndex in data.values) {\n var row = data.values[rowIndex];\n for (var columnIndex in row)\n if (columnFieldTypeDefinitions[columnIndex] && columnFieldTypeDefinitions[columnIndex].adapter)\n data.values[rowIndex][columnIndex] = columnFieldTypeDefinitions[columnIndex].adapter.fromServer(data.values[rowIndex][columnIndex]);\n }\n }\n\n // TODO: refactor this code holy shit what is this\n self._formatResults = function (data) {\n if (inovestor.ms.core.isNullOrUndefined(data) || inovestor.ms.core.isNullOrUndefined(data.columnNames) || inovestor.ms.core.isNullOrUndefined(data.values))\n return;\n\n var fieldTypes = inovestor.ms.screenercore.fieldTypes;\n //category\n var fieldTypesColumns = [];\n data.columnClasses = ['text-left', 'text-left', 'text-left'];\n\n for (var i = 0; i < data.columnNames.length; i++) {\n var columnKey = data.columnNames[i];\n\n if (inovestor.ms.core.isEmptyString(columnKey))\n continue;\n\n var fieldType = fieldTypes.find(function (x) { return x != null && x.key != null && x.key.toLowerCase() === columnKey.toLowerCase() })\n if (fieldType == null)\n continue;\n\n fieldTypesColumns[i] = fieldType;\n data.columnClasses[i] = fieldType.comparerType === 'numeric' || fieldType.comparerType === 'date' || fieldType.displayType === 'buttonListNumeric' || fieldType.displayType === 'stockReplacement' ? 'text-right' : 'text-left text-capitalize';\n var name = '';\n if (fieldType.resourceKey)\n name += self._viewModel.resources().formLabels.columnNames[fieldType.resourceKey];\n\n data.columnNames[i] = {\n serverName: data.columnNames[i],\n name: name,\n resourceKey: fieldType.resourceKey,\n css: '',\n alignmentCss: data.columnClasses[i],\n sortingDisabled: fieldType.sortingDisabled === true,\n hidden: fieldType.includeForTable === false,\n columnFilteringDisabled: fieldType.columnFilteringDisabled === true\n };\n }\n\n for (var d in data.values) {\n var valRow = data.values[d];\n \n for (i = 2; i < valRow.length; i++) {\n\n var tempDiv = $('
');\n var val = valRow[i];\n if (inovestor.ms.core.isNullOrUndefined(val)) {\n data.values[d][i] = '-';\n continue;\n }\n\n var fieldDef = fieldTypesColumns[i];\n\n if (inovestor.ms.core.isNullOrUndefined(fieldDef))\n continue;\n\n if (fieldDef.comparerType === 'numeric' || fieldDef.comparerType === 'stockReplacement') {\n if (fieldDef.showAsText) {\n var value = data.values[d][i];\n if (inovestor.ms.core.isNullOrUndefined(value)) value = '';\n data.values[d][i] = { value: value.toString(), type: 'text' };\n } else {\n var decimalPlaces = fieldDef.groupKey === 'ranking' || fieldDef.groupKey === 'quartile' ? 0 : 2;\n\n ko.bindingHandlers.number.update(tempDiv[0], function () { return val; }, function () { return { showZero: true, decimalPlaces: decimalPlaces, showAsLargeNumber: true }; });\n if (fieldDef.enableDisplayNumericLargeFormat == false) {\n data.values[d][i] = { value: data.values[d][i], decimalPlaces: decimalPlaces, type: 'numeric', enableDisplayNumericLargeFormat: false };\n } else {\n data.values[d][i] = { value: data.values[d][i], decimalPlaces: decimalPlaces, type: 'numeric', enableDisplayNumericLargeFormat: true };\n }\n }\n } \n else if (fieldDef.displayType === 'buttonListNumeric') {\n var decimalPlaces = fieldDef.groupKey === 'ranking' || fieldDef.groupKey === 'quartile' ? 0 : 2;\n ko.bindingHandlers.number.update(tempDiv[0], function () { return val; }, function () { return { showZero: true, decimalPlaces: decimalPlaces, showAsLargeNumber: true }; });\n data.values[d][i] = { value: data.values[d][i], decimalPlaces: decimalPlaces, type: 'numeric' };\n }\n else if (fieldDef.comparerType === 'date') {\n data.values[d][i] = { value: new Date(data.values[d][i]).toISOString().substring(0, 10), type: 'date' }; //displaying the date only, without time\n }\n else {\n var allCriterias = self._viewModel.getCriteriasForComparerType(fieldDef.comparerType);\n if (inovestor.ms.core.isNullOrUndefined(allCriterias))\n continue;\n\n allCriterias = allCriterias();\n\n if (!Array.isArray(val)) {\n var results = [];\n if (typeof val === 'string')\n results = allCriterias.filter(function (x) { return x.value.toLowerCase() === val.toLowerCase(); });\n else\n results = allCriterias.filter(function (x) { return x.value === val; });\n\n if (!inovestor.ms.core.isNullOrUndefined(results) && results.length > 0) {\n if (results[0].nameEn) {\n data.values[d][i] = {\n type: 'localizedText',\n valueEn: results[0].nameEn,\n valueFr: results[0].nameFr\n };\n }\n else if (results[0].key) {\n data.values[d][i] = {\n type: 'resourceText',\n key: results[0].key,\n serverValue: data.values[d][i]\n };\n\n }\n }\n } else {\n if (val.length !== 0) {\n var usedKeys = [];\n\n data.values[d][i] = {\n value: '',\n valueEn: '',\n valueFr: '',\n key: ''\n }\n for (var e = 0; e < val.length; e++) {\n var normalizedValue = typeof val[e] === 'string' ? val[e].toLowerCase() : val[e];\n\n var results = allCriterias.filter(function (x) {\n if (Array.isArray(x.value)) {\n var filteredValues = x.value.filter(function (y) {\n var normalizedCriteriaValue = typeof y === 'string' ? y.toLowerCase() : y;\n return normalizedCriteriaValue === normalizedValue;\n });\n return filteredValues.length > 0;\n } else {\n var normalizedCriteriaValue = typeof x.value === 'string' ? x.value.toLowerCase() : x.value;\n return normalizedCriteriaValue === normalizedValue;\n }\n });\n\n if (!inovestor.ms.core.isNullOrUndefined(results) && results.length > 0) {\n if (usedKeys.filter(function (x) { return x === results[0].key }).length === 0) {\n usedKeys.push(results[0].key)\n\n if (results[0].nameEn) {\n data.values[d][i].type = 'localizedText';\n \n if (data.values[d][i].valueEn === '') {\n data.values[d][i].valueEn = results[0].nameEn;\n data.values[d][i].valueFr = results[0].nameFr;\n } else {\n data.values[d][i].valueEn += ', ' + results[0].nameEn;\n data.values[d][i].valueFr += ', ' + results[0].nameFr;\n }\n }\n else if (results[0].key) {\n data.values[d][i].type = 'resourceText';\n \n data.values[d][i] = {\n key: results[0].key,\n };\n }\n }\n }\n }\n } else {\n data.values[d][i] = {\n value: '-',\n serverValue: '-'\n };\n }\n }\n }\n }\n }\n };\n\n self.exportToCsv = function () {\n var csvRows = [];\n\n csvRows.push(self._viewModel.columnNames().map(function (column) {\n return '\"' + self._viewModel.resources().formLabels.columnNames[column.resourceKey] + '\"';\n }));\n\n self._viewModel.rows().forEach(function (row) {\n var columns = [\n (self._viewModel.screenerType() === 'stock' || self._viewModel.screenerType() === 'etf') ? row.ticker : row.code,\n '\"' + row.name + '\"'\n ];\n\n row.data.forEach(function (data) {\n if (data.type === 'localizedText') {\n columns.push('\"' + (inovestor.ms.core.currentLanguage === 'fr' ? data.valueFr : data.valueEn) + '\"');\n } else {\n columns.push(data.value);\n }\n });\n\n csvRows.push(columns);\n });\n\n var csvString = csvRows.map(function (row) { return row.join(',') }).join('\\r\\n');\n\n var blob = new Blob([csvString], { type: \"text/csv;charset=utf-8\" });\n saveAs(blob, inovestor.ms.core.currentLanguage === 'fr' ? 'Filtreur.csv' : 'Screener.csv');\n };\n \n self.screenerLoaders = [loadSystemDefinedScreener];\n\n self.loadDefinedScreenerOrDefault = function (screenerKey) {\n var dfd = $.Deferred();\n\n if (inovestor.ms.core.isNullOrUndefined(screenerKey)) {\n if (inovestor.ms.screenercore.initialCall) {\n self._viewModel.addPredifinedCriteria(inovestor.ms.screenercore.initialCall);\n dfd.resolve();\n } else {\n dfd.reject('inovestor.ms.screenercore.initialCall is null or undefined');\n }\n } else {\n loadScreener(screenerKey).then(function (data) {\n self._viewModel.addPredifinedCriteria(data);\n dfd.resolve();\n }).fail(function (error) { dfd.reject(error) });\n }\n\n return dfd.promise();\n };\n\n function loadScreener (key) {\n var dfd = $.Deferred();\n loadScreenerRecursive(key, 0, dfd);\n return dfd.promise();\n }\n\n function loadScreenerRecursive (screenerKey, loaderIndex, dfd) {\n if (loaderIndex > self.screenerLoaders.length - 1) {\n dfd.reject('Invalid screener key: ' + screenerKey);\n return;\n }\n\n self.screenerLoaders[loaderIndex](screenerKey).then(function (data) {\n if (data !== false) {\n dfd.resolve(data);\n } else {\n loadScreenerRecursive(screenerKey, loaderIndex + 1, dfd);\n }\n }).fail(function (error) { dfd.reject(error); });\n }\n\n function loadSystemDefinedScreener (key) {\n var dfd = $.Deferred();\n\n var keyParts = key.toString().split(':');\n\n if (keyParts.length === 2 && keyParts[0] === 'sys') {\n var screener = findSystemDefinedScreener(keyParts[1]);\n if (screener) {\n dfd.resolve(screener);\n } else {\n dfd.reject('System defined screener not found : ' + key);\n }\n }\n\n dfd.resolve(false);\n\n return dfd.promise();\n };\n\n function findSystemDefinedScreener (key) {\n var screeners = inovestor.ms.screenercore.predefinedScreens || [];\n for (var i = 0; i < screeners.length; i++)\n if (screeners[i].resourceKey === key)\n return screeners[i];\n }\n }\n})(inovestor.ms.libRef.jQuery, inovestor.ms.libRef.ko, inovestor, JSON);\n; (function ($, inovestor, JSON, undefined) {\n\n inovestor.ms.screenercore.viewModels = {};\n\n inovestor.ms.screenercore.viewModels.screenerCoreViewModel = function (shareBaseUrl, fieldTypes, numericOperators, redirectUrl, isExportEnabled, corePlugin) {\n var self = this;\n self.corePlugin = corePlugin; // A handle to the screener core\n self.results = new inovestor.ms.screenercore.viewModels.screenerResultsViewModel(self); // Handle to the results view model at the bottom of this doc\n self.isWildCardOnlyQuery = ko.observable(false); // Checks if a query is only wildcards\n self.areFiltersBusy = ko.observable(false); // Whether or not the filters section is currently busy (loading, etc...)\n self.predefinedScreens = ko.observableArray(inovestor.ms.screenercore.predefinedScreens); // The predefined screens from the fieldTypes file\n self.criterias = ko.observableArray(); // Collection of all the criterias\n self.fieldTypes = ko.observableArray(fieldTypes); // Collection of field definitons \n self.numericOperators = ko.observableArray(numericOperators); // Collection of the numeric operators for the query\n self.sliderAllMinMaxValues = ko.observableArray(); // Min and max values for all the sliders\n self.sliderAllMinMaxValuesAreUnavailable = ko.observable(false); // If there is an error with the Min and max values data retrieved\n self.resources = ko.observable(); // Handle to the resources file for the page\n self.isBusy = ko.observable(false); // If there is an action keeping the component busy\n self.hasError = ko.observable(false); // If there is an error with the data retrieved \n self.numResults = ko.observable(); // Number of results returned by the query\n self.resultsPerPage = ko.observable(10); // Number of results per page, defaults to 10\n self.offset = ko.observable(0); // The pagination offset\n self.numPages = ko.observable(); // Number of pages for the pagination\n self.sortType = ko.observable('asc'); // Whether the sort is 'asc' or 'desc'\n self.sortColumn = ko.observable(); // The name of the column we're sorting by\n self.columnNames = ko.observableArray(); // Collection of the columns for making the table\n self.rows = ko.observableArray(); // Collection of the rows for making the table\n self.shouldSearch = ko.observable(false); // If we should search after setting column styling\n self.criteriaFilter = ko.observable(''); // Text to filter the criteria list \n self.criteriaSelectedTab = ko.observable();\n self.noCriterias = ko.observable(false);\n self.isMinimizedCriteria = ko.observable(false); // Whether we are showing the minimized criteria view\n self.screenerType = ko.observable(''); // The type of security that is being screened on\n self.serverSidePagination = ko.observable(false);\n self.isExportEnabled = ko.observable(isExportEnabled); //If the export of the screener results functionality is enabled.\n self.currentScreener = {\n key: ko.observable(),\n type: ko.observable(),\n name: ko.observable(),\n description: ko.observable()\n };\n\n self.addPredifinedCriteria = function (predefinedFilter, event) {\n\n // Don't do anything if there's an AJAX call going on\n if (self.results.isBusy())\n return;\n\n self.currentScreener.key(predefinedFilter.key);\n self.currentScreener.type(predefinedFilter.type);\n self.currentScreener.description(predefinedFilter.description);\n if (predefinedFilter.name) {\n self.currentScreener.name(predefinedFilter.name);\n } else if (predefinedFilter.resourceKey) {\n self.currentScreener.name(self.resources().formLabels.predefinedCriteriaNames[predefinedFilter.resourceKey]);\n } else {\n self.currentScreener.name('');\n }\n\n // Set the sort type and sort column to the filter's values\n self.sortType(predefinedFilter.sortType);\n self.sortColumn(predefinedFilter.sortColumn);\n\n // Reset the offset\n self.offset(0);\n\n // Clear criterias\n self.criterias([]);\n\n // TODO clear all the isSelected from the other places\n for (var j = 0; j < self.criteriaCategories().length; j++) {\n var category = self.criteriaCategories()[j];\n category.items.forEach(function (item) {\n item.isSelected(false);\n });\n }\n\n // Add criterias\n var criteriaMapper = new inovestor.ms.screenercore.mappers.queryCriteriaMapper(self);\n var requestedCriterias = criteriaMapper.mapQueryCriteriasToViewModelCompatibleCriterias(predefinedFilter.criterias);\n\n for (var i = 0; i < requestedCriterias.length; i++) {\n var requestedCriteria = requestedCriterias[i];\n var criteriaToAdd = new inovestor.ms.screenercore.viewModels.screenerCriteriaViewModel(self);\n\n var field = fieldTypes.filter(function (field) { return field.key.toLowerCase() === requestedCriteria.key.toLowerCase(); })[0];\n field = { field: field, isSelected: ko.observable(true) };\n var fieldName = self.resources().formLabels.fieldNames[field.field.resourceKey];\n\n criteriaToAdd.currentCriteria.displayName = fieldName;\n criteriaToAdd.currentCriteria.resourceKey = field.field.resourceKey;\n criteriaToAdd.currentCriteria.criteriaKey = field.field.key;\n criteriaToAdd.currentCriteria.fieldDefinitionItem(field.field);\n criteriaToAdd.currentCriteria.operator(requestedCriteria.operator);\n criteriaToAdd.currentCriteria.operatorKey(requestedCriteria.operatorKey);\n criteriaToAdd.currentCriteria.valueItem(requestedCriteria.valueItem1);\n criteriaToAdd.currentCriteria.valueItem2(requestedCriteria.valueItem2);\n criteriaToAdd.currentCriteria.valueItem3(requestedCriteria.valueItem3);\n if (!inovestor.ms.core.isNullOrUndefined(requestedCriteria.valueItems)) {\n for (var val = 0; val < requestedCriteria.valueItems.length; val++) {\n criteriaToAdd.currentCriteria.valueItems.push(requestedCriteria.valueItems[val]);\n }\n }\n\n // Request slider range \n if (field.field.comparerType === 'numeric' || field.field.displayType === 'buttonListNumeric') {\n var sliderOptions = self.sliderAllMinMaxValues().filter(function (f) { return f.key.toLowerCase() === criteriaToAdd.currentCriteria.criteriaKey.toLowerCase() })[0];\n criteriaToAdd.setSliderRange(criteriaToAdd, sliderOptions);\n }\n if (field.field.displayType === 'dateRange') {\n var minMaxOptions = self.sliderAllMinMaxValues().filter(function (f) { return f.key.toLowerCase() === criteriaToAdd.currentCriteria.criteriaKey.toLowerCase() })[0];\n criteriaToAdd.initializeDateRange(criteriaToAdd, minMaxOptions);\n }\n if (field.field.displayType === 'stockReplacement') {\n criteriaToAdd.setAutocomplete();\n }\n\n self.criterias().push(criteriaToAdd);\n\n // Update the selected criteria\n for (var j = 0; j < self.criteriaCategories().length; j++) {\n var category = self.criteriaCategories()[j];\n if (category.name === field.field.groupKey) {\n category.items.forEach(function (item) {\n if (item.field.id === field.field.id)\n item.isSelected(true);\n });\n break;\n }\n }\n\n self.criterias.valueHasMutated();\n }\n };\n\n self.updateResources = function () {\n // Update main resources\n var currentResource = inovestor.ms.screenercore.resources[inovestor.ms.core.currentLanguage];\n if (inovestor.ms.core.isNullOrUndefined(currentResource))\n currentResource = null;\n self.resources(currentResource);\n };\n\n self.updateResources();\n\n self.criteriaCategories = ko.computed(function () {\n var self = this;\n var categories = [];\n var filter = self.criteriaFilter();\n var fieldTypes = self.fieldTypes();\n var criteriaList = self.criterias();\n var isNoCriteria = true;\n\n for (var i = 0; i < fieldTypes.length; i++) {\n var fieldName = fieldTypes[i].groupKey;\n var isGroupAlreadyAdded = false;\n\n for (var j = 0; j < categories.length; j++) {\n if (categories[j].name === fieldName) {\n isGroupAlreadyAdded = true;\n break;\n }\n }\n\n if (!isGroupAlreadyAdded) {\n var categoryFields = fieldTypes.filter(function (field) { return field.groupKey === fieldName });\n var criteria = [];\n\n for (var k = 0; k < categoryFields.length; k++) {\n var item = categoryFields[k];\n var name = self.resources().formLabels.fieldNames[item.resourceKey];\n if (name.toLowerCase().indexOf(filter.toLowerCase()) > -1) {\n\n // Check if criteria is in list\n var isSelected = false;\n for (var index = 0; index < criteriaList.length; index++) {\n if (criteriaList[index].currentCriteria.criteriaKey === item.key) {\n isSelected = true;\n break;\n }\n }\n\n criteria.push({ field: item, isSelected: ko.observable(isSelected) });\n }\n }\n\n if (criteria.length > 0) {\n isNoCriteria = false;\n }\n categories.push({ name: fieldName, items: criteria });\n }\n }\n\n self.noCriterias(isNoCriteria);\n\n return categories;\n\n }, this);\n\n /**\n * Sets the column names as a collection of observable for the current\n * screener\n * \n * @param {array} colNames - The column names returned from the server\n * @param {array} indicesToSkip - The columns we do not want to display\n */\n self.setColumnNames = function (colNames, indicesToSkip) {\n var oldColumnNames = self.columnNames();\n self.columnNames([]);\n\n for (var i = 0; i < colNames.length; i++) {\n if ($.inArray(i, indicesToSkip) === -1) {\n self.columnNames.push(colNames[i]);\n\n var isVisible = null;\n for (var k = 0; k < oldColumnNames.length; k++) {\n if (colNames[i].serverName && oldColumnNames[k].serverName &&\n colNames[i].serverName.toLowerCase() === oldColumnNames[k].serverName.toLowerCase()) {\n\n isVisible = oldColumnNames[k].isVisible;\n break;\n }\n }\n self.columnNames()[self.columnNames().length - 1].isVisible = isVisible ? isVisible : ko.observable(true);\n }\n }\n };\n\n self.resultsPerPage.subscribe(function () {\n if (!self.initialScreenerIsLoading()) {\n self.offset(0);\n if (inovestor.ms.screenercore.serverSidePagination) {\n self.corePlugin.search();\n } else {\n self.corePlugin._setUpPagination(self.numResults());\n }\n }\n });\n\n /**\n * Returns a subsection of the rows array based on the offset. This is to ONLY\n * be used for screeners that are NOT using server-side pagination.\n */\n self.paginationRows = ko.computed(function () {\n var offset = self.offset() || 0;\n var rows = self.rows();\n\n var paginationRows = rows.slice(offset, offset + self.resultsPerPage());\n\n return paginationRows;\n }, this);\n\n self.onTableHeaderClick = function (index) {\n if (inovestor.ms.screenercore.serverSide) {\n self.shouldSearch(true);\n }\n\n self.setColumnHeaderStyling(index);\n }\n\n\n /**\n * Sets the offset based on the current page in the pagination\n * \n * @param {number} value - The current page number not zero-indexed\n */\n self.setOffset = function (value) {\n var oldOffset = self.offset();\n self.offset((value - 1) * self.resultsPerPage());\n },\n\n\n /**\n * Sets the CSS class for the columns when they are clicked and\n * then calls the sort function to sort the table rows\n * \n * @param {number} index - The index of the column that should be modified\n */\n self.setColumnHeaderStyling = function (index) {\n if (!inovestor.ms.core.isNullOrUndefined(index)) {\n // Default to 0 for the index\n if (index === -1)\n index = 0;\n\n // Set the sort column\n self.sortColumn(self.columnNames()[index].serverName);\n\n // Add descending order as the default column sorting\n if (self.columnNames()[index].css === '') {\n self.columnNames()[index].css = 'sorting-desc';\n self.sortType('desc');\n // Toggle between the search types\n } else if (self.columnNames()[index].css === 'sorting-desc') {\n self.columnNames()[index].css = 'sorting-asc';\n self.sortType('asc');\n } else {\n self.columnNames()[index].css = 'sorting-desc';\n self.sortType('desc');\n }\n\n // Make sure all the other columns have no sorting CSS\n for (var i = 0; i < self.columnNames().length; i++) {\n if (i === index) continue;\n\n self.columnNames()[i].css = '';\n }\n\n var tmp = self.columnNames();\n self.columnNames([]);\n self.columnNames(tmp);\n\n // Call the sort\n if (inovestor.ms.screenercore.serverSide) {\n if (self.shouldSearch()) {\n // Set the offset to 0 on searches\n self.offset(0);\n self.corePlugin.search();\n }\n } else {\n self.offset(0);\n self.sortRows();\n }\n }\n };\n\n /**\n * Sorts the collection of rows based on the ViewModel's sortColumn\n * and sortType values\n */\n self.sortRows = function () {\n var sortColumn = self.sortColumn();\n var columns = self.columnNames();\n\n // Find the index of the column we're sorting by\n var index = -1;\n for (var i = 0; i < columns.length; i++) {\n var currentCol = columns[i];\n\n if (currentCol.serverName.toLowerCase() === sortColumn.toLowerCase()) {\n index = i;\n break;\n }\n }\n\n // Set the values based on the sort type\n var sortVal1 = self.sortType() === 'asc' ? -1 : 1;\n var sortVal2 = sortVal1 === -1 ? 1 : -1;\n\n // Sort based on the row's data \n if (index >= 2) {\n // Need to subtract two from the index to match the data array\n dataIndex = index - 2;\n\n // Get the type to know what value to sort on\n var type = self.rows()[0].data[dataIndex].type || 'numeric';\n var sortField = '';\n\n switch (type) {\n case 'numeric':\n sortField = 'value';\n break;\n case 'date':\n sortField = 'value';\n break;\n case 'localizedText':\n sortField = inovestor.ms.core.currentLanguage === 'en' ? 'valueEn' : 'valueFr';\n break;\n case 'resourceText':\n sortField = 'key';\n break;\n }\n\n // Sort by the server value at the index\n self.rows.sort(function (left, right) {\n var leftVal = left.data[dataIndex][sortField] || 0;\n if (leftVal === '-' && type === 'numeric') {\n leftVal = 0;\n }\n var rightVal = right.data[dataIndex][sortField] || 0;\n if (rightVal === '-' && type === 'numeric') {\n rightVal = 0;\n }\n return leftVal === rightVal ? 0 :\n (leftVal < rightVal ? sortVal1 : sortVal2);\n });\n } else if (index === 1) {\n // Sort based on the name\n self.rows.sort(function (left, right) {\n return left.name.toLowerCase() === right.name.toLowerCase() ? 0 :\n (left.name.toLowerCase() < right.name.toLowerCase() ? sortVal1 : sortVal2);\n });\n } else if (index === -1 || index === 0) {\n // Since we have a default sort column set index to it\n index = 0;\n\n // Sort by the ticker asc\n self.rows.sort(function (left, right) {\n return left.ticker === right.ticker ? 0 :\n (left.ticker < right.ticker ? sortVal1 : sortVal2);\n });\n }\n };\n\n self.search = function () {\n var isWildCardOnlyQuery = self.verifyWildCardOnlyCriterias();\n self.isWildCardOnlyQuery(isWildCardOnlyQuery);\n\n if (!isWildCardOnlyQuery && !self.results.isBusy()) {\n self.isMinimizedCriteria(true);\n self.offset(0);\n self.corePlugin.search();\n }\n }\n\n self.toggleMinimizedCriteria = function () {\n self.isMinimizedCriteria(!self.isMinimizedCriteria());\n }\n\n self.exportToCsv = function () {\n if (!self.results.isBusy() && self.isExportEnabled()) {\n self.corePlugin.exportToCsv();\n }\n }\n\n /**\n * Creates the string at the top of the table that shows how many results\n * are being displayed\n */\n self.showingResultsString = ko.computed(function () {\n var start = self.offset() + 1;\n var total = self.numResults();\n var resultsPerPage = self.resultsPerPage();\n\n var formatString = '';\n if (self.resources())\n formatString = self.resources().dataTableLanguage.info;\n else\n formatString = '{0}{1}{2}';\n var end = 0;\n\n if (self.offset() + resultsPerPage > total)\n end = total;\n else\n end = self.offset() + resultsPerPage;\n\n var resultsString = inovestor.ms.core.stringFormat(formatString, [start, end, total]);\n\n if (\n !inovestor.ms.core.isNullOrUndefined(inovestor.ms.screenercore.serverSideLimit)\n && total === inovestor.ms.screenercore.serverSideLimit\n ) {\n resultsString += inovestor.ms.core.stringFormat(self.resources().dataTableLanguage.infoLimit, [total]);\n }\n\n return resultsString;\n }, this);\n\n /**\n * Click handlers for the table rows. Opens the ManagedSolutions\n * page for the clicked item\n * \n * @param {object} item - The item for the row that was clicked\n */\n self.getRowClickHandler = function (item) {\n var type = inovestor.ms.screenercore.categoryType;\n var url = redirectUrl;\n var finalUrl = '';\n\n if (type === 'stock' || type === 'etf') {\n var mic = item.mic,\n ticker = item.ticker\n\n if (inovestor.ms.core.isNullOrUndefined(mic) ||\n inovestor.ms.core.isNullOrUndefined(ticker) ||\n inovestor.ms.core.isNullOrUndefined(type))\n return;\n\n // Dirty fix for TSXV not returning the right MIC\n if (mic === \"TSXV\")\n mic = \"XTSX\";\n\n var symbol = mic + ':' + ticker;\n\n finalUrl = inovestor.ms.core.stringFormat(url, {\n symbol: encodeURIComponent(symbol),\n category: encodeURIComponent(type)\n });\n\n return finalUrl;\n\n } else if (type === 'fund') {\n var code = item.code;\n\n if (inovestor.ms.core.isNullOrUndefined(code))\n return;\n\n finalUrl = inovestor.ms.core.stringFormat(url, {\n symbol: encodeURIComponent(code),\n category: encodeURIComponent(type)\n });\n\n return finalUrl;\n\n }\n };\n\n self.getQuerystring = function () {\n var query = '';\n var criterias = self.criterias();\n\n for (var i in criterias) {\n if (!criterias[i].isValid())\n continue;\n\n var criteria = criterias[i].currentCriteria;\n var displayType = criteria.fieldDefinitionItem().displayType;\n var adapter = criteria.fieldDefinitionItem().adapter || { toServer: function (value) { return value; } };\n var criteriaValue = '';\n\n if (displayType === 'slider') {\n if (criteria.isDefault() && inovestor.ms.screenercore.anyAsWildcard === true) {\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, '=', '*');\n } else {\n // Dealing with min and max values\n if (!inovestor.ms.core.isNullOrUndefined(criteria.valueItem()) && !inovestor.ms.core.isNullOrUndefined(criteria.valueItem2())) {\n criteriaValue = adapter.toServer(criteria.valueItem()) + ',' + adapter.toServer(criteria.valueItem2());\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, criteria.operator(), criteriaValue);\n }\n } \n } else if (displayType === 'dateRange') {\n if (criteria.isDefault() && inovestor.ms.screenercore.anyAsWildcard === true) {\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, '=', '*');\n } else {\n if (!inovestor.ms.core.isNullOrUndefined(criteria.valueItem()) && !inovestor.ms.core.isNullOrUndefined(criteria.valueItem2())) {\n criteriaValue = adapter.toServer(criteria.valueItem()) + ',' + adapter.toServer(criteria.valueItem2());\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, criteria.operator(), criteriaValue);\n }\n }\n } else if (displayType === 'checkboxList') {\n // Dealing with array of checked values\n if (!inovestor.ms.core.isNullOrUndefined(criteria.valueItems())) {\n if (criteria.valueItems().length > 0) {\n if (inovestor.ms.screenercore.preferInOperatorOverOr) {\n var inItemsList = '';\n for (var j = 0; j < criteria.valueItems().length; j++) {\n var separator = ',';\n if (j === 0) {\n var separator = '';\n }\n\n var normalizedValue = Array.isArray(criteria.valueItems()[j].value) ?\n criteria.valueItems()[j].value.map(function (x) { return adapter.toServer(x) }).join() :\n adapter.toServer(criteria.valueItems()[j].value);\n\n inItemsList = inItemsList + separator + normalizedValue;\n }\n query += self._appendToQueryString('and', criteria.fieldDefinitionItem().key, 'IN', inItemsList);\n } else {\n for (var j = 0; j < criteria.valueItems().length; j++) {\n if (Array.isArray(criteria.valueItems()[j].value)) {\n for (var k = 0; k < criteria.valueItems()[j].value.length; k++) {\n var logicalOperator = j === 0 && k === 0 ? 'and' : 'or';\n query += self._appendToQueryString(logicalOperator, criteria.fieldDefinitionItem().key, criteria.operator(), adapter.toServer(criteria.valueItems()[j].value[k]));\n }\n } else {\n var logicalOperator = j === 0 ? 'and' : 'or';\n query += self._appendToQueryString(logicalOperator, criteria.fieldDefinitionItem().key, criteria.operator(), adapter.toServer(criteria.valueItems()[j].value));\n }\n }\n }\n } else {\n // We still want the column to show so send * wildcard\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, criteria.operator(), '*');\n }\n }\n } else if (displayType === 'radio') {\n // Check based on the value item\n criteriaValue = adapter.toServer(criteria.valueItem().value);\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, criteria.operator(), criteriaValue);\n } else if (displayType === 'buttonListNumeric' || displayType === 'buttonListText') {\n var items = criteria.valueItems();\n for (var k = 0; k < items.length; k++) {\n var current = items[k];\n var logicalOperator = k > 0 ? 'or' : 'and';\n criteriaValue = current.value != null && current.value !== '' ? adapter.toServer(current.value) : adapter.toServer(current.values.min) + ',' + adapter.toServer(current.values.max);\n\n query += self._appendToQueryString(logicalOperator, criteria.fieldDefinitionItem().key, current.operator, criteriaValue);\n }\n\n if (items.length === 0) {\n if (displayType === 'buttonListText') {\n // We still want the column to show so send * wildcard\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, criteria.operator(), '*');\n } else if (displayType === 'buttonListNumeric' && typeof criteria.sliderMin() === 'number') {\n if (inovestor.ms.screenercore.anyAsWildcard === true) {\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, criteria.operator(), '*');\n } else {\n // Can't have numeric wildcard\n query += self._appendToQueryString('and', criteria.fieldDefinitionItem().key, '>=', adapter.toServer(criteria.sliderMin()));\n }\n }\n }\n } else if (displayType === 'stockReplacement') {\n var symbol = criteria.valueItem();\n var min = criteria.valueItem2();\n var max = criteria.valueItem3();\n\n if (!inovestor.ms.core.isNullOrUndefined(symbol)) {\n var symbolInfos = symbol.split(':');\n var mic = symbolInfos.length === 2 ? symbolInfos[0] : '';\n var ticker = symbolInfos.length === 2 ? symbolInfos[1] : symbolInfos[0];\n\n if (!inovestor.ms.core.isEmptyString(min) && !inovestor.ms.core.isEmptyString(max)) {\n criteriaValue = adapter.toServer(mic) + ',' + adapter.toServer(ticker) + ',' + adapter.toServer(min) + ',' + adapter.toServer(max);\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, 'between', criteriaValue);\n } else if (!inovestor.ms.core.isEmptyString(min) && inovestor.ms.core.isEmptyString(max)) {\n criteriaValue = adapter.toServer(mic) + ',' + adapter.toServer(ticker) + ',' + adapter.toServer(min);\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, '>=', criteriaValue);\n } else if (inovestor.ms.core.isEmptyString(min) && !inovestor.ms.core.isEmptyString(max)) {\n criteriaValue = adapter.toServer(mic) + ',' + adapter.toServer(ticker) + ',' + adapter.toServer(max);\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, '<=', criteriaValue);\n } else {\n criteriaValue = adapter.toServer(mic) + ',' + adapter.toServer(ticker);\n query += self._appendToQueryString(criteria.logicalOperator(), criteria.fieldDefinitionItem().key, '=', criteriaValue);\n }\n }\n }\n }\n return query;\n };\n\n self.verifyWildCardOnlyCriterias = function () {\n var criterias = self.criterias();\n var wildCardOnlyQuery = true;\n\n if (criterias.length === 0)\n wildCardOnlyQuery = false;\n\n for (var i in criterias) {\n if (!criterias[i].isValid())\n continue;\n\n var criteria = criterias[i].currentCriteria;\n var displayType = criteria.fieldDefinitionItem().displayType;\n\n if (displayType === 'slider') {\n if (inovestor.ms.screenercore.anyAsWildcard !== true || !criteria.isDefault()) {\n wildCardOnlyQuery = false;\n }\n } else if (displayType === 'dateRange') {\n if (inovestor.ms.screenercore.anyAsWildcard !== true || !criteria.isDefault()) {\n wildCardOnlyQuery = false;\n }\n } else if (displayType === 'checkboxList' || displayType === 'buttonListNumeric' || displayType === 'buttonListText') {\n // Dealing with array of checked values\n if (!inovestor.ms.core.isNullOrUndefined(criteria.valueItems())) {\n if (criteria.valueItems().length > 0) {\n wildCardOnlyQuery = false;\n }\n }\n } else if (displayType === 'radio') {\n wildCardOnlyQuery = false;\n } else if (displayType === 'stockReplacement') {\n if (!inovestor.ms.core.isNullOrUndefined(criteria.valueItem())) {\n wildCardOnlyQuery = false;\n }\n }\n }\n\n return wildCardOnlyQuery;\n };\n\n self._appendToQueryString = function (logicalOperator, key, operator, value) {\n return inovestor.ms.core.stringFormat('{0}:{1}:{2}:{3};', [\n encodeURIComponent(logicalOperator),\n encodeURIComponent(key),\n operator ? encodeURIComponent(operator) : encodeURIComponent('='),\n encodeURIComponent(value),\n ]);\n }\n self.parseQuerystring = function (querystring) {\n var params = querystring.substr(1, querystring.length).split('&');\n var values = [];\n for (var param in params) {\n var queryStr = params[param];\n var index = queryStr.indexOf('=');\n var key = queryStr.substr(0, index);\n var value = queryStr.substr(index + 1, queryStr.length);\n if (key === 'criterias' && value) {\n var criterias = value.split(';');\n for (var i in criterias) {\n if (!inovestor.ms.core.isEmptyString(criterias[i])) {\n var criteriaData = criterias[i].split(':');\n\n // currentCriteria values\n var criteriaViewModel = new inovestor.ms.screenercore.viewModels.screenerCriteriaViewModel(self);\n var logicalOperator = 'and';\n var fieldDefinitionItem = null;\n var operator = null;\n var operatorKey = null;\n var valueItem = null;\n var valueItem2 = null;\n\n var fieldTypes = self.fieldTypes();\n for (var fieldTypeIndex in fieldTypes) {\n var fieldDef = fieldTypes[fieldTypeIndex];\n if (fieldDef.key.toLowerCase() === criteriaData[1].toLowerCase()) {\n fieldDefinitionItem = fieldDef;\n break;\n }\n }\n\n if (fieldDefinitionItem) {\n criteriaViewModel.changeSelectedField(fieldDefinitionItem);\n\n if (fieldDefinitionItem.comparerType === 'numeric') {\n var numericOperators = self.numericOperators();\n for (var numericOperatorIndex in numericOperators) {\n var numericOperator = numericOperators[numericOperatorIndex];\n if (numericOperator.value === criteriaData[2]) {\n criteriaViewModel.currentCriteria.operator(numericOperator.value);\n criteriaViewModel.currentCriteria.operatorKey(numericOperator.key);\n break;\n }\n }\n\n var numericValues = criteriaData[3].split(',');\n if (numericValues && numericValues.length > 0) {\n criteriaViewModel.currentCriteria.valueItem(parseInt(numericValues[0]));\n if (numericValues.length === 2)\n criteriaViewModel.currentCriteria.valueItem2(parseInt(numericValues[1]));\n }\n } else if (fieldDefinitionItem.comparerType === 'date') {\n var numericOperators = self.numericOperators();\n for (var numericOperatorIndex in numericOperators) {\n var numericOperator = numericOperators[numericOperatorIndex];\n if (numericOperator.value === criteriaData[2]) {\n criteriaViewModel.currentCriteria.operator(numericOperator.value);\n criteriaViewModel.currentCriteria.operatorKey(numericOperator.key);\n break;\n }\n }\n\n var dateValues = criteriaData[3].split(',');\n if (dateValues && dateValues.length > 0) {\n criteriaViewModel.currentCriteria.valueItem(dateValues[0]);\n if (dateValues.length === 2) {\n criteriaViewModel.currentCriteria.valueItem2(dateValues[1]);\n }\n }\n } else if (fieldDefinitionItem.comparerType === 'stockReplacement') {\n var values = criteriaData[3].split(',');\n criteriaViewModel.currentCriteria.operator('between');\n criteriaViewModel.currentCriteria.operatorKey('between');\n criteriaViewModel.currentCriteria.valueItem(values[0]);\n criteriaViewModel.currentCriteria.sliderMin(values[1]);\n criteriaViewModel.currentCriteria.sliderMax(values[1]);\n } else {\n var criteriaValues = self.getCriteriasForComparerType(fieldDefinitionItem.comparerType)() || [];\n for (var criteriaValuesIndex in criteriaValues) {\n var criteria = criteriaValues[criteriaValuesIndex];\n if ((criteria.value + '') === criteriaData[3]) {\n criteriaViewModel.currentCriteria.valueItem(criteria);\n break;\n }\n }\n }\n }\n self.criterias.push(criteriaViewModel);\n }\n self.criterias.valueHasMutated();\n }\n return;\n }\n }\n };\n\n self.canSearch = ko.computed(function () {\n var criterias = self.criterias();\n if (inovestor.ms.core.isNullOrUndefined(criterias) || criterias.length <= 0)\n return false;\n\n\n var isAllCriteriasValid = true;\n\n for (var i in criterias) {\n if (!criterias[i].isValid()) {\n isAllCriteriasValid = false;\n }\n }\n\n return isAllCriteriasValid;\n }, this);\n\n self.currentLanguage = ko.computed(function () {\n return inovestor.ms.core.currentLanguage;\n });\n\n\n self.tryAddCriteria = function (fieldName, fieldDefinitionItem, evt) {\n var criteriaToAdd = new inovestor.ms.screenercore.viewModels.screenerCriteriaViewModel(self);\n\n // Check if criteria is already added\n var criterias = self.criterias();\n var keyToFind = fieldDefinitionItem.field.key;\n var isCriteriaAlreadyAdded = criterias.filter(function (c) { return c.currentCriteria.criteriaKey === keyToFind }).length > 0;\n\n if (isCriteriaAlreadyAdded) {\n // Find criteria\n var criteriaToRemove = criterias.filter(function (c) { return c.currentCriteria.criteriaKey === keyToFind })[0];\n var indexForCriteriaToRemove = criterias.indexOf(criteriaToRemove);\n\n // Remove criteria\n self.criterias().splice(indexForCriteriaToRemove, 1);\n self.criterias.valueHasMutated();\n fieldDefinitionItem.isSelected(false);\n\n self.editableMinimizedCriteria.remove(keyToFind);\n } else {\n // Setup Criteria\n criteriaToAdd.currentCriteria.displayName = fieldName;\n criteriaToAdd.currentCriteria.resourceKey = fieldDefinitionItem.field.resourceKey;\n criteriaToAdd.currentCriteria.criteriaKey = keyToFind;\n criteriaToAdd.currentCriteria.fieldDefinitionItem(fieldDefinitionItem.field);\n\n // Request slider range \n var sliderOptions = self.sliderAllMinMaxValues().filter(function (f) { return f.key.toLowerCase() === criteriaToAdd.currentCriteria.criteriaKey.toLowerCase() })[0];\n criteriaToAdd.setSliderRange(criteriaToAdd, sliderOptions);\n criteriaToAdd.setAutocomplete();\n if (criteriaToAdd.currentCriteria.fieldDefinitionItem().displayType === 'dateRange') {\n criteriaToAdd.initializeDateRange(criteriaToAdd, sliderOptions);\n }\n\n // Add criteria\n self.criterias.push(criteriaToAdd);\n fieldDefinitionItem.isSelected(true);\n\n if (self.isMinimizedCriteria()) {\n self.editableMinimizedCriteria.push(keyToFind);\n } \n }\n\n return true;\n };\n self.removeCriteria = function (criteria) {\n var criteriaKey = criteria.currentCriteria.criteriaKey;\n var criterias = self.criterias();\n var index = criterias.indexOf(criteria);\n\n self.criterias.splice(index, 1);\n\n // Update the selected criteria\n for (var j = 0; j < self.criteriaCategories().length; j++) {\n var category = self.criteriaCategories()[j];\n if (category.name === criteria.currentCriteria.fieldDefinitionItem().groupKey) {\n for (var k = 0; k < category.items.length; k++) {\n var item = category.items[k];\n if (item.field.id === criteria.currentCriteria.fieldDefinitionItem().id) {\n item.isSelected(false);\n break;\n }\n }\n break;\n }\n }\n\n self.editableMinimizedCriteria.remove(criteriaKey);\n };\n\n self.askResetConfirmation = function () {\n $('#ClearCriteriaConfirmationModal').modal();\n };\n\n self.reset = function () {\n self.criterias([]);\n self.editableMinimizedCriteria([]);\n self.rows([]);\n\n self.results.searchResults(undefined);\n self.results.hasError(false);\n self.results.isEmptyTable(true);\n };\n\n self.editableMinimizedCriteria = ko.observableArray();\n self.toggleEditableMinimizedCriteria = function (criteriaKey) {\n if (!self.isMinimizedCriteria()) self.isMinimizedCriteria(true);\n\n if (self.editableMinimizedCriteria().includes(criteriaKey)) {\n self.editableMinimizedCriteria.remove(criteriaKey);\n } else {\n self.editableMinimizedCriteria.push(criteriaKey);\n }\n };\n self.isMinimizedCriteria.subscribe(function (value) {\n if (!value) {\n self.editableMinimizedCriteria([]);\n }\n });\n };\n\n inovestor.ms.screenercore.viewModels.screenerCriteriaViewModel = function (screener) {\n var self = this;\n self.screener = screener;\n self.dropdownFilter = ko.observable('');\n self.isNoCriteria = ko.observable(false);\n self.criteriaValuesAreUnavailable = ko.observable(false);\n self.currentCriteria = {\n displayName: ko.observable(),\n criteriaKey: ko.observable(),\n resourceKey: ko.observable(),\n logicalOperator: ko.observable('and'), // Always 'and' for now\n fieldDefinitionItem: ko.observable(), // The field item being selected\n operator: ko.observable(), // Operator will be the one selected or null if there is none\n operatorKey: ko.observable(), // Operator resource Key\n valueItem: ko.observable(), // This represents the item selected in the dropdown OR the value entered in the input textbox\n valueItem2: ko.observable(), // This is for the second textbox when selecting the between operator\n valueItem3: ko.observable(),\n sliderMin: ko.observable(), // The minimum value for the slider if present\n sliderMax: ko.observable(), // The maximum value for the slider if present\n isDefault: ko.observable(true), // When the values are not default we want to be able to show it\n isPanelOpen: ko.observable(false), // We want data to be hidden if the criteria panel is closed\n extractValue: function (valueItem) {\n // valueItem can be a string, number, or an object with a 'value' property. \n // This method is to retrieve the correct value from the valueItem.\n if (!inovestor.ms.core.isNullOrUndefined(valueItem)) {\n if (typeof valueItem === 'string' && valueItem.trim().length > 0)\n return valueItem;\n else if (typeof valueItem === 'number')\n return valueItem;\n else if (typeof valueItem === 'object' && !inovestor.ms.core.isNullOrUndefined(valueItem.value))\n return valueItem.value;\n }\n return null;\n },\n criteriaValues: [],\n valueItems: ko.observableArray(),\n clearCriteria: function () {\n // Clears all criteria data from observables\n self.currentCriteria.fieldDefinitionItem(null);\n self.currentCriteria.minValue(null);\n self.currentCriteria.maxValue(null);\n self.currentCriteria.operator(null);\n self.currentCriteria.operatorKey(null);\n self.currentCriteria.valueItem(null);\n self.currentCriteria.valueItem2(null);\n self.currentCriteria.valueItem3(null);\n self.currentCriteria.sliderMin(null);\n self.currentCriteria.sliderMax(null);\n self.currentCriteria.isDefault(true);\n self.currentCriteria.valueItems(null);\n self.currentCriteria.criteriaValues(null);\n },\n }\n\n self.selectedValuesString = ko.computed(function () {\n var amount = self.currentCriteria.valueItems().length;\n if (amount === 0)\n return screener.resources().any;\n\n var criteriaString = '';\n\n ko.utils.arrayForEach(self.currentCriteria.valueItems(), function (item, index) {\n var value = inovestor.ms.core.currentLanguage === 'en' ? item.nameEn : item.nameFr;\n\n if (index !== 0)\n criteriaString += ', ' + value;\n else\n criteriaString += value;\n });\n\n return criteriaString;\n });\n\n self.formattedLowSliderValue = ko.pureComputed({\n read: function () {\n if (self.currentCriteria.fieldDefinitionItem().showAsText) return self.currentCriteria.valueItem();\n\n var tempDiv = $('
');\n var numString = self.currentCriteria.valueItem();\n ko.bindingHandlers.number.update(tempDiv[0], function () { return numString; },\n function () {\n return {\n showZero: true, decimalPlaces: 2,\n showAsLargeNumber: self.currentCriteria.fieldDefinitionItem().enableDisplayNumericLargeFormat == false ? self.currentCriteria.fieldDefinitionItem().enableDisplayNumericLargeFormat : true \n };\n });\n\n \n return tempDiv.html();\n },\n write: function (value) {\n if (!inovestor.ms.core.isNullOrUndefined(value)) {\n var lowValue = inovestor.ms.core.abbreviatedStringToNumber(value);\n var id = self.currentCriteria.fieldDefinitionItem().id;\n var sliderMin = self.currentCriteria.sliderMin();\n var sliderMax = self.currentCriteria.sliderMax();\n var newValue = sliderMin;\n\n if (typeof lowValue === 'number') {\n if (lowValue > sliderMin && lowValue < sliderMax && lowValue <= self.currentCriteria.valueItem2()) {\n self.currentCriteria.valueItem(lowValue);\n newValue = lowValue;\n } else {\n self.currentCriteria.valueItem(sliderMin);\n }\n } else {\n self.currentCriteria.valueItem(sliderMin);\n }\n\n $(\"#slider-\" + id).slider('values', 0, newValue);\n }\n },\n owner: self\n });\n\n self.removeValueItem = function (item) {\n var items = self.currentCriteria.valueItems();\n var index = items.indexOf(item);\n\n if (index > -1)\n self.currentCriteria.valueItems.splice(index, 1);\n }\n\n self.resetDropdownFilter = function () {\n self.dropdownFilter('');\n }\n\n self.modifyValueItems = function (item, event) {\n var index = self.getIndexForCriteria(item);\n\n if (index > -1) {\n self.currentCriteria.valueItems.splice(index, 1);\n $(event.target).removeClass('active');\n } else {\n self.currentCriteria.valueItems().push(item);\n $(event.target).addClass('active');\n }\n\n var items = self.currentCriteria.valueItems();\n self.currentCriteria.valueItems([]);\n self.currentCriteria.valueItems(items);\n\n return false;\n }\n\n self.getIndexForCriteria = function (criteria) {\n var index = -1;\n var items = self.currentCriteria.valueItems();\n\n for (var i = 0; i < items.length; i++) {\n var valueItemStr = JSON.stringify(items[i]);\n\n if (JSON.stringify(criteria) === valueItemStr) {\n index = i;\n break;\n }\n }\n\n return index;\n }\n\n self.formattedHighSliderValue = ko.pureComputed({\n read: function () {\n if (self.currentCriteria.fieldDefinitionItem().showAsText) return self.currentCriteria.valueItem2();\n\n var tempDiv = $('
');\n var numString = self.currentCriteria.valueItem2();\n ko.bindingHandlers.number.update(tempDiv[0], function () { return numString; },\n function () {\n return {\n showZero: true, decimalPlaces: 2,\n showAsLargeNumber: self.currentCriteria.fieldDefinitionItem().enableDisplayNumericLargeFormat == false ? self.currentCriteria.fieldDefinitionItem().enableDisplayNumericLargeFormat : true \n };\n });\n\n\n return tempDiv.html();\n },\n write: function (value) {\n if (!inovestor.ms.core.isNullOrUndefined(value)) {\n var highValue = inovestor.ms.core.abbreviatedStringToNumber(value);\n var id = self.currentCriteria.fieldDefinitionItem().id;\n var sliderMin = self.currentCriteria.sliderMin();\n var sliderMax = self.currentCriteria.sliderMax();\n var newValue = sliderMax;\n\n if (typeof highValue === 'number') {\n if (highValue > sliderMin && highValue < sliderMax && highValue >= self.currentCriteria.valueItem()) {\n self.currentCriteria.valueItem2(highValue);\n newValue = highValue;\n } else {\n self.currentCriteria.valueItem2(sliderMax);\n }\n } else {\n self.currentCriteria.valueItem2(sliderMax);\n }\n\n $(\"#slider-\" + id).slider('values', 1, newValue);\n }\n },\n owner: self\n });\n\n self.comparerType = ko.computed(function () {\n var result = null;\n if (!inovestor.ms.core.isNullOrUndefined(self.currentCriteria.fieldDefinitionItem()))\n result = self.currentCriteria.fieldDefinitionItem().comparerType;\n\n return result;\n }, this);\n self.displayType = ko.computed(function () {\n var result = null;\n if (!inovestor.ms.core.isNullOrUndefined(self.currentCriteria.fieldDefinitionItem()))\n result = self.currentCriteria.fieldDefinitionItem().displayType;\n\n return result;\n }, this);\n self.numericValues = function () {\n var values = [];\n var fieldDefinitionItem = self.currentCriteria.fieldDefinitionItem();\n if (!inovestor.ms.core.isNullOrUndefined(fieldDefinitionItem)\n && !inovestor.ms.core.isNullOrUndefined(fieldDefinitionItem.minValue)\n && !inovestor.ms.core.isNullOrUndefined(fieldDefinitionItem.maxValue)) {\n\n if (fieldDefinitionItem.minValue < fieldDefinitionItem.maxValue) {\n for (var i = fieldDefinitionItem.minValue; i <= fieldDefinitionItem.maxValue; i++)\n values.push(i);\n }\n }\n\n return values;\n };\n self.selectedCriterias = ko.computed(function () {\n var filter = self.dropdownFilter().toLowerCase();\n var criteriaValues = screener.getCriteriasForComparerType(self.comparerType());\n self.criteriaValuesAreUnavailable(inovestor.ms.core.isNullOrUndefined(criteriaValues));\n self.isNoCriteria(false);\n\n if (self.criteriaValuesAreUnavailable()) {\n criteriaValues = [];\n self.currentCriteria.criteriaValues = criteriaValues;\n } else {\n self.currentCriteria.criteriaValues = ko.utils.unwrapObservable(criteriaValues);\n }\n\n if (filter !== '') {\n criteriaValues = self.currentCriteria.criteriaValues.filter(function (item) {\n if (inovestor.ms.core.currentLanguage === 'en') {\n return item.nameEn.toLowerCase().indexOf(filter) > -1;\n } else {\n return item.nameFr.toLowerCase().indexOf(filter) > -1;\n }\n });\n } else {\n criteriaValues = self.currentCriteria.criteriaValues;\n }\n\n if (criteriaValues && criteriaValues.length === 0) {\n self.isNoCriteria(true);\n }\n\n return criteriaValues;\n }, this);\n\n self.isItemInValueItems = function (item) {\n return ko.utils.arrayFilter(self.currentCriteria.valueItems(), function (criteria) {\n return criteria.value === item;\n }).length > 0\n },\n\n self.selectedFieldName = ko.computed(function () {\n var name = '';\n if (!inovestor.ms.core.isNullOrUndefined(screener.resources())) {\n name = screener.resources().selectField;\n var fieldDef = self.currentCriteria.fieldDefinitionItem();\n if (!inovestor.ms.core.isNullOrUndefined(fieldDef))\n name = screener.resources().formLabels.fieldGroupNames[fieldDef.groupKey] + ' - ' + screener.resources().formLabels.fieldNames[fieldDef.resourceKey];\n\n }\n return name;\n });\n self.isValid = ko.computed(function () {\n var isValueValid = false;\n\n // Operator considered valid if the comparerType is numeric and the operator has value, else it can be null\n var isOperatorValid = (self.comparerType() === 'numeric' || self.comparerType() === 'string' || self.comparerType() === 'date' || self.comparerType() === 'stockReplacement')\n ? !inovestor.ms.core.isNullOrUndefined(self.currentCriteria.operator())\n : inovestor.ms.core.isNullOrUndefined(self.currentCriteria.operator());\n\n // Check if valid for Sliders\n if (self.displayType() === 'slider') {\n if (!inovestor.ms.core.isNullOrUndefined(self.currentCriteria.valueItem()) || !inovestor.ms.core.isNullOrUndefined(self.currentCriteria.valueItem2()))\n isValueValid = true;\n }\n\n if (self.displayType() === 'dateRange') {\n if (!inovestor.ms.core.isNullOrUndefined(self.currentCriteria.valueItem()) || !inovestor.ms.core.isNullOrUndefined(self.currentCriteria.valueItem2()))\n isValueValid = true;\n }\n\n // Checkbox Lists and Button Lists are always valid (No values sends everything)\n if (self.displayType() === 'checkboxList' || self.displayType() === 'buttonListNumeric' || self.displayType() === 'buttonListText') {\n isValueValid = true;\n }\n\n if (self.displayType() === 'radio') {\n if (!inovestor.ms.core.isNullOrUndefined(self.currentCriteria.valueItem()))\n isValueValid = true;\n }\n\n if (self.displayType() === 'stockReplacement') {\n isValueValid = true;\n }\n\n return !inovestor.ms.core.isNullOrUndefined(self.currentCriteria.fieldDefinitionItem()) && isOperatorValid && isValueValid;\n }, this),\n // Actions\n self.changeSelectedField = function (item, event) {\n if (inovestor.ms.core.isNullOrUndefined(item))\n return;\n var fieldDef = self.currentCriteria.fieldDefinitionItem()\n self.currentCriteria.clearCriteria();\n self.currentCriteria.fieldDefinitionItem(item);\n };\n\n self.setAutocomplete = function () {\n if (self.currentCriteria.fieldDefinitionItem().displayType === 'stockReplacement') {\n var id = \"autocomplete-\" + self.currentCriteria.fieldDefinitionItem().id;\n\n self.currentCriteria.operator('between');\n self.currentCriteria.operatorKey('between');\n\n setTimeout(function () {\n var config = inovestor.ms.autocomplete.config;\n if (inovestor.ms.core.isNullOrUndefined(config.apiSearchBaseUrl))\n config.apiSearchBaseUrl = inovestor.ms.core.concatUrl(inovestor.ms.core.config.apiBaseUrl, \"/search/suggest\");\n\n var componentConfigurations = inovestor.ms.core.getComponentConfigurations ? inovestor.ms.core.getComponentConfigurations('inoMsAutocomplete', 'inoMsScreener') : {}\n\n $(\"#\" + id).inoMsAutocomplete(\n $.extend(\n true, \n {\n id: id,\n language: inovestor.ms.core.currentLanguage,\n shouldRenderMoreResults: false,\n shouldSelectOnNonMatch: false,\n shouldAutoSelect: true,\n onSelect: function (item) {\n self.currentCriteria.valueItem(this.symbol)\n },\n filters: {\n category: 'stock,etf'\n }\n },\n componentConfigurations\n )\n ).on('click', function (e) {\n e.stopPropagation();\n });\n }, 300);\n }\n };\n\n self.setSliderRange = function (criteriaToAdd, sliderOptions) {\n\n if (criteriaToAdd.currentCriteria.fieldDefinitionItem().comparerType === 'numeric' ||\n criteriaToAdd.currentCriteria.fieldDefinitionItem().displayType === 'buttonListNumeric') {\n\n var min = sliderOptions ? Math.floor(parseFloat(sliderOptions.min)) : -9999999;\n var max = sliderOptions ? Math.ceil(parseFloat(sliderOptions.max)) : 9999999;\n\n criteriaToAdd.currentCriteria.sliderMin(min);\n criteriaToAdd.currentCriteria.sliderMax(max);\n\n if (criteriaToAdd.currentCriteria.fieldDefinitionItem().displayType === 'buttonListNumeric')\n return;\n\n criteriaToAdd.currentCriteria.operator('between');\n criteriaToAdd.currentCriteria.operatorKey('between');\n\n if (\n (criteriaToAdd.currentCriteria.valueItem() || typeof criteriaToAdd.currentCriteria.valueItem() === 'number') || \n (criteriaToAdd.currentCriteria.valueItem2() || typeof criteriaToAdd.currentCriteria.valueItem2() === 'number')\n )\n criteriaToAdd.currentCriteria.isDefault(false);\n\n // If there's no defaults set to the min and max\n if (!criteriaToAdd.currentCriteria.valueItem() && typeof criteriaToAdd.currentCriteria.valueItem() !== 'number')\n criteriaToAdd.currentCriteria.valueItem(min);\n\n if (!criteriaToAdd.currentCriteria.valueItem2() && typeof criteriaToAdd.currentCriteria.valueItem2() !== 'number')\n criteriaToAdd.currentCriteria.valueItem2(max);\n\n // Initialize the slider\n setTimeout(function () {\n $(\"#slider-\" + criteriaToAdd.currentCriteria.fieldDefinitionItem().id).slider({\n animate: \"fast\",\n range: true,\n min: min,\n max: max,\n values: [criteriaToAdd.currentCriteria.valueItem(), criteriaToAdd.currentCriteria.valueItem2()],\n slide: function (event, ui) {\n criteriaToAdd.currentCriteria.valueItem(Math.floor(ui.values[0]));\n criteriaToAdd.currentCriteria.valueItem2(Math.ceil(ui.values[1]));\n },\n change: function (event, ui) {\n if (criteriaToAdd.currentCriteria.valueItem() > criteriaToAdd.currentCriteria.sliderMin() ||\n criteriaToAdd.currentCriteria.valueItem2() < criteriaToAdd.currentCriteria.sliderMax()) {\n criteriaToAdd.currentCriteria.isDefault(false);\n } else {\n criteriaToAdd.currentCriteria.isDefault(true);\n }\n }\n });\n }, 300);\n\n\n }\n };\n\n self.initializeDateRange = function (criteriaToAdd, minMaxOptions) {\n if (criteriaToAdd.currentCriteria.fieldDefinitionItem().displayType === 'dateRange') {\n var min = minMaxOptions ? new Date(minMaxOptions.min) : new Date(\"1990-01-01\");\n var max = minMaxOptions ? new Date(minMaxOptions.max) : new Date();\n\n var minString = new Date(min).toISOString().substring(0, 10);\n var maxString = new Date(max).toISOString().substring(0, 10);\n\n criteriaToAdd.currentCriteria.sliderMin(minString);\n criteriaToAdd.currentCriteria.sliderMax(maxString);\n\n criteriaToAdd.currentCriteria.operator('between');\n criteriaToAdd.currentCriteria.operatorKey('between');\n\n if (criteriaToAdd.currentCriteria.valueItem() || criteriaToAdd.currentCriteria.valueItem2())\n criteriaToAdd.currentCriteria.isDefault(false);\n\n // If there's no defaults set to the min and max\n if (!criteriaToAdd.currentCriteria.valueItem())\n criteriaToAdd.currentCriteria.valueItem(minString);\n\n if (!criteriaToAdd.currentCriteria.valueItem2())\n criteriaToAdd.currentCriteria.valueItem2(maxString);\n\n setTimeout(function () {\n var fromDatepicker = $(\"#date-range-from-\" + criteriaToAdd.currentCriteria.fieldDefinitionItem().id).datepicker({\n minDate: min,\n maxDate: max,\n defaultDate: min,\n dateFormat: \"yy-mm-dd\",\n onSelect: function (dateText, instance) {\n criteriaToAdd.currentCriteria.valueItem(dateText);\n\n if (new Date(criteriaToAdd.currentCriteria.valueItem()) > new Date(criteriaToAdd.currentCriteria.sliderMin()) ||\n new Date(criteriaToAdd.currentCriteria.valueItem2()) < new Date(criteriaToAdd.currentCriteria.sliderMax())) {\n criteriaToAdd.currentCriteria.isDefault(false);\n } else {\n criteriaToAdd.currentCriteria.isDefault(true);\n }\n\n var selectedFromDate = fromDatepicker.datepicker(\"getDate\");\n toDatepicker.datepicker(\"option\", \"minDate\", new Date(Math.max(selectedFromDate, min)));\n }\n });\n fromDatepicker.datepicker(\"setDate\", criteriaToAdd.currentCriteria.valueItem());\n\n var toDatepicker = $(\"#date-range-to-\" + criteriaToAdd.currentCriteria.fieldDefinitionItem().id).datepicker({\n minDate: min,\n maxDate: max,\n defaultDate: max,\n dateFormat: \"yy-mm-dd\",\n onSelect: function (dateText, instance) {\n criteriaToAdd.currentCriteria.valueItem2(dateText);\n\n if (new Date(criteriaToAdd.currentCriteria.valueItem()) > new Date(criteriaToAdd.currentCriteria.sliderMin()) ||\n new Date(criteriaToAdd.currentCriteria.valueItem2()) < new Date(criteriaToAdd.currentCriteria.sliderMax())) {\n criteriaToAdd.currentCriteria.isDefault(false);\n } else {\n criteriaToAdd.currentCriteria.isDefault(true);\n }\n\n var selectedToDate = toDatepicker.datepicker(\"getDate\");\n fromDatepicker.datepicker(\"option\", \"maxDate\", new Date(Math.min(selectedToDate, max)));\n }\n });\n toDatepicker.datepicker(\"setDate\", criteriaToAdd.currentCriteria.valueItem2());\n }, 300);\n }\n };\n \n };\n\n inovestor.ms.screenercore.viewModels.screenerResultsViewModel = function (screener) {\n var self = this;\n self.screener = screener;\n self.searchResults = ko.observable();\n self.hasError = ko.observable(false);\n self.isEmptyTable = ko.observable(true);\n self.isBusy = ko.observable(false);\n self.hasValidData = ko.computed(function () {\n return !self.hasError() && self.isBusy() && self.searchResults() !== null;\n }, this);\n };\n\n})(inovestor.ms.libRef.jQuery, inovestor, JSON);","window[\"inoMsTemplatesCache\"] = window[\"inoMsTemplatesCache\"] || {};\nwindow[\"inoMsTemplatesCache\"][\"inoMsScreenerCore.screener.html\"] = \"
0\\\">
0\\\">

0\\\">
\"; \nwindow[\"inoMsTemplatesCache\"] = window[\"inoMsTemplatesCache\"] || {};\nwindow[\"inoMsTemplatesCache\"][\"inoMsScreenerCore.screenerNew.html\"] = \"
0\\\">
to
>= <=
0) && criterias().length > 0\\\">
\"; ","; (function (inovestor, undefined) {\n 'use strict';\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.addons = inovestor.ms.screenercore.addons || {};\n inovestor.ms.screenercore.addons.shareLink = inovestor.ms.screenercore.addons.shareLink || {};\n inovestor.ms.screenercore.addons.shareLink.resources = inovestor.ms.screenercore.addons.shareLink.resources || {};\n \n inovestor.ms.screenercore.addons.shareLink.resources[\"en\"] = {\n share: 'Share',\n shareName: 'Name',\n shareLink: 'Share Link',\n generate: 'Generate',\n copySuccessToast: 'Text copied to clipboard!',\n copyErrorToast: 'Press Ctrl/CMD + C to copy link',\n generateLink: 'Generate Link'\n };\n})(inovestor);\n\n; (function (inovestor, undefined) {\n 'use strict';\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.addons = inovestor.ms.screenercore.addons || {};\n inovestor.ms.screenercore.addons.shareLink = inovestor.ms.screenercore.addons.shareLink || {};\n inovestor.ms.screenercore.addons.shareLink.resources = inovestor.ms.screenercore.addons.shareLink.resources || {};\n \n inovestor.ms.screenercore.addons.shareLink.resources[\"fr\"] = {\n share: 'Partager',\n shareName: 'Nom',\n shareLink: 'Lien de partage',\n generate: 'Générer',\n copySuccessToast: 'Texte copié dans le presse-papiers!',\n copyErrorToast: 'Appuyez sur Ctrl/CMD + C pour copier le lien',\n generateLink: 'Générer le lien'\n };\n})(inovestor);\n\n; (function (inovestor) {\n 'use strict';\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.addons = inovestor.ms.screenercore.addons || {};\n inovestor.ms.screenercore.addons.shareLink = inovestor.ms.screenercore.addons.shareLink || {};\n \n inovestor.ms.screenercore.addons.shareLink.mapper = {\n mapShareLinkScreenerToPredefinedScreener: function (source) {\n return {\n type: 'share',\n name: source.name,\n criterias: source.criterias,\n sortType: source.sortOrder,\n sortColumn: source.sortedBy\n };\n },\n\n mapViewModelStateToShareLinkScreener: function (viewModel) {\n var criteriaMapper = new inovestor.ms.screenercore.mappers.queryCriteriaMapper(viewModel);\n var queryCriterias = criteriaMapper.mapViewModelCriteriasToQueryCriterias(viewModel.criterias());\n\n return {\n name: viewModel.currentScreener.name(),\n sortedBy: viewModel.sortColumn(),\n sortOrder: viewModel.sortType(),\n criterias: queryCriterias\n };\n }\n }\n})(inovestor);\n\n; (function (inovestor) {\n 'use strict';\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.addons = inovestor.ms.screenercore.addons || {};\n inovestor.ms.screenercore.addons.shareLink = inovestor.ms.screenercore.addons.shareLink || {};\n\n inovestor.ms.screenercore.addons.shareLink.screenerLoader = function (mapper) {\n return {\n load: function (key) {\n var dfd = $.Deferred();\n\n if ((key || '').toLowerCase().indexOf('share:') === 0) {\n try {\n var keyData = JSON.parse(key.substr(6));\n dfd.resolve(mapper.mapShareLinkScreenerToPredefinedScreener(keyData));\n } catch (error) {\n dfd.reject(error);\n }\n } else {\n // By resolving with a false value\n // we indicate to the loader process that the current key\n // is not a key handle by this loader\n dfd.resolve(false); \n }\n \n return dfd.promise();\n }\n };\n };\n})(inovestor);\n\n; (function ($, ko, inovestor) {\n 'use strict';\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.addons = inovestor.ms.screenercore.addons || {};\n inovestor.ms.screenercore.addons.shareLink = inovestor.ms.screenercore.addons.shareLink || {};\n\n inovestor.ms.screenercore.addons.shareLink.viewModelExtension = function (urlGenerator, mapper, resources) {\n return {\n extend: function (viewModel, container) {\n container.resources = ko.observable();\n\n viewModel.resources.subscribe(function () {\n var currentResource = resources[inovestor.ms.core.currentLanguage];\n if (inovestor.ms.core.isNullOrUndefined(currentResource))\n currentResource = null;\n container.resources(currentResource);\n });\n\n container.share = function () {\n container.shareModal.reset();\n $('#ShareLinkShareModal').modal();\n };\n\n container.shareModal = {\n name: ko.observable(),\n\n generatedLink: ko.observable(),\n\n generate: function () {\n var linkScreenerData = mapper.mapViewModelStateToShareLinkScreener(viewModel);\n linkScreenerData.name = container.shareModal.name();\n var url = urlGenerator(linkScreenerData);\n container.shareModal.generatedLink(url);\n\n var toast = null;\n $('#ShareLinkShareModalGeneratedLink').select();\n try {\n document.execCommand('copy');\n toast = $('#ShareLinkCopySuccessToast');\n } catch (err) {\n toast = $('#ShareLinkCopyErrorToast');\n }\n toast.addClass('show');\n setTimeout(function () { toast.removeClass('show'); }, 3000);\n },\n\n reset: function () {\n container.shareModal.name(viewModel.currentScreener.name());\n container.shareModal.generatedLink('');\n }\n };\n }\n };\n };\n})(inovestor.ms.libRef.jQuery, inovestor.ms.libRef.ko, inovestor);\n\n; (function ($, inovestor) {\n 'use strict';\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.addons = inovestor.ms.screenercore.addons || {};\n inovestor.ms.screenercore.addons.shareLink = inovestor.ms.screenercore.addons.shareLink || {};\n\n var addon = function (plugin, options, screenerLoader, viewModelExtension) {\n var self = this;\n\n // Register loader for share link screener\n\n plugin.corePlugin.screenerLoaders.push(screenerLoader.load);\n\n // Extend component ViewModel\n\n self.extendViewModel = function (viewModel) {\n viewModel.__shareLink = {};\n viewModelExtension.extend(viewModel, viewModel.__shareLink);\n };\n\n // Render add-on UI\n\n self.render = function ($element) {\n var deferred = $.Deferred();\n\n var templates = {};\n\n $.when(\n getTemplate(options.templatePaths.shareButton, options.useNewTemplate ? 'shareLink.shareButtonNew.html' : 'shareLink.shareButton.html').then(function (template) { templates.shareButton = template; }),\n getTemplate(options.templatePaths.shareModal, options.useNewTemplate ? 'shareLink.shareModalNew.html' : 'shareLink.shareModal.html').then(function (template) { templates.shareModal = template; })\n ).then(function () {\n $element.find('.ScreenerCriteriaPanel__buttons').append(templates.shareButton);\n $element.find('.ino-ms-screener-plugin').append(templates.shareModal);\n deferred.resolve();\n }).fail(function (error) {\n deferred.reject(error);\n });\n\n return deferred.promise();\n };\n\n function getTemplate (templatePath, defaultFilename) {\n var fileCacheKey = templatePath;\n var filePath = templatePath;\n\n if (inovestor.ms.core.isEmptyString(fileCacheKey)) {\n fileCacheKey = 'inoMsScreener.addons.shareLink' + '.' + defaultFilename;\n filePath = (inovestor.ms.core.isEmptyString(inovestor.ms.core.config.templateRootUrl) ? '' : inovestor.ms.core.config.templateRootUrl) +\n (inovestor.ms.core.isEmptyString(inovestor.ms.core.config.templateRootUrl) || inovestor.ms.core.config.templateRootUrl.match(/\\/$/) != null ? '' : '/') + // check if templateRootUrl ends in slash\n ('inoMsScreenerCore/addons/shareLink/' + defaultFilename);\n }\n\n return inovestor.ms.core.getTemplate(fileCacheKey, filePath);\n } \n };\n\n var defaultOptions = {\n useNewTemplate: false,\n urlGenerator: function (data) {\n var key = encodeURIComponent('share:' + JSON.stringify(data));\n return [location.protocol, '//', location.host, location.pathname, '?screener=', key].join('');\n },\n templatePaths: {\n shareButton: null,\n shareModal: null\n }\n };\n\n // Register add-on on the component (and inject addon dependencies)\n\n inovestor.ms.screenercore.registeredAddons.shareLink = function (plugin, options) {\n var addonOptions = $.extend({}, defaultOptions, options);\n addonOptions.templatePaths = $.extend(defaultOptions.templatePaths, addonOptions.templatePaths);\n\n var resources = inovestor.ms.screenercore.addons.shareLink.resources;\n var mapper = inovestor.ms.screenercore.addons.shareLink.mapper;\n var screenerLoader = inovestor.ms.screenercore.addons.shareLink.screenerLoader(mapper);\n var viewModelExtension = inovestor.ms.screenercore.addons.shareLink.viewModelExtension(addonOptions.urlGenerator, mapper, resources);\n\n return new addon(plugin, addonOptions, screenerLoader, viewModelExtension);\n };\n})(inovestor.ms.libRef.jQuery, inovestor);\n","window[\"inoMsTemplatesCache\"] = window[\"inoMsTemplatesCache\"] || {};\nwindow[\"inoMsTemplatesCache\"][\"inoMsScreener.addons.shareLink.shareLink.shareButton.html\"] = \" \"; \nwindow[\"inoMsTemplatesCache\"] = window[\"inoMsTemplatesCache\"] || {};\nwindow[\"inoMsTemplatesCache\"][\"inoMsScreener.addons.shareLink.shareLink.shareButtonNew.html\"] = \" \"; \nwindow[\"inoMsTemplatesCache\"] = window[\"inoMsTemplatesCache\"] || {};\nwindow[\"inoMsTemplatesCache\"][\"inoMsScreener.addons.shareLink.shareLink.shareModal.html\"] = \"

\"; \nwindow[\"inoMsTemplatesCache\"] = window[\"inoMsTemplatesCache\"] || {};\nwindow[\"inoMsTemplatesCache\"][\"inoMsScreener.addons.shareLink.shareLink.shareModalNew.html\"] = \"

\"; "]}