{"version":3,"sources":["inoMsComparator.js","inoMsComparator.tmpl.js"],"names":["inovestor","ms","comparator","config","apiRelativeUrl","apiDailyPricesRelativeUrl","apiMonthlyReturnsRelativeUrl","stateCacheKey","stateCache","get","stateCacheFromStorage","sessionStorage","getItem","JSON","parse","e","console","error","set","state","setItem","stringify","$","ko","viewModels","comparatorViewModel","plugin","self","this","comparisonChartTypes","maxSymbols","options","pdfReportUrl","pdfHandler","etfs","observableArray","resources","observable","rows","symbols","tickers","hasError","isBusy","showCategoryAlert","isInvalidIdentifier","invalidSymbols","displaySymbols","showInvalidSymbolsAlert","isDummyData","isFirstLoad","hasChartError","asOfPerfomanceDate","hasValidData","computed","canAddMoreSymbol","pureComputed","filter","x","symbol","defaultValueString","length","numberOfSymbolsToCompare","hiddenOverview","hiddenOverviewCharacteristics","hiddenOverviewRisk","hiddenOverviewFixedIncome","hiddenPerformance","hiddenPerformancePeriodicReturns","hiddenPerformanceCalendarReturns","hiddenAllocations","hiddenAllocationsAssets","hiddenAllocationsGeographic","hiddenAllocationsSectors","hiddenAllocationsConstituents","displayComparisonChart","selectedComparisonChartPeriod","selectedComparisonChartPeriodLength","setComparisonChartExtremes","period","periodLength","_setChartExtremes","hyphenate","selectedComparisonChartType","setSelectedComparisonChartType","type","_renderComparisonChart","updateResources","currentResource","core","currentLanguage","isNullOrUndefined","haveDifferentCategories","assetClassNameRow","find","rowName","columns","map","valueEn","i","array","indexOf","overviewRows","currentRows","currentOverview","j","currentRow","push","riskRows","currentField","fixedIncomeRows","removeFromRowsByIndex","index","displayType","value","valueFR","addSymbol","symbolObj","symbolToChange","ticker","some","findIndex","replace","isValidTicker","substring","doSearch","removeSymbol","numberOfWantedSymbols","splice","dummyData","_createRows","_formatRows","_viewModel","_renderPieCharts","_setUrlValues","arr","search","join","urlValues","selfUrl","exportToCsv","csvArray","csvService","transformComparatorDataToCsvArray","csvString","transformCsvArrayToCsvString","escapeHeader","blob","Blob","saveAs","modal","generatePdfUrl","stringFormat","getSymbolAtIndex","validEtfs","dataType","validEtf","canLink","data","isEmptyString","family","redirectUrl","sponsoredFamilies","localeCompare","sensitivity","generateLink","category","createHyphenator","hyphenationPatternsEnUs","text","coalesce","defaultValue","libRef","jQuery","pluginName","Plugin","element","_name","_defaults","fn","inoMsComparator","defaults","extend","comparisonChartData","comparisonChartInstance","comparisonChartReturnsCache","Map","comparisonChartPricesCache","init","prototype","fileName","fileCacheKey","instances","register","update","templatePaths","filePath","templateRootUrl","match","getTemplate","then","template","html","buildCache","render","bindEvents","bindModel","shareable","Shareable","_setInitialSymbols","_setTickers","ui","autocomplete","inoCdnBaseUrl","jUIScriptUrl","concatUrl","jUIStyleUrl","append","autocompleteScriptUrl","autocompleteStyleUrl","_setUpAutocomplete","always","$element","trigger","getNavigationValues","nonEmptyUrlSymbols","_removeEmptySymbols","_removeDuplicateSymbols","stateCacheValues","nonEmptyStateCacheSymbols","split","destroy","unbindEvents","removeData","$etfChartInstance","on","onReady","call","input","val","location","href","setTimeout","select","document","execCommand","oldSymbols","_getValidSymbolString","toLowerCase","newSymbolsArr","extraSymbols","forEach","item","reason","_areSymbolsTheSame","oldIndex","id","newIndex","_swapValuesByIndices","setNavigation","toUpperCase","currentVal","sameSymbols","currentSymbol","off","apiErrorHandler","apiError","onError","result","generateError","errors","invalidIdentifierHandler","invalidIdentifier","_resetDataBeforeSearch","_setDefaultTable","etfUrl","ajaxApi","contentType","validData","_removeInvalidSymbols","_addFundsAndSymbolsToVM","_sortResults","_fillTableData","_setUpSortable","assetUnderManagement","badIndices","requestStatus","reverse","duplicateSymbols","symbolArr","lastIndexOf","uniqueSymbols","newSymbolStr","unformattedRows","Deferred","done","currentUrlValues","validSymbols","adjustedOldIndexForRows","Math","min","moved","adjustedNewIndexForRows","currentColumns","touchHandler","event","touch","changedTouches","simulatedEvent","createEvent","initMouseEvent","touchstart","touchmove","touchend","window","screenX","screenY","clientX","clientY","target","dispatchEvent","sortable","handle","scroll","placeholder","helper","clone","css","height","width","start","change","stop","addEventListener","sortedEtfs","sortedSymbols","maxNumberOfEtfs","dummyCtr","rowNames","rowDefinition","rowObj","key","resourceKey","columnValue","etf","valueFr","linkTextResourceKey","decimalPlaces","valueAsPercent","showAsLargeNumber","rowIndex","compareCol","comparer","count","mostRecentDate","apiFirstDate","apiLastDate","minDate","maxDate","chartData","firstDate","historicalDatas","Date","date","lastDate","UTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","minDateCompute","setFullYear","getFullYear","xAxis","setExtremes","etfsData","chartIsReturnsChart","chartIsInCompareMode","defaultChartOptions","chartSymbols","y","hasReturns","chart","zoomType","events","selection","plotOptions","line","marker","enabled","series","compare","compareStart","dataGrouping","dateTimeLabelFormats","week","rangeSelector","navigator","scrollbar","legend","_fetchNewComparisonChartData","chartDatas","chartSeries","chartOptions","symbolParts","compoundedValue","currentSeries","name","Array","isArray","reduce","agg","getTime","chartElement","yAxis","opposite","labels","formatter","Highcharts","numberFormat","tooltip","pointFormat","changeDecimals","valueDecimals","hour","highcharts","symbolsNotInCache","dataCache","size","cachedData","symbolsInCache","from","keys","values","orderedSymbols","resolve","chartDataUrl","aipChartDatas","aipChartData","_renderAssetPieCharts","_renderSectorPieCharts","_renderGeographicPieCharts","notDummyEtfs","assetAllocations","currentEtf","currentAlloc","percent","formattedY","nameFr","nameEn","chartConfig","pieChartConfig","colorByPoint","sectorAllocations","descriptionFr","descriptionEn","geographicAllocations","countryNameFr","countryNameEn","counter","globalCoreConfig","$input","apiSearchBaseUrl","apiBaseUrl","getComponentConfigurations","inoMsAutocomplete","language","shouldRenderMoreResults","shouldSelectOnNonMatch","shouldAutoSelect","onSelect","filters","exchange","stopPropagation","outerWidth","click","valueHasMutated","chartErrorHandler","applyBindings","each","colors","pie","allowPointSelect","cursor","dataLabels","showInLegend","fundKey","bindingHandlers","accessibleClick","keyCode","preventDefault","pluginTitle","assetClassName","currency","distributionFrequencyCode","asOf","inceptionDate","managementExpenseRatio","managementFee","previousClose","riskRating","marketPrice","distributionYieldTtm","equityFundStyle","fundgrade","numberOfHoldings","objective","averageMaturity","yieldToMaturity","averageCreditQuality","standardDeviationY3","standardDeviationY5","sharpeRatioY3","sharpeRatioY5","rowTooltips","sectionLabels","overview","description","performance","assetAllocation","geographicAllocation","sectorAllocation","periodicReturns","calendarReturns","allocations","constituentsAllocation","characteristics","risk","fixedIncome","objectives","asOfPerfomance","periodicReturnsLabels","oneMonth","threeMonth","sixMonth","oneYear","threeYear","fiveYear","tenYear","sinceInception","yearToDate","periodicReturnsCsvLabels","calendarReturnsLabels","calendarReturnsCsvLabels","calendarReturnsQuartileCsvLabels","allocationCsvLabels","assetClass","constituent","sector","geographic","columnData","boolean","true","false","none","monthly","quarterly","semiannual","daily","specific","annually","weekly","low","lowtomedium","medium","mediumtohigh","high","large value","large blend","mid blend","mid growth","mid value","small blend","small growth","small value","close","enterETF","symbolError","duplicateSymbol","invalidSymbol","tooManySymbols","addFunds","yes","dataNotAvailable","no","searchPlaceholder","differentCategoryWarning","sameETFWarning","validETF","fund","returnIsAnnualizedWarning","dataNotAvailableForETFWithLessThanAFullYear","viewObjective","view","comparisonTool","downloadComparison","shareComparison","url","urlCopied","comparisonChart","periodTitle","periods","ytd","all","commonInception","chartTypes","returns","prices","constituentsWarning","hideShowSection","asOfToolTipText","large growth","csvArrayBuilder","addColumn","header","getter","addColumnsFactory","build","interpretedColumns","column","createdColumns","makeOverviewRowToCsvColumn","field","localizedField","localizedValue","localizeText","english","french","includes","year","calendarReturn","return","quartileRank","highestNumberOfAssetAllocation","max","highestNumberOfGeographicAllocation","highestNumberOfSectorAllocation","highestNumberOfConstituentsAllocation","holdings","weight"],"mappings":"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CAT,SAAA,KACAC,WAAA,KACAC,SAAA,KACAC,QAAA,KACAC,UAAA,KACAC,SAAA,KACAC,QAAA,MACAC,eAAA,YACAC,WAAA,KACA,EACAE,sBAAA,2BACAC,yBAAA,gBACAC,iCAAA,kBACAC,oBAAA,CACAC,WAAA,cACAC,YAAA,cACAC,OAAA,SACAC,WAAA,YACA,EACAC,WAAA,CACAC,QAAA,CACAC,KAAA,MACAC,MAAA,IACA,EACA3D,0BAAA,CACA4D,KAAA,OACAC,QAAA,UACAC,UAAA,YACAC,WAAA,cACAC,MAAA,QACAC,SAAA,WACAC,SAAA,WACAC,OAAA,QACA,EACA7D,WAAA,CACAsD,KAAA,OACAQ,IAAA,MACAC,YAAA,gBACAC,OAAA,SACAC,aAAA,iBACAC,KAAA,MACA,EACAzD,qBAAA,CACAqD,IAAA,MACAE,OAAA,SACAE,KAAA,MACA,EACA/D,gBAAA,CACAgE,cAAA,cACAC,cAAA,cACAC,YAAA,YACAC,aAAA,aACAC,YAAA,YACAC,cAAA,cACAC,eAAA,eACAC,cAAA,aACA,CACA,EACAC,MAAA,QACAC,SAAA,cACApT,OAAA,CACAqT,YAAA,uCACAC,gBAAA,uBACAC,cAAA,8BACAC,eAAA,6CACA,EACA7L,QAAA,UACA8L,SAAA,YACAC,IAAA,MACAC,iBAAA,wBACAC,GAAA,KACAC,kBAAA,gCACAC,yBAAA,yFACAC,eAAA,yCACAC,SAAA,4BACAC,KAAA,OACAC,0BAAA,mDACAC,4CAAA,uDACAC,cAAA,iBACAC,KAAA,OACAC,eAAA,kBACAC,mBAAA,WACAC,gBAAA,QACAC,IAAA,OACAC,UAAA,aACAC,gBAAA,CACAC,YAAA,UACAC,QAAA,CACAC,IAAA,MACAnE,QAAA,KACAC,UAAA,KACAC,SAAA,KACAC,QAAA,MACAiE,IAAA,MACAC,gBAAA,kBACA,EACAC,WAAA,CACAC,QAAA,eACAC,OAAA,cACA,CACA,EACAC,oBAAA,oMACApe,aAAA,gBACAV,UAAA,aACA+e,gBAAA,2BACAC,gBAAA,iDACA,CACA,GAAAvb,OAAA5K,UAAA,EACA,SAAAA,GACAA,EAAAC,GAAAC,WAAAkC,UAAApC,EAAAC,GAAAC,WAAAkC,WAAA,GACApC,EAAAC,GAAAC,WAAAkC,UAAA,GAAA,CACAwc,YAAA,iBACA3J,SAAA,CACAuE,KAAA,MACA9V,OAAA,UACAiO,qBAAA,sBACAkN,eAAA,kBACAC,SAAA,iBACAC,0BAAA,4BACAC,KAAA,aACAC,cAAA,WACAC,uBAAA,MACAC,cAAA,mBACAC,cAAA,gBACAC,WAAA,yBACAC,YAAA,kBACAC,qBAAA,0CACAC,gBAAA,4BACAC,UAAA,YACAC,iBAAA,mBACAC,UAAA,WACAC,gBAAA,+BACAC,gBAAA,yBACAC,qBAAA,oBACAC,oBAAA,gBACAC,oBAAA,gBACAC,cAAA,qBACAC,cAAA,oBACA,EACAC,YAAA,CACAZ,qBAAA,8IACA,EACAa,cAAA,CACAC,SAAA,iBACAC,YAAA,cACAC,YAAA,YACAC,gBAAA,uBACAC,qBAAA,2BACAC,iBAAA,0BACAC,gBAAA,yBACAC,gBAAA,8BACAC,YAAA,cACAC,uBAAA,cACAC,gBAAA,mBACAC,KAAA,SACAC,YAAA,cACAC,WAAA,YACAC,eAAA,YACA,EACAC,sBAAA,CACAC,SAAA,KACAC,WAAA,KACAC,SAAA,KACAC,QAAA,KACAC,UAAA,MACAC,SAAA,MACAC,QAAA,OACAC,eAAA,YACAC,WAAA,MACA,EACAC,yBAAA,CACAT,SAAA,KACAC,WAAA,KACAC,SAAA,KACAC,QAAA,KACAC,UAAA,KACAC,SAAA,KACAC,QAAA,MACAC,eAAA,WACAC,WAAA,MACA,EACAE,sBAAA,8BACAC,yBAAA,mBACAC,iCAAA,kBACAC,oBAAA,CACAC,WAAA,iBACAC,YAAA,cACAC,OAAA,UACAC,WAAA,cACA,EACAC,WAAA,CACAC,QAAA,CACAC,KAAA,MACAC,MAAA,KACA,EACA3D,0BAAA,CACA4D,KAAA,SACAC,QAAA,YACAC,UAAA,gBACAC,WAAA,gBACAC,MAAA,eACAC,SAAA,aACAC,SAAA,eACAC,OAAA,cACA,EACA7D,WAAA,CACAsD,KAAA,QACAQ,IAAA,MACAC,YAAA,cACAC,OAAA,QACAC,aAAA,gBACAC,KAAA,OACA,EACAzD,qBAAA,CACAqD,IAAA,MACAE,OAAA,QACAE,KAAA,OACA,EACA/D,gBAAA,CACA4G,eAAA,yBACA5C,cAAA,qBACAC,cAAA,uBACAC,YAAA,wBACAC,aAAA,0BACAC,YAAA,sBACAC,cAAA,uBACAC,eAAA,yBACAC,cAAA,oBACA,CACA,EACAC,MAAA,SACAC,SAAA,iBACApT,OAAA,CACAqT,YAAA,6CACAC,gBAAA,6BACAC,cAAA,wCACAC,eAAA,wDACA,EACA7L,QAAA,WACA8L,SAAA,oBACAC,IAAA,MACAC,iBAAA,sCACAC,GAAA,MACAC,kBAAA,mCACAC,yBAAA,oGACAC,eAAA,0DACAC,SAAA,sCACAC,KAAA,OACAC,0BAAA,0EACAC,4CAAA,8EACAC,cAAA,WACAC,KAAA,OACAC,eAAA,uBACAC,mBAAA,cACAC,gBAAA,WACAC,IAAA,SACAC,UAAA,aACAC,gBAAA,CACAC,YAAA,WACAC,QAAA,CACAC,IAAA,QACAnE,QAAA,KACAC,UAAA,KACAC,SAAA,KACAC,QAAA,MACAiE,IAAA,MACAC,gBAAA,gBACA,EACAC,WAAA,CACAC,QAAA,kBACAC,OAAA,uBACA,CACA,EACAC,oBAAA,uOACApe,aAAA,uBACAV,UAAA,qBACA+e,gBAAA,gCACAC,gBAAA,oDACA,CACA,GAAAvb,OAAA5K,UAAA,EACA,SAAAA,GACAA,EAAAC,GAAAC,WAAAF,EAAAC,GAAAC,YAAA,GAEAF,EAAAC,GAAAC,WAAAmmB,gBAAA,WACA,IAAAtgB,EAAA,GAEAnE,KAAA0kB,UAAA,SAAAC,EAAAC,GAEA,OADAzgB,EAAAW,KAAA,CAAA6f,OAAAA,EAAAC,OAAAA,CAAA,CAAA,EACA5kB,IACA,EAEAA,KAAA6kB,kBAAA,SAAAvb,GAEA,OADAnF,EAAAW,KAAAwE,CAAA,EACAtJ,IACA,EAEAA,KAAA8kB,MAAA,SAAA7c,GACA,IAAA8c,EAAA5gB,EAAA4T,OAAA,SAAAC,EAAAgN,GACA,IACAC,EASA,MAVA,YAAA,OAAAD,EAEA,OADAC,EAAAD,EAAA/c,CAAA,IAEAgd,EAAAnX,QAAA,SAAAjM,GACAmW,EAAAlT,KAAAjD,CAAA,CACA,CAAA,EAGAmW,EAAAlT,KAAAkgB,CAAA,EAEAhN,CACA,EAAA,EAAA,EAEAtX,EAAA,GAYA,OAVAA,EAAAoE,KAAAigB,EAAA3gB,IAAA,SAAA4gB,GACA,OAAAA,EAAAL,MACA,CAAA,CAAA,EAEA1c,EAAA6F,QAAA,SAAAjM,GACAnB,EAAAoE,KAAAigB,EAAA3gB,IAAA,SAAA4gB,GACA,OAAAA,EAAAJ,OAAA/iB,CAAA,CACA,CAAA,CAAA,CACA,CAAA,EAEAnB,CACA,CACA,CACA,GAAAtC,UAAAC,GAAA0K,OAAAC,OAAA5K,UAAA,EACA,SAAAA,GAmNA,SAAA8mB,EAAAC,EAAA3kB,GACA,IAMAmkB,EAEAC,EARA1gB,EAAA9F,EAAAC,GAAAC,WAAA+U,SAAApP,KAAA,SAAApC,GAAA,OAAAA,EAAA2R,MAAA2R,CAAA,CAAA,EAEA,OAAA,MAAAjhB,EACA,CAAAygB,OAAAQ,EAAAP,OAAA,WAAA,OAAA,IAAA,CAAA,GAGAD,EAAA,MAAAzgB,EAAAuP,aAAA,MAAAjT,EAAA6S,UAAA,MAAA7S,EAAA6S,SAAAnP,EAAAuP,aAAA0R,EAAA3kB,EAAA6S,SAAAnP,EAAAuP,aAEAmR,EAAA,SAAA/iB,GACA,OAAA,MAAAA,EAAAsjB,GAAA,KAAAtjB,EAAAsjB,EACA,EAEA,kBAAAjhB,EAAAkB,aAAA,uBAAAlB,EAAAkB,YACAwf,EAAA,SAAA/iB,GACA,IAAAujB,EAAA,OAAAhnB,EAAAC,GAAAuF,KAAAC,gBAAAshB,EAAA,KAAAA,EAAA,KACA,OAAA,MAAAtjB,EAAAujB,GAAA,KAAAvjB,EAAAujB,EACA,EACA,iBAAAlhB,EAAAkB,cACAwf,EAAA,SAAA/iB,GACA,IAEAwjB,EAFAhgB,EAAAxD,EAAAsjB,GACA,OAAA,MAAA9f,EAAA,KAEA,OADAggB,EAAA7kB,EAAAmgB,WAAAzc,EAAAuP,aAAApO,EAAAsI,YAAA,IACAtI,EAAAggB,CACA,GAGA,CAAAV,OAAAA,EAAAC,OAAAA,CAAA,EACA,CAEA,SAAAU,EAAAC,EAAAC,GACA,MAAA,OAAApnB,EAAAC,GAAAuF,KAAAC,gBAAA2hB,EAAAD,CACA,CAlPAnnB,EAAAC,GAAAC,WAAAF,EAAAC,GAAAC,YAAA,GAEAF,EAAAC,GAAAC,WAAA2I,WAAA,CACAG,6BAAA,SAAAJ,EAAA7G,GAYA,OAXA6G,EAAA5C,IAAA,SAAAvC,EAAAyC,GAEA,OAAA,MAAAnE,GAAA,CAAA,IAAAA,EAAAkH,cAAA,IAAA/C,EAAAzC,EAEAA,EAAAuC,IAAA,SAAA6R,GACA,OAAA,MAAAA,EAAA,GACA,UAAA,OAAAA,GAAA,KAAAA,EAAA,IAAAA,EAAApQ,QAAA,KAAA,IAAA,EAAA,IACAoQ,CACA,CAAA,GANArP,KAAA,GAAA,CAOA,CAAA,EAAAA,KAAA,MAAA,CAGA,EAEAM,kCAAA,SAAAe,EAAAzH,GACA,OAAA,IAAApC,EAAAC,GAAAC,WAAAmmB,iBAEAC,UAAAlkB,EAAA6S,SAAAuE,KAAA,SAAA/V,GAAA,OAAAyjB,EAAAzjB,EAAAyY,OAAAzY,EAAAwY,MAAA,CAAA,CAAA,EACAqK,UAAAlkB,EAAA6S,SAAAvR,OAAA,SAAAD,GAAA,OAAAA,EAAAC,MAAA,CAAA,EAEA+iB,kBAAA,WACA,OAAAzmB,EAAAC,GAAAC,WAAAmG,aAAAL,IAAA,SAAAvC,GAAA,OAAAqjB,EAAArjB,EAAArB,CAAA,CAAA,CAAA,CACA,CAAA,EAEAqkB,kBAAA,WACA,OAAAzmB,EAAAC,GAAAC,WAAAyG,SAAAX,IAAA,SAAAvC,GAAA,OAAAqjB,EAAArjB,EAAArB,CAAA,CAAA,CAAA,CACA,CAAA,EAEAqkB,kBAAA,WACA,OAAAzmB,EAAAC,GAAAC,WAAA2G,gBAAAb,IAAA,SAAAvC,GAAA,OAAAqjB,EAAArjB,EAAArB,CAAA,CAAA,CAAA,CACA,CAAA,EAEAkkB,UAAAlkB,EAAA0f,yBAAAD,WAAA,SAAApe,GAAA,OAAA,MAAAA,EAAAkd,gBAAA,KAAAld,EAAAkd,gBAAAkB,UAAA,CAAA,EACAyE,UAAAlkB,EAAA0f,yBAAAT,SAAA,SAAA5d,GAAA,OAAA,MAAAA,EAAAkd,gBAAA,KAAAld,EAAAkd,gBAAAU,QAAA,CAAA,EACAiF,UAAAlkB,EAAA0f,yBAAAR,WAAA,SAAA7d,GAAA,OAAA,MAAAA,EAAAkd,gBAAA,KAAAld,EAAAkd,gBAAAW,UAAA,CAAA,EACAgF,UAAAlkB,EAAA0f,yBAAAP,SAAA,SAAA9d,GAAA,OAAA,MAAAA,EAAAkd,gBAAA,KAAAld,EAAAkd,gBAAAY,QAAA,CAAA,EACA+E,UAAAlkB,EAAA0f,yBAAAN,QAAA,SAAA/d,GAAA,OAAA,MAAAA,EAAAkd,gBAAA,KAAAld,EAAAkd,gBAAAa,OAAA,CAAA,EACA8E,UAAAlkB,EAAA0f,yBAAAL,UAAA,SAAAhe,GAAA,OAAA,MAAAA,EAAAkd,gBAAA,KAAAld,EAAAkd,gBAAAc,SAAA,CAAA,EACA6E,UAAAlkB,EAAA0f,yBAAAJ,SAAA,SAAAje,GAAA,OAAA,MAAAA,EAAAkd,gBAAA,KAAAld,EAAAkd,gBAAAe,QAAA,CAAA,EACA4E,UAAAlkB,EAAA0f,yBAAAH,QAAA,SAAAle,GAAA,OAAA,MAAAA,EAAAkd,gBAAA,KAAAld,EAAAkd,gBAAAgB,OAAA,CAAA,EACA2E,UAAAlkB,EAAA0f,yBAAAF,eAAA,SAAAne,GAAA,OAAA,MAAAA,EAAAkd,gBAAA,KAAAld,EAAAkd,gBAAAiB,cAAA,CAAA,EAEA6E,kBAAA,WAYA,OAXA5c,EAAA8P,OAAA,SAAAC,EAAAnW,GAQA,OAPA,MAAAA,EAAAmd,iBACAnd,EAAAmd,gBAAAlR,QAAA,SAAAmI,GACA+B,EAAAyN,SAAAxP,EAAAyP,IAAA,GACA1N,EAAAlT,KAAAmR,EAAAyP,IAAA,CAEA,CAAA,EAEA1N,CACA,EAAA,EAAA,EAEAD,OAAA,SAAAC,EAAA0N,GAaA,OAZA1N,EAAAlT,KAAA,CAAA6f,OAAAvmB,EAAAC,GAAAuF,KAAA+D,aAAAnH,EAAA4f,yBAAA,CAAAsF,KAAAA,CAAA,CAAA,EAAAd,OAAA,SAAA/iB,GACA,OAAA,MAAAA,EAAAmd,iBAEA,OADA2G,EAAA9jB,EAAAmd,gBAAA/a,KAAA,SAAAgS,GAAA,OAAAA,EAAAyP,OAAAA,CAAA,CAAA,GACA,KAAAC,EAAAC,MACA,CAAA,CAAA,EAEA5N,EAAAlT,KAAA,CAAA6f,OAAAvmB,EAAAC,GAAAuF,KAAA+D,aAAAnH,EAAA6f,iCAAA,CAAAqF,KAAAA,CAAA,CAAA,EAAAd,OAAA,SAAA/iB,GACA,OAAA,MAAAA,EAAAmd,iBAEA,OADA2G,EAAA9jB,EAAAmd,gBAAA/a,KAAA,SAAAgS,GAAA,OAAAA,EAAAyP,OAAAA,CAAA,CAAA,GACA,KAAAC,EAAAE,YACA,CAAA,CAAA,EAEA7N,CACA,EAAA,EAAA,CACA,CAAA,EAEA6M,kBAAA,WACA,IAAAiB,EAAA7d,EAAA8P,OAAA,SAAAC,EAAAnW,GACA,OAAA,MAAAA,EAAAmY,iBAAAhC,EACAlH,KAAAiV,IAAA/N,EAAAnW,EAAAmY,iBAAAhY,MAAA,CACA,EAAA,CAAA,EAEA,GAAA,IAAA8jB,EAAA,MAAA,GAIA,IAFA,IAAA3hB,EAAA,GAEAG,EAAA,EAAAA,EAAAwhB,EAAAxhB,CAAA,GACAH,EAAAW,KAAA,CACA6f,OAAAnkB,EAAA8f,oBAAAC,WAAA,KAAAjc,EAAA,GACAsgB,OAAA,SAAAzf,GACA,OAAA,SAAAtD,GACA,OAAA,MAAAA,EAAAmY,kBAAA,MAAAnY,EAAAmY,iBAAA7U,GAAA,KAAAmgB,EAAAzjB,EAAAmY,iBAAA7U,GAAAmV,OAAAzY,EAAAmY,iBAAA7U,GAAAkV,MAAA,CACA,CACA,EAAA/V,CAAA,CACA,CAAA,EAEAH,EAAAW,KAAA,CACA6f,OAAAnkB,EAAA8f,oBAAAC,WAAA,KAAAjc,EAAA,GAAA,OACAsgB,OAAA,SAAAzf,GACA,OAAA,SAAAtD,GACA,OAAA,MAAAA,EAAAmY,kBAAA,MAAAnY,EAAAmY,iBAAA7U,GAAA,KAAAtD,EAAAmY,iBAAA7U,GAAAgV,OACA,CACA,EAAA7V,CAAA,CACA,CAAA,EAGA,OAAAH,CACA,CAAA,EAEA0gB,kBAAA,WACA,IAAAmB,EAAA/d,EAAA8P,OAAA,SAAAC,EAAAnW,GACA,OAAA,MAAAA,EAAAgZ,sBAAA7C,EACAlH,KAAAiV,IAAA/N,EAAAnW,EAAAgZ,sBAAA7Y,MAAA,CACA,EAAA,CAAA,EAEA,GAAA,IAAAgkB,EAAA,MAAA,GAIA,IAFA,IAAA7hB,EAAA,GAEAG,EAAA,EAAAA,EAAA0hB,EAAA1hB,CAAA,GACAH,EAAAW,KAAA,CACA6f,OAAAnkB,EAAA8f,oBAAAI,WAAA,KAAApc,EAAA,GACAsgB,OAAA,SAAAzf,GACA,OAAA,SAAAtD,GACA,OAAA,MAAAA,EAAAgZ,uBAAA,MAAAhZ,EAAAgZ,sBAAA1V,GAAA,KAAAmgB,EAAAzjB,EAAAgZ,sBAAA1V,GAAA4V,cAAAlZ,EAAAgZ,sBAAA1V,GAAA2V,aAAA,CACA,CACA,EAAAxW,CAAA,CACA,CAAA,EAEAH,EAAAW,KAAA,CACA6f,OAAAnkB,EAAA8f,oBAAAI,WAAA,KAAApc,EAAA,GAAA,OACAsgB,OAAA,SAAAzf,GACA,OAAA,SAAAtD,GACA,OAAA,MAAAA,EAAAgZ,uBAAA,MAAAhZ,EAAAgZ,sBAAA1V,GAAA,KAAAtD,EAAAgZ,sBAAA1V,GAAAgV,OACA,CACA,EAAA7V,CAAA,CACA,CAAA,EAGA,OAAAH,CACA,CAAA,EAEA0gB,kBAAA,WACA,IAAAoB,EAAAhe,EAAA8P,OAAA,SAAAC,EAAAnW,GACA,OAAA,MAAAA,EAAA6Y,kBAAA1C,EACAlH,KAAAiV,IAAA/N,EAAAnW,EAAA6Y,kBAAA1Y,MAAA,CACA,EAAA,CAAA,EAEA,GAAA,IAAAikB,EAAA,MAAA,GAIA,IAFA,IAAA9hB,EAAA,GAEAG,EAAA,EAAAA,EAAA2hB,EAAA3hB,CAAA,GACAH,EAAAW,KAAA,CACA6f,OAAAnkB,EAAA8f,oBAAAG,OAAA,KAAAnc,EAAA,GACAsgB,OAAA,SAAAzf,GACA,OAAA,SAAAtD,GACA,OAAA,MAAAA,EAAA6Y,mBAAA,MAAA7Y,EAAA6Y,kBAAAvV,GAAA,KAAAmgB,EAAAzjB,EAAA6Y,kBAAAvV,GAAAyV,cAAA/Y,EAAA6Y,kBAAAvV,GAAAwV,aAAA,CACA,CACA,EAAArW,CAAA,CACA,CAAA,EAEAH,EAAAW,KAAA,CACA6f,OAAAnkB,EAAA8f,oBAAAG,OAAA,KAAAnc,EAAA,GAAA,OACAsgB,OAAA,SAAAzf,GACA,OAAA,SAAAtD,GACA,OAAA,MAAAA,EAAA6Y,mBAAA,MAAA7Y,EAAA6Y,kBAAAvV,GAAA,KAAAtD,EAAA6Y,kBAAAvV,GAAAgV,OACA,CACA,EAAA7V,CAAA,CACA,CAAA,EAGA,OAAAH,CACA,CAAA,EAEA0gB,kBAAA,WACA,IAAAqB,EAAAje,EAAA8P,OAAA,SAAAC,EAAAnW,GACA,OAAA,MAAAA,EAAAskB,SAAAnO,EACAlH,KAAAiV,IAAA/N,EAAAnW,EAAAskB,SAAAnkB,MAAA,CACA,EAAA,CAAA,EAEA,GAAA,IAAAkkB,EAAA,MAAA,GAIA,IAFA,IAAA/hB,EAAA,GAEAG,EAAA,EAAAA,EAAA4hB,EAAA5hB,CAAA,GACAH,EAAAW,KAAA,CACA6f,OAAAnkB,EAAA8f,oBAAAE,YAAA,KAAAlc,EAAA,GACAsgB,OAAA,SAAAzf,GACA,OAAA,SAAAtD,GACA,OAAA,MAAAA,EAAAskB,UAAA,MAAAtkB,EAAAskB,SAAAhhB,GAAA,KAAAmgB,EAAAzjB,EAAAskB,SAAAhhB,GAAAmV,OAAAzY,EAAAskB,SAAAhhB,GAAAkV,MAAA,CACA,CACA,EAAA/V,CAAA,CACA,CAAA,EAEAH,EAAAW,KAAA,CACA6f,OAAAnkB,EAAA8f,oBAAAE,YAAA,KAAAlc,EAAA,GAAA,OACAsgB,OAAA,SAAAzf,GACA,OAAA,SAAAtD,GACA,OAAA,MAAAA,EAAAskB,UAAA,MAAAtkB,EAAAskB,SAAAhhB,GAAA,KAAAtD,EAAAskB,SAAAhhB,GAAAihB,MACA,CACA,EAAA9hB,CAAA,CACA,CAAA,EAGA,OAAAH,CACA,CAAA,EACA2gB,MAAA7c,CAAA,CACA,CACA,CAoCA,GAAA7J,UAAAC,GAAA0K,OAAAC,OAAA5K,UAAA,EC33EAyT,OAAA,oBAAAA,OAAA,qBAAA,GACAA,OAAA,oBAAA,mCAAA","file":"../inoMsComparator.min.js","sourcesContent":["; (function (inovestor, undefined) {\n // Setup dependencies for this plugin\n // Normally we would add jQuery and knockout but ms-core, which we depend on, already register them so it's useless\n\n // Create plugin namespace with any desired config variable\n inovestor.ms.comparator = inovestor.ms.comparator || {};\n})(inovestor);\n; (function (comparator, undefined) {\n // Create plugin namespace with any desired config variable\n comparator.config = {\n apiRelativeUrl: 'etfs/etfcomparatorV2?symbols={symbols}',\n apiDailyPricesRelativeUrl: 'etfs/etfComparatorV2/dailyPrices?symbols={symbols}',\n apiMonthlyReturnsRelativeUrl: 'etfs/etfComparatorV2/monthlyReturns?symbols={symbols}'\n };\n})(inovestor.ms.comparator);\n\n\n; (function (comparator, undefined) {\n var stateCacheKey = 'inoMsComparator';\n\n // Create plugin namespace with any desired config variable\n comparator.stateCache = {\n get: function () {\n try {\n var stateCacheFromStorage = sessionStorage.getItem(stateCacheKey);\n if (stateCacheFromStorage != null) {\n var stateCache = JSON.parse(stateCacheFromStorage);\n if (stateCache != null) {\n return stateCache\n }\n }\n } catch (e) {\n console.error(e);\n }\n return null\n },\n\n set: function (state) {\n try {\n sessionStorage.setItem(stateCacheKey, JSON.stringify(state));\n } catch (e) {\n console.error(e);\n }\n }\n };\n})(inovestor.ms.comparator);\n\n\n(function ($, ko, inovestor, undefined) {\n inovestor.ms.comparator.viewModels = {};\n\n /**\n * ViewModel for the ETF Comparison page\n * \n * @constructor\n * @param {object} plugin - A handle to the ETF Comparison plugin\n */\n inovestor.ms.comparator.viewModels.comparatorViewModel = function (plugin) {\n\n var self = this;\n self.maxSymbols = plugin.options.maxSymbols;\n self.pdfReportUrl = plugin.options.pdfReportUrl;\n self.pdfHandler = plugin.options.pdfHandler;\n self.etfs = ko.observableArray([]); // Gives you a handle to all the ETFs that are returned by the server\n self.resources = ko.observable(); // The resouces object for the current language\n self.rows = ko.observableArray(); // All of the formatted rows for the ETFs. Used to make the tables\n self.symbols = ko.observableArray(); // Collection of just the symbols. Passed to the plugin's search()\n self.tickers = ko.observableArray() // Holds the tickers\n self.hasError = ko.observable(false); // Boolean if there is an error with the data\n self.isBusy = ko.observable(false); // Boolean if there is currently an AJAX call happening\n self.showCategoryAlert = ko.observable(false); // Boolean whether we show the Caregory alert\n self.isInvalidIdentifier = ko.observable(false);\n self.invalidSymbols = ko.observable({\n symbols: ko.observableArray([]),\n displaySymbols: ko.observableArray([])\n });\n self.showInvalidSymbolsAlert = ko.observable(false);\n self.isDummyData = ko.observable(false);\n self.isFirstLoad = ko.observable(true);\n self.hasChartError = ko.observable(false);\n self.asOfPerfomanceDate = ko.observable();\n self.plugin = plugin;\n self.hasValidData = ko.computed(function () {\n return !self.hasError() && !self.isInvalidIdentifier() && self.etfs() !== null;\n }, this);\n\n self.canAddMoreSymbol = ko.pureComputed(function () {\n return self.symbols().filter(function (x) { return x.symbol !== plugin.options.defaultValueString }).length < self.maxSymbols;\n });\n\n self.numberOfSymbolsToCompare = ko.pureComputed(function () {\n return self.symbols().filter(function (x) { return x.symbol !== plugin.options.defaultValueString }).length;\n });\n\n // Observable to handle hidden/showing the collapsible sections\n self.hiddenOverview = ko.observable(false);\n self.hiddenOverviewCharacteristics = ko.observable(false);\n self.hiddenOverviewRisk = ko.observable(false);\n self.hiddenOverviewFixedIncome = ko.observable(false);\n self.hiddenPerformance = ko.observable(false);\n self.hiddenPerformancePeriodicReturns = ko.observable(false);\n self.hiddenPerformanceCalendarReturns = ko.observable(false);\n self.hiddenAllocations = ko.observable(false);\n self.hiddenAllocationsAssets = ko.observable(false);\n self.hiddenAllocationsGeographic = ko.observable(false);\n self.hiddenAllocationsSectors = ko.observable(false);\n self.hiddenAllocationsConstituents = ko.observable(false);\n\n // Observables related to the comparison chart\n self.displayComparisonChart = ko.observable(false);\n self.selectedComparisonChartPeriod = ko.observable('commonInception');\n self.selectedComparisonChartPeriodLength = ko.observable(null);\n self.setComparisonChartExtremes = function (period, periodLength) {\n self.selectedComparisonChartPeriod(period);\n self.selectedComparisonChartPeriodLength(periodLength);\n self.plugin._setChartExtremes(period, periodLength);\n }\n var comparisonChartTypes = ['returns', 'prices'];\n self.comparisonChartTypes = ko.observableArray(comparisonChartTypes);\n self.selectedComparisonChartType = ko.observable(comparisonChartTypes[0]);\n self.setSelectedComparisonChartType = function (type) {\n self.selectedComparisonChartType(type);\n self.plugin._renderComparisonChart(self.symbols());\n }\n\n /**\n * Sets the resources Observable to the corresponding one for the \n * current language of the page\n */\n self.updateResources = function () {\n // Update main resources\n var currentResource = inovestor.ms.comparator.resources[inovestor.ms.core.currentLanguage];\n if (inovestor.ms.core.isNullOrUndefined(currentResource))\n currentResource = null;\n self.resources(currentResource);\n };\n\n self.haveDifferentCategories = ko.pureComputed(function () {\n var assetClassNameRow = self.rows().find(function (x) { return x.rowName === 'assetClassName' });\n if (assetClassNameRow == null) return false;\n var distinctCategories = assetClassNameRow.columns.map(function (x) { return x.valueEn }).filter(function (x) { return x !== self.plugin.options.defaultValueString }).filter(function (x, i, array) { return array.indexOf(x) === i });\n return distinctCategories.length > 1;\n });\n\n /**\n * Computed observable to return an observable array for the rows\n * in the 'Overview' section of the plugin\n * \n * @returns {ObservableArray} - Collection of the Overview rows\n */\n self.overviewRows = ko.computed(function () {\n var rows = [],\n overviewRows = inovestor.ms.comparator.overviewRows,\n currentRows = self.rows();\n\n for (var i = 0; i < overviewRows.length; i++) {\n var currentOverview = overviewRows[i];\n\n for (var j = 0; j < currentRows.length; j++) {\n var currentRow = currentRows[j];\n\n if (currentRow.rowName === currentOverview) {\n rows.push(currentRow);\n break;\n }\n }\n }\n\n return rows;\n });\n\n /**\n * Computed observable to return an observable array for the rows\n * in the 'Overview Risk' section of the plugin\n * \n * @returns {ObservableArray} - Collection of the Overview Risk rows\n */\n self.riskRows = ko.computed(function () {\n var rows = [],\n riskRows = inovestor.ms.comparator.riskRows,\n currentRows = self.rows();\n\n for (var i = 0; i < riskRows.length; i++) {\n var currentField = riskRows[i];\n\n for (var j = 0; j < currentRows.length; j++) {\n var currentRow = currentRows[j];\n\n if (currentRow.rowName === currentField) {\n rows.push(currentRow);\n break;\n }\n }\n }\n\n return rows;\n });\n\n /**\n * Computed observable to return an observable array for the rows\n * in the 'Overview Fixed Income' section of the plugin\n * \n * @returns {ObservableArray} - Collection of the Overview Fixed Income rows\n */\n self.fixedIncomeRows = ko.computed(function () {\n var rows = [],\n fixedIncomeRows = inovestor.ms.comparator.fixedIncomeRows,\n currentRows = self.rows();\n\n for (var i = 0; i < fixedIncomeRows.length; i++) {\n var currentField = fixedIncomeRows[i];\n\n for (var j = 0; j < currentRows.length; j++) {\n var currentRow = currentRows[j];\n\n if (currentRow.rowName === currentField) {\n rows.push(currentRow);\n break;\n }\n }\n }\n\n return rows;\n });\n\n /**\n * Removes all the values from the rows observable array for the\n * fund at the index.\n * \n * @param {number} index - The index to remove\n */\n self.removeFromRowsByIndex = function (index) {\n if (!inovestor.ms.core.isNullOrUndefined(index)) {\n var rows = self.rows();\n\n for (var i = 0; i < rows.length; i++) {\n var currentRow = rows[i];\n\n if (currentRow.displayType !== 'localizedText') {\n currentRow.columns[index] = { value: self.plugin.options.defaultValueString };\n } else {\n currentRow.columns[index] = { valueEn: self.plugin.options.defaultValueString, valueFR: self.plugin.options.defaultValueString };\n }\n }\n\n self.rows([]);\n self.rows(rows);\n }\n };\n\n \n\n /**\n * Replaces a symbol (MIC:TICKER) in the symbol ObservableArray\n * \n * @param {object} symbolObj - Holds the properties for the selected symbol\n * @param {number} symbolToChange - The index of the symbol to be changed\n */\n self.addSymbol = function (symbolObj) {\n if (!inovestor.ms.core.isNullOrUndefined(symbolObj)\n && !inovestor.ms.core.isNullOrUndefined(symbolObj.symbol)) {\n\n // Check if the symbol that we are trying to add is already in the list\n if (self.symbols().some(function (x) { return symbolObj.symbol === x.symbol; })) return; // don't add the same symbol more than one time\n\n // Find the first index that is empty and that we are able to add the symbol into\n const symbolToChange = self.symbols().findIndex(function (x) { return x.symbol === self.plugin.options.defaultValueString; });\n if (symbolToChange === -1) return; // there is no empty slot\n\n // Depending on which input was used set the right symbol\n self.symbols.replace(self.symbols()[symbolToChange],\n { symbol: symbolObj.symbol, isValidTicker: false });\n\n var ticker = symbolObj.symbol.substring(symbolObj.symbol.indexOf(':') + 1);\n self.tickers()[symbolToChange] = ticker;\n // Force a refresh\n self.tickers(self.tickers());\n\n self.doSearch();\n }\n },\n\n /**\n * Remove a symbol from the symbols collection and replaces it with\n * an empty symbol before calling the plugin's search()\n * \n * @param {number} index - The index to remove\n */\n self.removeSymbol = function (index) {\n if (!inovestor.ms.core.isNullOrUndefined(index) &&\n index <= self.symbols().length - 1 &&\n !self.isBusy()) {\n\n var symbols = self.symbols();\n var tickers = self.tickers();\n var etfs = self.etfs();\n\n var numberOfWantedSymbols = symbols.length\n\n symbols.splice(index, 1);\n tickers.splice(index, 1);\n etfs.splice(index, 1);\n\n symbols = symbols.filter(function (x) { return x.isValidTicker })\n tickers = tickers.filter(function (x) { return x !== self.plugin.options.defaultValueString })\n etfs = etfs.filter(function (x) { return x.dummyData !== true })\n\n for (var i = symbols.length; i < numberOfWantedSymbols; i++) {\n symbols.push({ symbol: self.plugin.options.defaultValueString, isValidTicker: false });\n tickers.push(self.plugin.options.defaultValueString);\n etfs.push({ symbol: self.plugin.options.defaultValueString, dummyData: true });\n }\n\n // Force refresh\n self.symbols(symbols);\n self.tickers(tickers);\n self.etfs(etfs);\n self.removeFromRowsByIndex(index);\n\n var rows = self.plugin._createRows(self.etfs());\n self.rows(self.plugin._formatRows(rows));\n\n self.plugin._renderComparisonChart(plugin._viewModel.symbols());\n self.plugin._renderPieCharts();\n self.plugin._setUrlValues();\n }\n },\n\n /**\n * Calls the plugin's search() function passing into it a comma\n * separated list of all the symbols\n */\n self.doSearch = function () {\n var arr = [];\n\n for (var i = 0; i < self.symbols().length; i++) {\n if (self.symbols()[i].symbol !== self.plugin.options.defaultValueString)\n arr.push(self.symbols()[i].symbol);\n }\n self.plugin.search(arr.join(','));\n }\n\n self.urlValues = ko.observableArray();\n self.selfUrl = ko.observable();\n\n self.exportToCsv = function () {\n try {\n var csvArray = inovestor.ms.comparator.csvService.transformComparatorDataToCsvArray(self.etfs().filter(function (x) { return x.dummyData !== true }), self.resources());\n var csvString = inovestor.ms.comparator.csvService.transformCsvArrayToCsvString(csvArray, { escapeHeader: true });\n var blob = new Blob([csvString], { type: \"text/csv;charset=utf-8\" });\n saveAs(blob, inovestor.ms.core.currentLanguage === 'fr' ? 'Comparaison des fonds.csv' : 'Fund Comparison.csv');\n } catch (error) {\n console.error(error);\n $('#ino-ms-etf-comparator-csv-export-error-modal').modal('show');\n }\n };\n\n self.generatePdfUrl = function () {\n var symbols = self.etfs().filter(function (x) { return x.dummyData !== true }).map(function (x) { return x.symbol });\n var url = inovestor.ms.core.stringFormat(self.pdfReportUrl, { symbols: symbols.join(',') });\n return url;\n };\n\n self.getSymbolAtIndex = function (index) {\n var validEtfs = self.etfs().filter(function (x) { return x.dataType !== null });\n if (index < validEtfs.length) {\n var validEtf = validEtfs[index];\n return validEtf.dataType === 'fund' ? validEtf.symbol : validEtf.ticker ;\n }\n return null;\n }\n\n self.canLink = function (data) {\n if (data == null || inovestor.ms.core.isEmptyString(data.family) || inovestor.ms.core.isEmptyString(plugin.options.redirectUrl)) return false\n\n if (plugin.options.sponsoredFamilies == null || plugin.options.sponsoredFamilies.length === 0) return true\n\n return plugin.options.sponsoredFamilies.some(function (x) {\n return x.localeCompare(data.family, 'en', { sensitivity: 'base' }) === 0\n })\n }\n\n self.generateLink = function (data) {\n if (data == null || inovestor.ms.core.isEmptyString(plugin.options.redirectUrl)) return ''\n return inovestor.ms.core.stringFormat(plugin.options.redirectUrl, { symbol: data.symbol, category: data.dataType })\n }\n\n // we only want to use the library for english language\n // the default browser hyphenation is good enough for french\n var hyphenate = inovestor.ms.core.currentLanguage === 'en' ? createHyphenator(hyphenationPatternsEnUs) : function (text) { return text }\n self.hyphenate = function (text) {\n if (text == null) return text\n return hyphenate(text)\n }\n\n self.coalesce = function (value, defaultValue) {\n if (value == null) return defaultValue\n return value\n }\n }\n})(inovestor.ms.libRef.jQuery, inovestor.ms.libRef.ko, inovestor);\n\n; (function ($, ko, inovestor, undefined) {\n\n var pluginName = 'inoMsComparator';\n \n /**\n * Plugin constructor for the ETF Comparison page\n * \n * @constructor\n * @param {object} element - The DOM element the plugin is attached to\n * @param {object} options - The options for the plugin\n */\n function Plugin(element, options) {\n\n this.element = element;\n this._name = pluginName;\n this._defaults = $.fn.inoMsComparator.defaults;\n\n // Merge options with defaults\n this.options = $.extend(true, {}, this._defaults, options);\n\n this._viewModel = new inovestor.ms.comparator.viewModels.comparatorViewModel(this);\n\n // Make sure required variables are set\n if (inovestor.ms.core.isNullOrUndefined(this.options.symbols))\n throw \"at least 1 symbol required\";\n\n this.comparisonChartData = null;\n this.comparisonChartInstance = null;\n this.comparisonChartReturnsCache = new Map();\n this.comparisonChartPricesCache = new Map();\n\n // Call init\n this.init();\n }\n\n /**\n * Avoid Plugin.prototype conflicts\n */\n $.extend(Plugin.prototype, {\n\n /**\n * Initialization logic for the plugin\n */\n init: function () {\n var plugin = this;\n\n // Setup what plugin needs to do on language change\n inovestor.ms.core.instances.register(this, function () {\n plugin.update();\n });\n\n // Plugin overrides for template = cacheKey and path are the same\n var fileCacheKey = plugin.options.templatePaths.comparator;\n var filePath = plugin.options.templatePaths.comparator;\n // Default behavior (if no template path is set by plugin)\n if (inovestor.ms.core.isEmptyString(fileCacheKey)) {\n var fileName = 'comparator.html';\n fileCacheKey = pluginName + '.' + 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 (this._name + '/' + fileName);\n }\n\n // Get main template file\n inovestor.ms.core.getTemplate(fileCacheKey, filePath).then(function (template) {\n $(plugin.element).html(template);\n plugin.buildCache();\n plugin.render();\n plugin.bindEvents();\n plugin.bindModel();\n }).then(function () {\n // Set up Shareable\n plugin.shareable = new inovestor.ms.core.Shareable();\n plugin._setInitialSymbols();\n\n // Set the symbols for the view model\n plugin._setTickers(plugin.options.maxSymbols);\n\n // Get the autocomplete widget if none loaded\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 else if (inovestor.ms.core.isNullOrUndefined($.ui.autocomplete))\n throw 'jQuery IU autocomplete module is required';\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-1.0.0.min.js');\n var autocompleteStyleUrl = inovestor.ms.core.concatUrl(plugin.options.inoCdnBaseUrl, 'widgets/inoMsAutocomplete/inoMsAutocomplete-1.0.0.min.css');\n $('body').append('');\n $('body').append('');\n }\n\n plugin._setUpAutocomplete(); // Allow to use AutoComplete even there is no symbols \n\n // Call Search\n plugin.search(plugin.options.symbols).always(function () {\n plugin._setUpAutocomplete();\n // When search is completed, trigger onReady event\n plugin.$element.trigger('ready' + '.' + plugin._name);\n });\n });\n },\n\n _setInitialSymbols: function () {\n var plugin = this;\n\n // first try to set the symbols from the URL\n var urlValues = plugin.shareable.getNavigationValues();\n if (!inovestor.ms.core.isNullOrUndefined(urlValues.symbols)) {\n var nonEmptyUrlSymbols = plugin._removeEmptySymbols(urlValues.symbols);\n if (nonEmptyUrlSymbols.length > 0) {\n plugin.options.symbols = nonEmptyUrlSymbols;\n plugin._removeDuplicateSymbols(plugin.options.symbols);\n return\n }\n }\n\n // if symbols are not in the URL, try to set them from the state cache\n var stateCacheValues = inovestor.ms.comparator.stateCache.get()\n if (stateCacheValues != null && stateCacheValues.symbols != null) {\n var nonEmptyStateCacheSymbols = plugin._removeEmptySymbols(stateCacheValues.symbols);\n plugin.options.symbols = nonEmptyStateCacheSymbols;\n plugin._removeDuplicateSymbols(plugin.options.symbols);\n return\n }\n },\n\n /**\n * Sets the ticker values in the view model for the inputs\n * \n * @param {number} maxSymbols - The maximum number of symbols to compare\n */\n _setTickers: function (maxSymbols) {\n var plugin = this;\n\n if (inovestor.ms.core.isNullOrUndefined(maxSymbols))\n maxSymbols = 5;\n if (!inovestor.ms.core.isNullOrUndefined(plugin.options.symbols)) {\n var tickers = plugin.options.symbols.split(',').map(function (symbol) {\n return symbol.substring(symbol.indexOf(':') + 1);\n })\n\n // Make sure we always have the right number of tickers\n while (tickers.length !== maxSymbols) {\n tickers.push(plugin.options.defaultValueString);\n }\n\n plugin._viewModel.tickers(tickers);\n }\n },\n\n /**\n * Removes the plugin instance completely\n */\n destroy: function () {\n this.unbindEvents();\n this.$element.removeData();\n },\n\n /**\n * Caches the DOM nodes for performance\n */\n buildCache: function () {\n this.$element = $(this.element);\n this.$etfChartInstance = null;\n },\n\n /**\n * Bind events for the plugin\n */\n bindEvents: function () {\n var plugin = this;\n plugin.$element.on('ready' + '.' + plugin._name, function () {\n var onReady = plugin.options.onReady;\n if (typeof onReady === 'function')\n onReady.call(plugin.$element);\n });\n\n plugin.$element.find('.ino-etf-compare__share-btn-group').on('show.bs.dropdown', function () {\n var input = plugin.$element.find('.ino-etf-compare__share-dropdown-menu input')\n input.val(location.href)\n setTimeout(function () {\n input.select()\n try {\n document.execCommand('copy')\n } catch (e) {\n console.error(e)\n }\n })\n })\n\n $(document).on('browser-navigation-hashchange', function () {\n \n // Reset invalid symbols\n plugin._viewModel.invalidSymbols().symbols([]);\n plugin._viewModel.showInvalidSymbolsAlert(false);\n\n\n // Get old symbols and new symbols\n var oldSymbols = plugin._getValidSymbolString();\n plugin._setInitialSymbols();\n\n if (oldSymbols.join(',').toLowerCase() === plugin.options.symbols)\n return;\n\n if (plugin.options.symbols) {\n var newSymbolsArr = plugin.options.symbols.split(',');\n while (newSymbolsArr.length < plugin.options.maxSymbols)\n newSymbolsArr.push(plugin.options.defaultValueString);\n\n // Don't let user put too many symbols in URL\n var extraSymbols = newSymbolsArr.splice(plugin.options.maxSymbols);\n\n extraSymbols.forEach(function (item) {\n plugin._viewModel.invalidSymbols().symbols().push({\n symbol: item,\n reason: 'tooManySymbols'\n });\n });\n\n if (extraSymbols.length > 0)\n plugin.options.symbols = newSymbolsArr.join(',');\n\n var areSameSymbols = plugin._areSymbolsTheSame(newSymbolsArr, oldSymbols);\n if (areSameSymbols) {\n\n var id = 0;\n // Find which symbol moved\n while ((oldSymbols[id] === newSymbolsArr[id] || oldSymbols[id] === newSymbolsArr[id + 1]) && id < oldSymbols.length) {\n id++;\n }\n\n if (id < oldSymbols.length) {\n var newIndex = id;\n var oldIndex = oldSymbols.indexOf(newSymbolsArr[newIndex]);\n plugin._swapValuesByIndices(oldIndex, newIndex);\n } else {\n plugin.shareable.setNavigation({ symbols: plugin.options.symbols.toUpperCase() });\n }\n\n if (plugin._viewModel.invalidSymbols().symbols().length > 0) {\n plugin._viewModel.invalidSymbols().displaySymbols(plugin._viewModel.invalidSymbols().symbols());\n plugin._viewModel.showInvalidSymbolsAlert(true);\n }\n } else {\n plugin._setTickers(plugin.options.maxSymbols);\n plugin.search(plugin.options.symbols);\n }\n }\n });\n },\n\n _getValidSymbolString: function () {\n var plugin = this;\n\n var oldSymbols = [];\n for (var i = 0; i < plugin._viewModel.symbols().length; i++) {\n var currentVal = plugin._viewModel.symbols()[i].symbol;\n\n if (currentVal !== plugin.options.defaultValueString)\n oldSymbols.push(currentVal.toLowerCase());\n }\n\n return oldSymbols;\n },\n\n _areSymbolsTheSame: function (newSymbolsArr, oldSymbols) {\n var sameSymbols = true;\n for (var i = 0; i < newSymbolsArr.length; i++) {\n var currentSymbol = newSymbolsArr[i];\n\n if (oldSymbols.indexOf(currentSymbol) === -1) {\n var sameSymbols = false;\n break;\n }\n }\n\n return sameSymbols;\n },\n\n /**\n * Unbind events for the plugin\n */\n unbindEvents: function () {\n this.$element.off('.' + this._name);\n },\n\n // API error handler\n apiErrorHandler: function (apiError) {\n var plugin = this;\n var onError = plugin.options.onError;\n if (typeof onError === 'function') {\n var result = onError.call(inovestor.ms.core.generateError(inovestor.ms.core.errors.apiError, apiError, plugin));\n // If callback returns false, do not execute default behavior\n if (!inovestor.ms.core.isNullOrUndefined(result) && result === false)\n return;\n }\n\n plugin._viewModel.hasError(true);\n },\n\n /**\n * Handles the invalid identifier response from the server\n */\n invalidIdentifierHandler: function () {\n var plugin = this;\n var onError = plugin.options.onError;\n if (typeof onError === 'function') {\n var result = onError.call(inovestor.ms.core.generateError(inovestor.ms.core.errors.invalidIdentifier, null, plugin));\n // If callback returns false, do not execute default behavior\n if (!inovestor.ms.core.isNullOrUndefined(result) && result === false)\n return;\n }\n\n plugin._viewModel.isInvalidIdentifier(true);\n },\n\n /**\n * Calls the API and searches for the provided symbols\n * \n * @param {string} symbols - A comma seperated list of symbols (MIC:TICKER)\n * @returns {Deferred} - The call to the server for the symbols\n */\n search: function (symbols) {\n var plugin = this;\n\n plugin._resetDataBeforeSearch();\n\n plugin.options.symbols = symbols;\n\n // Fill the table anyway when there's no symbols\n if (inovestor.ms.core.isEmptyString(plugin.options.symbols)) {\n plugin._viewModel.isFirstLoad(false); // Show Comparison Tool panel even if there is no symbol\n plugin._viewModel.etfs([]);\n plugin._viewModel.symbols([]);\n return plugin._setDefaultTable();\n }\n\n // Setup API url with term\n var etfUrl = inovestor.ms.core.stringFormat(inovestor.ms.comparator.config.apiRelativeUrl, { symbols: plugin.options.symbols });\n\n // Call API and bind model\n var options = { type: 'GET', contentType: 'application/json', error: function (error) { plugin.apiErrorHandler(error); } };\n return inovestor.ms.core.ajaxApi(etfUrl, options).then(function (data) {\n if (!inovestor.ms.core.isNullOrUndefined(data)) {\n\n var validData = plugin._removeInvalidSymbols(data);\n\n if (plugin._viewModel.invalidSymbols().symbols().length > 0) {\n plugin._viewModel.showInvalidSymbolsAlert(true);\n plugin._viewModel.invalidSymbols().displaySymbols(\n plugin._viewModel.invalidSymbols().symbols());\n }\n\n plugin._addFundsAndSymbolsToVM(validData);\n plugin._sortResults();\n plugin._fillTableData(plugin._viewModel.etfs(), plugin.options.maxSymbols);\n plugin._setUrlValues();\n var rows = plugin._createRows(plugin._viewModel.etfs());\n plugin._viewModel.rows(plugin._formatRows(rows));\n plugin._renderComparisonChart(plugin._viewModel.symbols());\n plugin._renderPieCharts();\n plugin._viewModel.isFirstLoad(false);\n }\n else {\n plugin._viewModel.etfs([]);\n }\n\n plugin._viewModel.invalidSymbols().symbols([]);\n plugin._setUpSortable();\n plugin._viewModel.isBusy(false);\n });\n },\n\n _addFundsAndSymbolsToVM: function (validData) {\n var plugin = this;\n\n plugin._viewModel.etfs([]);\n plugin._viewModel.symbols([]);\n for (var i = 0; i < validData.length; i++) {\n if (validData[i].dataType === 'fund' && validData[i].assetUnderManagement) {\n validData[i].assetUnderManagement = validData[i].assetUnderManagement * 1000000;\n }\n\n plugin._viewModel.etfs.push(validData[i]);\n plugin._viewModel.symbols.push({ symbol: validData[i].symbol, isValidTicker: true });\n }\n },\n\n _removeInvalidSymbols: function (data) {\n var plugin = this;\n\n var badIndices = [];\n data.forEach(function (item, index, array) {\n if (item.requestStatus === 'invalidIdentifier' || item.requestStatus === 'invalid') {\n plugin._viewModel.invalidSymbols().symbols.push({\n symbol: item.symbol,\n reason: 'invalidSymbol'\n });\n\n badIndices.push(index);\n }\n });\n\n badIndices.reverse().forEach(function (value) {\n data.splice(value, 1);\n });\n\n return data;\n },\n\n _resetDataBeforeSearch: function () {\n var plugin = this;\n plugin._viewModel.hasError(false);\n plugin._viewModel.isInvalidIdentifier(false);\n plugin._viewModel.isBusy(true);\n plugin._viewModel.showCategoryAlert(false);\n plugin._viewModel.isDummyData(false);\n plugin._viewModel.displayComparisonChart(false);\n plugin._viewModel.showInvalidSymbolsAlert(false);\n },\n\n _removeDuplicateSymbols: function (symbols) {\n var plugin = this;\n var duplicateSymbols = [];\n\n if (!inovestor.ms.core.isEmptyString(symbols)) {\n var symbolArr = symbols.toLowerCase().split(',');\n duplicateSymbols = symbolArr.filter(function (item, index, self) {\n return index !== self.lastIndexOf(item);\n });\n\n var uniqueSymbols = symbolArr.filter(function (item, index, self) {\n return self.indexOf(item) === index;\n });\n\n plugin.options.symbols = uniqueSymbols.join();\n }\n\n duplicateSymbols.forEach(function (item) {\n plugin._viewModel.invalidSymbols().symbols.push({\n symbol: item,\n reason: 'duplicateSymbol'\n });\n });\n },\n\n _removeEmptySymbols: function (symbols) {\n var plugin = this;\n var newSymbolStr = '';\n\n if (!inovestor.ms.core.isEmptyString(symbols)) {\n var symbolsArr = symbols.split(',').filter(function (item) {\n return !inovestor.ms.core.isEmptyString(item) && item !== plugin.options.defaultValueString;\n });\n\n newSymbolStr = symbolsArr.join();\n }\n\n return newSymbolStr;\n },\n\n /**\n * Sets up the default table when there's an error with the symbols or the data returned from\n * the server\n * \n * @returns {Deferred} - A done state on an empty deferred\n */\n _setDefaultTable: function () {\n var plugin = this;\n plugin._fillTableData(plugin._viewModel.etfs(), plugin.options.maxSymbols);\n var unformattedRows = plugin._createRows(plugin._viewModel.etfs());\n plugin._viewModel.rows(plugin._formatRows(unformattedRows));\n plugin.update();\n plugin._viewModel.isBusy(false);\n return $.Deferred().done();\n },\n\n _setUrlValues: function () {\n var plugin = this;\n var etfs = plugin._viewModel.etfs();\n var validSymbols = [];\n var symbolObj = {};\n\n for (var i = 0; i < etfs.length; i++) {\n etfs[i].symbol !== plugin.options.defaultValueString ? validSymbols.push(etfs[i].symbol) : null;\n }\n\n if (validSymbols.length > 0) {\n symbolObj.symbols = validSymbols.join();\n var currentUrlValues = plugin.shareable.getNavigationValues().symbols;\n\n if (!inovestor.ms.core.isNullOrUndefined(currentUrlValues)) {\n\n if (currentUrlValues.toLowerCase() !== symbolObj.symbols.toLowerCase())\n plugin.shareable.setNavigation(symbolObj);\n\n } else {\n plugin.shareable.setNavigation(symbolObj);\n }\n\n inovestor.ms.comparator.stateCache.set({ symbols: validSymbols.join(',') })\n } else {\n plugin.shareable.setNavigation({});\n inovestor.ms.comparator.stateCache.set({ symbols: '' });\n }\n },\n\n _swapValuesByIndices: function (oldIndex, newIndex) {\n var plugin = this;\n var tickers = plugin._viewModel.tickers();\n var symbols = plugin._viewModel.symbols();\n var etfs = plugin._viewModel.etfs();\n var rows = plugin._viewModel.rows();\n\n // Ticker, Symbols and ETFs all include dummy data for empty slots (always five items for 5 symbols configured comparison)\n // Rows columns don't include those dummy data (four columns if there is an empty slot for a symbol for a 5 symbols configured comparison)\n var adjustedOldIndexForRows = Math.min(oldIndex - tickers.filter(function (x, i) { return x === plugin.options.defaultValueString && i < oldIndex; }).length, rows[0].columns.length - 1);\n\n var moved = tickers[oldIndex];\n tickers.splice(oldIndex, 1);\n tickers.splice(newIndex, 0, moved);\n\n moved = symbols[oldIndex];\n symbols.splice(oldIndex, 1);\n symbols.splice(newIndex, 0, moved);\n\n moved = etfs[oldIndex];\n etfs.splice(oldIndex, 1);\n etfs.splice(newIndex, 0, moved);\n\n plugin._viewModel.tickers([]);\n plugin._viewModel.tickers(tickers);\n\n plugin._viewModel.symbols([]);\n plugin._viewModel.symbols(symbols);\n\n plugin._viewModel.etfs([]);\n plugin._viewModel.etfs(etfs);\n\n var adjustedNewIndexForRows = Math.min(newIndex - tickers.filter(function (x, i) { return x === plugin.options.defaultValueString && i < newIndex; }).length, rows[0].columns.length - 1);\n\n for (var i = 0; i < rows.length; i++) {\n var currentColumns = rows[i].columns;\n\n moved = currentColumns[adjustedOldIndexForRows];\n currentColumns.splice(adjustedOldIndexForRows, 1);\n currentColumns.splice(adjustedNewIndexForRows, 0, moved);\n\n rows[i].columns = currentColumns;\n }\n plugin._viewModel.rows([]);\n plugin._viewModel.rows(rows);\n\n plugin._renderComparisonChart(symbols);\n plugin._renderPieCharts();\n plugin._setUrlValues();\n },\n\n _setUpSortable: function () {\n var plugin = this;\n\n $(\"#ino-etf-ticker-container\").sortable({\n handle: \".sortable-handle\",\n scroll: true,\n placeholder: \"ino-etf-ticker\",\n helper: function (event, ui) {\n var clone = ui.clone();\n clone.css({\n height: ui.height(),\n width: ui.width(),\n });\n return clone;\n },\n update: function (event, ui) {\n var oldIndex = ui.item.data('oldIndex');\n var newIndex = ui.item.index();\n\n if (oldIndex === newIndex) return;\n\n \n plugin._swapValuesByIndices(oldIndex, newIndex);\n plugin._viewModel.showInvalidSymbolsAlert(false);\n },\n start: function (event, ui) {\n //ui.placeholder -> Représente l'element qui reste en arriere lors du drag and drop\n //ui.helper -> Represente l'element que la souris garde lors du drag and drop \n //ui.item -> Represente original qui doit bouger \n\n ui.item.data('oldIndex', ui.item.index()); // Manage the index while changing\n ui.placeholder.html(ui.item.html()) // Faire que le placeholder ne sois pas different de l'element d'origine \n },\n change: function (event, ui) {\n ui.placeholder.html(ui.item.html()); // Mise à jour de la placeholder pour qu'elle soit identique à l'élément\n },\n stop: function (event, ui) {\n ui.item.css('visibility', 'visible'); // Rendre l'élément visible à nouveau\n },\n })\n\n //This method converts mouse events into touch help when using mobile \n // Because jquery-ui does not works good with in mobile \n function touchHandler(event) {\n var touch = event.changedTouches[0];\n\n var simulatedEvent = document.createEvent(\"MouseEvent\");\n simulatedEvent.initMouseEvent({\n touchstart: \"mousedown\",\n touchmove: \"mousemove\",\n touchend: \"mouseup\"\n }[event.type], true, true, window, 1,\n touch.screenX, touch.screenY,\n touch.clientX, touch.clientY, false,\n false, false, false, 0, null);\n\n touch.target.dispatchEvent(simulatedEvent);\n }\n\n document.addEventListener(\"touchstart\", touchHandler, true)\n document.addEventListener(\"touchmove\", touchHandler, true);\n document.addEventListener(\"touchend\", touchHandler, true);\n document.addEventListener(\"touchcancel\", touchHandler, true);\n },\n\n /**\n * Sorts the results returned by the server to make sure that the ordering\n * of the ETFs returned by the server matches the input boxes.\n */\n _sortResults: function () {\n var plugin = this;\n var etfs = plugin._viewModel.etfs();\n var symbols = plugin._viewModel.symbols();\n var tickers = plugin._viewModel.tickers();\n\n if (!inovestor.ms.core.isNullOrUndefined(tickers) && !inovestor.ms.core.isNullOrUndefined(etfs)\n && !inovestor.ms.core.isNullOrUndefined(symbols)) {\n\n var sortedEtfs = [];\n var sortedSymbols = [];\n\n // Sort symbols and etfs based on the order of the tickers\n for (var i = 0; i < tickers.length; i++) {\n var ticker = tickers[i];\n\n if (ticker === plugin.options.defaultValueString) {\n sortedEtfs.push({ symbol: plugin.options.defaultValueString, dummyData: true });\n sortedSymbols.push({ symbol: plugin.options.defaultValueString, isValidTicker: false });\n } else {\n for (var j = 0; j < etfs.length; j++) {\n // Also compare on symbol for funds\n if ((etfs[j].ticker && etfs[j].ticker.toLowerCase() === ticker.toLowerCase()) ||\n (etfs[j].symbol && etfs[j].symbol.toLowerCase() === ticker.toLowerCase())) {\n \n sortedEtfs.push(etfs[j]);\n sortedSymbols.push(symbols[j]);\n break;\n }\n }\n }\n }\n\n plugin._viewModel.etfs(sortedEtfs);\n plugin._viewModel.symbols(sortedSymbols);\n }\n },\n\n /**\n * Fills all the empty ETF slots until the maximum number of ETFs\n * \n * @param {array} etfs - Collection of all the etfs\n * @param {number} maxNumberOfEtfs - The maximum number of ETFs we want to compare\n */\n _fillTableData: function (etfs, maxNumberOfEtfs) {\n var plugin = this;\n var dummyCtr = 0;\n\n // Make sure we have the right number of ETFs (Should always have 2)\n while (etfs.length < maxNumberOfEtfs) {\n plugin._viewModel.etfs.push({ symbol: plugin.options.defaultValueString, dummyData: true });\n // Also make sure we have enough symbols\n plugin._viewModel.symbols.push({ symbol: plugin.options.defaultValueString, isValidTicker: false });\n dummyCtr++;\n }\n\n if (dummyCtr === maxNumberOfEtfs) {\n plugin._viewModel.isDummyData(true);\n }\n },\n\n /**\n * Creates the rows that are to be iterated over to display the comparison table\n * \n * @param {array} etfs - Collection of all the etfs\n * @returns {array} rows - Collection of the rows\n */\n _createRows: function (etfs) {\n var plugin = this;\n var rowNames = inovestor.ms.comparator.rowNames;\n var rows = [];\n\n for (var i = 0; i < rowNames.length; i++) {\n var rowDefinition = rowNames[i];\n\n // Create the row object based on the definition\n var rowObj = {\n rowName: rowDefinition.key,\n displayType: rowDefinition.displayType,\n resourceKey: rowDefinition.resourceKey,\n columns: []\n };\n\n // Add the value for the feature for all the ETFs\n for (var j = 0; j < etfs.length; j++) {\n var etf = etfs[j];\n\n if (etf.symbol !== plugin.options.defaultValueString) {\n var key = rowDefinition.key;\n\n if (key === 'previousClose' && etf.dataType === 'fund')\n key = 'previousNavps';\n\n var columnValue = etf[key];\n if (!inovestor.ms.core.isNullOrUndefined(columnValue)) {\n rowObj.columns.push({ value: columnValue, decimalPlaces: rowDefinition.decimalPlaces, valueAsPercent: rowDefinition.valueAsPercent, showAsLargeNumber: rowDefinition.showAsLargeNumber });\n // Check for English and French named values\n } else if (rowDefinition.displayType === 'localizedText') {\n\n rowObj.columns.push({\n valueEn: etf[key + 'En'] || plugin.options.defaultValueString,\n valueFr: etf[key + 'Fr'] || plugin.options.defaultValueString,\n });\n } else if (rowDefinition.displayType === 'localizedModalText') {\n rowObj.columns.push({\n value: inovestor.ms.core.currentLanguage === 'fr' ? etf[key + 'Fr'] || plugin.options.defaultValueString : etf[key + 'En'] || plugin.options.defaultValueString,\n linkTextResourceKey: rowDefinition.linkTextResourceKey\n });\n } else {\n rowObj.columns.push({ value: plugin.options.defaultValueString });\n }\n }\n }\n\n rows.push(rowObj);\n }\n\n return rows;\n },\n\n /**\n * Adds the CSS classes for the rows and formats the text to something we can display\n * on the page. \n * \n * @param {array} rows - Collection of all the rows for the page\n * @returns {array} - The formatted rows\n */\n _formatRows: function (rows) {\n var plugin = this;\n\n // Loop through to change the text\n if (rows.length > 0 && rows[0].columns.length > 0) {\n for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n var currentRow = rows[rowIndex];\n\n // Check for different categories and display the alert\n if (currentRow.rowName === 'assetClassName') {\n var compareCol = currentRow.columns[0].valueEn;\n for (var i = 1; i < currentRow.columns.length; i++) {\n var comparer = currentRow.columns[i].valueEn;\n if (comparer !== plugin.options.defaultValueString)\n if (comparer !== compareCol)\n plugin._viewModel.showCategoryAlert(true);\n }\n }\n }\n }\n\n return rows;\n },\n\n // Renders html template and binds model (should be called once)\n render: function () {\n var plugin = this;\n plugin._viewModel.updateResources();\n },\n\n _setChartExtremes: function (type, count) {\n if (inovestor.ms.core.isNullOrUndefined(type))\n return;\n\n var plugin = this,\n apiFirstDate = null,\n apiLastDate = null,\n minDate = null,\n maxDate = null;\n\n if (!inovestor.ms.core.isNullOrUndefined(plugin.comparisonChartData) && plugin.comparisonChartData.length > 0) {\n // In all historicalDatas, find the max and min date and set them to apiFirstDate and apiLastDate\n plugin.comparisonChartData.forEach(function (chartData) {\n if (!inovestor.ms.core.isNullOrUndefined(chartData.historicalDatas) && chartData.historicalDatas.length > 0) {\n var firstDate = new Date(chartData.historicalDatas[0].date);\n var lastDate = new Date(chartData.historicalDatas[chartData.historicalDatas.length - 1].date);\n\n if (inovestor.ms.core.isNullOrUndefined(apiFirstDate) || firstDate < apiFirstDate)\n apiFirstDate = firstDate;\n\n if (inovestor.ms.core.isNullOrUndefined(apiLastDate) || lastDate > apiLastDate)\n apiLastDate = lastDate;\n\n plugin._viewModel.asOfPerfomanceDate(apiLastDate)\n }\n });\n }\n\n // Make sure a date was found before setting the extremes\n if (inovestor.ms.core.isNullOrUndefined(apiFirstDate) || inovestor.ms.core.isNullOrUndefined(apiLastDate))\n return;\n\n switch (type) {\n case 'ytd':\n maxDate = Date.UTC(apiLastDate.getUTCFullYear(), apiLastDate.getUTCMonth(), apiLastDate.getUTCDate(), apiLastDate.getUTCHours(), apiLastDate.getUTCMinutes(), apiLastDate.getUTCSeconds());\n minDate = Date.UTC(apiLastDate.getUTCFullYear(), 0, 1, 0, 0, 0);\n break;\n case 'all':\n minDate = Date.UTC(apiFirstDate.getUTCFullYear(), apiFirstDate.getUTCMonth(), apiFirstDate.getUTCDate(), apiFirstDate.getUTCHours(), apiFirstDate.getUTCMinutes(), apiFirstDate.getUTCSeconds());\n maxDate = Date.UTC(apiLastDate.getUTCFullYear(), apiLastDate.getUTCMonth(), apiLastDate.getUTCDate(), apiLastDate.getUTCHours(), apiLastDate.getUTCMinutes(), apiLastDate.getUTCSeconds());\n break;\n case 'year':\n maxDate = Date.UTC(apiLastDate.getUTCFullYear(), apiLastDate.getUTCMonth(), apiLastDate.getUTCDate(), apiLastDate.getUTCHours(), apiLastDate.getUTCMinutes(), apiLastDate.getUTCSeconds());\n\n var minDateCompute = new Date(maxDate);\n minDateCompute.setFullYear(minDateCompute.getFullYear() - count);\n\n if (minDateCompute < apiFirstDate) {\n minDateCompute = apiFirstDate;\n }\n\n minDate = Date.UTC(minDateCompute.getUTCFullYear(), minDateCompute.getUTCMonth(), minDateCompute.getUTCDate(), minDateCompute.getUTCHours(), minDateCompute.getUTCMinutes(), minDateCompute.getUTCSeconds());\n break;\n case 'commonInception':\n // In all historicalDatas, find the min start date and set is as the mostRecentDate\n var mostRecentDate;\n\n plugin.comparisonChartData.forEach(function (chartData) {\n if (!inovestor.ms.core.isNullOrUndefined(chartData.historicalDatas) && chartData.historicalDatas.length > 0) {\n var firstDate = new Date(chartData.historicalDatas[0].date);\n\n if (inovestor.ms.core.isNullOrUndefined(mostRecentDate) || firstDate > mostRecentDate)\n mostRecentDate = firstDate;\n }\n });\n\n minDate = Date.UTC(mostRecentDate.getUTCFullYear(), mostRecentDate.getUTCMonth(), mostRecentDate.getUTCDate(), mostRecentDate.getUTCHours(), mostRecentDate.getUTCMinutes(), mostRecentDate.getUTCSeconds());\n maxDate = Date.UTC(apiLastDate.getUTCFullYear(), apiLastDate.getUTCMonth(), apiLastDate.getUTCDate(), apiLastDate.getUTCHours(), apiLastDate.getUTCMinutes(), apiLastDate.getUTCSeconds());\n\n break;\n default:\n throw 'Provided type is not supported. Type: ' + type;\n }\n\n plugin.comparisonChartInstance.xAxis[0].setExtremes(\n minDate,\n maxDate,\n true,//renderChart,\n false\n );\n },\n\n /**\n * Renders the comparison chart for the symbols\n */\n _renderComparisonChart: function (symbols) {\n if (symbols == null || symbols.length == 0)\n return;\n\n var plugin = this;\n var etfsData = plugin._viewModel.etfs();\n plugin._viewModel.displayComparisonChart(true);\n\n var chartIsReturnsChart = plugin._viewModel.selectedComparisonChartType() === 'returns';\n var chartSymbols = symbols.filter(function (x) { return !inovestor.ms.core.isNullOrUndefined(x.symbol) && x.isValidTicker; });\n\n // If the chart is in returns mode, we only display symbols that have returns (which means more than a year of data)\n if (chartIsReturnsChart) {\n chartSymbols = chartSymbols.filter(function (x) {\n // Map the symbol on the etfsData to the symbol in the symbols array and get the hasReturns property to determine if we should display it\n var data = etfsData.filter(function (y) { return y.symbol === x.symbol; })[0];\n if (!inovestor.ms.core.isNullOrUndefined(data))\n return data.hasReturns;\n else\n return false;\n });\n }\n\n var chartIsInCompareMode = chartIsReturnsChart || chartSymbols.length > 1;\n\n var defaultChartOptions = {\n chart: {\n type: 'line',\n zoomType: 'x',\n events: {\n selection: function (event) {\n if (!event.xAxis) {\n setTimeout(function () {\n plugin._setChartExtremes(plugin._viewModel.selectedComparisonChartPeriod(), plugin._viewModel.selectedComparisonChartPeriodLength());\n }, 1);\n }\n }\n }\n },\n plotOptions: {\n line: {\n marker: {\n enabled: false\n }\n },\n series: {\n marker: {\n enabled: false\n }\n }\n },\n xAxis: {\n type: 'datetime'\n },\n plotOptions: {\n series: {\n compare: chartIsInCompareMode ? 'percent' : null,\n compareStart: true,\n dataGrouping: {\n dateTimeLabelFormats: {\n week: inovestor.ms.core.currentLanguage === 'fr' ? ['Semaine du %A %e %b %Y', '%A, %e %b', '-%A, %e %b %Y'] : ['Week from %A, %e %b %Y', '%A, %e %b', '-%A, %e %b %Y']\n }\n }\n }\n },\n rangeSelector: {\n enabled: false\n },\n navigator: {\n enabled: false\n },\n scrollbar: {\n enabled: false\n },\n legend: {\n enabled: true\n }\n };\n\n return plugin._fetchNewComparisonChartData(chartSymbols, chartIsReturnsChart).then(function (chartDatas) {\n plugin.comparisonChartData = chartDatas;\n if (!inovestor.ms.core.isNullOrUndefined(chartDatas)) {\n plugin._viewModel.hasChartError(false);\n //plugin._viewModel.displayComparisonChart(true);\n\n var chartSeries = [];\n chartDatas.forEach(function (chartData) {\n var symbolParts = chartData.symbol.split(':');\n var ticker = symbolParts.length > 0\n ? symbolParts[symbolParts.length - 1]\n : chartData.symbol;\n\n var compoundedValue = 10000;\n var currentSeries = {\n name: ticker,\n data: (chartData.historicalDatas && Array.isArray(chartData.historicalDatas))\n ? chartData.historicalDatas.reduce(function (agg, x) {\n var value = chartIsReturnsChart\n ? compoundedValue * (1 + x.value)\n : x.value;\n agg.push([new Date(x.date).getTime(), value]);\n compoundedValue = value;\n return agg;\n }, []) : [],\n };\n\n chartSeries.push(currentSeries);\n });\n\n var chartElement = plugin.$element.find('.comparison-chart');\n var chartOptions = $.extend({}, defaultChartOptions, {\n series: chartSeries,\n yAxis: {\n opposite: true,\n labels: {\n formatter: function () {\n if (chartIsInCompareMode) {\n return (this.value > 0 ? ' + ' : '') + this.value + '%';\n } else {\n return Highcharts.numberFormat(this.value, 2);\n }\n }\n }\n },\n tooltip: {\n pointFormat: chartIsInCompareMode ? '
- |