{"version":3,"sources":["authInterceptor.js","contentVersionningInterceptor.js","headersInjectorInterceptor.js","app.js","app.run.js","config.js","config.resources.js","config.exceptionHandler.js","common.js","logger.js","serverExceptionInterceptor.js","authService.js","bootstrap.dialog.js","storageService.js","userInfoEndpointService.js","userService.js","month.js","utc.js","authNotAuthenticatedDialog/authNotAuthenticatedDialog.js","authNotAuthorizedDialog/authNotAuthorizedDialog.js","layout/shell.js","layout/templates.js","loadingIndicator/loadingIndicator.js","progressIndicator/progressIndicator.js","selectOnClick/selectOnClick.js","sparkline/sparkline.js","tabstrip/tabstrip.js","widgetControl/widgetControl.js","widgetDataTable/widgetDataTable.js","layout/footer/footer.js","layout/header/header.js","layout/header/header.search.js","layout/navMenu/navMenu.js","layout/ribbon/ribbon.js"],"names":["configureAuthInterceptor","$httpProvider","interceptors","push","authInterceptorFactory","$injector","$rootScope","$q","config","httpBuffer","userService","isRefreshingTokens","request","currentUser","tokens","accessToken","headers","Authorization","responseError","rejection","status","refreshToken","deferred","defer","append","get","post","servicesUrl","identity","refreshTokenUrl","then","response","data","persist","retryAll","clear","rejectAll","broadcastError","finally","promise","reject","$broadcast","401","events","auth","notAuthenticated","403","notAuthorized","419","440","httpBufferFactory","$http","buffer","i","length","item","retryHttpRequest","resolve","app","angular","module","run","$translate","$on","refresh","toastr","options","timeOut","positionClass","appWorkStarted","appWorkFinished","logoutSuccess","controllerActivateSuccess","languageChanged","appRoot","copy","window","appRootPath","clientAppSrcPath","appVersion","inoAppConfig","version","appLanguage","uiLanguage","value","cfg","appWorkStartedEvent","appWorkFinishedEvent","$logProvider","debugEnabled","dynamicLocaleProvider","localeLocationPattern","$translateProvider","$translatePartialLoaderProvider","commonConfigProvider","useSanitizeValueStrategy","addPart","useLoader","urlTemplate","preferredLanguage","extendExceptionHandler","$delegate","logger","appErrorPrefix","logError","getLogFn","exception","cause","message","indexOf","errorData","msg","$provide","decorator","commonModule","provider","this","$get","factory","$timeout","commonConfig","handleBusyState","promises","taskId","textResourceKey","all","$log","service","moduleId","fnName","toLowerCase","logFn","log","showToast","undefined","source","logIt","logSuccess","logWarning","toastType","error","warning","success","info","$templateCache","baseUrl","key","separator","url","api","apiBasePath","userInfoEndpoint","isSupportedUrl","encodeURIComponent","LocalizedErrorMessage","isHandled","modelState","errorMessages","defaultErrorText","instant","property","hasOwnProperty","errorTextKey","errorText","getErrorMessagesFromModelState","$window","storageService","login","location","signInUrl","logout","idToken","identityToken","clearSession","signOutUrl","$modal","deleteDialog","itemName","confirmationDialog","put","title","okText","cancelText","modalOptions","templateUrl","controller","ModalInstance","keyboard","open","result","$scope","$modalInstance","ok","close","cancel","dismiss","sessionStorage","getItem","JSON","stringify","parse","regexValues","exec","Date","UTC","removeItem","setItem","getProfile","sessionCurrentUserKey","resetCurrentUser","uniqueId","profile","email","firstName","lastName","isAuthenticated","setProfile","setTokens","sessionUser","activate","filter","val","moment","month","format","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","directive","restrict","link","scope","toggleAuthenticationDialog","toggleAuthorizationDialog","controllerId","replace","controllerAs","common","deferredBusy","vm","amountBusyPromisesToResolve","logAppWork","event","busyIndicatorConfig","setIsBusy","isBusy","timeoutSignInUrl","userProfile","visible","authorizationDialogVisible","$","modal","show","backdrop","isAuthorizationDialogVisible","authenticationDialogVisible","eventArgs","busyConfig","element","body","document","detach","template","$interval","transclude","items","index","isIncrementing","interval","isStopped","start","stop","isCurrent","addItem","pre","attrs","itemAmount","iCnt","on","getSelection","toString","setSelectionRange","$this","sparklineType","barColor","css","sparklineHeight","sparklineBarWidth","sparklineBarSpacing","sparklineNegBarColor","sparklineStackedColor","sparkline","type","height","barWidth","barSpacing","stackedBarColor","negBarColor","zeroAxis","disableTooltips","disableInteraction","tabs","forEach","tabScope","tabRoot","find","tabId","tabContent","tabHeader","resetTrigger","$watch","resetTabStrip","isHidden","click","addTab","removeGroup","splice","iElement","iAttrs","require","setTabHeader","setTabContent","transcludeFn","clone","remove","widgetControlConfig","widgetConfig","extend","widgetId","jarvisWidgets","header","widgetTitle","widgetIconClass","constant","grid","widgets","localStorage","deleteSettingsKey","settingsKeyLabel","deletePositionKey","positionKeyLabel","sortable","buttonsHidden","toggleButton","toggleClass","toggleSpeed","onToggle","deleteButton","deleteClass","deleteSpeed","onDelete","editButton","editPlaceholder","editClass","editSpeed","onEdit","colorButton","fullscreenButton","fullscreenClass","fullscreenDiff","onFullscreen","customButton","customClass","customStart","alert","customEnd","buttonOrder","opacity","dragHandle","placeholderClass","indicator","indicatorTime","ajax","timestampPlaceholder","timestampFormat","refreshButton","refreshButtonClass","labelError","labelUpdated","labelRefresh","labelDelete","afterLoad","rtl","onChange","onSave","rootElement","widgetDataTableScope","createDataTable","updateLanguage","widgetDataItems","enableCustomFiltering","removeRowAt","rowIndex","trElement","addRow","customFilteringTransclude","tableData","destroy","breakpointDefinition","tablet","phone","responsiveHelper_dt_basic","table","dataTable","preDrawCallback","ResponsiveDatatablesHelper","rowCallback","nRow","createExpandIcon","drawCallback","oSettings","respond","searching","language","appConfig","dataTables","currentLang","autoWidth","DataTable","first","rows","draw","row","add","amMoment","tmhDynamicLocale","setLanguage","languageKey","use","set","changeLocale","changeLanguage","isSelected","editProfileUrl","editUrl","userIsAuthenticated","$filter","$state","menuInfos","currentState","$current","name","allStates","state","settings","parent","subMenuInfos","abstract","childrenStates","s","childState","hide","stateName","resourceKey","titleResourceKey","iconClass","nav","getNavRoutes"],"mappings":"AAKA,SAAAA,yBAAAC,GACAA,EAAAC,aAAAC,KAAA,mBAGA,SAAAC,uBAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA,IAAAC,GAAA,EAOA,MALA,CACAC,QAMA,SAAAJ,GAEAE,EAAAG,YAAAC,OAAAC,cACAP,EAAAQ,QAAAR,EAAAQ,SAAA,GACAR,EAAAQ,QAAAC,cAAA,UAAAP,EAAAG,YAAAC,OAAAC,aAGA,OAAAP,GAZAU,cAeA,SAAAC,GAEA,GAAA,MAAAA,EAAAC,QAAAV,EAAAG,YAAAC,QAAAJ,EAAAG,YAAAC,OAAAO,aAAA,CAGA,IAAAC,EAAAf,EAAAgB,QAUA,OAPAd,EAAAe,OAAAL,EAAAG,GAEAX,IACAA,GAAA,EA2CAN,EAAAoB,IAAA,SAIAC,KAAAlB,EAAAmB,YAAAC,SAAAC,gBAAA,CAAAR,aAAAX,EAAAG,YAAAC,OAAAO,eACAS,KAnCA,SAAAC,GACAA,GAAAA,EAAAC,MAAAD,EAAAC,KAAAjB,aAAAgB,EAAAC,KAAAX,cAEAX,EAAAG,YAAAC,OAAAC,YAAAgB,EAAAC,KAAAjB,YACAL,EAAAG,YAAAC,OAAAO,aAAAU,EAAAC,KAAAX,aACAX,EAAAuB,UAGAxB,EAAAyB,aAGAxB,EAAAyB,QACA1B,EAAA2B,YAGAC,EAAA,CAAAjB,OAAA,QAGA,SAAAW,GAEArB,EAAAyB,QACA1B,EAAA2B,YAGAC,EAAA,CAAAjB,OAAA,QAYAkB,QAAA,WAAA3B,GAAA,KA7CAW,EAAAiB,QAKA,OADAF,EAAAlB,GACAZ,EAAAiC,OAAArB,KA2CA,SAAAkB,EAAAN,GACAzB,EAAAmC,WAAA,CACAC,IAAAlC,EAAAmC,OAAAC,KAAAC,iBACAC,IAAAtC,EAAAmC,OAAAC,KAAAG,cACAC,IAAAxC,EAAAmC,OAAAC,KAAAG,cACAE,IAAAzC,EAAAmC,OAAAC,KAAAG,eACAhB,EAAAX,QAAAW,IAIA,SAAAmB,kBAAA7C,GAEA,IAGA8C,EAHAC,EAAA,GAWA,MANA,CACA5B,OAQA,SAAAL,EAAAG,GACA8B,EAAAjD,KAAA,CACAgB,UAAAA,EACAG,SAAAA,KAVAc,UAeA,WACA,IAAA,IAAAiB,EAAA,EAAAA,EAAAD,EAAAE,SAAAD,EAAA,CACA,IAAAE,EAAAH,EAAAC,GACAE,EAAAjC,SAAAkB,OAAAe,EAAApC,WAGAiC,EAAA,IApBAlB,SAwBA,WACA,IAAA,IAAAmB,EAAA,EAAAA,EAAAD,EAAAE,SAAAD,EAAA,CACA,IAAAE,EAAAH,EAAAC,GACAG,EAAAD,EAAApC,UAAAX,OAAA+C,EAAAjC,UAEA8B,EAAA,KAGA,SAAAI,EAAAhD,EAAAc,IAOA6B,EAAAA,GAAA9C,EAAAoB,IAAA,UACAjB,GAAAsB,KAPA,SAAAC,GACAT,EAAAmC,QAAA1B,IAEA,SAAAA,GACAT,EAAAkB,OAAAT,MCrJA,ICAA2B,KCAA,WACA,aAGAC,QAAAC,OAAA,oBAAA,IACAD,QAAAC,OAAA,2BAAA,IAEAD,QAAAC,OAAA,SAAA,CAEA,YACA,YACA,aAGA,gBAGA,mBACA,oBACA,2BACA,SACA,mBAGA,eACA,yBACA,gBACA,oBACA,WA5BA,GCAA,WACA,aAEAD,QAAAC,OAAA,UAAAC,IAAA,CAAA,aAAA,aAEA,SAAAvD,EAAAwD,GACAxD,EAAAyD,IAAA,0CAAA,WACAD,EAAAE,eAPA,GCAA,WACA,aAEA,IAAAN,EAAAC,QAAAC,OAAA,UAGAK,OAAAC,QAAAC,QAAA,IACAF,OAAAC,QAAAE,cAAA,qBAEA,IAYA5D,EAAA,CACAmC,OAbA,CACA0B,eAAA,kBACAC,gBAAA,mBACA1B,KAAA,CACA2B,cAAA,sBACA1B,iBAAA,yBACAE,cAAA,uBAEAyB,0BAAA,6BACAC,gBAAA,mBAKAC,QAAAf,QAAAgB,KAAAC,OAAAC,aACAC,iBAAAnB,QAAAgB,KAAAC,OAAAE,kBACAC,WAAApB,QAAAgB,KAAAC,OAAAI,aAAAC,SACAC,YAAAvB,QAAAgB,KAAAC,OAAAI,aAAAG,YACAxD,YAAAgC,QAAAgB,KAAAC,OAAAjD,cAGA+B,EAAA0B,MAAA,SAAA5E,GAEAkD,EAAAlD,OAAA,CAAA,uBAAA,SAAA6E,GACAA,EAAA7E,OAAA8E,oBAAA9E,EAAAmC,OAAA0B,eACAgB,EAAA7E,OAAA+E,qBAAA/E,EAAAmC,OAAA2B,gBACAe,EAAA7E,OAAAkE,QAAAlE,EAAAkE,QACAW,EAAA7E,OAAAsE,iBAAAtE,EAAAsE,oBAGApB,EAAAlD,OAAA,CAAA,eAAA,SAAAgF,GAEAA,EAAAC,cACAD,EAAAC,cAAA,MAIA/B,EAAAlD,OAAA,CAAA,2BAAA,SAAAkF,GACAA,EAAAC,sBAAAnF,EAAAsE,iBAAA,gEA/CA,GCAA,WACA,aACAnB,QAAAC,OAAA,UACApD,OAAA,CAAA,qBAAA,kCAAA,uBAAA,SAAAoF,EAAAC,EAAAC,GACAF,EAAAG,yBAAA,WAEAF,EAAAG,QAAA,yCACAJ,EAAAK,UAAA,0BAAA,CACAC,YAAAJ,EAAAtF,OAAAsE,iBAAA,8BAEAc,EAAAO,kBAAA,SAVA,GCEA,WACA,aAaA,SAAAC,EAAAC,EAAA7F,EAAA8F,GACA,IAAAC,EAAA/F,EAAA+F,eACAC,EAAAF,EAAAG,SAAA,SAAA,SACA,OAAA,SAAAC,EAAAC,GAEA,GADAN,EAAAK,EAAAC,IACAJ,GAAA,IAAAG,EAAAE,QAAAC,QAAAN,GAAA,CAEA,IAAAO,EAAA,CAAAJ,UAAAA,EAAAC,MAAAA,GACAI,EAAAR,EAAAG,EAAAE,QACAJ,EAAAO,EAAAD,GAAA,KApBAnD,QAAAC,OAAA,UAKApD,OAAA,CAAA,WAAA,SAAAwG,GACAA,EAAAC,UAAA,oBACA,CAAA,YAAA,SAAA,SAAAb,OAVA,GCFA,WACA,aAMA,IAAAc,EAAAvD,QAAAC,OAAA,SAAA,IAIAsD,EAAAC,SAAA,eAAA,WACAC,KAAA5G,OAAA,GAKA4G,KAAAC,KAAA,WACA,MAAA,CACA7G,OAAA4G,KAAA5G,WAKA0G,EAAAI,QAAA,SACA,CAAA,KAAA,aAAA,WAAA,eAAA,SAEA,SAAA/G,EAAAD,EAAAiH,EAAAC,EAAAlB,GAQA,MALA,CACAmB,gBAMA,SAAAC,EAAAC,EAAAC,GAEA,OADAtH,EAAAmC,WAAA+E,EAAAhH,OAAA8E,oBAAA,CAAAqC,OAAAA,EAAAC,gBAAAA,IACArH,EACAsH,IAAAH,GACApF,QAAA,WACAhC,EAAAmC,WAAA+E,EAAAhH,OAAA+E,qBAAA,CAAAoC,OAAAA,EAAAC,gBAAAA,OAVAtB,OAAAA,MAhCA,GCAA,WACA,aAEA3C,QAAAC,OAAA,UAAA0D,QAAA,SAAA,CAAA,OAEA,SAAAQ,GACA,IAAAC,EAAA,CACAtB,SASA,SAAAuB,EAAAC,GAEA,QADAA,EAAAA,GAAA,OACAC,eACA,IAAA,UACAD,EAAA,aAAA,MACA,IAAA,QACAA,EAAA,WAAA,MACA,IAAA,OAEA,IAAA,UACAA,EAAA,aAGA,IAAAE,EAAAJ,EAAAE,IAAAF,EAAAK,IACA,OAAA,SAAArB,EAAA/E,EAAAqG,GACAF,EAAApB,EAAA/E,EAAAgG,OAAAM,IAAAD,GAAAA,KAvBAD,IA2BA,SAAAxB,EAAA5E,EAAAuG,EAAAF,GACAG,EAAA5B,EAAA5E,EAAAuG,EAAAF,EAAA,SA3BA7B,SAsCA,SAAAI,EAAA5E,EAAAuG,EAAAF,GACAG,EAAA5B,EAAA5E,EAAAuG,EAAAF,EAAA,UAtCAI,WAiCA,SAAA7B,EAAA5E,EAAAuG,EAAAF,GACAG,EAAA5B,EAAA5E,EAAAuG,EAAAF,EAAA,YAjCAK,WA4BA,SAAA9B,EAAA5E,EAAAuG,EAAAF,GACAG,EAAA5B,EAAA5E,EAAAuG,EAAAF,EAAA,aA1BA,OAAAN,EAqCA,SAAAS,EAAA5B,EAAA5E,EAAAuG,EAAAF,EAAAM,IACA,UAAAA,EAAAb,EAAAc,MAAAd,EAAAM,KACAG,EAAAA,EAAA,IAAAA,EAAA,KAAA,GACA3B,EAAA5E,GACAqG,IACA,UAAAM,EACA1E,OAAA2E,MAAAhC,GACA,YAAA+B,EACA1E,OAAA4E,QAAAjC,GACA,YAAA+B,EACA1E,OAAA6E,QAAAlC,GAEA3C,OAAA8E,KAAAnC,QA/DA,GTAAjD,QAAAC,OAAA,UACApD,OAAA,CAAA,gBAAAR,2BACAsH,QAAA,aAAA,CAAA,YAAApE,oBACAoE,QAAA,kBAAA,CAAA,YAAA,aAAA,KAAA,SAAA,aAAA,cAAAlH,0BCHAsD,IAAAC,QAAAC,OAAA,WAEA0D,QAAA,gCAAA,CAAA,iBAAA,SAAA,SAAA0B,EAAAxI,GAcA,MAbA,CACAI,QAAA,SAAAA,GAwBA,IAAAqI,EAAAC,EAAA9D,EACA+D,EAjBA,OANAH,EAAAvH,IAAAb,EAAAwI,MAYA,SAAAA,GACA,GAAA5I,EAAAmB,aAAAnB,EAAAmB,YAAA0H,KAAA7I,EAAAmB,YAAAC,SACA,OAAA,IAAAwH,EAAAvC,QAAArG,EAAAmB,YAAA0H,IAAAC,cACAF,IAAA5I,EAAAmB,YAAAC,SAAA2H,kBACAH,IAAA5I,EAAAmB,YAAAC,SAAAC,gBAGA,OAAA,EAnBA2H,CAAA5I,EAAAwI,OAGAxI,EAAAwI,KAmBAH,EAnBArI,EAAAwI,IAmBAF,EAnBA,MAmBA9D,EAnBAqE,mBAAAjJ,EAAAuE,YAoBAoE,GAAA,EAAAF,EAAApC,QAAA,KAAA,IAAA,IACAoC,EAAAE,EAAAD,EAAA,IAAA9D,IAlBAxE,OAsBA8C,IAAAlD,OAAA,CAAA,gBAAA,SAAAP,GACAA,EAAAC,aAAAC,KAAA,qCCnCAuD,IAAAC,QAAAC,OAAA,WAEA0D,QAAA,6BAAA,WAQA,MAPA,CACA1G,QAAA,SAAAJ,GAEA,OADAA,EAAAQ,QAAA,oBAAA,iBACAR,MAOAkD,IAAAlD,OAAA,CAAA,gBAAA,SAAAP,GACAA,EAAAC,aAAAC,KAAA,iCQdAwD,QAAAC,OAAA,UACA0D,QAAA,6BAAA,CAAA,KAAA,aAAA,SAAA/G,EAAAuD,GAKA,MAJA,CACA5C,cAKA,SAAAa,GAEAA,EAAAC,MAAA,iBAAAD,EAAAC,OACAD,EAAAC,KAAA,IACAD,EAAAC,KAAA0H,sBAAA,GAEA,IAAAC,GAAA,EAGA,GAAA,MAAA5H,EAAAX,QAAAW,EAAAC,MAAAD,EAAAC,KAAA4H,WAAA,CAOAC,cA+BA,SAAAD,GACA,IAAAC,EAAA,GACAC,EAAAhG,EAAAiG,QAAA,6BAGA,IAAA,IAAAC,KAAAJ,EAGA,GAAAA,EAAAK,eAAAD,GAGA,IAAA,IAAA3G,EAAA,EAAAA,EAAAuG,EAAAI,GAAA1G,OAAAD,IAAA,CAEA,IAAA6G,EAAA,SAAAN,EAAAI,GAAA3G,GACA8G,EAAArG,EAAAiG,QAAAG,GAIAA,IAAAC,EACAN,EAAA1J,KAAA2J,GAEAD,EAAA1J,KAAAgK,GAKA,OAAAN,EAzDAO,CAAArI,EAAAC,KAAA4H,YAGA,IAAA,IAAAvG,EAAA,EAAAA,EAAAwG,cAAAvG,OAAAD,IACAtB,EAAAC,KAAA0H,uBAAAG,cAAAxG,GACAA,EAAA,IAAAwG,cAAAvG,SACAvB,EAAAC,KAAA0H,uBATA,UAYAC,GAAA,EAIA,MAAA5H,EAAAX,SACAW,EAAAC,KAAA0H,sBAAA5F,EAAAiG,QAAA,0BACAJ,GAAA,GAIA,MAAA5H,EAAAX,SACAW,EAAAC,KAAA0H,sBAAA5F,EAAAiG,QAAA,sBACAJ,GAAA,GAIAA,IACA5H,EAAAC,KAAA0H,sBAAA5F,EAAAiG,QAAA,8BAEA,OAAAxJ,EAAAiC,OAAAT,QAwCAvB,OAAA,CAAA,gBAAA,SAAAP,GACAA,EAAAC,aAAAC,KAAA,iCC7FA,WACA,aAEAwD,QAAAC,OAAA,UAEA0D,QAAA,cAAA,CAAA,KAAA,aAAA,UAAA,SAAA,iBAAA,cAEA,SAAA/G,EAAAD,EAAA+J,EAAA7J,EAAA8J,EAAA5J,GACA,IAAAqH,EAAA,CACAwC,MAQA,WAEAjK,EAAAmC,WAAAjC,EAAAmC,OAAA0B,gBACAgG,EAAAG,SAAAhK,EAAAmB,YAAAC,SAAA6I,WAVAC,OAaA,WACA,IAAAC,EAAA,GACAjK,EAAAG,YAAAC,SACA6J,EAAAjK,EAAAG,YAAAC,OAAA8J,eAEAC,IAAA/I,KAAA,WACAxB,EAAAmC,WAAAjC,EAAAmC,OAAAC,KAAA2B,eAEAjE,EAAAmC,WAAAjC,EAAAmC,OAAA0B,gBACAgG,EAAAG,SAAAhK,EAAAmB,YAAAC,SAAAkJ,WAAA,YAAArB,mBAAAkB,OAjBA,OAFArK,EAAAyD,IAAAvD,EAAAmC,OAAAC,KAAAC,iBAAAgI,GAEA9C,EAqBA,SAAA8C,IACA,OAAAtK,EAAAsH,IAAA,CAAAyC,EAAAnI,cArCA,GCAA,WACA,aAEAwB,QAAAC,OAAA,mBAAA,CAAA,iBAEA0D,QAAA,mBAAA,CAAA,SAAA,iBAEA,SAAAyD,EAAA/B,GACA,IAAAjB,EAAA,CACAiD,aAqBA,SAAAC,GAKA,OAAAC,EAJA,iBAEA,WADAD,EAAAA,GAAA,QACA,MAvBAC,mBAAAA,GAkBA,OAfAlC,EAAAmC,IAAA,uBACA,4cAcApD,EAUA,SAAAmD,EAAAE,EAAArE,EAAAsE,EAAAC,GAEA,IAAAC,EAAA,CACAC,YAAA,uBACAC,WAAAC,EACAC,UAAA,EACAlI,QAAA,CACAS,QAAA,WACA,MAAA,CACAkH,MAAAA,EACAxE,QAAAG,EACAsE,OAAAA,EACAC,WAAAA,MAMA,OAAAP,EAAAa,KAAAL,GAAAM,WAIA,IAAAH,EAAA,CAAA,SAAA,iBAAA,UACA,SAAAI,EAAAC,EAAA7H,GACA4H,EAAAV,MAAAlH,EAAAkH,OAAA,QACAU,EAAAlF,QAAA1C,EAAA0C,SAAA,GACAkF,EAAAT,OAAAnH,EAAAmH,QAAA,KACAS,EAAAR,WAAApH,EAAAoH,YAAA,SACAQ,EAAAE,GAAA,WAAAD,EAAAE,MAAA,OACAH,EAAAI,OAAA,WAAAH,EAAAI,QAAA,aAnEA,GCAA,WACA,aAGAxI,QAAAC,OAAA,UAAA0D,QADA,iBACA,CAAA,UAKA,SAAA+C,GACA,IAAA+B,EAAA/B,EAAA+B,eASA,MAPA,CACAjK,MAQA,WACAiK,EAAAjK,SARAkK,QAWA,SAAAnD,GACA,IAUA9D,EAAAgH,EAAAC,QAAAC,KAAAC,UAAArD,IAEA,OAAAoD,KAAAE,MAAApH,EAZA,SAAA8D,EAAA9D,GACA,GAAA,iBAAAA,EAAA,CACA,IAAAqH,EAAA,wFAAAC,KAAAtH,GACA,GAAAqH,EAEA,OAAA,IAAAE,KAAAA,KAAAC,KAAAH,EAAA,GAAAA,EAAA,GAAA,GAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,IAAAA,EAAA,KAGA,OAAArH,KAnBAyH,WA0BA,SAAA3D,GACAkD,EAAAS,WAAAP,KAAAC,UAAArD,KA1BA4D,QA6BA,SAAA5D,EAAA9D,GACAgH,EAAAU,QAAAR,KAAAC,UAAArD,GAAAoD,KAAAC,UAAAnH,SA9CA,GCAA,WACA,aAEAzB,QAAAC,OAAA,UAEA0D,QAAA,0BAAA,CAAA,QAAA,SAEA,SAAAnE,EAAA3C,GAMA,MAJA,CACAuM,WAKA,WAEA,OAAA5J,EAAA1B,IAAAjB,EAAAmB,YAAAC,SAAA2H,kBAAAzH,KACA,SAAAC,GACA,OAAAA,EAAAC,MAEA,SAAAD,GACA,MAAA,UAtBA,GCAA,WACA,aAEA4B,QAAAC,OAAA,UAKA0D,QAAA,cAAA,CAAA,iBAEA,SAAAgD,GACA,IAAA0C,EAAA,qBAEAjF,EAAA,CACA5F,MAmCA,WACA8K,IACA3C,EAAAuC,WAAAG,IApCAnM,YAAA,CACAqM,SAAA,GACAC,QAAA,CACAC,MAAA,GACAC,UAAA,GACAC,SAAA,IAEAxM,OAAA,CACAC,YAAA,GACA6J,cAAA,GACAvJ,aAAA,KAGAkM,gBA0BA,WACA,QAAAxF,EAAAlH,YAAAqM,UA1BAjL,QA6BA,WACAqI,EAAAwC,QAAAE,EAAAjF,EAAAlH,cA7BA2M,WAAAA,EACAC,UAAAA,GAKA,OAEA,WACAR,IAGA,IAAAS,EAAApD,EAAA+B,QAAAW,GACAU,IACAF,EAAAE,EAAAR,SAAAQ,EAAAP,QAAAC,MAAAM,EAAAP,QAAAE,UAAAK,EAAAP,QAAAG,UACAG,EAAAC,EAAA5M,OAAAC,YAAA2M,EAAA5M,OAAA8J,cAAA8C,EAAA5M,OAAAO,eAXAsM,GAEA5F,EA0BA,SAAAkF,IACAlF,EAAAlH,YAAAqM,SAAA,GACAnF,EAAAlH,YAAAsM,QAAAC,MAAA,GACArF,EAAAlH,YAAAsM,QAAAE,UAAA,GACAtF,EAAAlH,YAAAsM,QAAAG,SAAA,GACAvF,EAAAlH,YAAAC,OAAAC,YAAA,GACAgH,EAAAlH,YAAAC,OAAA8J,cAAA,GACA7C,EAAAlH,YAAAC,OAAAO,aAAA,GAGA,SAAAmM,EAAAN,EAAAE,EAAAC,EAAAC,GACAvF,EAAAlH,YAAAqM,SAAAA,EACAnF,EAAAlH,YAAAsM,QAAAC,MAAAA,EACArF,EAAAlH,YAAAsM,QAAAE,UAAAA,EACAtF,EAAAlH,YAAAsM,QAAAG,SAAAA,EAGA,SAAAG,EAAA1M,EAAA6J,EAAAvJ,GACA0G,EAAAlH,YAAAC,OAAAC,YAAAA,EACAgH,EAAAlH,YAAAC,OAAA8J,cAAAA,EACA7C,EAAAlH,YAAAC,OAAAO,aAAAA,MAlFA,GCAA,WACA,aAEAsC,QAAAC,OAAA,UAEAgK,OAAA,QAAA,WACA,OAAA,SAAAC,GACA,OAAAC,SAAAC,MAAAF,GAAAG,OAAA,WAPA,GCAA,WACA,aAEArK,QAAAC,OAAA,UAEAgK,OAAA,MAAA,WACA,OAAA,SAAAC,GACA,IAAAI,EAAA,IAAAtB,KAAAkB,GACA,OAAA,IAAAlB,KAAAsB,EAAAC,iBACAD,EAAAE,cACAF,EAAAG,aACAH,EAAAI,cACAJ,EAAAK,gBACAL,EAAAM,oBAbA,GCAA,WACA,aAEA5K,QAAAC,OAAA,UAEA4K,UAAA,6BAAA,CAAA,aAAA,SAAA,SAAAlO,EAAAE,GAMA,MALA,CACAiO,SAAA,IACAjD,YAAA,wDACAkD,KAIA,SAAAC,GAKAA,EAAAC,4BAAA,GACAtO,EAAAyD,IAAAvD,EAAAmC,OAAAC,KAAAC,iBALA,WACA8L,EAAAC,4BAAA,UAfA,GCAA,WACA,aAEAjL,QAAAC,OAAA,UACA4K,UAAA,0BAAA,CAAA,aAAA,SAAA,SAAAlO,EAAAE,GAMA,MALA,CACAiO,SAAA,IACAjD,YAAA,qDACAkD,KAIA,SAAAC,GAKAA,EAAAE,2BAAA,GACAvO,EAAAyD,IAAAvD,EAAAmC,OAAAC,KAAAG,cALA,WACA4L,EAAAE,2BAAA,UAdA,GCAA,WACA,aAEA,IAAAC,EAAA,kBACAlL,EAAAD,QAAAC,OAAA,4BAEAA,EAAA4K,UAAA,cAAA,CAAA,WASA,MARA,CACAC,SAAA,IACAM,SAAA,EACAtD,WAAAqD,EACAE,aAAA,UACAxD,YAAA,uCAMA5H,EAAA6H,WAAAqD,EAAA,CAAA,KAAA,aAAA,SAAA,SAAA,SAAA,cAEA,SAAAvO,EAAAD,EAAAwL,EAAAmD,EAAAzO,EAAAE,GACA,IAEAwO,EAFAC,EAAA/H,KACAgI,EAAA,EA0EA,SAAAC,EAAAC,EAAA3H,GACAsH,EAAA3I,OAAA8B,IAAAkH,EAAA,SAAA3H,EAAA,yBAAAyH,GAxEAD,EAAAzK,QAAAlE,EAAAsE,iBACAqK,EAAAI,oBAAA,CACAhN,QAAA,KACAiJ,YAAA,8CACA5D,gBAAA,IAEAuH,EAAAK,UA+BA,SAAAC,EAAA7H,GACA,GAAA6H,EAAA,CAEA,GAAAP,GAAA,mBAAAA,EAAAzL,SAAA,EAAA2L,EACA,OAEAF,EAAA3O,EAAAgB,QACA4N,EAAAI,oBAAA3H,gBAAAA,EACAuH,EAAAI,oBAAAhN,QAAA2M,EAAA3M,aAEA2M,GAAA,IAAAE,IACAD,EAAAI,oBAAA3H,gBAAA,GACAsH,EAAAzL,YA1CA0L,EAAAO,iBAAAlP,EAAAmB,YAAAC,SAAA6I,UACA0E,EAAAQ,YAAAjP,EAAAG,YAAAsM,QAKA8B,EAAAxH,gBAAA,GAAAqH,GAGAhD,EAAA+C,0BAAA,SAAAe,GACA9D,EAAA+D,2BAAAD,EACAE,EAAA,yBAAAC,MAAA,CACApE,UAAA,EACAqE,KAAAJ,EACAK,UAAA,KAGAnE,EAAAoE,6BAAA,WACA,OAAApE,EAAA+D,4BAGA/D,EAAA8C,2BAAA,SAAAgB,GACA9D,EAAAqE,4BAAAP,EACAE,EAAA,0BAAAC,MAAA,CACApE,UAAA,EACAqE,KAAAJ,EACAK,SAAA,YAqBA3P,EAAAyD,IAAAvD,EAAAmC,OAAA0B,eAAA,SAAA+L,EAAApO,GACAA,EAAAA,GAAA,GACAmN,EAAAK,WAAA,EAAAxN,EAAA4F,iBACAwH,IAEAC,EAAA,iBAAArN,EAAA2F,UAGArH,EAAAyD,IAAAvD,EAAAmC,OAAA2B,gBAAA,SAAA8L,EAAApO,GACA,EAAAoN,GACAA,IAEAD,EAAAK,WAAA,GAEAH,EAAA,kBAAArN,EAAA2F,aA7FA,GCAAhE,QAAAC,OAAA,mBACA,CACA,mCACA,oCACA,2CACA,oCACA,qCACA,sCACA,oCACA,8CACA,qDACA,0DAGAD,QAAAC,OAAA,mCAAA,IAAAC,IAAA,CAAA,iBAAA,SAAAmF,GACAA,EAAAmC,IAAA,mCACA,0gBAeAxH,QAAAC,OAAA,oCAAA,IAAAC,IAAA,CAAA,iBAAA,SAAAmF,GACAA,EAAAmC,IAAA,oCACA,8gDAkCAxH,QAAAC,OAAA,2CAAA,IAAAC,IAAA,CAAA,iBAAA,SAAAmF,GACAA,EAAAmC,IAAA,2CACA,kCAKAxH,QAAAC,OAAA,oCAAA,IAAAC,IAAA,CAAA,iBAAA,SAAAmF,GACAA,EAAAmC,IAAA,oCACA,wSASAxH,QAAAC,OAAA,qCAAA,IAAAC,IAAA,CAAA,iBAAA,SAAAmF,GACAA,EAAAmC,IAAA,qCACA,8xCA4BAxH,QAAAC,OAAA,oCAAA,IAAAC,IAAA,CAAA,iBAAA,SAAAmF,GACAA,EAAAmC,IAAA,oCACA,6MAUAxH,QAAAC,OAAA,wDAAA,IAAAC,IAAA,CAAA,iBAAA,SAAAmF,GACAA,EAAAmC,IAAA,wDACA,+nCA2BAxH,QAAAC,OAAA,qDAAA,IAAAC,IAAA,CAAA,iBAAA,SAAAmF,GACAA,EAAAmC,IAAA,qDACA,2nBAkBAxH,QAAAC,OAAA,8CAAA,IAAAC,IAAA,CAAA,iBAAA,SAAAmF,GACAA,EAAAmC,IAAA,8CACA,mOAUAxH,QAAAC,OAAA,sCAAA,IAAAC,IAAA,CAAA,iBAAA,SAAAmF,GACAA,EAAAmC,IAAA,sCACA,oeC9LA,WACA,aAEAxH,QAAAC,OAAA,UAAA4K,UAAA,mBAAA,CAAA,aAAA,SAAAlO,GAWA,MAVA,CACAmO,SAAA,IACAM,SAAA,EACAJ,MAAA,CACA0B,WAAA,KAEA3B,KAMA,SAAAC,EAAA2B,GAEA,IAAAC,EAAAC,SAAAD,KACAD,EAAAG,SACA9M,QAAA2M,QAAAC,GAAA/O,OAAA8O,IATAI,SAAA,uCAXA,GCAA,WACA,aAEA/M,QAAAC,OAAA,UACA4K,UAAA,oBAAA,CAAA,WAAA,YAAA,SAAAjH,EAAAoJ,GACA,MAAA,CACAlC,SAAA,IACAM,SAAA,EACA6B,YAAA,EACAF,SAAA,8IACAjF,WAAA,CAAA,SAAA,SAAAK,GACA,IAAA+E,EAAA/E,EAAA+E,MAAA,GACAC,EAAAhF,EAAAgF,MAAA,EACAC,EAAAjF,EAAAiF,gBAAA,EACAC,EAAAlF,EAAAkF,SAAA,KACAC,GAAA,EAEA7J,KAAA8J,MAAA,WACA,OAAAF,GACAG,OACAF,IAGAD,EAAAL,EAAA,WACAE,EAAAC,GAAAM,WAAA,EACAL,GAAAD,EAAA,GAAAD,EAAAvN,OACAyN,GAAA,EACAA,GAAAD,EAAA,IAAA,IACAC,GAAA,GAEAF,EADAC,EAAAC,EAAAD,EAAA,EAAAA,EAAA,GACAM,WAAA,GACA,OAEAhK,KAAAiK,QAAA,SAAA9N,GACAuI,EAAA+E,MAAA1Q,KAAAoD,IAEA6D,KAAA+J,KAAA,WACAR,EAAAzE,OAAA8E,GACAC,GAAA,KAGAvC,KAAA,CAAA4C,IAGA,SAAA3C,EAAA2B,EAAAiB,EAAA9F,GAEA,IADA,IAAA+F,EAAA,MAAAD,EAAAV,MAAA,EAAAU,EAAAV,MACAY,EAAA,EAAAA,EAAAD,EAAAC,IACAhG,EAAA4F,QAAA,CACAD,UAAA,GAAAK,IAGAnB,EAAAoB,GAAA,WAAA,WACAjG,EAAA0F,SAGA5J,EAAA,WACAkE,EAAAyF,YAdAvC,MAAA,OA1CA,GCAA,WACA,aAEAhL,QAAAC,OAAA,UAAA4K,UAAA,gBAAA,CAAA,UAAA,SAAAnE,GACA,MAAA,CACAoE,SAAA,IACAC,KAAA,SAAAC,EAAA2B,EAAAiB,GACAjB,EAAAoB,GAAA,QAAA,WACArH,EAAAsH,eAAAC,YAEAxK,KAAAyK,kBAAA,EAAAzK,KAAAhC,MAAA9B,eAVA,GCAA,WACA,aAEAK,QAAAC,OAAA,UACA4K,UAAA,YAAA,CAAA,WACA,MAAA,CACAC,SAAA,IACAC,KAIA,SAAAC,EAAA2B,EAAAiB,GACA,IAAAO,EAAAnO,QAAA2M,QAAAA,GACAyB,EAAAD,EAAA9P,KAAA,mBAAA,MAGA,GAAA,OAAA+P,EAAA,CAEA,IAAAC,EAAAF,EAAA9P,KAAA,wBAAA8P,EAAAG,IAAA,UAAA,UACAC,EAAAJ,EAAA9P,KAAA,qBAAA,OACAmQ,EAAAL,EAAA9P,KAAA,uBAAA,EACAoQ,EAAAN,EAAA9P,KAAA,yBAAA,EACAqQ,EAAAP,EAAA9P,KAAA,2BAAA,UACAsQ,EAAAR,EAAA9P,KAAA,+BAAA,CAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,WAEA8P,EAAAS,UAAA,OAAA,CACAP,SAAAA,EACAQ,KAAAT,EACAU,OAAAP,EACAQ,SAAAP,EACAQ,WAAAP,EACAQ,gBAAAN,EACAO,YAAAR,EACAS,SAAA,QACAC,iBAAA,EACAC,oBAAA,MA3BArE,MAAA,OARA,GCAA,WACA,aAEAhL,QAAAC,OAAA,UAkDA6H,WAAA,qBAAA,CAAA,SAAA,WAjDA,SAAAK,EAAAvE,GACA,IAAA4H,EAAA/H,KAYA,SAAAuG,IACApG,EAAA,WACA4H,EAAA8D,KAAAC,QAAA,SAAAC,GACAxP,QAAA2M,QAAAnB,EAAAiE,SAAAC,KAAA,IAAAF,EAAAG,OAAA9R,OAAA2R,EAAAI,YACA5P,QAAA2M,QAAAnB,EAAAiE,SAAAC,KAAA,qBAAAF,EAAAG,MAAA,MAAA9R,OAAA2R,EAAAK,aAEA,OAAArE,EAAAsE,cACA3H,EAAA4H,OAAA,eAAA,WACAvE,EAAAwE,oBAjBAxE,EAAA8D,KAAA,GACA9D,EAAAiE,QAAA,KACAjE,EAAAwE,cAmBA,WAEApM,EAAA,WACA,IAAA,IAAAkK,EAAA,EAAAA,EAAAtC,EAAA8D,KAAA3P,OAAAmO,IACA,IAAAtC,EAAA8D,KAAAxB,GAAAmC,SAAA,CACAjQ,QAAA2M,QAAAnB,EAAAiE,SAAAC,KAAA,qBAAAlE,EAAA8D,KAAAxB,GAAA6B,MAAA,MAAAO,QACA,UAxBA1E,EAAAsE,aAAA,KACAtE,EAAA2E,OA4BA,SAAAX,GACAhE,EAAA8D,KAAA9S,KAAAgT,GACAA,EAAApP,IAAA,WAAA,SAAAuL,GACAH,EAAA4E,YAAAZ,MA9BAhE,EAAA4E,YAiCA,SAAAZ,GACA,IAAArC,EAAA3B,EAAA8D,KAAApM,QAAAsM,IACA,IAAArC,GACA3B,EAAA8D,KAAAe,OAAAlD,EAAA,KAnCA3B,EAAAxB,SAAAA,QAwCAa,UAAA,WAAA,CAAA,SAAA,aAAA,SAAAhO,EAAAF,GACA,MAAA,CACAyO,SAAA,EACA6B,YAAA,EACAjC,MAAA,CACA8E,aAAA,KAEAhF,SAAA,IACAhD,WAAA,2BACAD,YAAA,sCACAkD,KAGA,SAAAC,EAAAsF,EAAAC,EAAAzI,GACAkD,EAAAQ,GAAAiE,QAAAzP,QAAA2M,QAAA2D,EAAA,IACAtF,EAAAQ,GAAAsE,aAAA9E,EAAA8E,kBAGAjF,UAAA,gBAAA,CAAA,WACA,MAAA,CACAO,SAAA,EACA6B,YAAA,EACAuD,QAAA,YACA1F,SAAA,IACAE,MAAA,CACA6E,UAAA,IACAD,WAAA,IACAD,MAAA,IACAM,SAAA,KAEAnI,WAAA,CAAA,SAAA,SAAAK,GACA1E,KAAAgN,aAAA,SAAA9D,GACAxE,EAAA0H,UAAAlD,GAEAlJ,KAAAiN,cAAA,SAAA/D,GACAxE,EAAAyH,WAAAjD,KAGAI,SAAA,4BACAhC,KAEA,SAAAC,EAAAsF,EAAAC,EAAAzI,GACAA,EAAAqI,OAAAnF,QAGAH,UAAA,iBAAA,CAAA,WACA,MAAA,CACAO,SAAA,EACAoF,QAAA,iBACAvD,YAAA,EACAnC,SAAA,IACAiC,SAAA,4BACAhC,KAAA,CACAhN,KAGA,SAAAiN,EAAAsF,EAAAC,EAAAzI,EAAA6I,GACAA,EAAA,SAAAC,EAAA5F,GACAlD,EAAA2I,aAAAG,GACA5Q,QAAA2M,QAAA2D,EAAA,IAAAO,iBAKAhG,UAAA,kBAAA,CAAA,WACA,MAAA,CACAO,SAAA,EACAoF,QAAA,iBACAvD,YAAA,EACAnC,SAAA,IACAiC,SAAA,4BACAhC,KAAA,CACAhN,KAGA,SAAAiN,EAAAsF,EAAAC,EAAAzI,EAAA6I,GACAA,EAAA,SAAAC,EAAA5F,GACAlD,EAAA4I,cAAAE,GACA5Q,QAAA2M,QAAA2D,EAAA,IAAAO,iBApIA,GCAA,WACA,aAEA,IAAA9Q,EAAAC,QAAAC,OAAA,UACAF,EAAA8K,UAAA,gBAAA,CAAA,WAAA,SAAA,sBAAA,SAAAjH,EAAA/G,EAAAiU,GAmBA,MAlBA,CACAhG,SAAA,IACAC,KAAA,CACA4C,IAiBA,SAAA3C,EAAA2B,EAAAiB,GAEAhK,EAAA,WACA,IAAAmN,EAAA,GACA/Q,QAAAgR,OAAAD,EAAAD,EAAA9F,EAAA,aAAAA,EAAA+F,aAAA,IACA5E,EAAA,IAAAyB,EAAAqD,UAAAC,cAAAH,MArBAhT,KAyBA,SAAAiN,EAAA2B,EAAAiB,EAAA9F,GAEAlE,EAAA,WACAkE,EAAAqJ,QACAnR,QAAA2M,QAAAA,GAAA+C,KAAA,eAAA7R,OAAAiK,EAAAqJ,YA3BArJ,WAAA,WACArE,KAAA0N,OAAA,MAEAlE,YAAA,EACApF,YAAAhL,EAAAsE,iBAAA,uDACA6J,MAAA,CACAoG,YAAA,IACAC,gBAAA,IACAJ,SAAA,IACAF,aAAA,SAqBAlG,UAAA,sBAAA,CAAA,WACA,MAAA,CACAO,SAAA,EACAoF,QAAA,iBACAvD,YAAA,EACAnC,SAAA,IACAiC,SAAA,4BACAhC,KAAA,CACAhN,KAGA,SAAAiN,EAAAsF,EAAAC,EAAAzI,EAAA6I,GACAA,EAAA,SAAAC,EAAA5F,GACAlD,EAAAqJ,OAAAP,EACA5Q,QAAA2M,QAAA2D,EAAA,IAAAO,iBAOA9Q,EAAAuR,SAAA,sBAAA,CACAC,KAAA,UACAC,QAAA,gBACAC,cAAA,EACAC,kBAAA,6BACAC,iBAAA,kBACAC,kBAAA,6BACAC,iBAAA,kBACAC,UAAA,EACAC,eAAA,EAEAC,cAAA,EACAC,YAAA,2BACAC,YAAA,IACAC,SAAA,aAGAC,cAAA,EACAC,YAAA,cACAC,YAAA,IACAC,SAAA,aAGAC,YAAA,EACAC,gBAAA,wBACAC,UAAA,yBACAC,UAAA,IACAC,OAAA,aAGAC,aAAA,EAEAC,kBAAA,EACAC,gBAAA,gCACAC,eAAA,EACAC,aAAA,aAGAC,cAAA,EACAC,YAAA,sBACAC,YAAA,WACAC,MAAA,0CAEAC,UAAA,WACAD,MAAA,2BAGAE,YAAA,2DACAC,QAAA,EACAC,WAAA,WACAC,iBAAA,2BACAC,WAAA,EACAC,cAAA,IACAC,MAAA,EACAC,qBAAA,0BACAC,gBAAA,uCACAC,eAAA,EACAC,mBAAA,gBACAC,WAAA,+BACAC,aAAA,eACAC,aAAA,UACAC,YAAA,iBACAC,UAAA,aAEAC,KAAA,EACAC,SAAA,aAGAC,OAAA,eAlIA,GCAA,WACA,aAEA,IAAA1U,EAAAC,QAAAC,OAAA,UACAF,EAAA8K,UAAA,kBAAA,CAAA,WAAA,SAAA,sBAAA,SAAAjH,EAAA/G,EAAAiU,GAgBA,MAfA,CACAhG,SAAA,IACAC,KAeA,SAAAC,EAAA2B,EAAAiB,EAAA9F,GACAA,EAAA4M,YAAA/H,EACA7E,EAAA6M,qBAAA3J,EAGApH,EAAA,WACAkE,EAAA8M,gBAAA5J,GACAmB,EAAAQ,GAAAoB,GAAA,4BAAAjG,EAAA+M,mBArBAzJ,SAAA,EACA6B,YAAA,EACAnF,WAAA,4BACAD,YAAAhL,EAAAsE,iBAAA,2DACA6J,MAAA,CACA8J,gBAAA,IACA1D,YAAA,IACAC,gBAAA,IACAN,aAAA,IACAgE,sBAAA,SAgBAlK,UAAA,gBAAA,CAAA,WAAA,SAAAjH,GACA,MAAA,CACAwH,SAAA,EACAoF,QAAA,mBACA1F,SAAA,KACAC,KAKA,SAAAC,EAAAsF,EAAAC,EAAAzI,GACAkD,EAAA5K,IAAA,WAAA,WACA0H,EAAAkN,YAAAhK,EAAAiK,YAGArR,EAAA,WACA,IAAAsR,EAAAlV,QAAA2M,QAAA2D,GACAxI,EAAAqN,OAAAD,MAXAlK,MAAA,CACAiK,SAAA,sBAcApK,UAAA,2BAAA,CAAA,WACA,MAAA,CACAO,SAAA,EACAoF,QAAA,mBACAvD,YAAA,EACAnC,SAAA,IACAiC,SAAA,4BACAhC,KAAA,CACAhN,KAGA,SAAAiN,EAAAsF,EAAAC,EAAAzI,EAAA6I,GACA7I,EAAAsN,0BAAAzE,EACA3Q,QAAA2M,QAAA2D,EAAA,IAAAO,eAMA9Q,EAAA+H,WADA,sBACA,CAAA,SAAA,WACA,SAAAK,EAAAvE,GACA,IAAA4H,EAAA/H,KAEA+H,EAAAkJ,YAAA,KACAlJ,EAAAmJ,qBAAA,KACAnJ,EAAA4J,0BAAA,KACA5J,EAAA6J,UAAA,KACA7J,EAAAoJ,gBAaA,WACA,MAAApJ,EAAA6J,YACA7J,EAAA6J,UAAAC,UACA9J,EAAA6J,UAAA,MAIA,IAAAE,EAAA,CACAC,OAAA,KACAC,MAAA,KAEAC,EAAA,KAEAC,EAAAxJ,EAAAX,EAAAkJ,aAAAhF,KAAA,oBACAiG,EAAAC,UAAA,CACAC,gBAAA,WAGAH,EADAA,GACA,IAAAI,2BAAAH,EAAAJ,IAGAQ,YAAA,SAAAC,GACAN,EAAAO,iBAAAD,IAEAE,aAAA,SAAAC,GACAT,EAAAU,WAEAC,WAAA,IAAA7K,EAAAmJ,qBAAAI,sBACAuB,SAAAC,UAAAC,WAAAC,YACAC,WAAA,IAGAlL,EAAA6J,UAAAM,EAAAgB,YAGAnL,EAAA4J,2BACAxR,EAAA,WACA4H,EAAA4J,0BAAA,SAAAxE,EAAA5F,GACAmB,EAAAX,EAAAkJ,aAAAhF,KAAA,qBAAAkH,QAAA/Y,OAAA+S,QAlDApF,EAAAqJ,eAuDA,WAEArJ,EAAAoJ,mBAxDApJ,EAAAwJ,YAGA,SAAA7H,GACA3B,EAAA6J,UAAAwB,OAAAhG,OAAA1D,GAAA2J,QAHAtL,EAAA2J,OAMA,SAAAD,GACA1J,EAAA6J,UAAA0B,IAAAC,IAAA9B,GAAA4B,WA3FA,GCAA,WACA,aAEA9W,QAAAC,OAAA,4BAAA4K,UAAA,eAAA,CAAA,WAOA,MANA,CACAC,SAAA,KACAM,SAAA,EACAvD,YAAA,wCAPA,GCAA,WACA,aAEA,IAAAsD,EAAA,mBACAlL,EAAAD,QAAAC,OAAA,4BAEAA,EAAA4K,UAAA,eAAA,CAAA,WASA,MARA,CACAC,SAAA,KACAM,SAAA,EACAvD,YAAA,oCACAC,WAAAqD,EACAE,aAAA,eAMApL,EAAA6H,WAAAqD,EAAA,CAAA,aAAA,aAAA,SAAA,SAAA,WAAA,mBAAA,cAEA,SAAAxO,EAAAwD,EAAAmL,EAAAzO,EAAAoa,EAAAC,EAAAna,GACA,IAAAyO,EAAA/H,KAgCA,SAAA0T,EAAAC,GACAjX,EAAAkX,IAAAD,GACAF,EAAAI,IAAAF,EAAA,OACAH,EAAAM,aAAAH,EAAA,OAEA5L,EAAA4L,YAAAA,EAnCA5L,EAAAgM,eAwBA,SAAAJ,GACAD,EAAAC,GAEAza,EAAAmC,WAAAjC,EAAAmC,OAAA8B,gBAAA,CAAAsW,YAAAA,KA1BA5L,EAAAiM,WAeA,SAAAL,GACA,OAAA5L,EAAA4L,cAAAA,EAAA,WAAA,IAfA5L,EAAAiC,UAkBA,SAAA2J,GACA,OAAA5L,EAAA4L,cAAAA,GAlBA5L,EAAA4L,YAAAva,EAAA0E,YAEAiK,EAAAkM,eAAA7a,EAAAmB,YAAA2Z,QACAnM,EAAArE,WAAAtK,EAAAmB,YAAAC,SAAAkJ,WACAqE,EAAAoM,oBAAA7a,EAAA6M,kBACA4B,EAAAQ,YAAAjP,EAAAG,YAAAsM,QAKA8B,EAAAxH,gBAAA,CAAAqT,EAAA3L,EAAA4L,cAAAjM,MApCA,GCAA,WACA,aAEAnL,QAAAC,OAAA,4BAEA4K,UAAA,qBAAA,CAAA,WAOA,MANA,CACAC,SAAA,KACAM,SAAA,EACAvD,YAAA,+CATA,GCAA,WACA,aAEA,IAAAsD,EAAA,oBACAlL,EAAAD,QAAAC,OAAA,4BAEAA,EAAA4K,UAAA,gBAAA,CAAA,WASA,MARA,CACAC,SAAA,KACAM,SAAA,EACAtD,WAAAqD,EACAE,aAAA,YACAxD,YAAA,yCAMA5H,EAAA6H,WAAAqD,EAAA,CAAA,UAAA,SAEA,SAAA0M,EAAAC,GACA,IAAAtM,EAAA/H,KAGA+H,EAAAuM,UAAA,GACAvM,EAAAwM,aAsCA,WACA,OAAAF,EAAAG,SACAH,EAAAG,SAAAC,KAEA,IAlCA,WACA1M,EAAAuM,UAAApY,OAAA,EACA,IAAAoY,EAAA,GACAI,EAAAL,EAAAha,MACAqa,EAAA5I,QAAA,SAAA6I,EAAAjL,GACA,GAAAiL,EAAA/Z,MAAA+Z,EAAA/Z,KAAAga,WAAAD,EAAAE,OAAA,CACA,IAAAC,EAAA,KACA,GAAAH,EAAAI,SAAA,CAEA,IAAAC,EAAAN,EAAAlO,OAAA,SAAAyO,GACA,OAAAA,EAAAJ,SAAAF,EAAAF,OAEAO,EAAAZ,EAAA,UAAAA,CAAAY,EAAA,qBAEAF,EAAA,GACA,IAAA,IAAA7Y,EAAA,EAAAA,EAAA+Y,EAAA9Y,OAAAD,IAAA,CACA,IAAAiZ,EAAAF,EAAA/Y,GACAiZ,EAAAta,MAAAsa,EAAAta,KAAAga,WAAAM,EAAAta,KAAAua,MACAL,EAAA/b,KAAA,CAAAqc,UAAAF,EAAAT,KAAAY,YAAAH,EAAAta,KAAAga,SAAAU,iBAAAC,UAAAL,EAAAta,KAAAga,SAAAW,UAAAC,IAAAb,EAAA/Z,KAAAga,SAAAY,OAIAlB,EAAAvb,KAAA,CAAAqc,UAAAT,EAAAF,KAAA7Z,KAAA+Z,EAAA/Z,KAAAya,YAAAV,EAAA/Z,KAAAga,SAAAU,iBAAAR,aAAAA,EAAAS,UAAAZ,EAAA/Z,KAAAga,SAAAW,UAAAC,IAAAb,EAAA/Z,KAAAga,SAAAY,SAIAzN,EAAAuM,UAAAF,EAAA,UAAAA,CAAAE,EAAA,OA7BAmB,MA9BA,GCAA,WACA,aAEAlZ,QAAAC,OAAA,4BAAA4K,UAAA,eAAA,CAAA,WAOA,MANA,CACAC,SAAA,KACAM,SAAA,EACAvD,YAAA,wCAPA","file":"../core.min.js","sourcesContent":["angular.module('inoApp')\r\n .config(['$httpProvider', configureAuthInterceptor])\r\n .factory('httpBuffer', ['$injector', httpBufferFactory])\r\n .factory('authInterceptor', ['$injector', '$rootScope', '$q', 'config', 'httpBuffer', 'userService', authInterceptorFactory]);\r\n\r\nfunction configureAuthInterceptor($httpProvider) {\r\n $httpProvider.interceptors.push('authInterceptor');\r\n}\r\n\r\nfunction authInterceptorFactory($injector, $rootScope, $q, config, httpBuffer, userService) {\r\n var isRefreshingTokens = false;\r\n\r\n var interceptor = {\r\n request: handleRequest,\r\n responseError: handleResponseError\r\n };\r\n\r\n return interceptor;\r\n\r\n function handleRequest(config) {\r\n // Append the bearer token to all calls if it's present.\r\n if (userService.currentUser.tokens.accessToken) {\r\n config.headers = config.headers || {};\r\n config.headers.Authorization = 'Bearer ' + userService.currentUser.tokens.accessToken;\r\n }\r\n\r\n return config;\r\n }\r\n\r\n function handleResponseError(rejection) {\r\n // If the error was a 401, we might just need to retry for a new token first.\r\n if (rejection.status === 401 && userService.currentUser.tokens && userService.currentUser.tokens.refreshToken) {\r\n\r\n // Defer until we can re-request a new token\r\n var deferred = $q.defer();\r\n\r\n // Add the current request to the buffer so we can retry it at a later time\r\n httpBuffer.append(rejection, deferred);\r\n\r\n if (!isRefreshingTokens) {\r\n isRefreshingTokens = true;\r\n refreshTokens();\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n\r\n // Wasn't a 401 or we could not get a new token, just trigger the event, reject the response and move on.\r\n broadcastError(rejection);\r\n return $q.reject(rejection);\r\n }\r\n\r\n function refreshTokens() {\r\n var refreshTokensSuccessCallback = function (response) {\r\n if (response && response.data && response.data.accessToken && response.data.refreshToken) {\r\n // Set the tokens with whatever was returned as response.\r\n userService.currentUser.tokens.accessToken = response.data.accessToken;\r\n userService.currentUser.tokens.refreshToken = response.data.refreshToken;\r\n userService.persist();\r\n\r\n // Retry all previously failed requests.\r\n httpBuffer.retryAll();\r\n } else {\r\n // We don't have a token, clear the userService and reject all previous requests.\r\n userService.clear();\r\n httpBuffer.rejectAll();\r\n\r\n // After all is done, just broadcast a 401\r\n broadcastError({ status: 401 });\r\n }\r\n }\r\n var refreshTokensErrorCallback = function (response) {\r\n // Token retry failed, clear the userService and reject all previous requests.\r\n userService.clear();\r\n httpBuffer.rejectAll();\r\n\r\n // After all is done, just broadcast a 401\r\n broadcastError({ status: 401 });\r\n\r\n return;\r\n }\r\n\r\n // Can't inject $http directly as will cause a circular ref.\r\n var $http = $injector.get(\"$http\");\r\n\r\n // Call the refresh token endpoint to try and get some new tokens\r\n $http\r\n .post(config.servicesUrl.identity.refreshTokenUrl, { refreshToken: userService.currentUser.tokens.refreshToken })\r\n .then(refreshTokensSuccessCallback, refreshTokensErrorCallback)\r\n .finally(function () { isRefreshingTokens = false; });\r\n }\r\n\r\n function broadcastError(response) {\r\n $rootScope.$broadcast({\r\n 401: config.events.auth.notAuthenticated,\r\n 403: config.events.auth.notAuthorized,\r\n 419: config.events.auth.notAuthorized,\r\n 440: config.events.auth.notAuthorized\r\n }[response.status], response);\r\n }\r\n}\r\n\r\nfunction httpBufferFactory($injector) {\r\n // Holds all the requests, so they can be re-requested in future.\r\n var buffer = [];\r\n\r\n // Service initialized later because of circular dependency problem.\r\n var $http;\r\n\r\n var service = {\r\n append: append,\r\n rejectAll: rejectAll,\r\n retryAll: retryAll\r\n };\r\n\r\n return service;\r\n\r\n // Appends HTTP request configuration object with deferred response attached to buffer.\r\n function append(rejection, deferred) {\r\n buffer.push({\r\n rejection: rejection,\r\n deferred: deferred\r\n });\r\n }\r\n\r\n // Abandon or reject (if reason provided) all the buffered requests.\r\n function rejectAll() {\r\n for (var i = 0; i < buffer.length; ++i) {\r\n var item = buffer[i];\r\n item.deferred.reject(item.rejection);\r\n }\r\n\r\n buffer = [];\r\n }\r\n\r\n // Retries all the buffered requests clears the buffer.\r\n function retryAll() {\r\n for (var i = 0; i < buffer.length; ++i) {\r\n var item = buffer[i];\r\n retryHttpRequest(item.rejection.config, item.deferred);\r\n }\r\n buffer = [];\r\n }\r\n\r\n function retryHttpRequest(config, deferred) {\r\n function successCallback(response) {\r\n deferred.resolve(response);\r\n }\r\n function errorCallback(response) {\r\n deferred.reject(response);\r\n }\r\n $http = $http || $injector.get('$http');\r\n $http(config).then(successCallback, errorCallback);\r\n }\r\n}","var app = angular.module('inoApp');\r\n\r\napp.factory('contentVersionningInterceptor', ['$templateCache', 'config', function ($templateCache, config) {\r\n var interceptor = {\r\n request: function (request) {\r\n // Just add the version id to the supported URL (meaning not from the template cache, the API, IdentityServer URLs, etc.)\r\n if (!$templateCache.get(request.url) && isSupportedUrl(request.url)) {\r\n // Append the app version as a querystring parameters to all other calls.\r\n // This is to deal with potential browser cache issues between versions of the application.\r\n request.url = buildUrl(request.url, 'vid', encodeURIComponent(config.appVersion));\r\n }\r\n\r\n return request;\r\n }\r\n };\r\n\r\n return interceptor;\r\n\r\n function isSupportedUrl(url) {\r\n if (config.servicesUrl && config.servicesUrl.api && config.servicesUrl.identity) {\r\n return url.indexOf(config.servicesUrl.api.apiBasePath) !== 0 &&\r\n url !== config.servicesUrl.identity.userInfoEndpoint &&\r\n url !== config.servicesUrl.identity.refreshTokenUrl;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function buildUrl(baseUrl, key, value) {\r\n var separator = (baseUrl.indexOf('?') > -1) ? '&' : '?';\r\n return baseUrl + separator + key + '=' + value;\r\n }\r\n}]);\r\n\r\napp.config(['$httpProvider', function ($httpProvider) {\r\n $httpProvider.interceptors.push('contentVersionningInterceptor');\r\n}]);","var app = angular.module('inoApp')\r\n\r\napp.factory('headersInjectorInterceptor', function () {\r\n var headerInjector = {\r\n request: function (config) {\r\n config.headers['X-Requested-With'] = \"XMLHttpRequest\";\r\n return config;\r\n }\r\n };\r\n\r\n return headerInjector;\r\n});\r\n\r\napp.config(['$httpProvider', function ($httpProvider) {\r\n $httpProvider.interceptors.push('headersInjectorInterceptor');\r\n}]);","(function () {\r\n 'use strict';\r\n\r\n // Register all Framework modules here.\r\n angular.module('inoApp.directives', []);\r\n angular.module('inoApp.directives.layout', []);\r\n\r\n angular.module('inoApp', [\r\n // Angular modules \r\n 'ngAnimate', // animations\r\n 'ui.router', // routing and navigation\r\n 'ngSanitize', // sanitizes html bindings (ex: sidebar.js)\r\n\r\n // SmartAdmin\r\n 'sa.directives',\r\n \t \r\n // Custom modules \r\n 'inoApp.templates',\r\n 'inoApp.directives',\r\n 'inoApp.directives.layout',\r\n 'common', // common functions, logger\r\n 'common.bootstrap', // bootstrap dialog wrapper functions\r\n\r\n // 3rd Party Modules\r\n 'ui.bootstrap', // ui-bootstrap (ex: carousel, pagination, dialog)\r\n 'pascalprecht.translate',\r\n 'angularMoment',\r\n 'tmh.dynamicLocale',\r\n 'cgBusy'\r\n ]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('inoApp').run(['$rootScope', '$translate', appRun]);\r\n\r\n function appRun($rootScope, $translate) {\r\n $rootScope.$on('$translatePartialLoaderStructureChanged', function () {\r\n\t\t\t$translate.refresh();\r\n\t\t});\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n\r\n // Configure Toastr\r\n toastr.options.timeOut = 4000;\r\n toastr.options.positionClass = 'toast-bottom-right';\r\n\r\n var events = {\r\n appWorkStarted: 'app.workStarted',\r\n appWorkFinished: 'app.workFinished',\r\n auth: {\r\n logoutSuccess: 'auth-logout-success',\r\n notAuthenticated: 'auth-not-authenticated',\r\n notAuthorized: 'auth-not-authorized'\r\n },\r\n controllerActivateSuccess: 'controller.activateSuccess',\r\n languageChanged: 'languageChanged'\r\n };\r\n\r\n var config = {\r\n events: events,\r\n appRoot: angular.copy(window.appRootPath),\r\n clientAppSrcPath: angular.copy(window.clientAppSrcPath),\r\n appVersion: angular.copy(window.inoAppConfig.version),\r\n appLanguage: angular.copy(window.inoAppConfig.uiLanguage),\r\n servicesUrl: angular.copy(window.servicesUrl)\r\n };\r\n\r\n app.value('config', config);\r\n\r\n app.config(['commonConfigProvider', function (cfg) {\r\n cfg.config.appWorkStartedEvent = config.events.appWorkStarted;\r\n cfg.config.appWorkFinishedEvent = config.events.appWorkFinished;\r\n cfg.config.appRoot = config.appRoot;\r\n cfg.config.clientAppSrcPath = config.clientAppSrcPath;\r\n }]);\r\n \r\n app.config(['$logProvider', function ($logProvider) {\r\n // turn debugging off/on (no info or warn)\r\n if ($logProvider.debugEnabled) {\r\n $logProvider.debugEnabled(true);\r\n }\r\n }]);\r\n\r\n app.config(['tmhDynamicLocaleProvider', function (dynamicLocaleProvider) {\r\n dynamicLocaleProvider.localeLocationPattern(config.clientAppSrcPath + 'InovestorFramework/Core/i18n/angular-locale_{{locale}}.js');\r\n //dynamicLocale.set('en-CA');\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n var app = angular.module('inoApp');\r\n app.config(['$translateProvider', '$translatePartialLoaderProvider', 'commonConfigProvider', function ($translateProvider, $translatePartialLoaderProvider, commonConfigProvider) {\r\n $translateProvider.useSanitizeValueStrategy('escaped');\r\n\r\n $translatePartialLoaderProvider.addPart('InovestorFramework/Core/app/resources');\r\n $translateProvider.useLoader('$translatePartialLoader', {\r\n urlTemplate: commonConfigProvider.config.clientAppSrcPath + '{part}/locale-{lang}.json'\r\n });\r\n $translateProvider.preferredLanguage('en');\r\n }]);\r\n})();","// Include in index.html so that app level exceptions are handled.\r\n// Exclude from testRunner.html which should run exactly what it wants to run\r\n(function () {\r\n 'use strict';\r\n \r\n var app = angular.module('inoApp');\r\n\r\n // Configure by setting an optional string value for appErrorPrefix.\r\n // Accessible via config.appErrorPrefix (via config value).\r\n\r\n app.config(['$provide', function ($provide) {\r\n $provide.decorator('$exceptionHandler',\r\n ['$delegate', 'config', 'logger', extendExceptionHandler]);\r\n }]);\r\n \r\n // Extend the $exceptionHandler service to also display a toast.\r\n function extendExceptionHandler($delegate, config, logger) {\r\n var appErrorPrefix = config.appErrorPrefix;\r\n var logError = logger.getLogFn('inoApp', 'error');\r\n return function (exception, cause) {\r\n $delegate(exception, cause);\r\n if (appErrorPrefix && exception.message.indexOf(appErrorPrefix) === 0) { return; }\r\n\r\n var errorData = { exception: exception, cause: cause };\r\n var msg = appErrorPrefix + exception.message;\r\n logError(msg, errorData, true);\r\n };\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n // Define the common module \r\n // Contains services:\r\n // - common\r\n // - logger\r\n var commonModule = angular.module('common', []);\r\n\r\n // Must configure the common service and set its \r\n // events via the commonConfigProvider\r\n commonModule.provider('commonConfig', function () {\r\n this.config = {\r\n // These are the properties we need to set\r\n //controllerActivateSuccessEvent: '',\r\n };\r\n\r\n this.$get = function () {\r\n return {\r\n config: this.config\r\n };\r\n };\r\n });\r\n\r\n commonModule.factory('common',\r\n ['$q', '$rootScope', '$timeout', 'commonConfig', 'logger', common]);\r\n\r\n function common($q, $rootScope, $timeout, commonConfig, logger) {\r\n var throttles = {};\r\n\r\n var service = {\r\n handleBusyState: handleBusyState,\r\n logger: logger // for accessibility\r\n };\r\n\r\n return service;\r\n\r\n function handleBusyState(promises, taskId, textResourceKey) {\r\n $rootScope.$broadcast(commonConfig.config.appWorkStartedEvent, { taskId: taskId, textResourceKey: textResourceKey });\r\n return $q\r\n .all(promises)\r\n .finally(function () {\r\n $rootScope.$broadcast(commonConfig.config.appWorkFinishedEvent, { taskId: taskId, textResourceKey: textResourceKey });\r\n });\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n \r\n angular.module('common').factory('logger', ['$log', logger]);\r\n\r\n function logger($log) {\r\n var service = {\r\n getLogFn: getLogFn,\r\n log: log,\r\n logError: logError,\r\n logSuccess: logSuccess,\r\n logWarning: logWarning\r\n };\r\n\r\n return service;\r\n\r\n function getLogFn(moduleId, fnName) {\r\n fnName = fnName || 'log';\r\n switch (fnName.toLowerCase()) { // convert aliases\r\n case 'success':\r\n fnName = 'logSuccess'; break;\r\n case 'error':\r\n fnName = 'logError'; break;\r\n case 'warn':\r\n fnName = 'logWarning'; break;\r\n case 'warning':\r\n fnName = 'logWarning'; break;\r\n }\r\n\r\n var logFn = service[fnName] || service.log;\r\n return function (msg, data, showToast) {\r\n logFn(msg, data, moduleId, (showToast === undefined) ? true : showToast);\r\n };\r\n }\r\n\r\n function log(message, data, source, showToast) {\r\n logIt(message, data, source, showToast, 'info');\r\n }\r\n\r\n function logWarning(message, data, source, showToast) {\r\n logIt(message, data, source, showToast, 'warning');\r\n }\r\n\r\n function logSuccess(message, data, source, showToast) {\r\n logIt(message, data, source, showToast, 'success');\r\n }\r\n\r\n function logError(message, data, source, showToast) {\r\n logIt(message, data, source, showToast, 'error');\r\n }\r\n\r\n function logIt(message, data, source, showToast, toastType) {\r\n var write = (toastType === 'error') ? $log.error : $log.log;\r\n source = source ? '[' + source + '] ' : '';\r\n write(source, message, data);\r\n if (showToast) {\r\n if (toastType === 'error') {\r\n toastr.error(message);\r\n } else if (toastType === 'warning') {\r\n toastr.warning(message);\r\n } else if (toastType === 'success') {\r\n toastr.success(message);\r\n } else {\r\n toastr.info(message);\r\n }\r\n }\r\n }\r\n }\r\n})();","angular.module('inoApp')\r\n .factory('serverExceptionInterceptor', ['$q', '$translate', function ($q, $translate) {\r\n var serverExceptionInterceptor = {\r\n responseError: handleResponseError\r\n };\r\n\r\n return serverExceptionInterceptor;\r\n\r\n function handleResponseError(response) {\r\n // In some cases (notably 403 from Web API), data will be an empty string and we don't want that.\r\n if (!response.data || typeof response.data === 'string')\r\n response.data = {};\r\n response.data.LocalizedErrorMessage = '';\r\n\r\n var isHandled = false;\r\n\r\n // 400 Bad Request\r\n if (response.status === 400 && response.data && response.data.modelState) {\r\n // A Bad Request error that is handled by the Web API controller.\r\n // We should have enough information to get a meaningful error message.\r\n\r\n var messagesSeparationElement = '
';\r\n\r\n //errorMessages = getDistinctElement(getErrorMessagesFromModelState(response.data.ModelState));\r\n errorMessages = getErrorMessagesFromModelState(response.data.modelState);\r\n\r\n // Add all the errors to the LocalizedErrorMessage separated by the separation element.\r\n for (var i = 0; i < errorMessages.length; i++) {\r\n response.data.LocalizedErrorMessage += errorMessages[i];\r\n if (i + 1 !== errorMessages.length)\r\n response.data.LocalizedErrorMessage += messagesSeparationElement;\r\n }\r\n\r\n isHandled = true;\r\n }\r\n\r\n // 401 Unauthorized\r\n if (response.status === 401) {\r\n response.data.LocalizedErrorMessage = $translate.instant('error.NotAuthenticated');\r\n isHandled = true;\r\n }\r\n\r\n // 403 Forbidden\r\n if (response.status === 403) {\r\n response.data.LocalizedErrorMessage = $translate.instant('error.Unauthorized');\r\n isHandled = true;\r\n }\r\n\r\n // If the error wasn't handled, just add the default error text.\r\n if (!isHandled)\r\n response.data.LocalizedErrorMessage = $translate.instant('error.DefaultErrorMessage');\r\n\r\n return $q.reject(response);\r\n }\r\n\r\n function getErrorMessagesFromModelState(modelState) {\r\n var errorMessages = [];\r\n var defaultErrorText = $translate.instant('error.DefaultErrorMessage');\r\n\r\n // Loop in all property as we can have multiple error messages coming from the server.\r\n for (var property in modelState) {\r\n\r\n // To avoid logging inherited properties\r\n if (modelState.hasOwnProperty(property)) {\r\n\r\n // Each property is an array of errors so, loop.\r\n for (var i = 0; i < modelState[property].length; i++) {\r\n\r\n var errorTextKey = 'error.' + modelState[property][i];\r\n var errorText = $translate.instant(errorTextKey);\r\n\r\n // If the error key is the same as the text, it means that we don't have any relevant error text to display\r\n // so we just add the default error text to the response.\r\n if (errorTextKey === errorText)\r\n errorMessages.push(defaultErrorText);\r\n else\r\n errorMessages.push(errorText);\r\n }\r\n }\r\n }\r\n\r\n return errorMessages;\r\n }\r\n\r\n //function getDistinctElement(a) {\r\n // return a.reduce(function (p, c) {\r\n // if (p.indexOf(c) < 0) p.push(c);\r\n // return p;\r\n // }, []);\r\n //}\r\n\r\n }])\r\n .config(['$httpProvider', function ($httpProvider) {\r\n $httpProvider.interceptors.push('serverExceptionInterceptor');\r\n }]);","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n\r\n app.factory('authService', ['$q', '$rootScope', '$window', 'config', 'storageService', 'userService', authServiceFactory]);\r\n\r\n function authServiceFactory($q, $rootScope, $window, config, storageService, userService) {\r\n var service = {\r\n login: login,\r\n logout: logout\r\n };\r\n\r\n $rootScope.$on(config.events.auth.notAuthenticated, clearSession);\r\n\r\n return service;\r\n\r\n function login() {\r\n // Since we're redirecting, trigger a busy event in case the other app is taking its time to respond.\r\n $rootScope.$broadcast(config.events.appWorkStarted);\r\n $window.location = config.servicesUrl.identity.signInUrl;\r\n }\r\n\r\n function logout() {\r\n var idToken = '';\r\n if (userService.currentUser.tokens)\r\n idToken = userService.currentUser.tokens.identityToken;\r\n\r\n clearSession().then(function () {\r\n $rootScope.$broadcast(config.events.auth.logoutSuccess);\r\n // Since we're redirecting, trigger a busy event in case the other app is taking its time to respond.\r\n $rootScope.$broadcast(config.events.appWorkStarted);\r\n $window.location = config.servicesUrl.identity.signOutUrl + '?idToken=' + encodeURIComponent(idToken);\r\n });\r\n }\r\n\r\n function clearSession() {\r\n return $q.all([storageService.clear()]);\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var bootstrapModule = angular.module('common.bootstrap', ['ui.bootstrap']);\r\n\r\n bootstrapModule.factory('bootstrap.dialog', ['$modal', '$templateCache', modalDialog]);\r\n\r\n function modalDialog($modal, $templateCache) {\r\n var service = {\r\n deleteDialog: deleteDialog,\r\n confirmationDialog: confirmationDialog\r\n };\r\n\r\n $templateCache.put('modalDialog.tpl.html', \r\n '
' +\r\n '
' +\r\n ' ' +\r\n '

{{title}}

' +\r\n '
' +\r\n '
' +\r\n '

{{message}}

' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n ' ' +\r\n '
' +\r\n '
');\r\n\r\n return service;\r\n\r\n function deleteDialog(itemName) {\r\n var title = 'Confirm Delete';\r\n itemName = itemName || 'item';\r\n var msg = 'Delete ' + itemName + '?';\r\n\r\n return confirmationDialog(title, msg);\r\n }\r\n\r\n function confirmationDialog(title, msg, okText, cancelText) {\r\n\r\n var modalOptions = {\r\n templateUrl: 'modalDialog.tpl.html',\r\n controller: ModalInstance,\r\n keyboard: true,\r\n resolve: {\r\n options: function () {\r\n return {\r\n title: title,\r\n message: msg,\r\n okText: okText,\r\n cancelText: cancelText\r\n };\r\n }\r\n }\r\n };\r\n\r\n return $modal.open(modalOptions).result; \r\n }\r\n }\r\n\r\n var ModalInstance = ['$scope', '$modalInstance', 'options',\r\n function ($scope, $modalInstance, options) {\r\n $scope.title = options.title || 'Title';\r\n $scope.message = options.message || '';\r\n $scope.okText = options.okText || 'OK';\r\n $scope.cancelText = options.cancelText || 'Cancel';\r\n $scope.ok = function () { $modalInstance.close('ok'); };\r\n $scope.cancel = function () { $modalInstance.dismiss('cancel'); };\r\n }];\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'storageService';\r\n angular.module('inoApp').factory(serviceId, ['$window', storageService]);\r\n\r\n // Base storage/session service. It should probably never be used directly by controllers. If you ever do it, carefully consider another way.\r\n // Currently it only wraps html5 sessionStorage object.\r\n\r\n function storageService($window) {\r\n var sessionStorage = $window.sessionStorage;\r\n\r\n var service = {\r\n clear: clear,\r\n getItem: getItem,\r\n removeItem: removeItem,\r\n setItem: setItem\r\n };\r\n\r\n return service;\r\n\r\n function clear() {\r\n sessionStorage.clear();\r\n }\r\n\r\n function getItem(key) {\r\n var dateTimeReviver = function (key, value) {\r\n if (typeof value === 'string') {\r\n var regexValues = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)(Z|([+\\-])(\\d{2}):(\\d{2}))$/.exec(value);\r\n if (regexValues) {\r\n // JSON.stringify converts dates to UTC so parse them back\r\n return new Date(Date.UTC(+regexValues[1], +regexValues[2] - 1, +regexValues[3], +regexValues[4], +regexValues[5], +regexValues[6]));\r\n }\r\n }\r\n return value;\r\n };\r\n var value = sessionStorage.getItem(JSON.stringify(key));\r\n\r\n return JSON.parse(value, dateTimeReviver);\r\n }\r\n\r\n function removeItem(key) {\r\n sessionStorage.removeItem(JSON.stringify(key));\r\n }\r\n\r\n function setItem(key, value) {\r\n sessionStorage.setItem(JSON.stringify(key), JSON.stringify(value));\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n\r\n app.factory('userInfoEndpointService', ['$http', 'config', userInfoEndpointServiceFactory]);\r\n\r\n function userInfoEndpointServiceFactory($http, config) {\r\n\r\n var service = {\r\n getProfile: getProfile\r\n };\r\n\r\n return service;\r\n\r\n function getProfile() {\r\n // Get information about the user from the UserInfoEndpoint of our identity server.\r\n return $http.get(config.servicesUrl.identity.userInfoEndpoint).then(\r\n function (response) {\r\n return response.data;\r\n },\r\n function (response) {\r\n return {};\r\n });\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n\r\n // Do not add any dependencies to this service, leave it as lightweight as possible.\r\n // If we need to add, let's say, profile information on startup, do it in the authService.activate method to keep dependencies to a minimum.\r\n\r\n app.factory('userService', ['storageService', userServiceFactory]);\r\n\r\n function userServiceFactory(storageService) {\r\n var sessionCurrentUserKey = 'sessionCurrentUser';\r\n\r\n var service = {\r\n clear: clear,\r\n currentUser: {\r\n uniqueId: '',\r\n profile: {\r\n email: '',\r\n firstName: '',\r\n lastName: ''\r\n },\r\n tokens: {\r\n accessToken: '',\r\n identityToken: '',\r\n refreshToken: ''\r\n }\r\n },\r\n isAuthenticated: isAuthenticated,\r\n persist: persist,\r\n setProfile: setProfile,\r\n setTokens: setTokens\r\n };\r\n\r\n activate();\r\n\r\n return service;\r\n\r\n function activate() {\r\n resetCurrentUser();\r\n\r\n // Get the stored bearer token if it exists\r\n var sessionUser = storageService.getItem(sessionCurrentUserKey);\r\n if (sessionUser) {\r\n setProfile(sessionUser.uniqueId, sessionUser.profile.email, sessionUser.profile.firstName, sessionUser.profile.lastName);\r\n setTokens(sessionUser.tokens.accessToken, sessionUser.tokens.identityToken, sessionUser.tokens.refreshToken);\r\n }\r\n }\r\n\r\n function clear() {\r\n resetCurrentUser();\r\n storageService.removeItem(sessionCurrentUserKey);\r\n }\r\n\r\n function isAuthenticated() {\r\n return !!service.currentUser.uniqueId;\r\n }\r\n\r\n function persist() {\r\n storageService.setItem(sessionCurrentUserKey, service.currentUser);\r\n }\r\n\r\n function resetCurrentUser() {\r\n service.currentUser.uniqueId = '';\r\n service.currentUser.profile.email = '';\r\n service.currentUser.profile.firstName = '';\r\n service.currentUser.profile.lastName = '';\r\n service.currentUser.tokens.accessToken = '';\r\n service.currentUser.tokens.identityToken = '';\r\n service.currentUser.tokens.refreshToken = '';\r\n }\r\n\r\n function setProfile(uniqueId, email, firstName, lastName) {\r\n service.currentUser.uniqueId = uniqueId;\r\n service.currentUser.profile.email = email;\r\n service.currentUser.profile.firstName = firstName;\r\n service.currentUser.profile.lastName = lastName;\r\n }\r\n\r\n function setTokens(accessToken, identityToken, refreshToken) {\r\n service.currentUser.tokens.accessToken = accessToken;\r\n service.currentUser.tokens.identityToken = identityToken;\r\n service.currentUser.tokens.refreshToken = refreshToken;\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n\r\n app.filter('month', function () {\r\n return function (val) {\r\n return moment().month(val).format('MMMM')\r\n };\r\n });\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n\r\n app.filter('utc', function () {\r\n return function (val) {\r\n var date = new Date(val);\r\n return new Date(date.getUTCFullYear(),\r\n date.getUTCMonth(),\r\n date.getUTCDate(),\r\n date.getUTCHours(),\r\n date.getUTCMinutes(),\r\n date.getUTCSeconds());\r\n };\r\n\r\n });\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n\r\n app.directive('authNotAuthenticatedDialog', ['$rootScope', 'config', function ($rootScope, config) {\r\n var directive = {\r\n restrict: 'A',\r\n templateUrl: 'templates/core/layout/authNotAuthenticatedDialog.html',\r\n link: link\r\n };\r\n return directive;\r\n\r\n function link(scope) {\r\n var showDialog = function () {\r\n scope.toggleAuthenticationDialog(true);\r\n };\r\n\r\n scope.toggleAuthenticationDialog(false);\r\n $rootScope.$on(config.events.auth.notAuthenticated, showDialog);\r\n }\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n app.directive('authNotAuthorizedDialog', ['$rootScope', 'config', function ($rootScope, config) {\r\n var directive = {\r\n restrict: 'A',\r\n templateUrl: 'templates/core/layout/authNotAuthorizedDialog.html',\r\n link: link\r\n };\r\n return directive;\r\n\r\n function link(scope) {\r\n var showDialog = function () {\r\n scope.toggleAuthorizationDialog(true);\r\n };\r\n\r\n scope.toggleAuthorizationDialog(false);\r\n $rootScope.$on(config.events.auth.notAuthorized, showDialog);\r\n }\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'shellController';\r\n var module = angular.module('inoApp.directives.layout');\r\n\r\n module.directive('layoutShell', [function () {\r\n var directive = {\r\n restrict: 'E',\r\n replace: true,\r\n controller: controllerId,\r\n controllerAs: 'shellVm',\r\n templateUrl: 'templates/core/layout/shell.html'\r\n };\r\n\r\n return directive;\r\n }]);\r\n \r\n module.controller(controllerId, ['$q', '$rootScope', '$scope', 'common', 'config', 'userService', shellController]);\r\n\r\n function shellController($q, $rootScope, $scope, common, config, userService) {\r\n var vm = this;\r\n var amountBusyPromisesToResolve = 0;\r\n var deferredBusy;\r\n\r\n vm.appRoot = config.clientAppSrcPath;\r\n vm.busyIndicatorConfig = {\r\n promise: null,\r\n templateUrl: 'templates/core/layout/loadingIndicator.html',\r\n textResourceKey: ''\r\n };\r\n vm.setIsBusy = setIsBusy;\r\n vm.timeoutSignInUrl = config.servicesUrl.identity.signInUrl;\r\n vm.userProfile = userService.currentUser.profile;\r\n\r\n activate();\r\n\r\n function activate() {\r\n common.handleBusyState([], controllerId);\r\n }\r\n\r\n $scope.toggleAuthorizationDialog = function (visible) {\r\n $scope.authorizationDialogVisible = visible;\r\n $('#authorization-dialog').modal({\r\n keyboard: false,\r\n show: visible,\r\n backdrop: false\r\n });\r\n };\r\n $scope.isAuthorizationDialogVisible = function () {\r\n return $scope.authorizationDialogVisible;\r\n }\r\n\r\n $scope.toggleAuthenticationDialog = function (visible) {\r\n $scope.authenticationDialogVisible = visible;\r\n $('#authentication-dialog').modal({\r\n keyboard: false,\r\n show: visible,\r\n backdrop: 'static'\r\n });\r\n };\r\n\r\n function setIsBusy(isBusy, textResourceKey) {\r\n if (isBusy) {\r\n // If we already had a promise and we have other calls to is busy do nothing.\r\n if (deferredBusy && typeof deferredBusy.resolve === 'function' && amountBusyPromisesToResolve > 0)\r\n return;\r\n\r\n deferredBusy = $q.defer();\r\n vm.busyIndicatorConfig.textResourceKey = textResourceKey;\r\n vm.busyIndicatorConfig.promise = deferredBusy.promise;\r\n } else {\r\n if (deferredBusy && amountBusyPromisesToResolve === 0) {\r\n vm.busyIndicatorConfig.textResourceKey = '';\r\n deferredBusy.resolve();\r\n }\r\n }\r\n }\r\n\r\n $rootScope.$on(config.events.appWorkStarted, function (eventArgs, data) {\r\n var data = data || {};\r\n vm.setIsBusy(true, data.textResourceKey);\r\n amountBusyPromisesToResolve++;\r\n\r\n logAppWork('appWorkStarted', data.taskId);\r\n });\r\n\r\n $rootScope.$on(config.events.appWorkFinished, function (eventArgs, data) {\r\n if (amountBusyPromisesToResolve > 0)\r\n amountBusyPromisesToResolve--;\r\n\r\n vm.setIsBusy(false);\r\n\r\n logAppWork('appWorkFinished', data.taskId);\r\n });\r\n\r\n function logAppWork(event, taskId) {\r\n common.logger.log(event + ' from ' + taskId + '. Remaining promises: ' + amountBusyPromisesToResolve);\r\n }\r\n };\r\n})();","angular.module(\"inoApp.templates\",\r\n [\r\n \"templates/core/layout/shell.html\",\r\n \"templates/core/layout/header.html\",\r\n \"templates/core/layout/header_search.html\",\r\n \"templates/core/layout/ribbon.html\",\r\n \"templates/core/layout/navMenu.html\",\r\n \"templates/core/layout/tabstrip.html\",\r\n \"templates/core/layout/footer.html\",\r\n \"templates/core/layout/loadingIndicator.html\",\r\n \"templates/core/layout/authNotAuthorizedDialog.html\",\r\n \"templates/core/layout/authNotAuthenticatedDialog.html\"\r\n ]);\r\n\r\nangular.module(\"templates/core/layout/shell.html\", []).run([\"$templateCache\", function ($templateCache) {\r\n $templateCache.put(\"templates/core/layout/shell.html\",\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"templates/core/layout/header.html\", []).run([\"$templateCache\", function ($templateCache) {\r\n $templateCache.put(\"templates/core/layout/header.html\",\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \" \\n\" +\r\n \"
\\n\" +\r\n \"
\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"templates/core/layout/header_search.html\", []).run([\"$templateCache\", function ($templateCache) {\r\n $templateCache.put(\"templates/core/layout/header_search.html\",\r\n \"
  • \\n\" +\r\n \"
  • \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"templates/core/layout/ribbon.html\", []).run([\"$templateCache\", function ($templateCache) {\r\n $templateCache.put(\"templates/core/layout/ribbon.html\",\r\n \"\\n\" +\r\n \" \\n\" +\r\n \"\\n\" +\r\n \"\\n\" +\r\n \" \\n\" +\r\n \"\\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"templates/core/layout/navMenu.html\", []).run([\"$templateCache\", function ($templateCache) {\r\n $templateCache.put(\"templates/core/layout/navMenu.html\",\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \" {{ 'config.appName' | translate }}\\n\" +\r\n \"
    \\n\" +\r\n \" \\n\" +\r\n \" \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"templates/core/layout/footer.html\", []).run([\"$templateCache\", function ($templateCache) {\r\n $templateCache.put(\"templates/core/layout/footer.html\",\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \" Inovestor\\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"
    \\n\" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"templates/core/layout/authNotAuthenticatedDialog.html\", []).run([\"$templateCache\", function ($templateCache) {\r\n $templateCache.put(\"templates/core/layout/authNotAuthenticatedDialog.html\",\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"

    \" +\r\n \" \" +\r\n \"

    \" +\r\n \"

    \" +\r\n \" \" +\r\n \" \" +\r\n \" \" +\r\n \"

    \" +\r\n \"

    \" +\r\n \"
    \" +\r\n \"

    \" +\r\n \" \" +\r\n \"

    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"templates/core/layout/authNotAuthorizedDialog.html\", []).run([\"$templateCache\", function ($templateCache) {\r\n $templateCache.put(\"templates/core/layout/authNotAuthorizedDialog.html\",\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \" \" +\r\n \"

    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \" \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"templates/core/layout/loadingIndicator.html\", []).run([\"$templateCache\", function ($templateCache) {\r\n $templateCache.put(\"templates/core/layout/loadingIndicator.html\",\r\n \"
    \" +\r\n \"
    \" +\r\n \" \" +\r\n \"
    \" +\r\n \"

    {{ busyConfig.textResourceKey | translate }}

    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"\");\r\n}]);\r\n\r\nangular.module(\"templates/core/layout/tabstrip.html\", []).run([\"$templateCache\", function ($templateCache) {\r\n $templateCache.put(\"templates/core/layout/tabstrip.html\",\r\n \"
    \" +\r\n \" \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"
    \" +\r\n \"\");\r\n}]);","(function () {\r\n 'use strict';\r\n\r\n angular.module('inoApp').directive('loadingIndicator', ['$rootScope', function ($rootScope) {\r\n var directive = {\r\n restrict: \"E\",\r\n replace: false,\r\n scope: {\r\n busyConfig: '=',\r\n },\r\n link: link,\r\n template: '
    '\r\n };\r\n\r\n return directive;\r\n\r\n function link(scope, element) {\r\n /* DOM manipulation */\r\n var body = document.body;\r\n element.detach();\r\n angular.element(body).append(element);\r\n }\r\n }]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n app.directive('progressIndicator', ['$timeout', '$interval', function ($timeout, $interval) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n template: '
    ',\r\n controller: ['$scope', function ($scope) {\r\n var items = $scope.items = [];\r\n var index = $scope.index = 0;\r\n var isIncrementing = $scope.isIncrementing = true;\r\n var interval = $scope.interval = null;\r\n var isStopped = false; // once stopped, it cannot restart\r\n\r\n this.start = function () {\r\n if (interval !== null)\r\n stop();\r\n if (isStopped)\r\n return;\r\n\r\n interval = $interval(function () {\r\n items[index].isCurrent = false;\r\n if (isIncrementing && index + 1 == items.length)\r\n isIncrementing = false;\r\n else if (!isIncrementing && index - 1 == -1)\r\n isIncrementing = true;\r\n index = isIncrementing ? index + 1 : index - 1;\r\n items[index].isCurrent = true;\r\n }, 300);\r\n }\r\n this.addItem = function (item) {\r\n $scope.items.push(item);\r\n }\r\n this.stop = function () {\r\n $interval.cancel(interval);\r\n isStopped = true;\r\n }\r\n }],\r\n link: { pre: link },\r\n scope: {}\r\n };\r\n function link(scope, element, attrs, controller) {\r\n var itemAmount = attrs.items == null ? 5 : attrs.items;\r\n for (var iCnt = 0; iCnt < itemAmount; iCnt++)\r\n controller.addItem({\r\n isCurrent: (iCnt == 0)\r\n });\r\n // When element destoyed, call stop() to end interval\r\n element.on('$destroy', function () {\r\n controller.stop();\r\n });\r\n // Call start() after render\r\n $timeout(function () {\r\n controller.start();\r\n });\r\n }\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('inoApp').directive('selectOnClick', ['$window', function ($window) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n element.on('click', function () {\r\n if (!$window.getSelection().toString()) {\r\n // Required for mobile Safari\r\n this.setSelectionRange(0, this.value.length)\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n app.directive('sparkline', [function () {\r\n return {\r\n restrict: 'A',\r\n link: link,\r\n scope: {}\r\n };\r\n\r\n function link(scope, element, attrs) {\r\n var $this = angular.element(element);\r\n var sparklineType = $this.data('sparkline-type') || 'bar';\r\n\r\n // BAR CHART\r\n if (sparklineType == 'bar') {\r\n\r\n var barColor = $this.data('sparkline-bar-color') || $this.css('color') || '#0000f0';\r\n var sparklineHeight = $this.data('sparkline-height') || '26px';\r\n var sparklineBarWidth = $this.data('sparkline-barwidth') || 5;\r\n var sparklineBarSpacing = $this.data('sparkline-barspacing') || 2;\r\n var sparklineNegBarColor = $this.data('sparkline-negbar-color') || '#A90329';\r\n var sparklineStackedColor = $this.data('sparkline-barstacked-color') || [\"#A90329\", \"#0099c6\", \"#98AA56\", \"#da532c\", \"#4490B1\", \"#6E9461\", \"#990099\", \"#B4CAD3\"];\r\n\r\n $this.sparkline('html', {\r\n barColor: barColor,\r\n type: sparklineType,\r\n height: sparklineHeight,\r\n barWidth: sparklineBarWidth,\r\n barSpacing: sparklineBarSpacing,\r\n stackedBarColor: sparklineStackedColor,\r\n negBarColor: sparklineNegBarColor,\r\n zeroAxis: 'false',\r\n disableTooltips: true,\r\n disableInteraction: true\r\n });\r\n\r\n }\r\n }\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n function tabstripController($scope, $timeout) {\r\n var vm = this;\r\n\r\n // This array keeps track of the tabstrips\r\n vm.tabs = [];\r\n vm.tabRoot = null;\r\n vm.resetTabStrip = resetTabStrip;\r\n vm.resetTrigger = null;\r\n vm.addTab = addTab;\r\n vm.removeGroup = removeGroup;\r\n vm.activate = activate;\r\n\r\n activate();\r\n function activate() {\r\n $timeout(function () {\r\n vm.tabs.forEach(function (tabScope) {\r\n angular.element(vm.tabRoot).find(\"#\" + tabScope.tabId).append(tabScope.tabContent);\r\n angular.element(vm.tabRoot).find(\".tabheader[href='#\" + tabScope.tabId + \"']\").append(tabScope.tabHeader);\r\n });\r\n if (vm.resetTrigger !== null)\r\n $scope.$watch('resetTrigger', function () {\r\n vm.resetTabStrip();\r\n });\r\n });\r\n }\r\n function resetTabStrip() {\r\n // allow time for rendering\r\n $timeout(function () {\r\n for (var iCnt = 0; iCnt < vm.tabs.length; iCnt++) {\r\n if (!vm.tabs[iCnt].isHidden) {\r\n angular.element(vm.tabRoot).find(\".tabheader[href='#\" + vm.tabs[iCnt].tabId + \"']\").click();\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n function addTab(tabScope) {\r\n vm.tabs.push(tabScope);\r\n tabScope.$on('$destroy', function (event) {\r\n vm.removeGroup(tabScope);\r\n });\r\n };\r\n function removeGroup(tabScope) {\r\n var index = vm.tabs.indexOf(tabScope);\r\n if (index !== -1) {\r\n vm.tabs.splice(index, 1);\r\n }\r\n };\r\n }\r\n app.controller(\"TabstripController\", ['$scope', '$timeout', tabstripController\r\n ]).directive('tabstrip', ['config', '$rootScope', function (config, $rootScope) {\r\n return {\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n resetTrigger: \"=\"\r\n },\r\n restrict: 'E',\r\n controller: 'TabstripController as vm',\r\n templateUrl: 'templates/core/layout/tabstrip.html',\r\n link: link\r\n };\r\n\r\n function link(scope, iElement, iAttrs, controller) {\r\n scope.vm.tabRoot = angular.element(iElement[0]);\r\n scope.vm.resetTrigger = scope.resetTrigger;\r\n }\r\n }\r\n ]).directive('tabstripGroup', [function () {\r\n return {\r\n replace: false,\r\n transclude: true,\r\n require: '^tabstrip',\r\n restrict: 'E',\r\n scope: {\r\n tabHeader: '&',\r\n tabContent: '&',\r\n tabId: '@',\r\n isHidden: '='\r\n },\r\n controller: ['$scope', function ($scope) {\r\n this.setTabHeader = function (element) {\r\n $scope.tabHeader = element;\r\n };\r\n this.setTabContent = function (element) {\r\n $scope.tabContent = element;\r\n };\r\n }],\r\n template: '
    ',\r\n link: link\r\n };\r\n function link(scope, iElement, iAttrs, controller) {\r\n controller.addTab(scope);\r\n }\r\n }\r\n ]).directive('tabstripHeader', [function () {\r\n return {\r\n replace: false,\r\n require: '^tabstripGroup',\r\n transclude: true,\r\n restrict: 'E',\r\n template: '
    ',\r\n link: {\r\n post: postlink\r\n },\r\n };\r\n function postlink(scope, iElement, iAttrs, controller, transcludeFn) {\r\n transcludeFn(function (clone, scope) {\r\n controller.setTabHeader(clone);\r\n angular.element(iElement[0]).remove(); // remove from DOM\r\n });\r\n\r\n }\r\n }\r\n ]).directive('tabstripContent', [function () {\r\n return {\r\n replace: false,\r\n require: '^tabstripGroup',\r\n transclude: true,\r\n restrict: 'E',\r\n template: '
    ',\r\n link: {\r\n post: postlink\r\n },\r\n };\r\n function postlink(scope, iElement, iAttrs, controller, transcludeFn) {\r\n transcludeFn(function (clone, scope) {\r\n controller.setTabContent(clone);\r\n angular.element(iElement[0]).remove(); // remove from DOM\r\n });\r\n\r\n\r\n }\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n app.directive('widgetControl', ['$timeout', 'config', 'widgetControlConfig', function ($timeout, config, widgetControlConfig) {\r\n var directive = {\r\n restrict: 'E',\r\n link: {\r\n pre: prelink,\r\n post: postlink\r\n },\r\n controller: function(){\r\n this.header = null;\r\n },\r\n transclude: true,\r\n templateUrl: config.clientAppSrcPath + 'app/Core/directives/widgetControl/widgetControl.html',\r\n scope: {\r\n widgetTitle: '@',\r\n widgetIconClass: '@',\r\n widgetId: '@',\r\n widgetConfig: '='\r\n }\r\n };\r\n return directive;\r\n\r\n function prelink(scope, element, attrs) {\r\n // init jarvis widget after render\r\n $timeout(function () {\r\n var widgetConfig = {}\r\n angular.extend(widgetConfig, widgetControlConfig, (scope.widgetConfig) ? scope.widgetConfig : {});\r\n $('#' + attrs.widgetId).jarvisWidgets(widgetConfig);\r\n });\r\n }\r\n\r\n function postlink(scope, element, attrs, controller) {\r\n // init jarvis widget after render\r\n $timeout(function () {\r\n if (controller.header)\r\n angular.element(element).find('header > h2').append(controller.header);\r\n });\r\n }\r\n }]).directive('widgetControlHeader', [function () {\r\n return {\r\n replace: false,\r\n require: '^widgetControl',\r\n transclude: true,\r\n restrict: 'E',\r\n template: '
    ',\r\n link: {\r\n post: postlink\r\n },\r\n };\r\n function postlink(scope, iElement, iAttrs, controller, transcludeFn) {\r\n transcludeFn(function (clone, scope) {\r\n controller.header = clone;\r\n angular.element(iElement[0]).remove(); // remove from DOM\r\n });\r\n }\r\n }]);\r\n\r\n\r\n // TODO: move config declaration in other section?\r\n app.constant('widgetControlConfig', {\r\n grid: 'article',\r\n widgets: '.jarviswidget',\r\n localStorage: true,\r\n deleteSettingsKey: '#deletesettingskey-options',\r\n settingsKeyLabel: 'Reset settings?',\r\n deletePositionKey: '#deletepositionkey-options',\r\n positionKeyLabel: 'Reset position?',\r\n sortable: true,\r\n buttonsHidden: false,\r\n // toggle button\r\n toggleButton: true,\r\n toggleClass: 'fa fa-minus | fa fa-plus',\r\n toggleSpeed: 200,\r\n onToggle: function () {\r\n },\r\n // delete btn\r\n deleteButton: true,\r\n deleteClass: 'fa fa-times',\r\n deleteSpeed: 200,\r\n onDelete: function () {\r\n },\r\n // edit btn\r\n editButton: true,\r\n editPlaceholder: '.jarviswidget-editbox',\r\n editClass: 'fa fa-cog | fa fa-save',\r\n editSpeed: 200,\r\n onEdit: function () {\r\n },\r\n // color button\r\n colorButton: true,\r\n // full screen\r\n fullscreenButton: true,\r\n fullscreenClass: 'fa fa-expand | fa fa-compress',\r\n fullscreenDiff: 3,\r\n onFullscreen: function () {\r\n },\r\n // custom btn\r\n customButton: false,\r\n customClass: 'folder-10 | next-10',\r\n customStart: function () {\r\n alert('Hello you, this is a custom button...');\r\n },\r\n customEnd: function () {\r\n alert('bye, till next time...');\r\n },\r\n // order\r\n buttonOrder: '%refresh% %custom% %edit% %toggle% %fullscreen% %delete%',\r\n opacity: 1.0,\r\n dragHandle: '> header',\r\n placeholderClass: 'jarviswidget-placeholder',\r\n indicator: true,\r\n indicatorTime: 600,\r\n ajax: true,\r\n timestampPlaceholder: '.jarviswidget-timestamp',\r\n timestampFormat: 'Last update: %m%/%d%/%y% %h%:%i%:%s%',\r\n refreshButton: true,\r\n refreshButtonClass: 'fa fa-refresh',\r\n labelError: 'Sorry but there was a error:',\r\n labelUpdated: 'Last Update:',\r\n labelRefresh: 'Refresh',\r\n labelDelete: 'Delete widget:',\r\n afterLoad: function () {\r\n },\r\n rtl: false, // best not to toggle this!\r\n onChange: function () {\r\n\r\n },\r\n onSave: function () {\r\n\r\n }\r\n });\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var app = angular.module('inoApp');\r\n app.directive('widgetDataTable', ['$timeout', 'config', 'widgetControlConfig', function ($timeout, config, widgetControlConfig) {\r\n var directive = {\r\n restrict: 'E',\r\n link: link,\r\n replace: true,\r\n transclude: true,\r\n controller: 'DataTableController as vm',\r\n templateUrl: config.clientAppSrcPath + 'app/Core/directives/widgetDataTable/widgetDataTable.html',\r\n scope: {\r\n widgetDataItems: '=',\r\n widgetTitle: '@',\r\n widgetIconClass: '@',\r\n widgetConfig: '=',\r\n enableCustomFiltering: '='\r\n }\r\n };\r\n return directive;\r\n\r\n function link(scope, element, attrs, controller) {\r\n controller.rootElement = element;\r\n controller.widgetDataTableScope = scope;\r\n\r\n // init jarvis widget after render\r\n $timeout(function () {\r\n controller.createDataTable(scope);\r\n $(element).on('dataTables.updateLanguage', controller.updateLanguage);\r\n });\r\n }\r\n }\r\n ]).directive('widgetDataRow', ['$timeout', function ($timeout) {\r\n return {\r\n replace: false,\r\n require: '^widgetDataTable',\r\n restrict: 'EA',\r\n link: link,\r\n scope: {\r\n rowIndex: '=widgetDataRow'\r\n }\r\n };\r\n function link(scope, iElement, iAttrs, controller) {\r\n scope.$on(\"$destroy\", function () {\r\n controller.removeRowAt(scope.rowIndex)\r\n });\r\n\r\n $timeout(function () {\r\n var trElement = angular.element(iElement);\r\n controller.addRow(trElement);\r\n });\r\n }\r\n }\r\n ]).directive('widgetDataTableFiltering', [function () {\r\n return {\r\n replace: false,\r\n require: '^widgetDataTable',\r\n transclude: true,\r\n restrict: 'E',\r\n template: '
    ',\r\n link: {\r\n post: postlink\r\n },\r\n };\r\n function postlink(scope, iElement, iAttrs, controller, transcludeFn) {\r\n controller.customFilteringTransclude = transcludeFn;\r\n angular.element(iElement[0]).remove();\r\n }\r\n }]);\r\n\r\n\r\n var controllerId = \"DataTableController\";\r\n app.controller(controllerId, ['$scope','$timeout', DataTableController]);\r\n function DataTableController($scope, $timeout) {\r\n var vm = this;\r\n // Variables set by setup\r\n vm.rootElement = null;\r\n vm.widgetDataTableScope = null;\r\n vm.customFilteringTransclude = null;\r\n vm.tableData = null;\r\n vm.createDataTable = createDataTable;\r\n vm.updateLanguage = updateLanguage;\r\n vm.removeRowAt = removeRowAt;\r\n vm.addRow = addRow;\r\n\r\n function removeRowAt(index) {\r\n vm.tableData.rows().remove(index).draw();\r\n }\r\n\r\n function addRow(trElement) {\r\n vm.tableData.row.add(trElement).draw();\r\n }\r\n\r\n function createDataTable() {\r\n if (vm.tableData != null) {\r\n vm.tableData.destroy(); //important! you have to destroy first or you'll get an alert-error.\r\n vm.tableData = null;\r\n }\r\n\r\n //breakpoint definitions\r\n var breakpointDefinition = {\r\n tablet: 1024,\r\n phone: 480\r\n };\r\n var responsiveHelper_dt_basic = null;\r\n\r\n var table = $(vm.rootElement).find('.table-datatable');\r\n table.dataTable({\r\n \"preDrawCallback\": function () {\r\n // Initialize the responsive datatables helper once.\r\n if (!responsiveHelper_dt_basic) {\r\n responsiveHelper_dt_basic = new ResponsiveDatatablesHelper(table, breakpointDefinition);\r\n }\r\n },\r\n \"rowCallback\": function (nRow) {\r\n responsiveHelper_dt_basic.createExpandIcon(nRow);\r\n },\r\n \"drawCallback\": function (oSettings) {\r\n responsiveHelper_dt_basic.respond();\r\n },\r\n \"searching\": vm.widgetDataTableScope.enableCustomFiltering === true ? false : true,\r\n \"language\": appConfig.dataTables.currentLang,\r\n \"autoWidth\": false\r\n });\r\n\r\n vm.tableData = table.DataTable();\r\n\r\n // Create a clone of originally created element and add to data table if translcude function was set\r\n if (vm.customFilteringTransclude)\r\n $timeout(function () {\r\n vm.customFilteringTransclude(function (clone, scope) {\r\n $(vm.rootElement).find('.dt-toolbar > div').first().append(clone);\r\n });\r\n });\r\n }\r\n\r\n function updateLanguage() {\r\n // re-create table since there is no dynamic language change method\r\n vm.createDataTable();\r\n }\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('inoApp.directives.layout').directive('layoutFooter', [function () {\r\n var directive = {\r\n restrict: 'AE',\r\n replace: false,\r\n templateUrl: 'templates/core/layout/footer.html'\r\n };\r\n\r\n return directive;\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'headerController';\r\n var module = angular.module('inoApp.directives.layout');\r\n\r\n module.directive('layoutHeader', [function () {\r\n var directive = {\r\n restrict: 'AE',\r\n replace: false,\r\n templateUrl: 'templates/core/layout/header.html',\r\n controller: controllerId,\r\n controllerAs: 'headerVm'\r\n };\r\n\r\n return directive;\r\n }]);\r\n \r\n module.controller(controllerId, ['$rootScope', '$translate', 'common', 'config', 'amMoment', 'tmhDynamicLocale', 'userService', headerController]);\r\n\r\n function headerController($rootScope, $translate, common, config, amMoment, tmhDynamicLocale, userService) {\r\n var vm = this;\r\n\r\n vm.changeLanguage = changeLanguage;\r\n vm.isSelected = isSelected;\r\n vm.isCurrent = isCurrent;\r\n vm.languageKey = config.appLanguage;\r\n\r\n vm.editProfileUrl = config.servicesUrl.editUrl;\r\n vm.signOutUrl = config.servicesUrl.identity.signOutUrl;\r\n vm.userIsAuthenticated = userService.isAuthenticated();\r\n vm.userProfile = userService.currentUser.profile;\r\n\r\n activate();\r\n\r\n function activate() {\r\n common.handleBusyState([setLanguage(vm.languageKey)], controllerId);\r\n }\r\n\r\n function isSelected(languageKey) {\r\n return vm.languageKey === languageKey ? 'selected' : '';\r\n }\r\n\r\n function isCurrent(languageKey) {\r\n return vm.languageKey === languageKey;\r\n }\r\n\r\n function changeLanguage(languageKey) {\r\n setLanguage(languageKey);\r\n // Broadcast the language change event so other app parts can take action if they need it.\r\n $rootScope.$broadcast(config.events.languageChanged, { languageKey: languageKey });\r\n }\r\n\r\n function setLanguage(languageKey) {\r\n $translate.use(languageKey);\r\n tmhDynamicLocale.set(languageKey + '-CA');\r\n amMoment.changeLocale(languageKey + '-CA');\r\n //appConfig.dataTables.changeLanguage(languageKey + '-CA');\r\n vm.languageKey = languageKey;\r\n }\r\n };\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var module = angular.module('inoApp.directives.layout');\r\n\r\n module.directive('layoutHeaderSearch', [function () {\r\n var directive = {\r\n restrict: 'AE',\r\n replace: true,\r\n templateUrl: 'templates/core/layout/header_search.html',\r\n };\r\n\r\n return directive;\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'navMenuController';\r\n var module = angular.module('inoApp.directives.layout');\r\n\r\n module.directive('layoutNavMenu', [function () {\r\n var directive = {\r\n restrict: 'AE',\r\n replace: false,\r\n controller: controllerId,\r\n controllerAs: 'navMenuVm',\r\n templateUrl: 'templates/core/layout/navMenu.html'\r\n };\r\n\r\n return directive;\r\n }]);\r\n \r\n module.controller(controllerId, ['$filter', '$state', navMenuController]);\r\n\r\n function navMenuController($filter, $state) {\r\n var vm = this;\r\n\r\n //vm.isSelected = isSelected;\r\n vm.menuInfos = [];\r\n vm.currentState = currentState;\r\n\r\n activate();\r\n\r\n function activate() {\r\n getNavRoutes();\r\n }\r\n\r\n function getNavRoutes() {\r\n vm.menuInfos.length = 0;\r\n var menuInfos = [];\r\n var allStates = $state.get();\r\n allStates.forEach(function (state, index) {\r\n if (state.data && state.data.settings && !state.parent) {\r\n var subMenuInfos = null;\r\n if (state.abstract) {\r\n // check for child states\r\n var childrenStates = allStates.filter(function (s) {\r\n return (s.parent === state.name);\r\n });\r\n childrenStates = $filter('orderBy')(childrenStates, 'data.settings.nav');\r\n\r\n subMenuInfos = [];\r\n for (var i = 0; i < childrenStates.length; i++) {\r\n var childState = childrenStates[i];\r\n if (childState.data && childState.data.settings && !childState.data.hide)\r\n subMenuInfos.push({ stateName: childState.name, resourceKey: childState.data.settings.titleResourceKey, iconClass: childState.data.settings.iconClass, nav: state.data.settings.nav });\r\n }\r\n }\r\n\r\n menuInfos.push({ stateName: state.name, data: state.data, resourceKey: state.data.settings.titleResourceKey, subMenuInfos: subMenuInfos, iconClass: state.data.settings.iconClass, nav: state.data.settings.nav });\r\n }\r\n });\r\n\r\n vm.menuInfos = $filter('orderBy')(menuInfos, 'nav');\r\n\r\n }\r\n\r\n function currentState() {\r\n if ($state.$current)\r\n return $state.$current.name;\r\n\r\n return '';\r\n }\r\n };\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular.module('inoApp.directives.layout').directive('layoutRibbon', [function () {\r\n var directive = {\r\n restrict: 'AE',\r\n replace: false,\r\n templateUrl: 'templates/core/layout/ribbon.html'\r\n };\r\n\r\n return directive;\r\n }]);\r\n})();"]}