{"version":3,"sources":["inoMsEtfScreener.js","inoMsScreener.addons.compare.js","inoMsScreener.addons.compare.tmpl.js","inoMsScreener.addons.latestStateKeeper.js"],"names":["inovestor","ms","screenercore","screener","config","apiRelativeUrl","apiSlidersMinMaxValuesUrl","apiFieldsOptionsUrl","criteriaValues","numericOperators","key","value","currencies","operator","nameEn","nameFr","currencyHedged","booleans","riskRatings","eligibilities","managementExpenseRatio","values","min","max","managementFeePercent","quartiles","fieldTypes","includeForScreener","resourceKey","columnFilteringDisabled","includeForTable","id","groupKey","subGroupKey","comparerType","displayType","enableDisplayNumericLargeFormat","initialCall","sortColumn","sortType","criterias","predefinedScreens","categoryType","anyAsWildcard","serverSide","performInitialSortingServerSide","serverSidePagination","$","services","tableService","corePlugin","_viewModel","self","this","createDataTable","data","redirectUrl","tableOptions","dataThatShouldBeDisplayed","copy","extend","i","columnNames","length","hidden","splice","columnClasses","j","_createColumnNames","rows","_createTableRows","_doInitialSort","numPages","count","resultsPerPage","colNames","nameIndexToRemove","core","currentLanguage","setColumnNames","serverRows","colClasses","merge","classes","displayRows","nameIndex","currentRow","rowObj","mic","ticker","name","columnVisibility","index","push","isVisible","colObj","type","decimalPlaces","css","valueEn","valueFr","columns","currentCol","serverName","toLowerCase","setColumnHeaderStyling","libRef","jQuery","ko","pluginName","Plugin","element","options","_defaults","fn","inoMsEtfScreener","defaults","addon","filteredFieldTypes","filter","f","pluginCore","addons","registeredAddons","viewModels","screenerCoreViewModel","shareBaseUrl","forEach","x","extendViewModel","_tableService","setViewModel","setTableService","configurePlugin","init","prototype","fileName","plugin","fileCacheKey","templatePaths","filePath","isEmptyString","templateRootUrl","match","getTemplate","then","template","$element","html","render","renderAddons","bindModel","bindEvents","when","getFieldsOptions","getSliderMinMaxValues","always","openInitialScreener","ui","isNullOrUndefined","inoCdnBaseUrl","jUIScriptUrl","concatUrl","jUIStyleUrl","append","autocomplete","autocompleteScriptUrl","autocompleteStyleUrl","trigger","_name","first","addClass","deferred","Deferred","renderAddon","resolve","fail","error","reject","promise","viewModel","sliderAllMinMaxValues","observableArray","sliderAllMinMaxValuesAreLoading","observable","sliderAllMinMaxValuesAreUnavailable","dynamicFieldsOptionsAreLoading","dynamicFieldsOptionsAreUnavailable","emptyIds","managementExpenseRatioCriterias","managementFeePercentCriterias","assetClasses","benchmarks","cifscCategories","companies","economicDevelopments","targetOutcomes","frequencies","regions","sectors","countryEtfsCoverage","initialScreenerIsLoading","areFiltersBusy","computed","getCriteriasForComparerType","dataSourceIds","types","cetfaActives","inovestorActives","loadDefinedScreenerOrDefault","search","isMinimizedCriteria","console","hasError","screenerPlugin","contentType","apiErrorHandler","sliderFieldsTypes","apiUrl","map","val","stringFormat","sliderMinMaxValues","ajaxApi","apiBaseUrl","minMaxValues","each","item","fieldType","helper","findFieldTypeByKey","identifier","adapter","fromServer","viewModelObservable","identifierData","option","onError","resources","formLabels","fieldGroupNames","performance","shortTermTotalReturns","longTermReturns","performanceMore","tradability","cost","exposure","specific","geographic","fieldGroupTooltips","fieldNames","dataSourceId","issuerCompanyCode","countryCode","economicDevelopmentCode","isInverse","isLeveraged","regionCode","sectorId","benchmarkId","currency","managementFee","riskRating","assetClass","stockReplacement","1MonthReturn","3MonthReturn","6MonthReturn","ytdReturn","annualCompoundReturnY1","annualCompoundReturnY3","annualCompoundReturnY5","quartileY1","quartileY3","quartileY5","aum","taxEfficiencyY1","leverageFactor","predefinedCriteriaNames","popular","criteriaNames","equal","notEqual","greater","less","greaterOrEqual","lessOrEqual","in","between","where","is","and","or","dataTableLanguage","decimal","emptyTable","info","infoEmpty","infoFiltered","infoPostFix","thousands","lengthMenu","loadingRecords","processing","zeroRecords","paginate","last","next","previous","aria","sortAscending","sortDescending","any","filters","hideFilters","showFilters","clearFilters","addFilters","editFilters","addCriteria","removeFilter","searchCriteria","results","noResultsMessage","noFiltersMessage","unavailableFiltersMessage","hideShowColumns","close","copied","selectField","selectCriteria","searchSummaryLabels","start","wildCardError","exportToCsv","add","resetConfirmation","resetConfirmationCancel","resetConfirmationConfirm","to","noCriteria","minimumValue","maximumValue","stockReplacementSearchLabel","delete","originalGetQuerystringFn","countryFilter","validCountryFilters","getQuerystring","queryString","let","firstFilterApplied","filterInfo","find","toUpperCase","defaultOptions","etfCountryFilter","addonOptions","Error","Array","isArray","some","join","etfSponsor","showResultsFromAllProviders","lastApiSearchData","lastApiSearchDataCopy","__etfSponsor","subscribe","_handleApiSearchResult","originalMapViewModelStateToShareLinkScreenerFn","originalmapShareLinkScreenerToPredefinedScreenerFn","originaladdPredifinedCriteriaFn","originalResetFn","issuerCompanyCodes","reset","__shareLink","shareLink","mapper","mapViewModelStateToShareLinkScreener","linkScreenerData","mapShareLinkScreenerToPredefinedScreener","source","predefinedScreener","addPredifinedCriteria","predefinedFilter","handApiSearchResultFx","issuerCompanyCodeColumnIndex","nameEnColumnIndex","nameFrColumnIndex","filteredValues","requestStatus","findIndex","localeCompare","undefined","sensitivity","y","slice","compare","selectedItems","emptySelection","addToComparison","itemSelected","itemsSelected","maxSelectionWarning","view","compareSelectedItems","checkboxAriaLabel","viewModelExtension","comparatorUrl","maxNumberOfSymbol","container","currentResource","isSelected","code","removeFromComparisonSelection","remove","toggleAddToComparisonSelection","showSelectionModal","modal","canCompare","pureComputed","symbols","reduce","agg","location","href","normalizedSelectedItems","itemIndex","number","symbol","ref","templatePath","defaultFilename","__compare","initialSearchIsLoaded","searchFx","handleApiSearchResultFx","templates","result","selectionModal","tableFooter","tableHeader","tableColumn","window","latestStateKeeper","searchStateStorageKey","compareStateStorageKey","etfSponsorStateStorageKey","updateSearchState","mappers","queryCriteriaMapper","mapViewModelCriteriasToQueryCriterias","removeStorage","state","offset","setStorage","getStorage","storageApi","getItem","storageNamespace","parsed","JSON","parse","setItem","stringify","removeItem","setTimeout","newValue","trimmed","initialLatestSearchState","fx","initialLatestEtfSponsorState","initialLatestCompareState","fxResult","sessionStorage"],"mappings":"AAAAA,UAAAC,GAAAC,aAAAF,UAAAC,GAAAC,cAAA,GAWAF,UAAAC,GAAAC,aARAC,SAAA,CACAC,OAAA,CACAC,eAAA,gBACAC,0BAAA,8BACAC,oBAAA,6BACA,CACA,EAOA,SAAAP,GAEAA,EAAAC,GAAAC,aAAAF,EAAAC,GAAAC,cAAA,GAEAF,EAAAC,GAAAC,aAAAM,eAAA,CACAC,iBAAA,WACA,MAAA,CACA,CAAAC,IAAA,QAAAC,MAAA,GAAA,EACA,CAAAD,IAAA,WAAAC,MAAA,IAAA,EACA,CAAAD,IAAA,UAAAC,MAAA,GAAA,EACA,CAAAD,IAAA,OAAAC,MAAA,GAAA,EACA,CAAAD,IAAA,iBAAAC,MAAA,IAAA,EACA,CAAAD,IAAA,cAAAC,MAAA,IAAA,EACA,CAAAD,IAAA,KAAAC,MAAA,IAAA,EACA,CAAAD,IAAA,UAAAC,MAAA,SAAA,EAEA,EAEAC,WAAA,WACA,MAAA,CACA,CACAC,SAAA,IACAC,OAAA,MACAC,OAAA,MACAJ,MAAA,KACA,EACA,CACAE,SAAA,IACAC,OAAA,MACAC,OAAA,MACAJ,MAAA,KACA,EAEA,EAEAK,eAAA,WACA,MAAA,CACA,CACAH,SAAA,IACAC,OAAA,MACAC,OAAA,MACAJ,MAAA,GACA,EACA,CACAE,SAAA,IACAC,OAAA,KACAC,OAAA,MACAJ,MAAA,GACA,EACA,CACAE,SAAA,IACAC,OAAA,gBACAC,OAAA,kBACAJ,MAAA,GACA,EAEA,EAEAM,SAAA,WACA,MAAA,CACA,CACAJ,SAAA,IACAC,OAAA,MACAC,OAAA,MACAJ,MAAA,CAAA,CACA,EACA,CACAE,SAAA,IACAC,OAAA,KACAC,OAAA,MACAJ,MAAA,CAAA,CACA,EAEA,EAEAO,YAAA,WACA,MAAA,CACA,CACAL,SAAA,IACAC,OAAA,MACAC,OAAA,SACAJ,MAAA,KACA,EACA,CACAE,SAAA,IACAC,OAAA,gBACAC,OAAA,iBACAJ,MAAA,eACA,EACA,CACAE,SAAA,IACAC,OAAA,SACAC,OAAA,QACAJ,MAAA,QACA,EACA,CACAE,SAAA,IACAC,OAAA,iBACAC,OAAA,gBACAJ,MAAA,gBACA,EACA,CACAE,SAAA,IACAC,OAAA,OACAC,OAAA,QACAJ,MAAA,MACA,EAEA,EAEAQ,cAAA,WACA,MAAA,CACA,CACAN,SAAA,IACAC,OAAA,OACAC,OAAA,OACAJ,MAAA,MACA,EACA,CACAE,SAAA,IACAC,OAAA,OACAC,OAAA,OACAJ,MAAA,MACA,EACA,CACAE,SAAA,IACAC,OAAA,MACAC,OAAA,MACAJ,MAAA,KACA,EACA,CACAE,SAAA,IACAC,OAAA,OACAC,OAAA,OACAJ,MAAA,MACA,EACA,CACAE,SAAA,IACAC,OAAA,OACAC,OAAA,OACAJ,MAAA,MACA,EACA,CACAE,SAAA,IACAC,OAAA,OACAC,OAAA,OACAJ,MAAA,MACA,EACA,CACAE,SAAA,IACAC,OAAA,OACAC,OAAA,OACAJ,MAAA,MACA,EACA,CACAE,SAAA,IACAC,OAAA,OACAC,OAAA,OACAJ,MAAA,MACA,EACA,CACAE,SAAA,IACAC,OAAA,OACAC,OAAA,OACAJ,MAAA,MACA,EACA,CACAE,SAAA,IACAC,OAAA,OACAC,OAAA,OACAJ,MAAA,MACA,EACA,CACAE,SAAA,IACAC,OAAA,MACAC,OAAA,MACAJ,MAAA,KACA,EACA,CACAE,SAAA,IACAC,OAAA,OACAC,OAAA,OACAJ,MAAA,MACA,EAEA,EAEAS,uBAAA,WACA,MAAA,CACA,CACAP,SAAA,UACAC,OAAA,WACAC,OAAA,UACAM,OAAA,CACAC,IAAA,EACAC,IAAA,EACA,CACA,EACA,CACAV,SAAA,UACAC,OAAA,cACAC,OAAA,aACAM,OAAA,CACAC,IAAA,GACAC,IAAA,GACA,CACA,EACA,CACAV,SAAA,UACAC,OAAA,cACAC,OAAA,aACAM,OAAA,CACAC,IAAA,IACAC,IAAA,CACA,CACA,EACA,CACAV,SAAA,UACAC,OAAA,aACAC,OAAA,YACAM,OAAA,CACAC,IAAA,EACAC,IAAA,CACA,CACA,EACA,CACAV,SAAA,IACAC,OAAA,QACAC,OAAA,QACAJ,MAAA,CACA,EAEA,EAEAa,qBAAA,WACA,MAAA,CACA,CACAX,SAAA,UACAC,OAAA,WACAC,OAA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","file":"../inoMsEtfScreener.min.js","sourcesContent":["; inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n; (function (screenercore, undefined) {\n // Create plugin namespace with any desired config variable\n screenercore.screener = {\n config: {\n apiRelativeUrl: 'etfs/screener',\n apiSlidersMinMaxValuesUrl: 'etfs/screener/slidersminmax',\n apiFieldsOptionsUrl: 'etfs/screener/fieldsOptions'\n }\n };\n\n})(inovestor.ms.screenercore);\n\n\n\n\n; (function (inovestor, undefined) {\n // Create plugin namespace with any desired config variable\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n\n inovestor.ms.screenercore.criteriaValues = {\n numericOperators: function () {\n return [\n { key: 'equal', value: '=' },\n { key: 'notEqual', value: '<>' },\n { key: 'greater', value: '>' },\n { key: 'less', value: '<' },\n { key: 'greaterOrEqual', value: '>=' },\n { key: 'lessOrEqual', value: '<=' },\n { key: 'in', value: 'in' },\n { key: 'between', value: 'between' },\n ];\n },\n\n currencies: function () {\n return [\n {\n operator: '=',\n nameEn: 'CAD',\n nameFr: 'CAD',\n value: 'CAD'\n },\n {\n operator: '=',\n nameEn: 'USD',\n nameFr: 'USD',\n value: 'USD'\n },\n ];\n },\n\n currencyHedged: function () {\n return [\n {\n operator: '=',\n nameEn: 'Yes',\n nameFr: 'Oui',\n value: 'Y'\n },\n {\n operator: '=',\n nameEn: 'No',\n nameFr: 'Non',\n value: 'N'\n },\n {\n operator: '=',\n nameEn: 'Discretionary',\n nameFr: 'Discrétionnaire',\n value: 'D'\n },\n ];\n },\n\n booleans: function () {\n return [\n {\n operator: '=',\n nameEn: 'Yes',\n nameFr: 'Oui',\n value: true\n },\n {\n operator: '=',\n nameEn: 'No',\n nameFr: 'Non',\n value: false\n }\n ];\n },\n\n riskRatings: function () {\n return [\n {\n operator: '=',\n nameEn: 'Low',\n nameFr: 'Faible',\n value: 'Low'\n },\n {\n operator: '=',\n nameEn: 'Low to Medium',\n nameFr: 'Faible à moyen',\n value: 'Low to Medium'\n },\n {\n operator: '=',\n nameEn: 'Medium',\n nameFr: 'Moyen',\n value: 'Medium'\n },\n {\n operator: '=',\n nameEn: 'Medium to High',\n nameFr: 'Moyen à élevé',\n value: 'Medium to High'\n },\n {\n operator: '=',\n nameEn: 'High',\n nameFr: 'Élevé',\n value: 'High'\n }\n ];\n },\n\n eligibilities: function () {\n return [\n {\n operator: '=',\n nameEn: 'DPSP',\n nameFr: 'DPSP',\n value: 'DPSP'\n },\n {\n operator: '=',\n nameEn: 'DRIP',\n nameFr: 'DRIP',\n value: 'DRIP'\n },\n {\n operator: '=',\n nameEn: 'LIF',\n nameFr: 'LIF',\n value: 'LIF'\n },\n {\n operator: '=',\n nameEn: 'LIRA',\n nameFr: 'LIRA',\n value: 'LIRA'\n },\n {\n operator: '=',\n nameEn: 'LRIF',\n nameFr: 'LRIF',\n value: 'LRIF'\n },\n {\n operator: '=',\n nameEn: 'PACC',\n nameFr: 'PACC',\n value: 'PACC'\n },\n {\n operator: '=',\n nameEn: 'RDSP',\n nameFr: 'RDSP',\n value: 'RDSP'\n },\n {\n operator: '=',\n nameEn: 'RESP',\n nameFr: 'RESP',\n value: 'RESP'\n },\n {\n operator: '=',\n nameEn: 'RRIF',\n nameFr: 'RRIF',\n value: 'RRIF'\n },\n {\n operator: '=',\n nameEn: 'RRPS',\n nameFr: 'RRPS',\n value: 'RRPS'\n },\n {\n operator: '=',\n nameEn: 'SWP',\n nameFr: 'SWP',\n value: 'SWP'\n },\n {\n operator: '=',\n nameEn: 'TFSA',\n nameFr: 'TFSA',\n value: 'TFSA'\n }\n ];\n },\n\n managementExpenseRatio: function () {\n return [\n {\n operator: 'between',\n nameEn: '0 to 0.5',\n nameFr: '0 à 0,5',\n values: {\n min: 0,\n max: 0.5\n }\n },\n {\n operator: 'between',\n nameEn: '0.5 to 0.75',\n nameFr: '0,5 à 0,75',\n values: {\n min: 0.5,\n max: 0.75\n }\n },\n {\n operator: 'between',\n nameEn: '0.75 to 1.0',\n nameFr: '0,75 à 1,0',\n values: {\n min: 0.75,\n max: 1\n }\n },\n {\n operator: 'between',\n nameEn: '1.0 to 2.0',\n nameFr: '1,0 à 2,0',\n values: {\n min: 1,\n max: 2\n }\n },\n {\n operator: '>',\n nameEn: '> 2.0',\n nameFr: '> 2,0',\n value: 2\n }\n ]\n },\n\n managementFeePercent: function () {\n return [\n {\n operator: 'between',\n nameEn: '0 to 0.5',\n nameFr: '0 à 0,5',\n values: {\n min: 0,\n max: 0.5\n }\n },\n {\n operator: 'between',\n nameEn: '0.5 to 0.75',\n nameFr: '0,5 à 0,75',\n values: {\n min: 0.5,\n max: 0.75\n }\n },\n {\n operator: 'between',\n nameEn: '0.75 to 1.0',\n nameFr: '0,75 à 1,0',\n values: {\n min: 0.75,\n max: 1\n }\n },\n {\n operator: 'between',\n nameEn: '1.0 to 2.0',\n nameFr: '1,0 à 2,0',\n values: {\n min: 1,\n max: 2\n }\n },\n {\n operator: '>',\n nameEn: '> 2.0',\n nameFr: '> 2,0',\n value: 2\n }\n ]\n },\n\n quartiles: function () {\n return [\n {\n operator: '=',\n nameEn: '1st',\n nameFr: '1er',\n value: 1\n },\n {\n operator: '=',\n nameEn: '2nd',\n nameFr: '2e',\n value: 2\n },\n {\n operator: '=',\n nameEn: '3rd',\n nameFr: '3e',\n value: 3\n },\n {\n operator: '=',\n nameEn: '4th',\n nameFr: '4e',\n value: 4\n }\n ]\n },\n }\n\n})(inovestor);\n\n; (function (inovestor, undefined) {\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n\n inovestor.ms.screenercore.fieldTypes = [\n \n { includeForScreener: false, resourceKey: 'name', key: 'nameEn' },\n { includeForScreener: false, resourceKey: 'name', key: 'nameFr' },\n { includeForScreener: false, columnFilteringDisabled: true, resourceKey: 'ticker', key: 'ticker' },\n { includeForScreener: false, resourceKey: 'mic', key: 'mic' },\n { includeForScreener: false, includeForTable: false, resourceKey: 'dataSourceId', key: 'dataSourceId' },\n { includeForScreener: false, includeForTable: false, resourceKey: 'issuerCompanyCode', key: 'issuerCompanyCode' },\n\n // Performance - Short Term Total Returns\n { includeForScreener: true, id: 'ID-1MonthReturn-performance', groupKey: 'performance', subGroupKey: 'shortTermTotalReturns', resourceKey: '1MonthReturn', key: '1MonthReturn', comparerType: 'numeric', displayType: 'slider' },\n { includeForScreener: true, id: 'ID-3MonthReturn-performance', groupKey: 'performance', subGroupKey: 'shortTermTotalReturns', resourceKey: '3MonthReturn', key: '3MonthReturn', comparerType: 'numeric', displayType: 'slider' },\n { includeForScreener: true, id: 'ID-6MonthReturn-performance', groupKey: 'performance', subGroupKey: 'shortTermTotalReturns', resourceKey: '6MonthReturn', key: '6MonthReturn', comparerType: 'numeric', displayType: 'slider' },\n { includeForScreener: true, id: 'ID-YtdReturn-performance', groupKey: 'performance', subGroupKey: 'shortTermTotalReturns', resourceKey: 'ytdReturn', key: 'YtdReturn', comparerType: 'numeric', displayType: 'slider' },\n // last 12 months???\n\n // Performance - Long Term Returns\n { includeForScreener: true, id: 'ID-AnnualCompoundReturnY1-performance', groupKey: 'performance', subGroupKey: 'longTermReturns', resourceKey: 'annualCompoundReturnY1', key: 'AnnualCompoundReturnY1', comparerType: 'numeric', displayType: 'slider' },\n { includeForScreener: true, id: 'ID-AnnualCompoundReturnY3-performance', groupKey: 'performance', subGroupKey: 'longTermReturns', resourceKey: 'annualCompoundReturnY3', key: 'AnnualCompoundReturnY3', comparerType: 'numeric', displayType: 'slider' },\n { includeForScreener: true, id: 'ID-AnnualCompoundReturnY5-performance', groupKey: 'performance', subGroupKey: 'longTermReturns', resourceKey: 'annualCompoundReturnY5', key: 'AnnualCompoundReturnY5', comparerType: 'numeric', displayType: 'slider' },\n\n // Performance - More\n { includeForScreener: true, id: 'ID-QuartileY1-performance', groupKey: 'performance', subGroupKey: 'performanceMore', resourceKey: 'quartileY1', key: '1YearQuartile', comparerType: 'quartiles', displayType: 'buttonListNumeric' },\n { includeForScreener: true, id: 'ID-QuartileY3-performance', groupKey: 'performance', subGroupKey: 'performanceMore', resourceKey: 'quartileY3', key: '3YearQuartile', comparerType: 'quartiles', displayType: 'buttonListNumeric' },\n { includeForScreener: true, id: 'ID-QuartileY5-performance', groupKey: 'performance', subGroupKey: 'performanceMore', resourceKey: 'quartileY5', key: '5YearQuartile', comparerType: 'quartiles', displayType: 'buttonListNumeric' },\n\n // Tradability\n // Inflow/Outflow YTD???\n { includeForScreener: true, id: 'ID-Aum-tradability', groupKey: 'tradability', subGroupKey: 'null', resourceKey: 'aum', key: 'Aum', comparerType: 'numeric', displayType: 'slider', enableDisplayNumericLargeFormat: true },\n // Top 10%???\n // Number of holdings???\n // Volume 30 days???\n // Listed Country???\n // Inception Date???\n \n // Cost\n { includeForScreener: true, id: 'ID-mer-cost', groupKey: 'cost', subGroupKey: null, resourceKey: 'managementExpenseRatio', key: 'managementExpenseRatio', comparerType: 'managementExpenseRatio', displayType: 'buttonListNumeric' },\n { includeForScreener: true, id: 'ID-managementFeePercent-cost', groupKey: 'cost', subGroupKey: null, resourceKey: 'managementFee', key: 'managementFee', comparerType: 'managementFeePercent', displayType: 'buttonListNumeric' },\n { includeForScreener: true, id: 'ID-TaxEfficiencyY1-cost', groupKey: 'cost', subGroupKey: null, resourceKey: 'taxEfficiencyY1', key: 'TaxEfficiencyY1', comparerType: 'numeric', displayType: 'slider' },\n // tax lost harvesting??\n\n // Exposure \n { includeForScreener: true, id: 'ID-benchmarkId-exposure', groupKey: 'exposure', subGroupKey: null, resourceKey: 'benchmarkId', key: 'benchmarkId', comparerType: 'benchmarks', displayType: 'checkboxList' },\n { includeForScreener: true, id: 'ID-stockReplacement-exposure', groupKey: 'exposure', subGroupKey: null, resourceKey: 'stockReplacement', key: 'etfConstituentWeightPercent', comparerType: 'stockReplacement', displayType: 'stockReplacement' },\n { includeForScreener: true, id: 'ID-assetClass-exposure', groupKey: 'exposure', resourceKey: 'assetClass', key: 'assetClass', comparerType: 'assetClasses', displayType: 'checkboxList' },\n { includeForScreener: true, id: 'ID-sectorId-exposure', groupKey: 'exposure', subGroupKey: null, resourceKey: 'sectorId', key: 'sectorId', comparerType: 'sectors', displayType: 'checkboxList' },\n\n // Exposure - Specific\n { includeForScreener: true, id: 'ID-isLeveraged-exposure', groupKey: 'exposure', subGroupKey: 'specific', resourceKey: 'isLeveraged', key: 'isLeveraged', comparerType: 'booleans', displayType: 'buttonListText' },\n { includeForScreener: true, id: 'ID-isInverse-exposure', groupKey: 'exposure', subGroupKey: 'specific', resourceKey: 'isInverse', key: 'isInverse', comparerType: 'booleans', displayType: 'buttonListText' },\n { includeForScreener: true, id: 'ID-currency-exposure', groupKey: 'exposure', subGroupKey: 'specific', resourceKey: 'currency', key: 'currency', comparerType: 'currencies', displayType: 'buttonListText' },\n { includeForScreener: true, id: 'ID-riskRating-exposure', groupKey: 'exposure', subGroupKey: 'specific', resourceKey: 'riskRating', key: 'riskRating', comparerType: 'riskRatings', displayType: 'buttonListText' },\n // esg ????\n { includeForScreener: true, id: 'ID-currencyHedged-exposure', groupKey: 'exposure', subGroupKey: 'specific', resourceKey: 'currencyHedged', key: 'currencyHedged', comparerType: 'currencyHedged', displayType: 'buttonListText' },\n\n // Exposure - Geographic\n { includeForScreener: true, id: 'ID-countryCode-exposure', groupKey: 'exposure', subGroupKey: 'geographic', resourceKey: 'countryCode', key: 'countryCode', comparerType: 'countryEtfsCoverage', displayType: 'checkboxList' },\n { includeForScreener: true, id: 'ID-regionCode-exposure', groupKey: 'exposure', subGroupKey: 'geographic', resourceKey: 'regionCode', key: 'regionCode', comparerType: 'regions', displayType: 'checkboxList' },\n { includeForScreener: true, id: 'ID-economicDevelopmentCode-exposure', groupKey: 'exposure', subGroupKey: 'geographic', resourceKey: 'economicDevelopmentCode', key: 'economicDevelopmentCode', comparerType: 'economicDevelopments', displayType: 'checkboxList' },\n\n //{ includeForScreener: true, id: 'ID-eligibility-cost', groupKey: 'cost', subGroupKey: null, resourceKey: 'eligibility', key: 'eligibility', comparerType: 'eligibilities', displayType: 'checkboxList' },\n // { includeForScreener: true, id: 'ID-distributionFrequencyCode-general', groupKey: 'general', resourceKey: 'distributionFrequencyCode', key: 'distributionFrequencyCode', comparerType: 'frequencies', displayType: 'checkboxList' },\n // { includeForScreener: true, id: 'ID-isPaysTrailer-general', groupKey: 'general', resourceKey: 'isPaysTrailer', key: 'isPaysTrailer', comparerType: 'booleans', displayType: 'buttonListText' },\n // { includeForScreener: true, id: 'ID-type-general', groupKey: 'general', resourceKey: 'type', key: 'type', comparerType: 'types', displayType: 'checkboxList' },\n // { includeForScreener: true, id: 'ID-ceftaActive-general', groupKey: 'general', resourceKey: 'cetfaActive', key: 'cetfaActive', comparerType: 'cetfaActives', displayType: 'buttonListText' },\n // { includeForScreener: true, id: 'ID-cifscCategoryId-general', groupKey: 'general', resourceKey: 'cifscCategoryId', key: 'cifscCategoryId', comparerType: 'cifscCategories', displayType: 'checkboxList' },\n // { includeForScreener: true, id: 'ID-custodianCompanyCode-general', groupKey: 'general', resourceKey: 'custodianCompanyCode', key: 'custodianCompanyCode', comparerType: 'companies', displayType: 'checkboxList' }, \n // { includeForScreener: true, id: 'ID-inovestorActive-general', groupKey: 'general', resourceKey: 'inovestorActive', key: 'inovestorActive', comparerType: 'inovestorActives', displayType: 'buttonListText' },\n // { includeForScreener: true, id: 'ID-issuerCompanyCode-general', groupKey: 'general', resourceKey: 'issuerCompanyCode', key: 'issuerCompanyCode', comparerType: 'companies', displayType: 'checkboxList' },\n // { includeForScreener: true, id: 'ID-leverageFactor-general', groupKey: 'general', resourceKey: 'leverageFactor', key: 'leverageFactor', comparerType: 'numeric', displayType: 'slider' },\n // { includeForScreener: true, id: 'ID-portfolioManagementCompanyCode-general', groupKey: 'general', resourceKey: 'portfolioManagementCompanyCode', key: 'portfolioManagementCompanyCode', comparerType: 'companies', displayType: 'checkboxList' },\n // { includeForScreener: true, id: 'ID-rebalancingFrequencyCode-general', groupKey: 'general', resourceKey: 'rebalancingFrequencyCode', key: 'rebalancingFrequencyCode', comparerType: 'frequencies', displayType: 'checkboxList' },\n // { includeForScreener: true, id: 'ID-targetOutcomeCode-general', groupKey: 'general', resourceKey: 'targetOutcomeCode', key: 'targetOutcomeCode', comparerType: 'targetOutcomes', displayType: 'checkboxList' },\n // { includeForScreener: true, id: 'ID-categoryInovestor1-exposure', groupKey: 'exposure', subGroupKey: null, resourceKey: 'categoryInovestor1', key: 'categoryInovestor1', comparerType: 'inovestorCategories', displayType: 'checkboxList' },\n // { includeForScreener: true, id: 'ID-categoryInovestor2-general', groupKey: 'general', resourceKey: 'categoryInovestor2', key: 'categoryInovestor2', comparerType: 'inovestorCategories', displayType: 'checkboxList' },\n // { includeForScreener: true, id: 'ID-categoryInovestor3-general', groupKey: 'general', resourceKey: 'categoryInovestor3', key: 'categoryInovestor3', comparerType: 'inovestorCategories', displayType: 'checkboxList' },\n \n // { includeForScreener: true, id: 'ID-trailerFee-general', groupKey: 'fees', resourceKey: 'trailerFee', key: 'trailerFee', comparerType: 'numeric', displayType: 'slider' },\n ];\n\n inovestor.ms.screenercore.initialCall =\n {\n sortColumn: 'etfConstituentWeightPercent',\n sortType: 'desc',\n criterias: { }\n };\n\n inovestor.ms.screenercore.predefinedScreens = [\n ]\n\n // Set data type to etf\n inovestor.ms.screenercore.categoryType = 'etf';\n\n inovestor.ms.screenercore.anyAsWildcard = true;\n\n // Set server side processing values\n inovestor.ms.screenercore.serverSide = false;\n inovestor.ms.screenercore.performInitialSortingServerSide = false;\n inovestor.ms.screenercore.serverSidePagination = false;\n\n})(inovestor);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n; (function ($, ko, inovestor, undefined) {\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.services = inovestor.ms.screenercore.services || {};\n\n inovestor.ms.screenercore.services.tableService = function (corePlugin, _viewModel) {\n\n var self = this;\n self.corePlugin = corePlugin;\n self._viewModel = _viewModel;\n\n self.createDataTable = function (data, redirectUrl, tableOptions) {\n var dataThatShouldBeDisplayed = removeColumnThatShouldNotBeDisplayedInTheTable(data);\n\n // Set the column names\n self._createColumnNames(dataThatShouldBeDisplayed.columnNames);\n // Set the rows\n self._viewModel.rows(self._createTableRows(dataThatShouldBeDisplayed.values, dataThatShouldBeDisplayed.columnClasses));\n // Sort the rows\n self._doInitialSort();\n\n self._viewModel.numPages(dataThatShouldBeDisplayed.count / self._viewModel.resultsPerPage());\n };\n\n function removeColumnThatShouldNotBeDisplayedInTheTable (data) {\n var copy = $.extend(true, {}, data)\n\n for (var i = copy.columnNames.length - 1; i >= 0; i--) {\n if (copy.columnNames[i].hidden === true) {\n copy.columnNames.splice(i, 1);\n copy.columnClasses.splice(i, 1);\n for (var j = 0; j < copy.values.length; j++) {\n copy.values[j].splice(i, 1);\n } \n }\n }\n\n return copy\n }\n\n /**\n * Accepts the column names from the server and omits the ones\n * that are not to be displayed in the table.\n * \n * @param {array} colNames - Collection of column names from the server\n */\n self._createColumnNames = function (colNames) {\n var mic = 1;\n var nameEn = 2;\n var nameFr = 3;\n\n var nameIndexToRemove = inovestor.ms.core.currentLanguage === 'en' ? nameFr : nameEn;\n\n self._viewModel.setColumnNames(colNames, [mic, nameIndexToRemove]);\n };\n\n /**\n * Accepts the column classes and the row data and creates the rows to\n * be displayed in the table.\n * \n * @param {array} serverRows - Collection of values from the server\n * @param {array} colClasses - CSS classes to be applied to the columns\n * @returns {array} - The rows set up to be displayed\n */\n self._createTableRows = function (serverRows, colClasses) {\n var rows = $.merge([], serverRows);\n var classes = $.merge([], colClasses);\n var displayRows = [];\n var nameIndex = inovestor.ms.core.currentLanguage === 'en' ? 2 : 3;\n\n for (var i = 0; i < rows.length; i++) {\n var currentRow = rows[i];\n var rowObj = {};\n\n // Assign the values we know will always be there\n rowObj.mic = currentRow[1];\n rowObj.ticker = currentRow[0];\n rowObj.name = currentRow[nameIndex];\n rowObj.data = [];\n rowObj.columnVisibility = [];\n\n for (var index = 0; index < self._viewModel.columnNames().length; index++) {\n rowObj.columnVisibility.push(self._viewModel.columnNames()[index].isVisible);\n }\n\n // Add the rest of the values\n for (var j = 4; j < currentRow.length; j++) {\n var data = currentRow[j];\n var colObj = {};\n\n switch (data.type) {\n case 'numeric':\n colObj = {\n value: data.value,\n decimalPlaces: data.decimalPlaces,\n type: data.type,\n enableDisplayNumericLargeFormat: data.enableDisplayNumericLargeFormat,\n css: classes[j]\n };\n break;\n case 'localizedText':\n colObj = {\n valueEn: data.valueEn,\n valueFr: data.valueFr,\n type: data.type,\n css: classes[j]\n };\n break;\n case 'resourceText':\n colObj = {\n key: data.key,\n type: data.type,\n css: classes[j]\n };\n break;\n case 'text':\n colObj = {\n value: data.value,\n type: data.type,\n css: classes[j]\n };\n break;\n default:\n colObj = {\n value: '-',\n css: classes[j]\n }\n };\n\n rowObj.data.push(colObj);\n }\n\n displayRows.push(rowObj);\n }\n\n return displayRows;\n };\n\n /**\n * Does the initial sort for the rows\n */\n self._doInitialSort = function () {\n var sortColumn = self._viewModel.sortColumn();\n var columns = self._viewModel.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 && sortColumn && currentCol.serverName.toLowerCase() === sortColumn.toLowerCase()) {\n index = i;\n break;\n }\n }\n\n // Set the column header styling\n if (index >= 0)\n self._viewModel.columnNames()[index].css =\n self._viewModel.sortType() === 'asc' ? 'sorting-desc' : 'sorting-asc';\n\n self._viewModel.setColumnHeaderStyling(index);\n };\n }\n\n})(inovestor.ms.libRef.jQuery, inovestor.ms.libRef.ko, inovestor, undefined);\n; (function ($, ko, inovestor, undefined) {\n\n var pluginName = 'inoMsEtfScreener';\n\n // Create the plugin constructor\n function Plugin(element, options) {\n\n this._defaults = $.fn.inoMsEtfScreener.defaults;\n\n // Merge options with defaults\n this.options = $.extend({}, this._defaults, options);\n this.options.name = pluginName;\n\n var filteredFieldTypes = inovestor.ms.screenercore.fieldTypes.filter(function (f) { return f.includeForScreener === true });\n\n this.corePlugin = new inovestor.ms.screenercore.pluginCore(element, this.options);\n\n this.addons = [];\n for (var addon in this.options.addons) {\n this.addons.push(new inovestor.ms.screenercore.registeredAddons[addon](this, this.options.addons[addon]));\n } \n\n // Plugin extra\n this._viewModel = new inovestor.ms.screenercore.viewModels.screenerCoreViewModel(\n this.options.shareBaseUrl,\n filteredFieldTypes,\n inovestor.ms.screenercore.criteriaValues.numericOperators(),\n this.options.redirectUrl,\n true,\n this.corePlugin\n );\n this.addons.forEach(function (x) { if (x.extendViewModel) x.extendViewModel(this._viewModel); }, this);\n\n this._tableService = new inovestor.ms.screenercore.services.tableService(this.corePlugin, this._viewModel);\n\n this.corePlugin.setViewModel(this._viewModel);\n this.corePlugin.setTableService(this._tableService);\n\n this.configurePlugin(this._viewModel);\n\n this.init();\n }\n\n $.extend(Plugin.prototype, {\n\n // Initialization logic\n init: function () {\n var corePlugin = this.corePlugin;\n var plugin = this;\n\n // Plugin overrides for template = cacheKey and path are the same\n var fileCacheKey = plugin.options.templatePaths.screener;\n var filePath = plugin.options.templatePaths.screener;\n // Default behavior (if no template path is set by plugin)\n if (inovestor.ms.core.isEmptyString(fileCacheKey)) {\n var fileName = 'screenerNew.html'; // we want to use the new template by default\n fileCacheKey = 'inoMsScreenerCore' + '.' + fileName;\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' + '/' + fileName);\n }\n\n // Get main template file\n inovestor.ms.core.getTemplate(fileCacheKey, filePath).then(function (template) {\n corePlugin.$element.html(template);\n corePlugin.render();\n plugin.renderAddons(plugin.addons, corePlugin.$element).then(function () {\n corePlugin.bindModel();\n corePlugin.bindEvents();\n \n // Get data from API\n $.when(plugin.getFieldsOptions(), plugin.getSliderMinMaxValues()).always(function () {\n // Make a call for initial\n plugin.openInitialScreener();\n });\n });\n }).then(function () {\n\n if (!$.ui) {\n if (inovestor.ms.core.isNullOrUndefined(plugin.options.inoCdnBaseUrl))\n throw \"inoCdnBaseUrl is required\";\n\n var jUIScriptUrl = inovestor.ms.core.concatUrl(plugin.options.inoCdnBaseUrl, 'dist/libs/jquery-ui/jquery-ui.min.js');\n var jUIStyleUrl = inovestor.ms.core.concatUrl(plugin.options.inoCdnBaseUrl, 'dist/libs/jquery-ui/jquery-ui.min.css');\n\n $('body').append('');\n $('body').append('');\n }\n\n var autocomplete = inovestor.ms.autocomplete;\n if (!autocomplete) {\n if (inovestor.ms.core.isNullOrUndefined(plugin.options.inoCdnBaseUrl))\n throw \"inoCdnBaseUrl is required\";\n\n var autocompleteScriptUrl = inovestor.ms.core.concatUrl(plugin.options.inoCdnBaseUrl, 'widgets/inoMsAutocomplete/inoMsAutocomplete-2.1.1.min.js');\n var autocompleteStyleUrl = inovestor.ms.core.concatUrl(plugin.options.inoCdnBaseUrl, 'widgets/inoMsAutocomplete/inoMsAutocomplete-2.1.1.min.css');\n $('body').append('');\n $('body').append('');\n }\n\n // trigger onReady event\n corePlugin.$element.trigger('ready' + '.' + plugin._name);\n\n // Auto select the first filter\n $('.predifined-screens-item').first().addClass('font-bold');\n });\n },\n\n renderAddons: function (addons, $element) {\n var deferred = $.Deferred();\n\n function renderAddon(index) {\n if (index >= addons.length) {\n deferred.resolve();\n return;\n }\n \n addons[index].render($element).then(function () {\n renderAddon(index + 1);\n }).fail(function (error) {\n deferred.reject(error);\n });\n }\n\n renderAddon(0);\n\n return deferred.promise();\n },\n\n configurePlugin: function (viewModel) {\n // ViewModel Extra\n viewModel.sliderAllMinMaxValues = ko.observableArray();\n viewModel.sliderAllMinMaxValuesAreLoading = ko.observable(false);\n viewModel.sliderAllMinMaxValuesAreUnavailable = ko.observable(false);\n viewModel.dynamicFieldsOptionsAreLoading = ko.observable(false);\n viewModel.dynamicFieldsOptionsAreUnavailable = ko.observable(false);\n viewModel.emptyIds = ko.observableArray([]) // #TODO: Delete when not used anymore (only there before the dynamic list loading)\n viewModel.currencies = ko.observableArray(inovestor.ms.screenercore.criteriaValues.currencies());\n viewModel.currencyHedged = ko.observableArray(inovestor.ms.screenercore.criteriaValues.currencyHedged());\n viewModel.booleans = ko.observableArray(inovestor.ms.screenercore.criteriaValues.booleans());\n viewModel.riskRatings = ko.observableArray(inovestor.ms.screenercore.criteriaValues.riskRatings());\n viewModel.eligibilities = ko.observableArray(inovestor.ms.screenercore.criteriaValues.eligibilities());\n viewModel.managementExpenseRatioCriterias = ko.observableArray(inovestor.ms.screenercore.criteriaValues.managementExpenseRatio());\n viewModel.managementFeePercentCriterias = ko.observableArray(inovestor.ms.screenercore.criteriaValues.managementFeePercent());\n viewModel.quartiles = ko.observableArray(inovestor.ms.screenercore.criteriaValues.quartiles());\n // placeholders for dynamic lists\n viewModel.assetClasses = ko.observableArray();\n viewModel.benchmarks = ko.observableArray();\n viewModel.cifscCategories = ko.observableArray();\n viewModel.companies = ko.observableArray();\n viewModel.economicDevelopments = ko.observableArray();\n viewModel.targetOutcomes = ko.observableArray();\n viewModel.frequencies = ko.observableArray();\n viewModel.regions = ko.observableArray();\n viewModel.sectors = ko.observableArray();\n viewModel.countryEtfsCoverage = ko.observableArray();\n // end of placeholders for dynamic list\n\n viewModel.initialScreenerIsLoading = ko.observable(false);\n viewModel.areFiltersBusy = ko.computed(function () {\n return viewModel.dynamicFieldsOptionsAreLoading() || viewModel.sliderAllMinMaxValuesAreLoading() || viewModel.initialScreenerIsLoading();\n });\n\n viewModel.getCriteriasForComparerType = function (comparerType) {\n switch (comparerType) {\n case 'emptyIds':\n return viewModel.emptyIds;\n case 'dataSourceIds':\n return viewModel.dataSourceIds;\n case 'currencies':\n return viewModel.currencies;\n case 'currencyHedged':\n return viewModel.currencyHedged;\n case 'booleans':\n return viewModel.booleans;\n case 'managementExpenseRatio':\n return viewModel.managementExpenseRatioCriterias;\n case 'managementFeePercent':\n return viewModel.managementFeePercentCriterias;\n case 'riskRatings':\n return viewModel.riskRatings;\n case 'types':\n return viewModel.types;\n case 'cetfaActives':\n return viewModel.cetfaActives;\n case 'eligibilities':\n return viewModel.eligibilities;\n case 'inovestorActives':\n return viewModel.inovestorActives;\n case 'quartiles':\n return viewModel.quartiles;\n case 'assetClasses':\n return viewModel.dynamicFieldsOptionsAreUnavailable() ? null : viewModel.assetClasses;\n case 'benchmarks':\n return viewModel.dynamicFieldsOptionsAreUnavailable() ? null : viewModel.benchmarks;\n case 'cifscCategories':\n return viewModel.dynamicFieldsOptionsAreUnavailable() ? null : viewModel.cifscCategories;\n case 'companies':\n return viewModel.dynamicFieldsOptionsAreUnavailable() ? null : viewModel.companies;\n case 'economicDevelopments':\n return viewModel.dynamicFieldsOptionsAreUnavailable() ? null : viewModel.economicDevelopments;\n case 'targetOutcomes':\n return viewModel.dynamicFieldsOptionsAreUnavailable() ? null : viewModel.targetOutcomes;\n case 'frequencies':\n return viewModel.dynamicFieldsOptionsAreUnavailable() ? null : viewModel.frequencies;\n case 'regions':\n return viewModel.dynamicFieldsOptionsAreUnavailable() ? null : viewModel.regions;\n case 'sectors':\n return viewModel.dynamicFieldsOptionsAreUnavailable() ? null : viewModel.sectors;\n case 'countryEtfsCoverage':\n return viewModel.dynamicFieldsOptionsAreUnavailable() ? null : viewModel.countryEtfsCoverage;\n default:\n return null;\n }\n }\n\n return viewModel;\n },\n\n // Open initial screener\n openInitialScreener: function () {\n var plugin = this.corePlugin;\n\n plugin._viewModel.initialScreenerIsLoading(true);\n\n plugin.loadDefinedScreenerOrDefault(plugin.options.screener).then(function () {\n if (plugin.search() != null) {\n plugin._viewModel.isMinimizedCriteria(true)\n }\n }).fail(function (error) {\n console.error(error);\n plugin._viewModel.hasError(true);\n }).always(function () {\n plugin._viewModel.initialScreenerIsLoading(false);\n });\n },\n\n // Get slider min max values\n getSliderMinMaxValues: function () {\n var plugin = this.corePlugin;\n var screenerPlugin = this;\n\n screenerPlugin._viewModel.sliderAllMinMaxValuesAreLoading(true);\n\n var options = { type: 'GET', contentType: 'application/json', error: function (error) { plugin.apiErrorHandler(error, screenerPlugin._viewModel.sliderAllMinMaxValuesAreUnavailable); } };\n\n // Call API and bind model\n var sliderFieldsTypes = screenerPlugin._viewModel.fieldTypes().filter(function (f) { return f.comparerType === 'numeric' });\n var sliderFields = $.map(sliderFieldsTypes, function (val) { return val.key; });\n\n var apiUrl = inovestor.ms.core.stringFormat(inovestor.ms.screenercore.screener.config.apiSlidersMinMaxValuesUrl);\n\n var sliderMinMaxValues = inovestor.ms.core.ajaxApi(apiUrl, options, plugin.options.apiBaseUrl).then(function (data) {\n var minMaxValues = [];\n $.each(data, function (i, item) {\n var fieldType = inovestor.ms.screenercore.helper.findFieldTypeByKey(item.identifier);\n if (fieldType && fieldType.adapter) {\n item.min = fieldType.adapter.fromServer(item.min);\n item.max = fieldType.adapter.fromServer(item.max);\n }\n \n minMaxValues.push({\n key: item.identifier,\n min: item.min,\n max: item.max\n });\n });\n screenerPlugin._viewModel.sliderAllMinMaxValues(minMaxValues);\n }).always(function () {\n screenerPlugin._viewModel.sliderAllMinMaxValuesAreLoading(false);\n });\n\n return $.when(sliderMinMaxValues);\n },\n\n getFieldsOptions: function () {\n var plugin = this;\n var corePlugin = this.corePlugin;\n\n plugin._viewModel.dynamicFieldsOptionsAreLoading(true);\n \n var fieldsOptionsCallOptions = { type: 'GET', contentType: 'application/json', error: function (error) { corePlugin.apiErrorHandler(error, plugin._viewModel.dynamicFieldsOptionsAreUnavailable); } };\n\n return inovestor.ms.core.ajaxApi(inovestor.ms.screenercore.screener.config.apiFieldsOptionsUrl, fieldsOptionsCallOptions, plugin.options.apiBaseUrl).then(function (data) {\n function map (identifier, viewModelObservable) {\n const identifierData = data.filter(function (x) { return x.identifier === identifier; })\n\n if (identifierData.length === 0) {\n viewModelObservable([])\n } else {\n viewModelObservable(identifierData[0].options.map(function (option) {\n return {\n key: identifierData[0].identifier,\n nameEn: option.nameEn,\n nameFr: option.nameFr,\n value: option.value\n };\n }));\n }\n }\n\n map('AssetClasses', plugin._viewModel.assetClasses)\n map('Benchmarks', plugin._viewModel.benchmarks)\n map('CifscCategories', plugin._viewModel.cifscCategories)\n map('Companies', plugin._viewModel.companies)\n map('EconomicDevelopments', plugin._viewModel.economicDevelopments)\n map('TargetOutcomes', plugin._viewModel.targetOutcomes)\n map('Frequencies', plugin._viewModel.frequencies)\n map('Regions', plugin._viewModel.regions)\n map('Sectors', plugin._viewModel.sectors)\n map('CountryEtfsCoverage', plugin._viewModel.countryEtfsCoverage)\n }).always(function () {\n plugin._viewModel.dynamicFieldsOptionsAreLoading(false);\n });\n }\n });\n\n // JQuery Plugin wrapper\n $.fn.inoMsEtfScreener = function (options) {\n this.each(function () {\n if (!$.data(this, pluginName)) {\n // Store instance of plugin in \"$.data\"\n $.data(this, pluginName, new Plugin(this, options));\n }\n });\n\n // return plugin to support JQuery chaining\n return this;\n };\n $.fn.inoMsEtfScreener.defaults = {\n templatePaths: {\n screener: null\n },\n addons: {},\n onError: null\n };\n\n})(inovestor.ms.libRef.jQuery, inovestor.ms.libRef.ko, inovestor);\n; (function (inovestor, undefined) {\n inovestor.ms.screenercore.resources = inovestor.ms.screenercore.resources || {};\n inovestor.ms.screenercore.resources[\"en\"] = {\n formLabels: {\n fieldGroupNames: {\n performance: 'Performance',\n shortTermTotalReturns: 'Short Term Total Returns',\n longTermReturns: 'Long Term Returns',\n performanceMore: 'More',\n tradability: 'Tradability',\n cost: 'Cost',\n exposure: 'Exposure',\n specific: 'Specific',\n geographic: 'Geographic'\n },\n fieldGroupTooltips: {\n performance: \"Past Performance is not indicative of future results.\"\n },\n fieldNames: {\n name: 'Name',\n mic: 'MIC',\n ticker: 'Ticker',\n dataSourceId: 'Data Source',\n issuerCompanyCode: 'Issuer Company Code',\n\n countryCode: 'Country',\n economicDevelopmentCode: 'Economic Region',\n isInverse: 'Short Selling Exposure',\n isLeveraged: 'Leverage',\n regionCode: 'Region',\n sectorId: 'Sectors',\n benchmarkId: 'Benchmark',\n currency: 'Currency',\n currencyHedged: 'Currency Hedging',\n managementExpenseRatio: 'Management Expense Ratio (%)',\n managementFee: 'Management Fees (%)',\n riskRating: 'Risk Rating',\n assetClass: 'Asset Class',\n stockReplacement: 'Stock Replacement',\n '1MonthReturn': 'Last month return (%)',\n '3MonthReturn': 'Last 3 months return (%)',\n '6MonthReturn': 'Last 6 months return (%)',\n ytdReturn: 'Year to date return (%)',\n annualCompoundReturnY1: 'Last year return (%)',\n annualCompoundReturnY3: 'Last 3 years return (%)',\n annualCompoundReturnY5: 'Last 5 years return (%)',\n quartileY1: 'Quartile Y1',\n quartileY3: 'Quartile Y3',\n quartileY5: 'Quartile Y5',\n aum: 'AUM',\n taxEfficiencyY1: 'Tax Efficiency',\n \n },\n columnNames: {\n dataSourceId: 'Data Source',\n issuerCompanyCode: 'Issuer Company Code',\n\n countryCode: 'Country',\n economicDevelopmentCode: 'Economic Region',\n isInverse: 'Short Selling Exposure',\n isLeveraged: 'Leverage',\n leverageFactor: 'LeverageFactor',\n regionCode: 'Region',\n sectorId: 'Sectors',\n benchmarkId: 'Benchmark',\n currency: 'Currency',\n currencyHedged: 'Currency Hedging',\n managementExpenseRatio: 'Management Expense Ratio (%)',\n managementFee: 'Management Fees (%)',\n riskRating: 'Risk Rating',\n assetClass: 'Asset Class',\n name: 'Name',\n ticker: 'Ticker',\n stockReplacement: 'Stock Replacement',\n '1MonthReturn': 'Last month return',\n '3MonthReturn': 'Last 3 months return',\n '6MonthReturn': 'Last 6 months return',\n ytdReturn: 'Year to date return',\n annualCompoundReturnY1: 'Last year return',\n annualCompoundReturnY3: 'Last 3 years return',\n annualCompoundReturnY5: 'Last 5 years return',\n quartileY1: 'Quartile Y1',\n quartileY3: 'Quartile Y3',\n quartileY5: 'Quartile Y5',\n aum: 'AUM',\n taxEfficiencyY1: 'Tax Efficiency'\n },\n predefinedCriteriaNames: {\n popular: 'Popular Screens:',\n },\n criteriaNames: {\n equal: '=',\n notEqual: '<>',\n greater: '>',\n less: '<',\n greaterOrEqual: '>=',\n lessOrEqual: '<=',\n 'in': 'In',\n between: 'Between',\n\n where: 'WHERE',\n is: 'IS',\n and: 'AND',\n or: 'OR',\n }\n },\n dataTableLanguage: {\n \"decimal\": \"\",\n \"emptyTable\": \"No data available in table\",\n \"info\": \"Showing {0} to {1} of {2} entries\",\n \"infoEmpty\": \"Showing 0 to 0 of 0 entries\",\n \"infoFiltered\": \"(filtered from _MAX_ total entries)\",\n \"infoPostFix\": \"\",\n \"thousands\": \",\",\n \"lengthMenu\": \"Show _MENU_ entries\",\n \"loadingRecords\": \"Loading...\",\n \"processing\": \"Processing...\",\n \"search\": \"Search:\",\n \"zeroRecords\": \"No matching records found\",\n \"paginate\": {\n \"first\": \"First\",\n \"last\": \"Last\",\n \"next\": \"Next\",\n \"previous\": \"Previous\"\n },\n \"aria\": {\n \"sortAscending\": \": activate to sort column ascending\",\n \"sortDescending\": \": activate to sort column descending\"\n }\n },\n any: 'Any',\n filters: 'Criteria',\n hideFilters: 'HIDE ALL FILTERS',\n showFilters: 'SHOW ALL FILTERS',\n clearFilters: 'CLEAR CRITERIA',\n addFilters: 'Add Criteria',\n editFilters: 'Edit Criteria',\n addCriteria: '+ Add Criteria',\n removeFilter: 'Remove Criterion',\n searchCriteria: 'Search Criteria',\n results: 'Results',\n noResultsMessage: 'No results available for your query. Please change your filters and try again',\n noFiltersMessage: 'No filters available',\n unavailableFiltersMessage: 'Filters are not available at the moment. Please try again later.',\n resultsPerPage: 'Results per page: ',\n hideShowColumns: 'Hide/Show Columns',\n close: 'Close',\n copied: 'Copied',\n criterias: 'Criterias',\n selectField: 'Select Field',\n selectCriteria: 'Select Criteria',\n search: 'Search',\n searchSummaryLabels: {\n equal: 'equal to',\n notEqual: 'not equal to',\n greater: 'greater than',\n less: 'less than',\n greaterOrEqual: 'greater or equal to',\n lessOrEqual: 'less or equal to',\n 'in': 'in',\n between: 'between',\n start: 'Funds ',\n and: ' and '\n },\n wildCardError: 'Please modify criteria for the selected filters to see appropriate results',\n exportToCsv: 'Download CSV',\n add: 'Add',\n resetConfirmation: 'Do you want to clear all criteria?',\n resetConfirmationCancel: 'Back to screener',\n resetConfirmationConfirm: 'Yes',\n to: 'to',\n noCriteria: 'Please add criteria',\n minimumValue: 'Minimum value',\n maximumValue: 'Maximum value',\n stockReplacementSearchLabel: 'Type stock symbol or name here',\n delete: 'Delete'\n };\n})(inovestor);\n\n; (function (inovestor, undefined) {\n inovestor.ms.screenercore.resources = inovestor.ms.screenercore.resources || {};\n inovestor.ms.screenercore.resources[\"fr\"] = {\n formLabels: {\n fieldGroupNames: {\n performance: 'Performance',\n shortTermTotalReturns: 'Rendement total à court terme',\n longTermReturns: 'Rendement à long terme',\n performanceMore: 'Plus',\n tradability: 'Négociation',\n cost: 'Coût',\n exposure: 'Exposition',\n specific: 'Spécifique',\n geographic: 'Géographique'\n },\n fieldGroupTooltips: {\n performance: \"Le rendement passé n'est pas indicatif des rendements futurs.\"\n },\n fieldNames: {\n name: 'Nom',\n mic: 'MIC',\n ticker: 'Ticker',\n dataSourceId: 'Source',\n issuerCompanyCode: 'Issuer Company Code',\n\n countryCode: 'Pays',\n economicDevelopmentCode: 'Région économique',\n isInverse: 'Exposition vente à découvert',\n isLeveraged: 'Levier financier',\n regionCode: 'Région',\n sectorId: 'Secteurs',\n benchmarkId: 'Indice de référence',\n currency: 'Devise',\n currencyHedged: 'Couverture de devise',\n managementExpenseRatio: 'Ratio de frais de gestion (%)',\n managementFee: 'Frais de gestion (%)',\n riskRating: 'Cote de risque',\n assetClass: \"Classe d'actifs\",\n stockReplacement: \"Remplacement d'actions\",\n '1MonthReturn': 'Rendement du dernier mois (%)',\n '3MonthReturn': 'Rendement 3 mois (%)',\n '6MonthReturn': 'Rendement 6 mois (%)',\n ytdReturn: 'Rendement cumul annuel (%)',\n annualCompoundReturnY1: 'Rendement 1 an (%)',\n annualCompoundReturnY3: 'Rendement 3 ans (%)',\n annualCompoundReturnY5: 'Rendement 5 ans (%)',\n quartileY1: 'Quartile 1 an',\n quartileY3: 'Quartile 3 ans',\n quartileY5: 'Quartile 5 ans',\n aum: 'Actifs sous gestion',\n taxEfficiencyY1: 'Efficacité fiscale'\n },\n columnNames: {\n dataSourceId: 'Data Source',\n issuerCompanyCode: 'Issuer Company Code',\n\n countryCode: 'Pays',\n economicDevelopmentCode: 'Région économique',\n isInverse: 'Exposition vente à découvert',\n isLeveraged: 'Levier financier',\n leverageFactor: 'Niveau de levier financier',\n regionCode: 'Région',\n sectorId: 'Secteurs',\n benchmarkId: 'Indice de référence',\n currency: 'Devise',\n currencyHedged: 'Couverture de devise',\n managementExpenseRatio: 'Ratio de frais de gestion (%)',\n managementFee: 'Frais de gestion (%)',\n riskRating: 'Cote de risque',\n assetClass: \"Classe d'actifs\",\n name: 'Nom',\n ticker: 'Ticker',\n stockReplacement: \"Remplacement d'actions\",\n '1MonthReturn': 'Rendement du dernier mois (%)',\n '3MonthReturn': 'Rendement 3 mois (%)',\n '6MonthReturn': 'Rendement 6 mois (%)',\n ytdReturn: 'Rendement cumul annuel (%)',\n annualCompoundReturnY1: 'Rendement 1 an (%)',\n annualCompoundReturnY3: 'Rendement 3 ans (%)',\n annualCompoundReturnY5: 'Rendement 5 ans (%)',\n quartileY1: 'Quartile 1 an',\n quartileY3: 'Quartile 3 ans',\n quartileY5: 'Quartile 5 ans',\n aum: 'Actifs sous gestion',\n taxEfficiencyY1: 'Efficacité fiscale'\n },\n predefinedCriteriaNames: {\n popular: 'Filtres populaires :',\n },\n criteriaNames: {\n equal: '=',\n notEqual: '<>',\n greater: '>',\n less: '<',\n greaterOrEqual: '>=',\n lessOrEqual: '<=',\n 'in': 'In',\n between: 'Between',\n\n where: 'WHERE',\n is: 'IS',\n and: 'AND',\n or: 'OR',\n }\n },\n dataTableLanguage: {\n \"decimal\": \"\",\n \"emptyTable\": \"Aucune donnée disponible\",\n \"info\": \"Affichage de {0} à {1} de {2} entrées\",\n \"infoEmpty\": \"Affichage de 0 à 0 de 0 entrées\",\n \"infoFiltered\": \"(Filtré de _MAX_ entrées totales)\",\n \"infoPostFix\": \"\",\n \"thousands\": \",\",\n \"lengthMenu\": \"Montrer _MENU_ entrées\",\n \"loadingRecords\": \"En chargement...\",\n \"processing\": \"En traitement...\",\n \"search\": \"Chercher:\",\n \"zeroRecords\": \"Aucun enregistrements trouvés\",\n \"paginate\": {\n \"first\": \"Premier\",\n \"last\": \"Dernier\",\n \"next\": \"Prochain\",\n \"previous\": \"Précédent\"\n },\n \"aria\": {\n \"sortAscending\": \": Activer pour trier la colonne en ordre croissant\",\n \"sortDescending\": \": Activer pour trier la colonne en descendant\"\n }\n },\n any: 'Tout',\n filters: 'Critères',\n hideFilters: 'MASQUER LES CRITÈRES',\n showFilters: 'AFFICHER LES CRITÈRES',\n clearFilters: 'SUPPRIMER LES CRITÈRES',\n addFilters: 'Ajouter des critères',\n editFilters: 'Modifier les critères',\n removeFilter: 'Supprimer le critère',\n searchCriteria: 'Rechercher des critères',\n results: 'Résultats',\n noResultsMessage: 'Aucun résultat disponible pour votre requête. Veuillez changer vos critères et réessayer',\n noFiltersMessage: 'Aucun filtre disponible',\n unavailableFiltersMessage: 'Les filtres ne sont pas disponible pour le moment. Veuillez réessayer plus tard.',\n resultsPerPage: 'Résultats par page: ',\n hideShowColumns: 'Masquer/afficher les colonnes',\n close: 'Fermer',\n copied: 'Copié',\n criterias: 'Critères',\n selectField: 'Sélectionner champ',\n selectCriteria: 'Sélectionner critère',\n search: 'Rechercher',\n searchSummaryLabels: {\n equal: 'equal to',\n notEqual: 'not equal to',\n greater: 'greater than',\n less: 'less than',\n greaterOrEqual: 'greater or equal to',\n lessOrEqual: 'less or equal to',\n 'in': 'in',\n between: 'between',\n start: 'Funds ',\n and: ' and '\n },\n wildCardError: 'Veuillez modifier les critères des filtres sélectionnés pour obtenir les résultats appropriés.',\n exportToCsv: 'Télécharger en CSV',\n add: 'Ajouter',\n resetConfirmation: 'Voulez-vous supprimer tous les critères ?',\n resetConfirmationCancel: 'Retourner au filtreur',\n resetConfirmationConfirm: 'Oui',\n to: 'à',\n noCriteria: 'Veuillez ajouter des critères',\n minimumValue: 'Valeur minimum',\n maximumValue: 'Valeur maximum',\n stockReplacementSearchLabel: 'Tapez le symbole boursier ou le nom ici',\n delete: 'Supprimer'\n };\n})(inovestor);\n\n; (function ($, inovestor) {\n 'use strict';\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.registeredAddons = inovestor.ms.screenercore.registeredAddons || {};\n\n var addon = function (plugin, options) {\n var self = this;\n\n // Extend component ViewModel\n\n self.extendViewModel = function (viewModel) {\n // If there is no filter value or all the available values are selected, there is no need to filter anything leave the original implementation as is\n if (\n options.countryFilter.length > 0 &&\n options.countryFilter.length < validCountryFilters.length\n ) {\n // Override the original getQuerystring function to add the wanted filters based on the requested country\n var originalGetQuerystringFn = viewModel.getQuerystring;\n viewModel.getQuerystring = function () {\n var queryString = originalGetQuerystringFn();\n\n // If the original query string is empty, it's probably because there is no valid filter\n // Don't add any automatic filter because the search function will check if the querystring is empty and will not trigger an api call for that\n if (!inovestor.ms.core.isEmptyString(queryString)) {\n let firstFilterApplied = false;\n options.countryFilter.forEach(function (filter) {\n const filterInfo = validCountryFilters.find(function (x) { return x.key === filter.toUpperCase() });\n if (filterInfo) {\n queryString += (!firstFilterApplied ? 'and' : 'or') + ':dataSourceId:=:' + filterInfo.value + ';';\n firstFilterApplied = true;\n }\n }); \n }\n\n return queryString;\n };\n }\n };\n\n // Render add-on UI\n\n self.render = function ($element) {\n return $.Deferred().resolve().promise();\n };\n };\n\n var defaultOptions = {\n countryFilter: []\n };\n\n var validCountryFilters = [{\n key: 'CAN',\n value: 1\n }, {\n key: 'USA',\n value: 2\n }]\n\n // Register add-on on the component (and inject addon dependencies)\n\n inovestor.ms.screenercore.registeredAddons.etfCountryFilter = function (plugin, options) {\n var addonOptions = $.extend({}, defaultOptions, options);\n\n // Validate options\n if (inovestor.ms.core.isNullOrUndefined(addonOptions.countryFilter)) throw new Error('inoMsScreener.addons.etfCountryFilter: countryFilter is required');\n if (!Array.isArray(addonOptions.countryFilter)) throw new Error('inoMsScreener.addons.etfCountryFilter: countryFilter must be an array');\n addonOptions.countryFilter.forEach(function (filter) {\n if (!validCountryFilters.some(function (x) { return x.key === filter.toUpperCase() })) {\n throw new Error('inoMsScreener.addons.etfCountryFilter: [' + filter + '] is an invalid countryFilter value. Valid values are: ' + validCountryFilters.map(function (x) { return x.key; }).join(', '));\n }\n });\n\n return new addon(plugin, addonOptions);\n };\n})(inovestor.ms.libRef.jQuery, 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.etfSponsor = inovestor.ms.screenercore.addons.etfSponsor || {};\n inovestor.ms.screenercore.addons.etfSponsor.resources = inovestor.ms.screenercore.addons.etfSponsor.resources || {};\n \n inovestor.ms.screenercore.addons.etfSponsor.resources[\"en\"] = {\n showResultsFromAllProviders: 'Show results from all providers'\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.etfSponsor = inovestor.ms.screenercore.addons.etfSponsor || {};\n inovestor.ms.screenercore.addons.etfSponsor.resources = inovestor.ms.screenercore.addons.etfSponsor.resources || {};\n \n inovestor.ms.screenercore.addons.etfSponsor.resources[\"fr\"] = {\n showResultsFromAllProviders: 'Montrer les résultats de tous les fournisseurs'\n };\n})(inovestor);\n\n; (function ($, inovestor) {\n 'use strict';\n\n inovestor.ms.screenercore = inovestor.ms.screenercore || {};\n inovestor.ms.screenercore.registeredAddons = inovestor.ms.screenercore.registeredAddons || {};\n\n var addon = function (plugin, options, resources) {\n var self = this;\n\n self.lastApiSearchData = null;\n self.lastApiSearchDataCopy = null; // because the original is modified by other functions\n\n // Extend component ViewModel\n\n self.extendViewModel = function (viewModel) {\n viewModel.__etfSponsor = {\n showResultsFromAllProviders: ko.observable(false),\n resources: ko.observable(resources[inovestor.ms.core.currentLanguage])\n };\n\n viewModel.__etfSponsor.showResultsFromAllProviders.subscribe(function () {\n // this will refresh the screener results\n if (self.lastApiSearchDataCopy != null) plugin.corePlugin._handleApiSearchResult(self.lastApiSearchDataCopy);\n });\n\n var originalGetQuerystringFn = viewModel.getQuerystring;\n viewModel.getQuerystring = function () {\n var queryString = originalGetQuerystringFn();\n\n // If the original query string is empty, it's probably because there is no valid filter\n // Don't add any automatic filter because the search function will check if the querystring is empty and will not trigger an api call for that\n if (!inovestor.ms.core.isEmptyString(queryString) && options.issuerCompanyCodes.length > 0) {\n queryString += 'and:issuerCompanyCode:=:*;';\n }\n\n return queryString;\n };\n\n var originalResetFn = viewModel.reset;\n viewModel.reset = function () {\n originalResetFn();\n self.lastApiSearchData = null;\n self.lastApiSearchDataCopy = null;\n };\n\n if (viewModel.__shareLink) {\n var originalMapViewModelStateToShareLinkScreenerFn = inovestor.ms.screenercore.addons.shareLink.mapper.mapViewModelStateToShareLinkScreener;\n inovestor.ms.screenercore.addons.shareLink.mapper.mapViewModelStateToShareLinkScreener = function (viewModel) {\n var linkScreenerData = originalMapViewModelStateToShareLinkScreenerFn(viewModel);\n linkScreenerData.showResultsFromAllProviders = viewModel.__etfSponsor.showResultsFromAllProviders();\n return linkScreenerData;\n };\n\n var originalmapShareLinkScreenerToPredefinedScreenerFn = inovestor.ms.screenercore.addons.shareLink.mapper.mapShareLinkScreenerToPredefinedScreener;\n inovestor.ms.screenercore.addons.shareLink.mapper.mapShareLinkScreenerToPredefinedScreener = function (source) {\n var predefinedScreener = originalmapShareLinkScreenerToPredefinedScreenerFn(source);\n if (source.showResultsFromAllProviders != null) predefinedScreener.showResultsFromAllProviders = source.showResultsFromAllProviders;\n return predefinedScreener;\n };\n\n var originaladdPredifinedCriteriaFn = viewModel.addPredifinedCriteria;\n viewModel.addPredifinedCriteria = function (predefinedFilter) {\n if (predefinedFilter.showResultsFromAllProviders != null) viewModel.__etfSponsor.showResultsFromAllProviders(predefinedFilter.showResultsFromAllProviders);\n originaladdPredifinedCriteriaFn(predefinedFilter);\n };\n }\n };\n\n // Render add-on UI\n\n self.render = function ($element) {\n extendPluginCore();\n return $.Deferred().resolve().promise();\n };\n\n function extendPluginCore () {\n var handApiSearchResultFx = plugin.corePlugin._handleApiSearchResult;\n plugin.corePlugin._handleApiSearchResult = function (data) {\n if (self.lastApiSearchData !== data) {\n self.lastApiSearchData = data;\n self.lastApiSearchDataCopy = $.extend(true, {}, data);\n }\n\n if (data == null || data.requestStatus === 'invalidIdentifier' || data.values == null || data.columnNames == null || data.values.length === 0) {\n // empty or error, just call the original function as is\n handApiSearchResultFx(data);\n return;\n }\n\n var issuerCompanyCodeColumnIndex = data.columnNames.findIndex(function (x) { return x.localeCompare('issuerCompanyCode', undefined, { sensitivity: 'base' }) === 0 });\n\n if (plugin._viewModel.__etfSponsor.showResultsFromAllProviders()) {\n // When showing results from all providers, we want to highlight the sponsored items (make the name in bold)\n\n var nameEnColumnIndex = data.columnNames.findIndex(function (x) { return x.localeCompare('nameEn', undefined, { sensitivity: 'base' }) === 0 });\n var nameFrColumnIndex = data.columnNames.findIndex(function (x) { return x.localeCompare('nameFr', undefined, { sensitivity: 'base' }) === 0 });\n\n handApiSearchResultFx(\n $.extend(\n {}, \n data, \n {\n values: data.values.map(function (x) {\n var isSponsored = issuerCompanyCodeColumnIndex === -1 ? false : options.issuerCompanyCodes.some(function (y) { return y.localeCompare(x[issuerCompanyCodeColumnIndex], undefined, { sensitivity: 'base' }) === 0 });\n \n if (isSponsored) {\n var copy = x.slice();\n if (nameEnColumnIndex !== -1 && !inovestor.ms.core.isEmptyString(copy[nameEnColumnIndex])) copy[nameEnColumnIndex] = '' + copy[nameEnColumnIndex] + '';\n if (nameFrColumnIndex !== -1 && !inovestor.ms.core.isEmptyString(copy[nameFrColumnIndex])) copy[nameFrColumnIndex] = '' + copy[nameFrColumnIndex] + '';\n return copy;\n }\n\n return x;\n })\n }\n )\n );\n\n return;\n }\n\n // When not showing results from all providers, we want to filter the results to only show the sponsored items\n\n var filteredValues = issuerCompanyCodeColumnIndex === -1 ? [] : data.values.filter(function (x) {\n return options.issuerCompanyCodes.some(function (y) { return y.localeCompare(x[issuerCompanyCodeColumnIndex], undefined, { sensitivity: 'base' }) === 0 })\n });\n\n handApiSearchResultFx(\n $.extend(\n {},\n data,\n {\n count: filteredValues.length,\n values: filteredValues\n }\n )\n );\n };\n }\n };\n\n var defaultOptions = {\n issuerCompanyCodes: []\n };\n\n // Register add-on on the component (and inject addon dependencies)\n\n inovestor.ms.screenercore.registeredAddons.etfSponsor = function (plugin, options) {\n var addonOptions = $.extend({}, defaultOptions, options);\n\n // Validate options\n if (inovestor.ms.core.isNullOrUndefined(addonOptions.issuerCompanyCodes)) throw new Error('inoMsScreener.addons.etfSponsor: issuerCompanyCodes is required');\n if (!Array.isArray(addonOptions.issuerCompanyCodes)) throw new Error('inoMsScreener.addons.etfSponsor: issuerCompanyCodes must be an array');\n\n var resources = inovestor.ms.screenercore.addons.etfSponsor.resources;\n\n return new addon(plugin, addonOptions, resources);\n };\n})(inovestor.ms.libRef.jQuery, inovestor);\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.compare = inovestor.ms.screenercore.addons.compare || {};\n inovestor.ms.screenercore.addons.compare.resources = inovestor.ms.screenercore.addons.compare.resources || {};\n \n inovestor.ms.screenercore.addons.compare.resources[\"en\"] = {\n selectedItems: 'Selected Items',\n emptySelection: 'Your selection is empty',\n addToComparison: 'Add to comparison',\n itemSelected: '{qty} item selected',\n itemsSelected: '{qty} items selected',\n maxSelectionWarning: 'Select up to {max} items',\n view: 'View',\n close: 'Close',\n compare: 'Compare',\n compareSelectedItems: 'Compare selected items',\n checkboxAriaLabel: 'Add \"{symbol}\" to comparison'\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.compare = inovestor.ms.screenercore.addons.compare || {};\n inovestor.ms.screenercore.addons.compare.resources = inovestor.ms.screenercore.addons.compare.resources || {};\n \n inovestor.ms.screenercore.addons.compare.resources[\"fr\"] = {\n selectedItems: 'Items sélectionnés',\n emptySelection: 'Votre sélection est vide',\n addToComparison: 'Ajouter à la comparaison',\n itemSelected: '{qty} item sélectionné',\n itemsSelected: '{qty} items sélectionnés',\n maxSelectionWarning: \"Sélectionnez jusqu'à {max} articles\",\n view: 'Voir',\n close: 'Fermer',\n compare: 'Comparer',\n compareSelectedItems: 'Comparer les items sélectionnés',\n checkboxAriaLabel: 'Ajouter \"{symbol}\" à la comparaison'\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.compare = inovestor.ms.screenercore.addons.compare || {};\n\n inovestor.ms.screenercore.addons.compare.viewModelExtension = function (comparatorUrl, maxNumberOfSymbol, resources) {\n return {\n extend: function (viewModel, container) {\n container.maxNumberOfSymbol = maxNumberOfSymbol;\n\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.selectedItems = ko.observableArray();\n\n container.isSelected = function (item) {\n if (inovestor.ms.screenercore.categoryType === 'stock' || inovestor.ms.screenercore.categoryType === 'etf') {\n return container.selectedItems().find(x => x.ticker === item.ticker && x.mic === item.mic) != null\n } else if (inovestor.ms.screenercore.categoryType === 'fund') {\n return container.selectedItems().find(x => x.code === item.code) != null\n }\n return false\n };\n\n container.removeFromComparisonSelection = function (item) {\n if (inovestor.ms.screenercore.categoryType === 'stock' || inovestor.ms.screenercore.categoryType === 'etf') {\n return container.selectedItems.remove(x => x.ticker === item.ticker && x.mic === item.mic);\n } else if (inovestor.ms.screenercore.categoryType === 'fund') {\n return container.selectedItems.remove(x => x.code === item.code);\n }\n };\n\n container.toggleAddToComparisonSelection = function (item) {\n if (container.isSelected(item)) {\n container.removeFromComparisonSelection(item);\n } else {\n container.selectedItems.push(item);\n }\n }; \n\n container.reset = function () {\n container.selectedItems([]);\n };\n\n container.showSelectionModal = function () {\n $('#CompareSelectionModal').modal();\n };\n\n container.canCompare = ko.pureComputed(function () {\n return container.selectedItems().length > 1 &&\n container.selectedItems().length <= maxNumberOfSymbol\n });\n\n container.compare = function () {\n var symbols = container.selectedItems().reduce(function (agg, item) {\n if (inovestor.ms.screenercore.categoryType === 'stock' || inovestor.ms.screenercore.categoryType === 'etf') {\n var mic = item.mic,\n ticker = item.ticker;\n\n // Dirty fix for TSXV not returning the right MIC\n if (mic === \"TSXV\") mic = \"XTSX\";\n\n if (!inovestor.ms.core.isNullOrUndefined(mic) && !inovestor.ms.core.isNullOrUndefined(ticker)) {\n agg.push(mic + ':' + ticker);\n }\n } else if (inovestor.ms.screenercore.categoryType === 'fund') {\n if (!inovestor.ms.core.isNullOrUndefined(item.code)) {\n agg.push(item.code);\n }\n }\n\n return agg;\n }, [])\n\n if (symbols.length < 2 || symbols.length > maxNumberOfSymbol || inovestor.ms.core.isEmptyString(comparatorUrl)) return;\n\n location.href = inovestor.ms.core.stringFormat(comparatorUrl, { symbols: symbols.join(',') });\n };\n\n container.normalizedSelectedItems = ko.computed(function () {\n return container.selectedItems().map(function (item, itemIndex) {\n if (inovestor.ms.screenercore.categoryType === 'stock' || inovestor.ms.screenercore.categoryType === 'etf') {\n return {\n number: itemIndex + 1,\n symbol: item.ticker,\n name: item.name,\n ref: item\n }\n } else if (inovestor.ms.screenercore.categoryType === 'fund') {\n return {\n number: itemIndex + 1,\n symbol: item.code,\n name: item.name,\n ref: item\n }\n }\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.compare = inovestor.ms.screenercore.addons.compare || {};\n\n var addon = function (plugin, options, viewModelExtension) {\n var self = this;\n\n // Extend component ViewModel\n\n self.extendViewModel = function (viewModel) {\n viewModel.__compare = {};\n viewModelExtension.extend(viewModel, viewModel.__compare);\n };\n\n // Render add-on UI\n\n self.render = function ($element) {\n var deferred = $.Deferred();\n\n extendPluginCore();\n\n var templates = {};\n\n $.when(\n getTemplate(options.templatePaths.selectionModal, 'compare.selectionModal.html').then(function (template) { templates.selectionModal = template; }),\n getTemplate(options.templatePaths.tableFooter, 'compare.tableFooter.html').then(function (template) { templates.tableFooter = template; }),\n getTemplate(options.templatePaths.tableHeader, 'compare.tableHeader.html').then(function (template) { templates.tableHeader = template; }),\n getTemplate(options.templatePaths.tableColumn, 'compare.tableColumn.html').then(function (template) { templates.tableColumn = template; })\n ).then(function () {\n $element.find('.ino-ms-screener-plugin').append(templates.selectionModal);\n $element.find('.ScreenerResults__footer').append(templates.tableFooter);\n $element.find('.ScreenerResultsTable__head tr').append(templates.tableHeader);\n $element.find('.ScreenerResultsTable__row').append(templates.tableColumn);\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.compare' + '.' + 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/compare/' + defaultFilename);\n }\n\n return inovestor.ms.core.getTemplate(fileCacheKey, filePath);\n }\n\n function extendPluginCore () {\n var initialSearchIsLoaded = false;\n\n var searchFx = plugin.corePlugin.search;\n plugin.corePlugin.search = function () {\n var result = searchFx();\n \n if (!initialSearchIsLoaded) {\n if (result == null) {\n initialSearchIsLoaded = true;\n } else {\n result.always(function () {\n initialSearchIsLoaded = true;\n });\n }\n } \n\n return result;\n };\n\n\n var handleApiSearchResultFx = plugin.corePlugin._handleApiSearchResult;\n plugin.corePlugin._handleApiSearchResult = function (data) {\n // We don't want to reset the compare state on the first search because it would\n // overwrite the latestStateKeeper state that we use when navigating back to the screener\n if (initialSearchIsLoaded) {\n plugin._viewModel.__compare.reset();\n }\n\n handleApiSearchResultFx(data);\n };\n }\n };\n\n var defaultOptions = {\n comparatorUrl: null,\n maxNumberOfSymbol: 5,\n templatePaths: {\n selectionModal: null,\n tableHeader: null,\n tableFooter: null,\n tableColumn: null\n }\n };\n\n // Register add-on on the component (and inject addon dependencies)\n\n inovestor.ms.screenercore.registeredAddons.compare = function (plugin, options) {\n var addonOptions = $.extend({}, defaultOptions, options);\n addonOptions.templatePaths = $.extend(defaultOptions.templatePaths, addonOptions.templatePaths);\n\n if (inovestor.ms.core.isEmptyString(addonOptions.comparatorUrl)) throw new Error('inoMsScreener.addons.compare: comparatorUrl is required');\n if (inovestor.ms.core.isNullOrUndefined(addonOptions.maxNumberOfSymbol)) throw new Error('inoMsScreener.addons.compare: maxNumberOfSymbol is required');\n\n var resources = inovestor.ms.screenercore.addons.compare.resources;\n var viewModelExtension = inovestor.ms.screenercore.addons.compare.viewModelExtension(addonOptions.comparatorUrl, addonOptions.maxNumberOfSymbol, resources);\n\n return new addon(plugin, addonOptions, viewModelExtension);\n };\n})(inovestor.ms.libRef.jQuery, inovestor);\n","window[\"inoMsTemplatesCache\"] = window[\"inoMsTemplatesCache\"] || {};\nwindow[\"inoMsTemplatesCache\"][\"inoMsScreener.addons.compare.compare.selectionModal.html\"] = \"

\"; \nwindow[\"inoMsTemplatesCache\"] = window[\"inoMsTemplatesCache\"] || {};\nwindow[\"inoMsTemplatesCache\"][\"inoMsScreener.addons.compare.compare.tableFooter.html\"] = \"
\"; \nwindow[\"inoMsTemplatesCache\"] = window[\"inoMsTemplatesCache\"] || {};\nwindow[\"inoMsTemplatesCache\"][\"inoMsScreener.addons.compare.compare.tableHeader.html\"] = \"\"; \nwindow[\"inoMsTemplatesCache\"] = window[\"inoMsTemplatesCache\"] || {};\nwindow[\"inoMsTemplatesCache\"][\"inoMsScreener.addons.compare.compare.tableColumn.html\"] = \"\"; ","; (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.latestStateKeeper = inovestor.ms.screenercore.addons.latestStateKeeper || {};\n\n var addon = function (plugin, options) {\n var self = this;\n\n var searchStateStorageKey = 'latestSearchState'\n var compareStateStorageKey = 'latestCompareState'\n var etfSponsorStateStorageKey = 'latestEtfSponsorState'\n\n // Extend component ViewModel\n\n self.extendViewModel = function (viewModel) {\n setTimeout(function () {\n if (viewModel.__compare) {\n viewModel.__compare.selectedItems.subscribe(function (newValue) {\n if (newValue.length === 0) {\n removeStorage(compareStateStorageKey);\n } else {\n var trimmed = newValue.map(x => ({\n ticker: x.ticker,\n mic: x.mic,\n code: x.code,\n name: x.name\n }));\n setStorage(compareStateStorageKey, trimmed);\n }\n });\n }\n \n if (viewModel.__etfSponsor) {\n viewModel.__etfSponsor.showResultsFromAllProviders.subscribe(function () {\n setStorage(etfSponsorStateStorageKey, {\n showResultsFromAllProviders: viewModel.__etfSponsor.showResultsFromAllProviders()\n });\n });\n }\n });\n\n var originalResetFn = viewModel.reset;\n viewModel.reset = function () {\n originalResetFn();\n updateSearchState();\n };\n\n viewModel.sortColumn.subscribe(function () {\n updateSearchState();\n });\n viewModel.sortType.subscribe(function () {\n updateSearchState();\n });\n viewModel.offset.subscribe(function () {\n updateSearchState();\n });\n viewModel.resultsPerPage.subscribe(function () {\n updateSearchState();\n });\n };\n\n // Render add-on UI\n\n self.render = function ($element) {\n extendPluginCore();\n return $.Deferred().resolve().promise();\n };\n\n function extendPluginCore () {\n var initialLatestSearchState = getStorage(searchStateStorageKey);\n if (initialLatestSearchState) {\n plugin.corePlugin.loadDefinedScreenerOrDefault = function () {\n plugin._viewModel.addPredifinedCriteria(initialLatestSearchState);\n plugin._viewModel.offset(initialLatestSearchState.offset);\n plugin._viewModel.resultsPerPage(initialLatestSearchState.resultsPerPage);\n\n if (plugin._viewModel.__compare) {\n var initialLatestCompareState = getStorage(compareStateStorageKey)\n if (initialLatestCompareState) {\n plugin._viewModel.__compare.selectedItems(initialLatestCompareState);\n }\n }\n\n if (plugin._viewModel.__etfSponsor) {\n var initialLatestEtfSponsorState = getStorage(etfSponsorStateStorageKey)\n if (initialLatestEtfSponsorState) {\n plugin._viewModel.__etfSponsor.showResultsFromAllProviders(initialLatestEtfSponsorState.showResultsFromAllProviders);\n }\n }\n\n return $.Deferred().resolve().promise();\n };\n }\n\n var fx = plugin.corePlugin.search;\n plugin.corePlugin.search = function () {\n updateSearchState();\n \n var fxResult = fx()\n\n if (fxResult == null) return fxResult\n\n return fxResult.then(function () {\n updateSearchState();\n });\n };\n }\n \n function updateSearchState () {\n var criteriaMapper = new inovestor.ms.screenercore.mappers.queryCriteriaMapper(plugin._viewModel);\n var criterias = criteriaMapper.mapViewModelCriteriasToQueryCriterias(plugin._viewModel.criterias());\n\n if (plugin._viewModel.criterias().length === 0) {\n removeStorage(searchStateStorageKey);\n } else {\n var state = {\n sortType: plugin._viewModel.sortType(),\n sortColumn: plugin._viewModel.sortColumn(),\n offset: plugin._viewModel.offset(),\n resultsPerPage: plugin._viewModel.resultsPerPage(),\n criterias: criterias\n };\n setStorage(searchStateStorageKey, state);\n }\n }\n\n function getStorage (key) {\n var value = options.storageApi.getItem(options.storageNamespace + '.' + key)\n if (value) {\n try {\n var parsed = JSON.parse(value)\n if (parsed.screener == plugin.options.screener) return parsed.data\n } catch {}\n }\n return null\n }\n\n function setStorage (key, value) {\n options.storageApi.setItem(options.storageNamespace + '.' + key, JSON.stringify({ screener: plugin.options.screener, data: value }))\n } \n\n function removeStorage (key) {\n options.storageApi.removeItem(options.storageNamespace + '.' + key)\n }\n };\n\n var defaultOptions = {\n storageNamespace: 'inoMsScreener',\n storageApi: sessionStorage,\n templatePaths: {\n }\n };\n\n // Register add-on on the component (and inject addon dependencies)\n\n inovestor.ms.screenercore.registeredAddons.latestStateKeeper = function (plugin, options) {\n var addonOptions = $.extend({}, defaultOptions, options);\n addonOptions.templatePaths = $.extend(defaultOptions.templatePaths, addonOptions.templatePaths);\n\n if (inovestor.ms.core.isEmptyString(addonOptions.storageNamespace)) throw new Error('inoMsScreener.addons.latestStateKeeper: storageNamespace is required');\n if (inovestor.ms.core.isNullOrUndefined(addonOptions.storageApi)) throw new Error('inoMsScreener.addons.latestStateKeeper: storageApi is required');\n\n return new addon(plugin, addonOptions);\n };\n})(inovestor.ms.libRef.jQuery, inovestor);\n"]}